How-to Implement Algorithms for the Statistical Manager
Contents
Prerequisites
IDE: Eclipse Java EE IDE for Web Developers. Version: 3.7+
Step by Step
Let's start creating a project using the eclipse IDE that is mavenized. After having mavenized the project in eclipse you have to put dependencies.
Maven coordinates
The maven artifact coordinates are:
<dependency> <groupId>org.gcube.dataanalysis</groupId> <artifactId>ecological-engine</artifactId> <version>1.6.1-SNAPSHOT</version> </dependency>
Let's start creating a new call which implements basic algorithm; it will be executed by Statistical Manager.
Next step is to extend basic interface StandardLocalExternalAlgorithm
.
The following snippet shows unimplemented interface methods that we are going to fulfill.
public class SimpleAlgorithm extends StandardLocalExternalAlgorithm{ @Override public void init() throws Exception { // TODO Auto-generated method stub } @Override public String getDescription() { // TODO Auto-generated method stub return null; } @Override protected void process() throws Exception { // TODO Auto-generated method stub } @Override protected void setInputParameters() { // TODO Auto-generated method stub } @Override public void shutdown() { // TODO Auto-generated method stub } @Override public StatisticalType getOutput() { return null; } }
The init()
is the initialization method. In this simple example we need to initialize log and we use logger from ecological engine library. In case algorithm uses database, we have to open its connection in this method.
The shutdown()
closes database connection.
In the getDescription()
method we add a simple description for the algorithm.
Customize input visualization
String input parameters
User input is obtained calling from setInputParameters()
the method addStringInput with following parameters:
- name of the variable ;
- description for the variable;
- default value;
User input is retrieved using getInputParameter()
passing name used as parameter into setInputParameters()
.
protected void setInputParameters() { addStringInput(NameOfVariable, "Description", "DefaultInput"); }
The input parameter will be automatically passed by Statistical Manager to the procedure. In particular, to process method we can retrieve such parameter by name that we set in addStringInput method.
@Override protected void process() throws Exception { .... String userInputValue = getInputParameter(NameOfVariable); }
Combo box input parameter
In order to obtain a combo box we have to define enumerator that contains the possible
choice that could be selected in the combo box and you have to pass it to the method addEnumerateInput
as follow:
public enum Enum { FIRST_ENUM, SECOND_ENUM } protected void setInputParameters() { addEnumerateInput(Enum.values(), variableName, "Description", Enum.FIRST_ENUM.name()); }
addEnumerateInput
parameters are rispectivly:
- values of declared enumerator;
- name of variable used to extract value insert by user;
- description of value;
- default value visualized in comboBox
Case of algorithm use database
In order to use database it is required to call into setInputParameters()
the method addRemoteDatabaseInput()
.
An important step is to pass as first parameters the name of Runtime Resource addressing database.
Statistical manager automatically retrieves from runtime resource: url ,user and password. Into process method ,before database connection, url,user and password will be retrieve using getInputParameter
. Each of them are retrieved using the name and passing it into addRemoteDatabaseInput
as parameters.
@Override protected void setInputParameters() { ... addRemoteDatabaseInput("Obis2Repository", urlParameterName,userParameterName, passwordParameterName, "driver", "dialect"); @Override protected void process() throws Exception { ... String databaseJdbc = getInputParameter(urlParameterName); String databaseUser = getInputParameter(userParameterName); String databasePwd = getInputParameter(passwordParameterName); connection = DriverManager.getConnection(databaseJdbc, databaseUser,databasePwd); ... }