Arakhnê Foundation Classes

Java classes for writing complex applications (version: 17.0)

Publication: Maven Central Apache License 2

Require Java 11 Require Maven Require  Java

Authors or contributors: Stéphane Galland, Nicolas Gaud, Olivier Lamotte, Alexandre Willaume, Thomas Piotrowski, Maxime Grolleau, Hamza Jaffali, Fevzi Ozgul


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. 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).

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, 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.

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.

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 pure functions, and @Inline for inline functions. AFC also provides the overridings of the operators (operator_plus, operator_minus, etc.) for vectors, matrices, etc.

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, 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.

2. Maintained Modules

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

Deprecated and Dead Modules

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

3. 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.

4. Using AFC in a Maven project

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).

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:

<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).

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>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>

5. Issues

Issues related to the AFC are tracked on GitHub. You must use this issue tracker to report and follow your issues.

6. Contributions

Any contribution to the AFC library is welcome.

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

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

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

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.

7. License of AFC

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.

8. Success Stories

The following projects have sucessfully used a module of the AFC: