2024-09-24 | Maven 3.9.9 |
2024-08-13 | Noble Numbat |
2024-06-21 | Maven 3.9.8 |
2024-02-02 | Maven 3.9.6 |
2023-10-11 | P2 repository deleted |
2023-10-10 | Maven 3.9.5 |
The Arakhnê.org Foundation Classes (AFC) is a Java library that provides a collection of utilities that are not provided in the standard Java API.
1. Content of the AFC
1.1 Compatibility with other Languages than Java
AFC is a Java library that provides extensions for being used with other programming languages.
For example, Vector2D provides overloading function for operator +
. In this way, this operator may be used by typing v1 + 1
instead of v1.add(1)
.
1.1.1 SARL agent-oriented programming language
AFC library is compatible with the SARL agent-oriented programming language, which is a Xtext-based language (see below).
Indeed, the AFC classes use the specific annotations: @Pure
for making pure functions, and @Inline
for inline functions. AFC also provides the overridings of the operators (operator_plus
, operator_minus
, etc.) for vectors, matrices, etc.
1.1.2 Scala object-oriented programming language
AFC library is compatible with the Scala object-oriented programming language.
Indeed, the AFC classes provide the overridings of the operators ($plus
, $minus
, etc.) for vectors, matrices, etc.
1.1.3 Xtend object-oriented programming language
AFC library is compatible with the Xtend object-oriented programming language, which is a Xtext-based language (see below).
Indeed, the AFC classes use the specific annotations: @Pure
for making @Inline
for inline functions. AFC also provides the overridings of the operators (operator_plus
, operator_minus
, etc.) for vectors, matrices, etc.
1.1.4 Other Xtext-base languages
AFC library is compatible with all the languages that are defined upon the Xtext framework for development of programming languages and domain-specific languages.
Indeed, the AFC classes use the specific annotations: @Pure
for making pure functions, and @Inline
for inline functions. AFC also provides the overridings of the operators (operator_plus
, operator_minus
, etc.) for vectors, matrices, etc.
1.1. Maintained Modules
AFC library contains the following modules that are actively maintained:
Name | Submodule | Group Id | Artifact Id | Explanation |
---|---|---|---|---|
General Utilities | org.arakhne.afc.core | util | General utility classes that do not fit in the other AFC modules | |
org.arakhne.afc.advanced | attributes | Library for creating generic attributes, aka. Variant attributes. | org.arakhne.afc.core | inputoutput | General utilities related to IO |
org.arakhne.afc.core | text | Utilities for string of characters | ||
org.arakhne.afc.core | vmutils | Utilities related to the virtual machine, file systems, etc. | ||
org.arakhne.afc.core | references | Set of classes for creating advanced weak references. | ||
Mathematic Tools | org.arakhne.afc.core | mathgen | Provides implementation of general mathematic functions. | |
org.arakhne.afc.core | mathstochastic | Provides implementation of stochastic functions (Gaus, etc.) for generating random numbers. | ||
org.arakhne.afc.core | mathtree | General and generic implementation of different tree data structures. | ||
org.arakhne.afc.core | mathgraph | General and generic implementation of different graph data structures. | ||
org.arakhne.afc.core | mathgeom | Provide geometric primitives (point, vector, shape, etc.) and related tools. | ||
org.arakhne.afc.core | mathphysics | Tools for computing Physics values. | ||
org.arakhne.afc.advanced | mathfx | JavaFX implementation of the mathematic and geometry tools | ||
JavaFX Tools | org.arakhne.afc.advanced | javafx | Tools for JavaFX | |
org.arakhne.afc.advanced | nodefx | Extended components for JavaFX | ||
Geographical Information System | org.arakhne.afc.gis | giscore | Base elements for building data structures for Geographical Information Systems. | |
org.arakhne.afc.gis | gisinputoutput | Readers and writers for Geographical Information System. | ||
org.arakhne.afc.advanced | shapefile | Reader and Writer of the ESRi Shape files. | ||
org.arakhne.afc.advanced | dbasefile | Reader and Writer of the DBase database files. | ||
org.arakhne.afc.gis | gisroad | Base elements for creating data structures that represent a road network. | ||
org.arakhne.afc.gis | gisroadinputoutput | Input and output tools that are dedicated to the road network. | ||
org.arakhne.afc.gis | gisbus | Base elements for creating data structures that represent a bus network, or any public transport network. | ||
org.arakhne.afc.gis | gisbusinputoutput | Input and output tools that are dedicated to the bus network, or any public transport network. | ||
org.arakhne.afc.gis.ui | giscorefx | JavaFX components for GIS objects | org.arakhne.afc.gis.ui | gisroadfx | JavaFX components for Road objects |
Bootique Plugin Framework | Integration of Application Data with Bootique | org.arakhne.afc.bootique | bootique-applicationdata2 | Tools for defining the name, description and detailed description of a bootique-based application. |
Log4j Integration with Bootique | org.arakhne.afc.bootique | bootique-log4j | Configuration and module for integrating log4j with Bootique. | |
Configuration Printing Command with Bootique | org.arakhne.afc.bootique | bootique-printconfig | Command for printing the configuration values with Bootique. | |
Synopsis Help Command with Bootique | org.arakhne.afc.bootique | bootique-synopsishelp | Command for printing the help with synopsis and detailed description with Bootique. | |
Variable Tools for Bootique | org.arakhne.afc.bootique | bootique-variables | Tools for declaring environment variables for a Bootique application. | |
SLF4J Logging System | Maven Logger Integration | org.arakhne.afc.slf4j | slf4j-maven | Integration of the Maven logger into SLF4J. |
Backward compatibility with old versions of SLF4J | org.arakhne.afc.slf4j | slf4j-backwardcompat | Provide gateway from the a recent SLF4J to the old SLF4J static binding. | |
Binding of Log4J | org.arakhne.afc.slf4j | slf4j-log4j | Provide the binding of Log4J for SLF4J. | |
org.arakhne.afc.advanced | agentmotion | Collection of algorithms for calculating the motion of mobile agents. |
1.2. Deprecated and Dead Modules
AFC library contains the following deprecated modules (deprecated modules are subject to removal in next version). The table presents the modules, the version from which they are deprecated, and the version at which they will be totaly removed from.
Name | Group Id | Artifact Id | Explanation | Deprecation Start | Total Removal |
---|---|---|---|---|---|
Base UI Tools | org.arakhne.afc.ui | base | Base tools for user interfaces. | 13.0 | 14.0 |
AWT Tools | org.arakhne.afc.ui | awt | Extra AWT widgets. | 13.0 | 14.0 |
Swing Widgets | org.arakhne.afc.ui | swing | Extra Swing widgets. | 13.0 | 14.0 |
Android Tools | org.arakhne.afc.ui | android | Extra Android widgets and activities. | 13.0 | 14.0 |
Vector Window Toolkit | org.arakhne.afc.ui | vector | Vectorial primitives for building vectorial graphical editors. | 13.0 | 14.0 |
AWT implementation of vector | org.arakhne.afc.ui | awt-vector | AWT implementation of the vectorial primitives. | 13.0 | 14.0 |
Android implementation of vector | org.arakhne.afc.ui | android-vector | Android implementation of the vectorial primitives. | 13.0 | 14.0 |
Atomic deployment of files | org.arakhne.afc.maven | atomicdeploy | Maven plugin for deploying aa single file. | 13.0 | 14.0 |
2. Requirements
For AFC version 17.0 or higher:
- Java Development Toolkit (JDK) 11 or higher.
For AFC prior to version 17.0:
- Java Development Toolkit (JDK) 8.
3. Using AFC in a Maven project
3.1. Recommendations
For making your experience with AFC the best, we recommend you:
- to enable the assertions at development time (with the
-ea
command line option).
3.2. Use the stable version
The lastest stable version of AFC is available on Maven Central. Consequently, you could directly include the AFC module that you want to use into the Maven dependencies of your project. For example, if you want to use the "vmutils" module:
...
<dependency>
<groupId>org.arakhne.core</groupId>
<artifactId>vmutils</artifactId>
<version>17.0</version>
</dependency>
...
Please, replace Version 17.0
in the previous snipset by the number of the version you want to use (12.0
is the first version that is available on Maven Central).
3.3. Use of the development version
New features, enhancements and bug fixes are available in the SNAPSHOT (development) version of AFC. For using this version, you must add the Maven Repository Server of AFC in your pom file:
...
<dependencies>
<dependency>
<groupId>org.arakhne.core</groupId>
<artifactId>vmutils</artifactId>
<version>18.0-SNASPHOT</version>
</dependency>
<dependencies>
...
<repositories>
<repository>
<id>org.arakhne-maven</id>
<name>ArakhnĂȘ.org Snapshots</name>
<url>http://download.tuxfamily.org/arakhne/maven/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>org.arakhne-maven</id>
<name>ArakhnĂȘ.org Snapshots</name>
<url>http://download.tuxfamily.org/arakhne/maven/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
...
4. Issues
Issues related to the AFC are tracked on GitHub. You must use this issue tracker to report and follow your issues.
5. Contributions
Any contribution to the AFC library is welcome.
5.1. Installing the Development Environment
For setting up the development environment, you should follow the steps:
- Download and install "Eclipse for Java Developers".
- Download the
contributors.p2f
file that specifies the Eclipse plugins for the development environment. - Install the Eclipse plugins by selecting in Eclipse:
File > Import > Install > Install
software items from file. - Download the
contributors.epf
file that contains the Eclipse general preferences related to the AFC project. - Import the general preferences:
File > Import > General > Preferences
5.2. Obtaining the AFC Source Code
For obtaining the code of the AFC library, you must clone it from the Git:
git clone https://github.com/gallandarakhneorg/afc
Caution: due to an issue in the Eclipse Checkstyle plugin, it is mandatory to install the build-tools
module in the your .m2
repository prior to the first launch of the Eclipse IDE:
mvn clean install -Dcheckstyle.skip=true
5.3. Compiling the AFC Source Code
Maven is the standard tool for compiling the AFC library. It is recommended to launch the Maven compilation process on the command at least before submitting a pull request. The command line is:
mvn clean install
5.4. Sending the Contribution
For sending your contribution to the AFC master repositoty, you must request a pull (PR) to the GitHub repository.
For being merged, your PR must:
- be compilable with Maven.
- pass the compilation process successfully, including the code compilation, unit testing, and code style checking. This process is supported by Travis-CI;
- sign the Contributor License Agreement on GitHub. It is supported by cla-assistant;
- be reviewed by one or more of the main contributors for ensure your PR is following the development rules and philosophy related to the AFC.
If the CI process is failing on your PR, please follows the steps:
- Go on the Travis-CI output for obtaining the cause of the failure.
- Fix the code of your PR on your local copy.
- Commit on your local repository, and push the changes on the same PR. Do not create a new PR for the fix.
- The GitHub platform will relaunch the CI process automatically.
6. License of AFC
The ArakhnĂȘ Foundation Classes are distributed under the Apache v2 license, and is copyrigthed to the original authors and the other authors, as expressed in the NOTICE.
7. Success Stories
The following projects have sucessfully used a module of the AFC:
Details
- Main authors: GALLAND Stéphane, GAUD Nicolas, LAMOTTE Olivier, WILLAUME Alexandre
- License: Apache License 2
- Implementation: Java
- Stable Version: 17.0
- Development Version: 18.0-SNASPHOT