database-resource-manager-a.../src/main/java/org/gcube/dataaccess/algorithms/examples/AbsoluteSpeciesBarChartsAlg...

359 lines
10 KiB
Java

package org.gcube.dataaccess.algorithms.examples;
import java.awt.Image;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.gcube.contentmanagement.graphtools.data.conversions.ImageTools;
import org.gcube.contentmanagement.graphtools.plotting.graphs.HistogramGraph;
import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger;
import org.gcube.dataanalysis.ecoengine.datatypes.PrimitiveType;
import org.gcube.dataanalysis.ecoengine.datatypes.StatisticalType;
import org.gcube.dataanalysis.ecoengine.datatypes.enumtypes.PrimitiveTypes;
import org.gcube.dataanalysis.ecoengine.interfaces.StandardLocalExternalAlgorithm;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
public class AbsoluteSpeciesBarChartsAlgorithm extends
StandardLocalExternalAlgorithm {
LinkedHashMap<String, StatisticalType> map = new LinkedHashMap<String, StatisticalType>();
static String databaseName = "DatabaseName";
static String userParameterName = "DatabaseUserName";
static String passwordParameterName = "DatabasePassword";
static String urlParameterName = "DatabaseURL";
// static String databaseName = "Obis2Repository";
// static String userParameterName = "postgres";
// static String passwordParameterName = "0b1s@d4sc13nc3";
// static String urlParameterName =
// "jdbc:postgresql://obis2.i-marine.research-infrastructures.eu:5432/obis";
protected String fileName;
BufferedWriter out;
private String firstSpeciesNumber = " SpeciesNumber :";
private String yearStart = "Start year :";
private String yearEnd = "End year :";
private int speciesNumber;
String databaseJdbc;
String year_start;
String year_end;
String databaseUser;
String databasePwd;
private Connection connection = null;
private DefaultCategoryDataset defaultcategorydataset;
@Override
public void init() throws Exception {
AnalysisLogger.getLogger().debug("Initialization");
}
@Override
public String getDescription() {
return ": A transducer algorithm that produces the list of top n most observed taxa, i.e. the species taxa having the largest number of occurrence records, in the OBIS database in a given time interval";
}
public void fulfilParameters() {
AnalysisLogger.getLogger().debug("fulfilParameters method");
// String tmp = getInputParameter(firstSpeciesNumber);
List<StatisticalType> list = getInputParameters();
System.out.println("size: " + list.size());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getName()+" "+list.get(i).getDefaultValue());
if (list.get(i).getName().equals(firstSpeciesNumber)) {
// System.out.println(list.get(i).getName());
String tmp = list.get(i).getDefaultValue();
speciesNumber = Integer.parseInt(tmp);
}
if (list.get(i).getName().equals(yearStart)) {
year_start = list.get(i).getDefaultValue();
}
if (list.get(i).getName().equals(yearEnd)) {
year_end = list.get(i).getDefaultValue();
}
// if (list.get(i).getName().equals(urlParameterName)) {
//
// databaseJdbc = list.get(i).getDefaultValue();
//
// }
// if (list.get(i).getName().equals(userParameterName)) {
//
// databaseUser = list.get(i).getDefaultValue();
//
// }
// if (list.get(i).getName().equals(passwordParameterName)) {
//
// databasePwd = list.get(i).getDefaultValue();
//
// }
databaseJdbc = getInputParameter("DatabaseURL");
databaseUser= getInputParameter("DatabaseUserName");
databasePwd= getInputParameter("DatabasePassword");
}
// System.out.println(tmp);
// databaseJdbc = getInputParameter(urlParameterName);
// year_start = getInputParameter(yearStart);
// year_end = getInputParameter(yearEnd);
// databaseUser = getInputParameter(userParameterName);
// databasePwd = getInputParameter(passwordParameterName);
// fileName = super.config.getPersistencePath() + "results.csv";
fileName = config.getConfigPath() + "results.csv";
// fileName = "./cfg/" + "results.csv";
AnalysisLogger.getLogger().debug("Percorso file: " + fileName);
AnalysisLogger.getLogger().debug("fulfilParameters method");
}
private ResultSet performeQuery() throws SQLException {
connection = DriverManager.getConnection(databaseJdbc, databaseUser,
databasePwd);
Statement stmt = connection.createStatement();
String query = "SELECT tname, sum(count)AS count FROM public.count_species_per_year WHERE year::integer >="
+ year_start
+ "AND year::integer <="
+ year_end
+ "GROUP BY tname ORDER BY count desc;";
return stmt.executeQuery(query);
}
@Override
protected void process() throws Exception {
System.out.println("In the process");
defaultcategorydataset = new DefaultCategoryDataset();
// String driverName = "org.postgresql.Driver";
// Class driverClass = Class.forName(driverName);
// Driver driver = (Driver) driverClass.newInstance();
System.out.println("pre fulfill");
fulfilParameters();
System.out.println("post fulfill");
// String tmp = getInputParameter(firstSpeciesNumber);
// System.out.println("process-> speciesnumber value: " + tmp);
// String tmp="10";
// speciesNumber = Integer.parseInt(tmp);
// year_start = getInputParameter(yearStart);
// year_start="1800";
// year_end = getInputParameter(yearEnd);
// year_end="2020";
// fileName = super.config.getPersistencePath() + "results.csv";
// fileName = "results.csv";
out = new BufferedWriter(new FileWriter(fileName));
System.out.println("pre query");
ResultSet rs = performeQuery();
System.out.println("post query");
// connection =
// DriverManager.getConnection("jdbc:postgresql://obis2.i-marine.research-infrastructures.eu:5432/obis",
// "postgres",
// "0b1s@d4sc13nc3");
// Statement stmt = connection.createStatement();
// String query =
// "SELECT tname, sum(count)AS count FROM public.count_species_per_year WHERE year::integer >="
// + year_start
// + "AND year::integer <="
// + year_end
// + "GROUP BY tname ORDER BY count desc;";
//
// System.out.println("pre query");
// ResultSet rs=stmt.executeQuery(query);
//
// System.out.println("post query");
//
int i = 0;
String s = "Species";
while (rs.next() && i < speciesNumber) {
System.out.println(rs.toString());
String tname = rs.getString("tname");
String count = rs.getString("count");
System.out.println("tname:" + tname);
System.out.println("count:" + count);
write(tname + "," + count);
int countOcc = Integer.parseInt(count);
PrimitiveType val = new PrimitiveType(String.class.getName(),
count, PrimitiveTypes.STRING, tname, tname);
if (i < 100)
map.put(tname, val);
if (i < 16)
defaultcategorydataset.addValue(countOcc, s, tname);
i++;
}
out.close();
connection.close();
}
@Override
protected void setInputParameters() {
System.out.println("Sono in SetParameters");
addStringInput(
firstSpeciesNumber,
"Number of species to report (max 17 will be visualized on the chart)",
"10");
// System.out.println(firstSpeciesNumber);
addStringInput(yearStart, "Starting year of the analysis", "1800");
// System.out.println(yearStart);
addStringInput(yearEnd, "Ending year of the analysis", "2020");
// System.out.println(yearEnd);
// addRemoteDatabaseInput("Obis2Repository", urlParameterName,
// userParameterName, passwordParameterName, "driver", "dialect");
// addRemoteDatabaseInput("Obis2Repository", urlParameterName,
// userParameterName, passwordParameterName, "org.postgresql.Driver",
// "org.hibernate.dialect.PostgreSQLDialect");
System.out.println("pre addRemoteDB");
// addRemoteDatabaseInput(
// "Obis2Repository",
// "jdbc:postgresql://obis2.i-marine.research-infrastructures.eu:5432/obis",
// "postgres", "0b1s@d4sc13nc3", "org.postgresql.Driver",
// "org.hibernate.dialect.PostgreSQLDialect");
// addRemoteDatabaseInput("Obis2Repository", urlParameterName,
// userParameterName, passwordParameterName, "driver", "dialect");
System.out.println("post addRemoteDB");
// super.config.setConfigPath("./cfg/");
// config.setConfigPath();
// super.config.setParam("DatabaseUserName","gcube");
// super.config.setParam("DatabasePassword","d4science2");
// super.config.setParam("DatabaseURL","jdbc:postgresql://obis2.i-marine.research-infrastructures.eu:5432/obis");
// super.config.setParam("DatabaseDriver","org.postgresql.Driver");
// System.out.println("URL: "+ super.config.getDatabaseURL());
}
@Override
public void shutdown() {
AnalysisLogger.getLogger().debug("Shutdown");
}
@Override
public StatisticalType getOutput() {
AnalysisLogger.getLogger().debug("In getOutput");
PrimitiveType p = new PrimitiveType(Map.class.getName(),
PrimitiveType.stringMap2StatisticalMap(outputParameters),
PrimitiveTypes.MAP, "Discrepancy Analysis", "");
AnalysisLogger
.getLogger()
.debug("MapsComparator: Producing Gaussian Distribution for the errors");
// build image:
HashMap<String, Image> producedImages = new HashMap<String, Image>();
JFreeChart chart = HistogramGraph
.createStaticChart(defaultcategorydataset);
Image image = ImageTools.toImage(chart.createBufferedImage(680, 420));
producedImages.put("Species Observations", image);
PrimitiveType images = new PrimitiveType(HashMap.class.getName(),
producedImages, PrimitiveTypes.IMAGES, "ErrorRepresentation",
"Graphical representation of the error spread");
// PrimitiveType images = new PrimitiveType("Species Observations",
// producedImages, PrimitiveTypes.IMAGES, "ErrorRepresentation",
// "Graphical representation of the error spread");
PrimitiveType f = new PrimitiveType(File.class.getName(), new File(
fileName), PrimitiveTypes.FILE, "OccFile", "OccFile");
// end build image
AnalysisLogger.getLogger().debug(
"Bar Charts Species Occurrences Produced");
// collect all the outputs
map.put("File", f);
map.put("Result", p);
map.put("Images", images);
// generate a primitive type for the collection
PrimitiveType output = new PrimitiveType(HashMap.class.getName(), map,
PrimitiveTypes.MAP, "ResultsMap", "Results Map");
// PrimitiveType output=null;
return output;
}
public void write(String writeSt) {
try {
out.write(writeSt);
out.newLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}