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.
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).
AFC library is compatible with the SARL agent-oriented programming language, which is a Xtext-based language (see below). Indeed, 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.
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.
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 pure functions, and @Inline for inline functions. AFC also provides the overridings of the operators (operator_plus, operator_minus, etc.) for vectors, matrices, etc.
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, 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.
AFC library contains the following modules that are actively maintained:
| Name | Submodule | Group Id | Artifact Id | Explanation |
|---|---|---|---|---|
| General Utilities | General Utilities | org.arakhne.afc.core | util | General utility classes that do not fit in the other AFC modules |
| Generic Attribute API | org.arakhne.afc.advanced | attributes | Library for creating generic attributes, aka. Variant attributes | |
| Input-Output Utilities | org.arakhne.afc.core | inputoutput | General utilities related to IO | |
| Text Utilities | org.arakhne.afc.core | text | Utilities for string of characters | |
| VM Utilities | org.arakhne.afc.core | vmutils | Utilities related to the virtual machine, file systems, etc. | |
| Weak Reference Utilities | org.arakhne.afc.core | references | Set of classes for creating advanced weak references | |
| Mathematic Tools | General Mathematic Tools | org.arakhne.afc.core | mathgen | Provides implementation of general mathematic functions |
| Stochastic Random Numbers | org.arakhne.afc.core | mathstochastic | Provides implementation of stochastic functions (Gaus, etc.) for generating random numbers | |
| Tree Data Structure | org.arakhne.afc.core | mathtree | General and generic implementation of different tree data structures | |
| Graph Data Structure | org.arakhne.afc.core | mathgraph | General and generic implementation of different graph data structures | |
| Geometry Primitives and Tools | org.arakhne.afc.core | mathgeom | Provide geometric primitives (point, vector, shape, etc.) and related tools | |
| Physics Tools | org.arakhne.afc.core | mathphysics | Tools for computing Physics values | |
| JavaFX Math Tools | org.arakhne.afc.advanced | mathfx | JavaFX implementation of the mathematic and geometry tools | |
| JavaFX Tools | General JavaFX Tools | org.arakhne.afc.advanced | javafx | Tools for JavaFX |
| JavaFX Nodes and Components | org.arakhne.afc.advanced | nodefx | Extended components for JavaFX | |
| Geographical Information System | Geographical Information System API | org.arakhne.afc.gis | giscore | Base elements for building data structures for Geographical Information Systems |
| GIS Input-Output API | org.arakhne.afc.gis | gisinputoutput | Readers and writers for Geographical Information System | |
| Shape File Reader and Writer | org.arakhne.afc.advanced | shapefile | Reader and Writer of the ESRi Shape files | |
| DBase Reader and Writer | org.arakhne.afc.advanced | dbasefile | Reader and Writer of the DBase database files | |
| GIS Road Network | org.arakhne.afc.gis | gisroad | Base elements for creating data structures that represent a road network | |
| Input-output Tools for GIS Road Network | org.arakhne.afc.gis | gisroadinputoutput | Input and output tools that are dedicated to the road network | |
| GIS Bus Network | org.arakhne.afc.gis | gisbus | Base elements for creating data structures that represent a bus network, or any public transport network | |
| Input-output Tools for GIS Bus Network | org.arakhne.afc.gis | gisbusinputoutput | Input and output tools that are dedicated to the bus network, or any public transport network | |
| JavaFX Implementation of GIS elements | org.arakhne.afc.gis.ui | giscorefx | JavaFX components for GIS objects | |
| JavaFX Implementation of Road elements | 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 | |
| Agent Motion Algos | org.arakhne.afc.advanced | agentmotion | Collection of algorithms for calculating the motion of mobile agents |
AFC library contains the following deprecated modules (deprecated modules are subject to removal in future 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 |
For making your experience with AFC the best, we recommend you:
-ea command line option).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:
<dependencies> <dependency> <groupId>org.arakhne.core</groupId> <artifactId>vmutils</artifactId> <version>17.0</version> </dependency> </dependencies>
Please, replace Version 17.0in 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).
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>https://arakhne.org/download/maven/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>org.arakhne-maven</id> <name>Arakhnê.org Snapshots</name> <url>https://arakhne.org/download/maven/</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories>
Issues related to the AFC are tracked on GitHub. You must use this issue tracker to report and follow your issues.
Any contribution to the AFC library is welcome.
For setting up the development environment, you should follow the steps:
contributors.p2f file that specifies the Eclipse plugins for the development environment.File > Import > Install > Install software items from file.File > Import > General > PreferencesFor 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
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
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:
cla-assistant;If the CI process is failing on your PR, please follows the steps:
The Arakhnê Foundation Classes are distributed under the Apache License 2, and is copyrigthed to the original authors and the other authors, as expressed in the NOTICE.
The following projects have sucessfully used a module of the AFC: