diff --git a/src/main/java/org/gcube/dataharvest/AccountingDataHarvesterPlugin.java b/src/main/java/org/gcube/dataharvest/AccountingDataHarvesterPlugin.java index a930ff2..b46b952 100644 --- a/src/main/java/org/gcube/dataharvest/AccountingDataHarvesterPlugin.java +++ b/src/main/java/org/gcube/dataharvest/AccountingDataHarvesterPlugin.java @@ -2,7 +2,6 @@ package org.gcube.dataharvest; import java.io.IOException; import java.io.InputStream; -import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; @@ -16,29 +15,70 @@ import org.gcube.dataharvest.harvester.ResourceCatalogueHarvester; import org.gcube.dataharvest.harvester.SocialHarvester; import org.gcube.dataharvest.harvester.VreUsersHarvester; import org.gcube.dataharvest.utils.ContextAuthorization; +import org.gcube.dataharvest.utils.DateUtils; +import org.gcube.dataharvest.utils.MeasureType; import org.gcube.vremanagement.executor.plugin.Plugin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class AccountingDataHarvesterPlugin extends Plugin { - + private static Logger logger = LoggerFactory.getLogger(AccountingDataHarvesterPlugin.class); private static final String PROPERTY_FILENAME = "config.properties"; - public static final String PARAMETER_FROM = "from"; - public static final String PARAMETER_TO = "to"; - public static final String TEST = "test"; + public static final String START_DATE_INPUT_PARAMETER = "startDate"; + public static final String MEASURE_TYPE_INPUT_PARAMETER = "measureType"; + public static final String RERUN_INPUT_PARAMETER = "reRun"; + public static final String DRY_RUN_INPUT_PARAMETER = "dryRun"; - private boolean testMode = false, updateFlag = false; - private Date dateFrom, dateTo; - - private Properties properties; + protected Date start; + protected Date end; + + private static final InheritableThreadLocal properties = new InheritableThreadLocal() { + + @Override + protected Properties initialValue() { + return new Properties(); + } + + }; + + public static InheritableThreadLocal getProperties() { + return properties; + } private void getConfigParameters() throws IOException { - properties = new Properties(); - InputStream input = AccountingDataHarvesterPlugin.class.getClassLoader().getResourceAsStream(PROPERTY_FILENAME); - properties.load(input); + try { + Properties properties = new Properties(); + InputStream input = AccountingDataHarvesterPlugin.class.getClassLoader() + .getResourceAsStream(PROPERTY_FILENAME); + properties.load(input); + getProperties().set(properties); + } catch(Exception e) { + logger.warn( + "Unable to load {} file containing configuration properties. AccountingDataHarvesterPlugin will use defaults", + PROPERTY_FILENAME); + } + + } + + private static final InheritableThreadLocal contextAuthorization = new InheritableThreadLocal() { + + @Override + protected ContextAuthorization initialValue() { + return null; + } + + }; + + public static InheritableThreadLocal getContextAuthorization() { + return contextAuthorization; + } + + private void retrieveAuthorizations() throws Exception { + ContextAuthorization contextAuthorization = new ContextAuthorization(); + getContextAuthorization().set(contextAuthorization); } public AccountingDataHarvesterPlugin(DataHarvestPluginDeclaration pluginDeclaration) { @@ -47,160 +87,116 @@ public class AccountingDataHarvesterPlugin extends Plugin inputs) throws Exception { - logger.debug("DataHarvestPlugin: launch()"); - try { - getConfigParameters(); - }catch (Exception e) { - logger.warn("Unable to load {} file containing configuration properties. AccountingDataHarvesterPlugin will use defaults", PROPERTY_FILENAME); + public void launch(Map inputs) throws Exception { + logger.debug("{} is starting", this.getClass().getSimpleName()); + + getConfigParameters(); + + retrieveAuthorizations(); + + if(inputs == null || inputs.isEmpty()) { + throw new IllegalArgumentException("The can only be launched providing valid input parameters"); } - ContextAuthorization contextAuthorization = new ContextAuthorization(properties); - - - String message = ""; - DatabaseManager dbaseManager = new DatabaseManager(testMode); - - if (inputs == null) { - message = "Invalid input parameter (null)"; - logger.error(message); - throw new Exception(message, null); + if(!inputs.containsKey(MEASURE_TYPE_INPUT_PARAMETER)) { + throw new IllegalArgumentException("Please set required parameter '" + MEASURE_TYPE_INPUT_PARAMETER + "'"); } - - Object from = inputs.get(PARAMETER_FROM); - if (!checkDate(from)) { - message = "Missing or invalid input parameter: " + PARAMETER_FROM; - logger.error(message); - throw new Exception(message, null); - } - dateFrom = (Date)from; - - Object to = inputs.get(PARAMETER_TO); - if (!checkDate(to)) { - message = "Missing or invalid input parameter: " + PARAMETER_TO; - logger.error(message); - throw new Exception(message, null); - } - dateTo = (Date)to; - - testMode = (inputs.get(TEST) == null) ? false : (boolean) inputs.get(TEST); - logger.debug("TEST mode is " + testMode); - setTimePeriod(); - logger.debug("Time period: " + dateFrom.toString() + " -> " + dateTo.toString()); + MeasureType measureType = MeasureType.valueOf((String) inputs.get(MEASURE_TYPE_INPUT_PARAMETER)); + + boolean reRun = true; + if(inputs.containsKey(RERUN_INPUT_PARAMETER)) { + try { + reRun = (boolean) inputs.get(RERUN_INPUT_PARAMETER); + }catch (Exception e) { + throw new IllegalArgumentException("'" + RERUN_INPUT_PARAMETER + "' must be a boolean"); + } + } + + boolean dryRun = true; + if(inputs.containsKey(DRY_RUN_INPUT_PARAMETER)) { + try { + dryRun = (boolean) inputs.get(DRY_RUN_INPUT_PARAMETER); + }catch (Exception e) { + throw new IllegalArgumentException("'" + DRY_RUN_INPUT_PARAMETER + "' must be a boolean"); + } + } + + if(inputs.containsKey(START_DATE_INPUT_PARAMETER)) { + String startDateString = (String) inputs.get(START_DATE_INPUT_PARAMETER); + start = DateUtils.UTC_DATE_FORMAT.parse(startDateString + " " + DateUtils.UTC); + } else { + start = DateUtils.getPreviousPeriod(measureType).getTime(); + } + + end = DateUtils.getEndDateFromStartDate(measureType, start, 1); + + logger.debug("Harvesting from {} to {}", DateUtils.LAUNCH_DATE_FORMAT.format(start), + DateUtils.LAUNCH_DATE_FORMAT.format(end)); + + DatabaseManager dbaseManager = new DatabaseManager(); try { // collecting info on VRE users - VreUsersHarvester vreUsersHarvester = new VreUsersHarvester(dateFrom, dateTo); + VreUsersHarvester vreUsersHarvester = new VreUsersHarvester(start, end); List users = vreUsersHarvester.getData(); - if(!testMode) { - dbaseManager.insertMonthlyData((Date) dateFrom, (Date) dateTo, users, updateFlag); + if(!dryRun) { + dbaseManager.insertMonthlyData(start, end, users, reRun); } - } catch (Exception x) { + } catch(Exception x) { logger.error(x.getLocalizedMessage()); } try { // collecting info on Res. Catalogue (Dataset, Application, Deliverables, Methods) - ResourceCatalogueHarvester resourceCatalogueHarvester = new ResourceCatalogueHarvester(dateFrom, dateTo); + ResourceCatalogueHarvester resourceCatalogueHarvester = new ResourceCatalogueHarvester(start, end); List res = resourceCatalogueHarvester.getData(); - if(!testMode) { - dbaseManager.insertMonthlyData((Date) dateFrom, (Date) dateTo, res, updateFlag); + if(!dryRun) { + dbaseManager.insertMonthlyData(start, end, res, reRun); } - } catch (Exception x) { + } catch(Exception x) { logger.error(x.getLocalizedMessage()); } try { // collecting info on Data/Method download - DataMethodDownloadHarvester dataMethodDownloadHarvester = new DataMethodDownloadHarvester(dateFrom, dateTo); + DataMethodDownloadHarvester dataMethodDownloadHarvester = new DataMethodDownloadHarvester(start, end); List res = dataMethodDownloadHarvester.getData(); - if(!testMode) { - dbaseManager.insertMonthlyData((Date) dateFrom, (Date) dateTo, res, updateFlag); + if(!dryRun) { + dbaseManager.insertMonthlyData(start, end, res, reRun); } - } catch (Exception x) { + } catch(Exception x) { logger.error(x.getLocalizedMessage()); } try { // collecting info on social (posts, replies and likes) - SocialHarvester socialHarvester = new SocialHarvester(dateFrom, dateTo); + SocialHarvester socialHarvester = new SocialHarvester(start, end); List res = socialHarvester.getData(); - if(!testMode) { - dbaseManager.insertMonthlyData((Date) dateFrom, (Date) dateTo, res, updateFlag); + if(!dryRun) { + dbaseManager.insertMonthlyData(start, end, res, reRun); } - } catch (Exception x) { + } catch(Exception x) { logger.error(x.getLocalizedMessage()); } - try { // collecting info on method invocation - MethodInvocationHarvester methodInvocationHarvester = new MethodInvocationHarvester(dateFrom, dateTo); + MethodInvocationHarvester methodInvocationHarvester = new MethodInvocationHarvester(start, end); List res = methodInvocationHarvester.getData(); - if(!testMode) { - dbaseManager.insertMonthlyData((Date) dateFrom, (Date) dateTo, res, updateFlag); + if(!dryRun) { + dbaseManager.insertMonthlyData(start, end, res, reRun); } - } catch (Exception x) { + } catch(Exception x) { logger.error(x.getLocalizedMessage()); } - + } - + /** {@inheritDoc} */ @Override protected void onStop() throws Exception { - logger.debug("DataHarvestPlugin: onStop()"); - } - - private boolean checkDate(Object date) { - if (date == null) - return false; - return date instanceof java.util.Date; + logger.debug("{} is stopping", this.getClass().getSimpleName()); } -// private void insertMonthlyData(Date from, Date to, List data) { -// Dao dao = null; -// try { -// dao = dbConnect(); -// dao.insertMonthlyMeasure(data, from, to, false); -// } catch (Exception e) { -// logger.error(e.getLocalizedMessage()); -// } finally { -// if (dao != null) { -// try { -// dao.disconnect(); -// } catch (DaoException e) { -// logger.error(e.getLocalizedMessage()); -// } -// } -// } -// } -// -// private Dao dbConnect() throws DaoException { -// DatabaseDataExplorer dde = new DatabaseDataExplorer(); -// dde.setTestMode(testMode); -// DatabaseConnectionData dcd = dde.retrieveDatabaseInfo(); -// Dao dao = new Dao(); -// dao.init(); -// dao.connect(dcd.getUrl(), dcd.getUser(), dcd.getPassword()); -// return dao; -// } - - private void setTimePeriod() { - Calendar from = Calendar.getInstance(); - from.setTime(dateFrom); - from.set(Calendar.HOUR_OF_DAY, 0); - from.set(Calendar.MINUTE, 0); - from.set(Calendar.SECOND, 0); - dateFrom = from.getTime(); - - Calendar to = Calendar.getInstance(); - to.setTime(dateTo); - to.set(Calendar.HOUR_OF_DAY, 23); - to.set(Calendar.MINUTE, 59); - to.set(Calendar.SECOND, 59); - dateTo = to.getTime(); - } - } diff --git a/src/main/java/org/gcube/dataharvest/dao/Dao.java b/src/main/java/org/gcube/dataharvest/dao/Dao.java index aab5684..fa8e523 100644 --- a/src/main/java/org/gcube/dataharvest/dao/Dao.java +++ b/src/main/java/org/gcube/dataharvest/dao/Dao.java @@ -1,6 +1,5 @@ package org.gcube.dataharvest.dao; -import java.sql.Array; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; diff --git a/src/main/java/org/gcube/dataharvest/dao/DaoException.java b/src/main/java/org/gcube/dataharvest/dao/DaoException.java index f46c53e..24a8953 100644 --- a/src/main/java/org/gcube/dataharvest/dao/DaoException.java +++ b/src/main/java/org/gcube/dataharvest/dao/DaoException.java @@ -1,10 +1,23 @@ package org.gcube.dataharvest.dao; +/** + * @author Eric Perrone (ISTI - CNR) + * @author Luca Frosini (ISTI - CNR) + */ public class DaoException extends Exception { + /** + * Generated Serial Version UID + */ + private static final long serialVersionUID = -6302570066137502483L; + public DaoException() { super(); } + + public DaoException(String message) { + super(message); + } public DaoException(String message, Throwable throwable) { super(message, throwable); diff --git a/src/main/java/org/gcube/dataharvest/dao/DatabaseConnectionData.java b/src/main/java/org/gcube/dataharvest/dao/DatabaseConnectionData.java index f2383b1..9fcb1c9 100644 --- a/src/main/java/org/gcube/dataharvest/dao/DatabaseConnectionData.java +++ b/src/main/java/org/gcube/dataharvest/dao/DatabaseConnectionData.java @@ -1,26 +1,34 @@ package org.gcube.dataharvest.dao; +/** + * @author Eric Perrone (ISTI - CNR) + * @author Luca Frosini (ISTI - CNR) + */ + public class DatabaseConnectionData { - String url, user, password; + + protected String uri; + protected String user; + protected String password; public DatabaseConnectionData() { - this.url = null; + this.uri = null; this.user = null; this.password = null; } - public DatabaseConnectionData(String url, String user, String password) { - this.url = url; + public DatabaseConnectionData(String uri, String user, String password) { + this.uri = uri; this.user = user; this.password = password; } - public String getUrl() { - return url; + public String getURI() { + return uri; } - public void setUrl(String url) { - this.url = url; + public void setURI(String uri) { + this.uri = uri; } public String getUser() { @@ -41,6 +49,6 @@ public class DatabaseConnectionData { @Override public String toString() { - return "DatabaseConnectionData [url=" + url + ", user=" + user + ", password=" + password + "]"; + return this.getClass().getSimpleName() + " [uri =" + uri + ", user=" + user + ", password=" + password + "]"; } } diff --git a/src/main/java/org/gcube/dataharvest/dao/DatabaseDataExplorer.java b/src/main/java/org/gcube/dataharvest/dao/DatabaseDataExplorer.java deleted file mode 100644 index 16a8b37..0000000 --- a/src/main/java/org/gcube/dataharvest/dao/DatabaseDataExplorer.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.gcube.dataharvest.dao; - -import java.util.List; - -import org.gcube.common.encryption.StringEncrypter; -import org.gcube.common.resources.gcore.ServiceEndpoint; -import org.gcube.resources.discovery.client.api.DiscoveryClient; -import org.gcube.resources.discovery.client.queries.api.SimpleQuery; -import org.gcube.resources.discovery.icclient.ICFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class DatabaseDataExplorer { - - private static Logger logger = LoggerFactory.getLogger(DatabaseDataExplorer.class); - private boolean testMode = false; - private boolean productionMode = false; - - public DatabaseDataExplorer() { - } - - /** - * setter method for testMode member. this member is set to TRUE if you want - * avoid to use production database during develop/test phase - * - * @param testMode - */ - public void setTestMode(boolean testMode) { - this.testMode = testMode; - } - - /** - * getter method for testMode member. - * - * @return - */ - public boolean getTestMode() { - return testMode; - } - - public DatabaseConnectionData retrieveDatabaseInfo() throws DaoException { - DatabaseConnectionData dcd = null; - if ((testMode == false) && (productionMode == false)) { - String jdbcUrl = "jdbc:postgresql://"; - dcd = new DatabaseConnectionData(); - try { - SimpleQuery query = ICFactory.queryFor(ServiceEndpoint.class); - query.addCondition("$resource/Profile/Category/text() eq 'Database'") - .addCondition("$resource/Profile/Name/text() eq 'Analytics Board'"); - DiscoveryClient client = ICFactory.client(); - List list = client.submit(query); - if (!list.isEmpty()) { - String xml = list.iterator().next(); - - String server = getItemValueFromXmlString(xml, "Endpoint"); - String db = getItemAttributeFromXmlString(xml, "Endpoint", "EntryName"); - jdbcUrl += server + "/" + db; - dcd.setUrl(jdbcUrl); - - String user = getItemValueFromXmlString(xml, "Username"); - dcd.setUser(user); - - String password = StringEncrypter.getEncrypter() - .decrypt(getItemValueFromXmlString(xml, "Password")); - dcd.setPassword(password); - logger.debug("Database data found"); - } - } catch (Exception ex) { - logger.error(ex.getLocalizedMessage()); - throw new DaoException(ex.getLocalizedMessage(), ex.getCause()); - } - } else if(testMode) { - logger.debug("TEST mode is ON"); - dcd = new DatabaseConnectionData("jdbc:postgresql://postgresql-srv-dev.d4science.org:5432/analytics_b_dev", "analytics_b_dev_u", "78cb625303be21b"); - } else if(productionMode) { - logger.warn("PRODUCTION mode is FORCED ON"); - dcd = new DatabaseConnectionData("jdbc:postgresql://postgresql-srv.d4science.org:5432/analytics_board", "analytics_board_u", "b52b64ab07ea0b5"); - } - - return dcd; - } - - private String getItemValueFromXmlString(String xml, String item) { - int start = xml.indexOf("<" + item); - int begin = xml.indexOf(">", start); - int end = xml.indexOf("<", begin); - String value = xml.substring(begin + 1, end); - return value; - } - - private String getItemAttributeFromXmlString(String xml, String item, String attribute) { - int start = xml.indexOf("<" + item); - start = xml.indexOf(attribute, start); - int begin = xml.indexOf("\"", start); - int end = xml.indexOf("\"", begin + 1); - String attributeValue = xml.substring(begin + 1, end); - return attributeValue; - } -} diff --git a/src/main/java/org/gcube/dataharvest/dao/DatabaseManager.java b/src/main/java/org/gcube/dataharvest/dao/DatabaseManager.java index c204fd2..91b3fe6 100644 --- a/src/main/java/org/gcube/dataharvest/dao/DatabaseManager.java +++ b/src/main/java/org/gcube/dataharvest/dao/DatabaseManager.java @@ -8,70 +8,57 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DatabaseManager { + private static Logger logger = LoggerFactory.getLogger(DatabaseManager.class); - private boolean testMode = false; - - public DatabaseManager(boolean testMode) { - this.testMode = testMode; - } - + public DatabaseManager() { - this.testMode = false; + } - - public void setTestMode(boolean testMode) { - this.testMode = testMode; - } - - public boolean isTestMode() { - return testMode; - } - + public void insertMonthlyData(Date from, Date to, List data, boolean updateFlag) { Dao dao = null; try { - dao = dbConnect(testMode); + dao = dbConnect(); dao.insertMonthlyMeasure(data, from, to, updateFlag); - } catch (Exception e) { + } catch(Exception e) { logger.error(e.getLocalizedMessage()); } finally { - if (dao != null) { + if(dao != null) { try { dao.disconnect(); - } catch (DaoException e) { + } catch(DaoException e) { logger.error(e.getLocalizedMessage()); } } } } - + public String[] getActiveVres() { Dao dao = null; try { - dao = dbConnect(testMode); + dao = dbConnect(); return dao.getActiveVres(); - } catch (Exception e) { + } catch(Exception e) { logger.error(e.getLocalizedMessage()); return null; } finally { - if (dao != null) { + if(dao != null) { try { dao.disconnect(); - } catch (DaoException e) { + } catch(DaoException e) { logger.error(e.getLocalizedMessage()); } } } } - - public Dao dbConnect(boolean testMode) throws DaoException { - DatabaseDataExplorer dde = new DatabaseDataExplorer(); - dde.setTestMode(testMode); + + public Dao dbConnect() throws DaoException { + DatabaseParameterRetriever dde = new DatabaseParameterRetriever(); DatabaseConnectionData dcd = dde.retrieveDatabaseInfo(); Dao dao = new Dao(); dao.init(); - dao.connect(dcd.getUrl(), dcd.getUser(), dcd.getPassword()); + dao.connect(dcd.getURI(), dcd.getUser(), dcd.getPassword()); return dao; } - + } diff --git a/src/main/java/org/gcube/dataharvest/dao/DatabaseParameterRetriever.java b/src/main/java/org/gcube/dataharvest/dao/DatabaseParameterRetriever.java new file mode 100644 index 0000000..9662889 --- /dev/null +++ b/src/main/java/org/gcube/dataharvest/dao/DatabaseParameterRetriever.java @@ -0,0 +1,104 @@ +package org.gcube.dataharvest.dao; + +import java.security.Key; +import java.util.List; +import java.util.Properties; + +import org.gcube.common.encryption.StringEncrypter; +import org.gcube.common.resources.gcore.ServiceEndpoint; +import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint; +import org.gcube.common.resources.gcore.utils.Group; +import org.gcube.dataharvest.AccountingDataHarvesterPlugin; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.SimpleQuery; +import org.gcube.resources.discovery.icclient.ICFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class DatabaseParameterRetriever { + + private static Logger logger = LoggerFactory.getLogger(DatabaseParameterRetriever.class); + + public static final String LOCAL_DB = "LOCAL_DB"; + + public static final String SERVICE_ENDPOINT_CATEGORY = "Database"; + public static final String SERVICE_ENDPOINT_NAME = "Analytics Board"; + + public static final String DB_URI = "DB_URI"; + public static final String DB_USERNAME = "DB_USERNAME"; + public static final String DB_PASSWORD = "DB_PASSWORD"; + + public DatabaseParameterRetriever() { + } + + private static String decrypt(String encrypted, Key... key) throws Exception { + return StringEncrypter.getEncrypter().decrypt(encrypted); + } + + protected void checkParameter(String parameter, String parameterName, boolean localDB) throws DaoException { + if(parameter ==null || parameter.isEmpty()) { + throw new DaoException("DB " + parameterName + " cannot be null nor empty. Please check your " + (localDB ? "local configuration." : "ServiceEndpoint")); + } + } + + public DatabaseConnectionData retrieveDatabaseInfo() throws DaoException { + + Properties properties = AccountingDataHarvesterPlugin.getProperties().get(); + + boolean localDB = Boolean.parseBoolean(properties.getProperty(LOCAL_DB, "true")); + + String uri = ""; + String username = ""; + String password = ""; + + if(localDB) { + uri = properties.getProperty(DB_URI); + username = properties.getProperty(DB_USERNAME); + password = properties.getProperty(DB_PASSWORD); + }else { + try { + String className = this.getClass().getSimpleName(); + + SimpleQuery query = ICFactory.queryFor(ServiceEndpoint.class); + query.addCondition( + String.format("$resource/Profile/Category/text() eq '%s'", SERVICE_ENDPOINT_CATEGORY)); + query.addCondition(String.format("$resource/Profile/Name/text() eq '%s'", SERVICE_ENDPOINT_NAME)); + query.addCondition(String.format("$resource/Profile/AccessPoint/Interface/Endpoint/@EntryName eq '%s'", className)); + + DiscoveryClient client = ICFactory.clientFor(ServiceEndpoint.class); + List serviceEndpoints = client.submit(query); + if(serviceEndpoints.size() > 1) { + throw new DaoException("More than one endpoint found. Not sure which one use."); + } + + Group accessPoints = serviceEndpoints.get(0).profile().accessPoints(); + + for(AccessPoint accessPoint : accessPoints) { + if(accessPoint.name().compareTo(className) == 0) { + uri = accessPoint.address(); + username = accessPoint.username(); + + String encryptedPassword = accessPoint.password(); + password = decrypt(encryptedPassword); + } + } + + } catch(Exception ex) { + logger.error(ex.getLocalizedMessage()); + throw new DaoException(ex.getLocalizedMessage(), ex.getCause()); + } + + } + + checkParameter(uri, "URI", localDB); + + checkParameter(username, "Username", localDB); + + checkParameter(password, "Password", localDB); + + return new DatabaseConnectionData(uri, username, password); + } +} diff --git a/src/main/java/org/gcube/dataharvest/harvester/BasicHarvester.java b/src/main/java/org/gcube/dataharvest/harvester/BasicHarvester.java index be5963e..9d3d7fc 100644 --- a/src/main/java/org/gcube/dataharvest/harvester/BasicHarvester.java +++ b/src/main/java/org/gcube/dataharvest/harvester/BasicHarvester.java @@ -150,187 +150,8 @@ public class BasicHarvester { } public String[] getActiveVREs(boolean testMode) { - DatabaseManager dbaseManager = new DatabaseManager(testMode); + DatabaseManager dbaseManager = new DatabaseManager(); return dbaseManager.getActiveVres(); } -// public static void main(String[] args) { -//// String[][] data = { -//// {"/d4science.research-infrastructures.eu","3fdf5a02-383c-4364-a9c6-d3e2b0a4a401-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research","1ff82b79-4042-4311-84e1-a11f955b5f7f-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ICES_MSY","f920ca10-af4d-4b70-9fa8-75f7bb78987c-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/fosteropenscience","188fb0fa-083b-4043-94a6-62152cd7b94e-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/H2020greeneu","ed045fb9-805b-4d6c-a72a-d0a464e7a5dc-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/FAIR_DM","9429cc8d-a3d3-43f6-b793-e29be7e7bfba-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/Blue-Datathon","521908fe-deab-40df-ab59-61a8a3fb7325-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/AnalyticsLab","1b9caa78-004a-4173-a2f0-6f67f7904630-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ICES_IntroStockAssessment","5bd19b68-aecf-4b10-8ca8-ff88f36ca350-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/AGINFRAplus","6de2ce44-7a7e-4da5-875a-5858eae8bd37-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/FisheriesandEcosystemAtMII","4928bb4b-9da5-426a-88ce-2f3a4853b665-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/BlueBRIDGEReview","8019bf10-3d31-4eaa-af48-cb327eceabac-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/DRuMFISH","bed1d5b5-106a-493e-a814-6d5cc99b4b93-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/OpenAIRE-Connect_Coordination","951c4abc-1850-49f3-a852-099d191de708-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/EuBrazilOpenBio","4449d0be-83a3-4966-bac4-beaca76577fa-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/BOBLME_HilsaAWG","6f66e93f-84bf-4171-83e5-a49d4d470465-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ENVRI","8194d45e-baa5-4d0a-9d27-3c81eb8b867d-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/DEMETER","975bf904-1fd7-437f-bb13-8e196ce24aab-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/InfraTraining","f392969e-d2d4-4414-9d62-fb9675ea2056-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/NERLiX","21a34e10-a4ae-4a47-8b78-2313db5a9eb2-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/E-RIHS","82ffc3ac-518f-48a7-b9c4-69f0372b49a5-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/EcoEvo","8b8e8fd9-cda5-433d-8a88-530cc26a2061-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ICES_AbundanceEstimationFromAcoustic","1c7c72a8-93ca-46d0-baee-42da39654c11-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ICES_FIACO2017","775fb6a3-d69d-4902-b379-6d44e4d2b7dc-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/DOPA_AnalystSpatialPlanning","70a39850-264e-496b-9ce0-b764a70e4660-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/Sinay","01c6b4b5-f726-45e0-8311-a2fdbcef54ff-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/StatnMap","d71d9c9b-def6-4df3-a22f-6bcd36dce284-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ISTIOpenAccess","2c4ab315-51cd-469c-af2e-ceccd4708093-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ICES_IntroToREnv","b5112916-3e9d-48ab-afc0-195ceda24489-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ICES_BNetworkAnalysis","30b7506e-a016-4438-be34-9af57af1d0c0-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/FoodborneOutbreak","b3eff03b-aac9-4bd0-a568-6870bb5559d4-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/EOSC_Services","518f0ef5-8510-46e9-9969-89d7d2c22301-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/SDG-Indicator14.4.1","1953f45d-4ff7-45ce-8232-00439f1ab48a-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/FoodSecurity","15c3a6a6-4092-473b-a296-7cd5e5eadff4-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/RAKIP_portal","39bc9d6a-39ba-4664-9c62-330f371ce073-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ICES_MSE","a9186abb-2af0-459e-ad59-3558a8127560-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/TextCrowd","8cc715b0-36a7-480e-ad24-8ecbc6b0577d-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/EOSCPortfolio","8e499271-fe8d-4e0a-a3e2-cddef19515ef-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ParticleFormation","fec95ea3-079d-423a-8620-46a0364696fc-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ICES_LogbookData","b44037d7-a4bf-4542-bc14-85c210a6087d-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/IOTC_SS3","f8f18b96-8654-462e-b12d-73c265952bff-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/PerformFish","8fea1590-73f9-46e1-8303-99ef91759f58-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/EISCAT","0edb3ec5-37a1-47f2-b4be-4624a5e5f4e5-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/AgroClimaticModelling","90fa5480-de0a-48c1-83fd-2c381abbd1bf-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ENVRIPlusData4Science","8e4d9a87-0da9-45c0-9542-612f14d5b454-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/OnlineOceanography","451ce6b2-09d8-4253-ac1d-56b0c633ffa7-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/QCAPI","7a829b89-20b2-48af-8c9e-641a1acaf47a-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/SDI_Lab","76ca201a-4a89-4871-9e9d-3043ecc60be2-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ORIONKnowledgeHub","ff3228dc-4b29-4919-924d-462d9f5b9d42-843339462"}, -//// {"/d4science.research-infrastructures.eu/D4Research/ICOSEddyCovarianceProcessing","781272a4-d498-4baf-8a14-468b83839452-843339462"}, -//// {"/d4science.research-infrastructures.eu/Edison","289a3fc0-cd23-43ee-bf18-b3efc4d1a182-843339462"}, -//// {"/d4science.research-infrastructures.eu/Edison/RstudioVirtualLab","d6b795ec-2719-4ac2-a511-fe032ef43b15-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM","cb7dadd0-dbdd-46a6-8db2-1dc4ffc64759-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/GRSF_Admin","f4811784-0d4a-4731-9f75-3b407544b31f-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/VME-DB","e8b93617-217e-44ac-ae02-09a45bc26886-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/WECAFC-FIRMS","17bdb8ae-cff9-44a7-ac27-c9e26a254290-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/TBTI_VRE","02c36b15-1229-47b1-a583-296ec5b404fd-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/GRSF","833d6a12-34a9-4082-9ecb-358d19244269-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/KIMAGRO_Fishfarming","b6967277-73e5-4b23-8fd6-c47e2e5a5ed2-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/D4STeam","e18b3dd5-b6fe-4865-8727-434354c24b9f-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/AquaMaps","6b08ffe9-695d-45bf-90fb-6361a4234ab5-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/iMarineBoardVRE","78f6a7be-55c5-4602-ae81-fd4955a3a72e-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/AlieiaVRE","09a84b5a-b869-4552-887d-23248bc5b042-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/STRATOS_AQUACULTURES","c6317519-b238-449c-bd3d-6c832f98a611-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/MARKELLOS_Aquaculture","1457e707-492d-46a0-b848-6c6cd758a6ce-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/iLKNAK_Aquaculture","a8f98114-05b8-44b2-a89c-0f56e55412fd-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/ARDAG_Aquaculture","a948e508-0ecd-4013-a094-fe3c506209e1-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/ForkysVRE","6ed093fe-f245-4638-acfe-a70a1f24146d-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/EllinikaPsariaVRE","b7c16d55-8344-492b-a94b-8fbf7af27e08-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/Aquabiotech","c55477cf-8c98-4bd0-a05d-6182ab1be4e8-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/NHREUS_Aquaculture","c7e19ccc-9fc1-49c0-8351-d507830e7660-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/GALAXIDI","69e9ec43-62a7-45cb-b868-a369aeabf123-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/CFE_DATA","75d70975-bee4-4f46-94be-ff8773df6bbb-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/CWP_Secretariat","d84f0ade-be6a-40d6-a152-66e1b5d7d75d-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/SustainableBlueEconomy","19bbf2bb-58e3-4140-81cc-4043fd8755e5-843339462"}, -//// {"/d4science.research-infrastructures.eu/FARM/CollabResearch","2580b8ae-fad1-4213-8fd4-78b8a90c2c90-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps","e844592c-6428-4483-8614-e9561ad806f5-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/SIASPA","fe58019c-f3eb-4d3a-8094-54d18df00940-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/GEMex","afe00e12-5351-4941-aa31-1285184e2aea-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/KnowledgeBridging","cb98c3f9-0217-46f3-a74d-bda21bbf00fb-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/TabularDataLab","a563847b-bb53-4303-950f-5857c59f3217-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/BlueUptake","dfbc4f13-874d-4e0b-99a9-b5cf1d48acef-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/RStudioLab","8e6dcf9c-6dcc-4172-8dd6-45560af6a227-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/iSearch","df227388-3d61-4f77-97fb-4cd4fd8c6dbe-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/BlueBridgeProject","ce150ced-d4a3-48d2-a541-3433f26ab6d5-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ICES_StockAssessmentAdvanced","a1c1a4e5-7aea-4c12-b724-868adb8fa6ec-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/RPrototypingLab","6c62b572-3b0e-43d2-b224-5c9961dfcb2e-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/FAO_TunaAtlas","44c54a21-88df-4a4b-ab1c-d9d5b636baba-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/AquacultureAtlasGeneration","8953528d-e990-4451-b5a3-517adca107a2-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/rScience","7bfa66d6-6c9b-448f-a11a-21d833843647-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/BlueBRIDGE-PSC","79fb276e-13d9-4d80-b419-56c9d64888b7-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/EGIP","9c420378-e8f4-472e-bf7b-b5419041f6db-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ENVRIPlus","554d32ca-ae4a-44dd-b8a7-424ec7d30cba-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/TCom","aed4d51f-3dd1-4329-b622-322211ac237a-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/CNR_OpenScienceTF","6978ab04-ae3c-4cee-8b11-9f64ee733502-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ICES_DASC","c1674036-1388-4eca-bbbb-174b9dc95dd1-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ScalableDataMining","38e4fa5a-6c50-417f-b952-1525cebd4950-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ICCAT_BFT-E","776ea841-2205-4590-a0dc-24141138972e-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/DESCRAMBLE","2c6561bb-ee65-4537-9ccc-ec2464291630-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ARIADNE","05ffc92b-03d1-4b05-8e33-e62f795202b5-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/EcologicalModelling","2fa2177d-a2a8-48d4-898f-3f301842247c-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ICES_TCSSM","eba4dc9d-b7cf-40b8-adfb-aecdc731c3de-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/StockAssessment","9d78cbba-78e2-4efe-a38a-e14744318f2d-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/PerformanceEvaluationInAquaculture","49b00009-e35f-44dc-ab0e-a63b505aca79-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/StrategicInvestmentAnalysis","cb859658-0439-4469-8b2a-7c4516c3a659-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ProtectedAreaImpactMaps","9f2746e3-3e04-4f80-9dd7-e66f42ff53f9-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/BlueCommons","8166fe91-7fe5-4636-9821-b8718aaa8500-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/BiOnym","867dfe04-ed24-42ad-902f-e2ee63963054-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/EGIEngage","548ffb80-2dbe-4d0d-afb9-1fd009c2edca-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/EFG","e085b1c4-f315-4a21-88c4-46748b81b3f3-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/IGDI","95306e9b-0ce0-4b72-be18-075873fe634a-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ICES_TCRE","5cfdd223-401c-4324-9c99-9bb4462ff854-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/SoBigData.eu","6af6ee16-e357-4d2d-ba14-2c5984ab4e02-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/BiodiversityLab","2856e458-7fd8-42a4-a1a9-b5566cf76ff7-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ICES_FIACO","bffc959f-5eb3-4d21-9222-27b99fa41f5b-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/gCube","9e5aa777-c700-4975-a218-6c73cc8b1c69-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ICES_DALSA","ec2d9727-2b21-4df5-823d-3f28a2d8295e-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/Parthenos","42e742e2-75eb-401e-9d07-43deb713f926-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/SoBigData.it","8b4d9866-1d55-470a-95c3-4cdc19cecb0d-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/AquacultureTrainingLab","49c20941-27b1-4294-aa23-58809ef8616c-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/ICOS_ETC","cac5112b-1a9c-476b-bc33-3b5d3192b1d0-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/BlueBRIDGE-EAB","3c6dfc0b-81a3-453c-b693-fe8337a735f1-843339462"}, -//// {"/d4science.research-infrastructures.eu/gCubeApps/FrenchTropicalTunaAtlas","703fb5a1-54e2-4b1a-920c-978356d4a74a-843339462"}, -//// {"/d4science.research-infrastructures.eu/OpenAIRE","2a05405f-e878-4f80-a522-d2381b97e0df-843339462"}, -//// {"/d4science.research-infrastructures.eu/OpenAIRE/OpenAIRE-Connect_Technical","15ee7828-caa0-4b07-a950-9f1ffdbc812b-843339462"}, -//// {"/d4science.research-infrastructures.eu/OpenAIRE/OpenAIRE-Connect_Networking","156ca39a-0485-467d-aebb-59b7b49690b4-843339462"}, -//// {"/d4science.research-infrastructures.eu/OpenAIRE/OpenAIRE-Connect_PSC","2d891c6a-4f6f-4281-8ffd-56270d0d0783-843339462"}, -//// {"/d4science.research-infrastructures.eu/OpenAIRE/OpenAIRE-Connect_EAB","66856a20-7a58-4188-afcf-ab5fa212a732-843339462"}, -//// {"/d4science.research-infrastructures.eu/OpenAIRE/OpenAIRE_Users","64c73441-5a88-45e7-a865-dc449dadf271-843339462"}, -//// {"/d4science.research-infrastructures.eu/OpenAIRE/1st_OpenAIRE_Datathon","5c6946e9-277c-4813-b949-5c5e215127b6-843339462"}, -//// {"/d4science.research-infrastructures.eu/OpenAIRE/dnet","75e2db7a-03ae-4af3-b87d-d7f1f20cc194-843339462"}, -//// {"/d4science.research-infrastructures.eu/ParthenosVO","8b8cf7cd-ff1a-4827-83cf-3933e2320d26-843339462"}, -//// {"/d4science.research-infrastructures.eu/ParthenosVO/RubRIcA","4a9e0e5a-3b9e-4293-9dc7-4a118f3a37f3-843339462"}, -//// {"/d4science.research-infrastructures.eu/ParthenosVO/PARTHENOS_Registry","0cdceda3-f6e1-4bb7-aa20-c3a4b8a891ba-843339462"}, -//// {"/d4science.research-infrastructures.eu/ParthenosVO/PARTHENOS_LAB","75de04c9-aa4e-4e32-9770-4094de1d0d54-843339462"}, -//// {"/d4science.research-infrastructures.eu/ParthenosVO/ACE","05f21525-b6fd-4587-ae7f-4e45a9fddfdf-843339462"}, -//// {"/d4science.research-infrastructures.eu/SmartArea","3782e93f-3d1a-4809-be0f-7c4b20eaa74b-843339462"}, -//// {"/d4science.research-infrastructures.eu/SmartArea/SmartBuilding","4216a83a-5506-43be-93b4-1464020cacce-843339462"}, -//// {"/d4science.research-infrastructures.eu/SmartArea/SmartApps","aa24a1d7-672a-4e06-b220-7d353188fc0a-843339462"}, -//// {"/d4science.research-infrastructures.eu/SoBigData","060a074b-bb12-4ab2-a585-cf0119f4d8ea-843339462"}, -//// {"/d4science.research-infrastructures.eu/SoBigData/CityOfCitizens","28367906-d586-42e3-a5d8-6043a43ce54e-843339462"}, -//// {"/d4science.research-infrastructures.eu/SoBigData/ResourceCatalogue","2497dbd8-4002-4b50-b17c-ed2dc17cb0d7-843339462"}, -//// {"/d4science.research-infrastructures.eu/SoBigData/WellBeingAndEconomy","90ae1d9b-cfcb-4fdd-a91e-38ff6013f688-843339462"}, -//// {"/d4science.research-infrastructures.eu/SoBigData/TagMe","9684c4a6-e542-44e1-a39c-4bdcf04befa8-843339462"}, -//// {"/d4science.research-infrastructures.eu/SoBigData/SMAPH","c0924749-cb6d-41e9-88a4-363e7f9e7556-843339462"}, -//// {"/d4science.research-infrastructures.eu/SoBigData/SoBigDataLab","37d61ab1-3641-435d-8c4f-f1d37eb34ead-843339462"}, -//// {"/d4science.research-infrastructures.eu/SoBigData/SocietalDebates","59450ce1-cf1d-4abb-9b0c-63346ad35e08-843339462"}, -//// {"/d4science.research-infrastructures.eu/SoBigData/M-ATLAS","ace198d7-f50f-4557-9788-f7aa91c31d67-843339462"}, -//// {"/d4science.research-infrastructures.eu/SoBigData/SportsDataScience","61bf4b8d-34e2-4426-a3dd-b41a1dcbccb1-843339462"} -//// }; -//// -//// ArrayList props = new ArrayList<>(); -//// for(String[] datap : data) { -//// Property p = new Property(); -//// p = p.nameAndValue(datap[0], datap[1]); -//// props.add(p); -//// } -// -// -// try { -// //new BasicHarvester("2018-03-01 00:00:00", "2018-03-31 23:59:59").updateServiceEndPoint(props); -// BasicHarvester bh = new BasicHarvester("2018-03-01 00:00:00", "2018-03-31 23:59:59"); -// Properties props = bh.readServiceEndpoint(); -// Iterator i = props.keySet().iterator(); -// while(i.hasNext()) { -// String key = (String)i.next(); -// System.out.println(key + ":" + props.getProperty(key)); -// } -// } catch (ParseException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } catch (Exception e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// } - } diff --git a/src/main/java/org/gcube/dataharvest/utils/ContextAuthorization.java b/src/main/java/org/gcube/dataharvest/utils/ContextAuthorization.java index deab896..c839d56 100644 --- a/src/main/java/org/gcube/dataharvest/utils/ContextAuthorization.java +++ b/src/main/java/org/gcube/dataharvest/utils/ContextAuthorization.java @@ -13,6 +13,7 @@ import java.util.Properties; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.provider.UserInfo; import org.gcube.common.scope.impl.ScopeBean; +import org.gcube.dataharvest.AccountingDataHarvesterPlugin; import org.gcube.resourcemanagement.support.server.managers.scope.ScopeManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,8 +22,6 @@ public class ContextAuthorization { private static Logger logger = LoggerFactory.getLogger(ContextAuthorization.class); - protected Properties properties; - public static final String VO_FILE = "VO_FILE"; public static final String DEFAULT_VO_FILENAME = "scopedata.xml"; @@ -46,20 +45,15 @@ public class ContextAuthorization { * Contains Properties used to generate tokens */ - public ContextAuthorization(Properties properties) throws Exception { + public ContextAuthorization() throws Exception { this.contextToToken = new HashMap<>(); this.tokenToContext = new HashMap<>(); - if(properties!=null) { - this.properties = properties; - }else { - this.properties = new Properties(); - } - //retrieveContextsAndTokens(); + retrieveContextsAndTokens(); } public File getVOFile() { try { - String voFileName = properties.getProperty(VO_FILE, DEFAULT_VO_FILENAME); + String voFileName = AccountingDataHarvesterPlugin.getProperties().get().getProperty(VO_FILE, DEFAULT_VO_FILENAME); URL url = ContextAuthorization.class.getClassLoader().getResource(voFileName); File voFile = new File(url.toURI()); logger.trace("VO file is {}", voFile); @@ -78,6 +72,8 @@ public class ContextAuthorization { try { + Properties properties = AccountingDataHarvesterPlugin.getProperties().get(); + LinkedHashMap map = ScopeManager.readScopes(getVOFile().getAbsolutePath()); for(String scope : map.keySet()) { try { diff --git a/src/main/java/org/gcube/dataharvest/utils/DateUtils.java b/src/main/java/org/gcube/dataharvest/utils/DateUtils.java new file mode 100644 index 0000000..b0456b2 --- /dev/null +++ b/src/main/java/org/gcube/dataharvest/utils/DateUtils.java @@ -0,0 +1,98 @@ +package org.gcube.dataharvest.utils; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DateUtils { + + private static Logger logger = LoggerFactory.getLogger(DateUtils.class); + + public static TimeZone UTC_TIMEZONE = TimeZone.getTimeZone("UTC"); + public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS Z"; + public static final DateFormat DEFAULT_DATE_FORMAT; + + public static final String LAUNCH_DATE_FORMAT_PATTERN = "yyyy-MM-dd"; + public static final DateFormat LAUNCH_DATE_FORMAT; + + public static final String UTC_DATE_FORMAT_PATTERN = "yyyy-MM-dd Z"; + public static final DateFormat UTC_DATE_FORMAT; + public static final String UTC = "+0000"; + + static { + DEFAULT_DATE_FORMAT = getUTCDateFormat(DATETIME_PATTERN); + LAUNCH_DATE_FORMAT = getUTCDateFormat(LAUNCH_DATE_FORMAT_PATTERN); + UTC_DATE_FORMAT = getUTCDateFormat(UTC_DATE_FORMAT_PATTERN); + } + + public static DateFormat getUTCDateFormat(String pattern){ + DateFormat dateFormat = new SimpleDateFormat(pattern); + dateFormat.setTimeZone(UTC_TIMEZONE); + return dateFormat; + } + + public static Calendar getUTCCalendarInstance(){ + return Calendar.getInstance(UTC_TIMEZONE); + } + + public static Calendar getPreviousPeriod(MeasureType measureType) { + Calendar now = Calendar.getInstance(); + switch(measureType) { + + case YEARLY: + now.add(Calendar.YEAR, -1); + now.set(Calendar.MONTH, Calendar.JANUARY); + now.set(Calendar.DAY_OF_MONTH,1); + break; + + case MONTHLY: + now.add(Calendar.MONTH, -1); + now.set(Calendar.DAY_OF_MONTH,1); + break; + + case DAILY: + now.add(Calendar.DAY_OF_MONTH, -1); + break; + + default: + break; + } + + now.set(Calendar.HOUR_OF_DAY, 0); + now.set(Calendar.MINUTE, 0); + now.set(Calendar.SECOND, 0); + now.set(Calendar.MILLISECOND, 0); + + return now; + + } + + + public static Calendar getStartCalendar(int year, int month, int day){ + Calendar aggregationStartCalendar = getUTCCalendarInstance(); + aggregationStartCalendar.set(Calendar.YEAR, year); + aggregationStartCalendar.set(Calendar.MONTH, month); + aggregationStartCalendar.set(Calendar.DAY_OF_MONTH, day); + aggregationStartCalendar.set(Calendar.HOUR_OF_DAY, 0); + aggregationStartCalendar.set(Calendar.MINUTE, 0); + aggregationStartCalendar.set(Calendar.SECOND, 0); + aggregationStartCalendar.set(Calendar.MILLISECOND, 0); + + logger.debug("{}", DEFAULT_DATE_FORMAT.format(aggregationStartCalendar.getTime())); + + return aggregationStartCalendar; + } + + public static Date getEndDateFromStartDate(MeasureType aggregationType, Date startDate, int offset) { + Calendar aggregationEndDate = getUTCCalendarInstance(); + aggregationEndDate.setTimeInMillis(startDate.getTime()); + aggregationEndDate.add(aggregationType.getCalendarField(), offset); + return aggregationEndDate.getTime(); + } + +} diff --git a/src/main/java/org/gcube/dataharvest/utils/MeasureType.java b/src/main/java/org/gcube/dataharvest/utils/MeasureType.java new file mode 100644 index 0000000..33ea290 --- /dev/null +++ b/src/main/java/org/gcube/dataharvest/utils/MeasureType.java @@ -0,0 +1,50 @@ +package org.gcube.dataharvest.utils; + +import java.text.DateFormat; +import java.util.Calendar; + +/** + * @author Alessandro Pieve (ISTI - CNR) + * @author Luca Frosini (ISTI - CNR) + */ +public enum MeasureType { + + DAILY(Calendar.DAY_OF_MONTH, "yyyy-MM-dd", 7), + MONTHLY(Calendar.MONTH, "yyyy-MM", 3), + YEARLY(Calendar.YEAR, "yyyy", 3); + + public static final String DATE_SEPARATOR = "-"; + + private final int calendarField; + + private final String dateFormatPattern; + private final DateFormat dateFormat; + + private final int notAggregableBefore; + + + + private MeasureType(int calendarField, String dateFormatPattern, int notAggregableBefore) { + this.calendarField = calendarField; + this.dateFormatPattern=dateFormatPattern; + this.dateFormat = DateUtils.getUTCDateFormat(dateFormatPattern); + this.notAggregableBefore = notAggregableBefore; + } + + public int getCalendarField() { + return calendarField; + } + + public String getDateFormatPattern() { + return dateFormatPattern; + } + + public DateFormat getDateFormat() { + return dateFormat; + } + + public int getNotAggregableBefore(){ + return notAggregableBefore; + } + +} diff --git a/src/main/java/org/gcube/dataharvest/utils/Utils.java b/src/main/java/org/gcube/dataharvest/utils/Utils.java index 5f91e90..4a0eb9f 100644 --- a/src/main/java/org/gcube/dataharvest/utils/Utils.java +++ b/src/main/java/org/gcube/dataharvest/utils/Utils.java @@ -7,17 +7,15 @@ import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.text.DateFormat; -import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; -import java.util.Locale; -import org.gcube.dataharvest.dao.Dao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Utils { + private static Logger logger = LoggerFactory.getLogger(Utils.class); public static Calendar dateToCalendar(Date date) { @@ -51,15 +49,4 @@ public class Utils { return json; } - // il seguente array deve essere formato dinamicamente -// public static String[] soBigDataContexts = { "/d4science.research-infrastructures.eu/gCubeApps/SoBigData.eu", -// "/d4science.research-infrastructures.eu/gCubeApps/SoBigData.it", -// "/d4science.research-infrastructures.eu/SoBigData/SoBigDataLab", -// "/d4science.research-infrastructures.eu/SoBigData/ResourceCatalogue", -// "/d4science.research-infrastructures.eu/SoBigData/CityOfCitizens", -// "/d4science.research-infrastructures.eu/SoBigData/SocietalDebates", -// "/d4science.research-infrastructures.eu/SoBigData/WellBeingAndEconomy", -// "/d4science.research-infrastructures.eu/SoBigData/SMAPH", -// "/d4science.research-infrastructures.eu/SoBigData/TagMe" }; - } diff --git a/src/test/java/org/gcube/dataharvest/AccountingDataHarvesterPluginTest.java b/src/test/java/org/gcube/dataharvest/AccountingDataHarvesterPluginTest.java index 381004f..b698b51 100644 --- a/src/test/java/org/gcube/dataharvest/AccountingDataHarvesterPluginTest.java +++ b/src/test/java/org/gcube/dataharvest/AccountingDataHarvesterPluginTest.java @@ -1,12 +1,11 @@ package org.gcube.dataharvest; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.HashMap; import java.util.Map; -import java.util.TimeZone; +import org.gcube.dataharvest.utils.DateUtils; +import org.gcube.dataharvest.utils.MeasureType; import org.gcube.dataharvest.utils.ScopedTest; import org.junit.Test; import org.slf4j.Logger; @@ -16,63 +15,39 @@ public class AccountingDataHarvesterPluginTest extends ScopedTest { private static Logger logger = LoggerFactory.getLogger(AccountingDataHarvesterPluginTest.class); - public static TimeZone UTC_TIMEZONE = TimeZone.getTimeZone("UTC"); - public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS Z"; - public static final DateFormat DEFAULT_DATE_FORMAT; - - static { - DEFAULT_DATE_FORMAT = getUTCDateFormat(DATETIME_PATTERN); - } - - public static DateFormat getUTCDateFormat(String pattern){ - DateFormat dateFormat = new SimpleDateFormat(pattern); - dateFormat.setTimeZone(UTC_TIMEZONE); - return dateFormat; - } - - public static Calendar getUTCCalendarInstance(){ - return Calendar.getInstance(UTC_TIMEZONE); - } - - public static Calendar getAggregationStartCalendar(int year, int month, int day){ - Calendar aggregationStartCalendar = getUTCCalendarInstance(); - aggregationStartCalendar.set(Calendar.YEAR, year); - aggregationStartCalendar.set(Calendar.MONTH, month); - aggregationStartCalendar.set(Calendar.DAY_OF_MONTH, day); - aggregationStartCalendar.set(Calendar.HOUR_OF_DAY, 0); - aggregationStartCalendar.set(Calendar.MINUTE, 0); - aggregationStartCalendar.set(Calendar.SECOND, 0); - aggregationStartCalendar.set(Calendar.MILLISECOND, 0); - - logger.debug("{}", DEFAULT_DATE_FORMAT.format(aggregationStartCalendar.getTime())); - - return aggregationStartCalendar; - } - - @Test public void test() { try { - ScopedTest.setContext(ScopedTest.ROOT); DataHarvestPluginDeclaration dataHarvestPluginDeclaration = new DataHarvestPluginDeclaration(); AccountingDataHarvesterPlugin accountingDataHarvesterPlugin = new AccountingDataHarvesterPlugin(dataHarvestPluginDeclaration); - Calendar from = getAggregationStartCalendar(2018, Calendar.APRIL, 1); - Calendar to = getAggregationStartCalendar(2018, Calendar.APRIL, 30); + Map inputs = new HashMap<>(); - Map map = new HashMap<>(); - map.put(AccountingDataHarvesterPlugin.PARAMETER_FROM, from.getTime()); - map.put(AccountingDataHarvesterPlugin.PARAMETER_TO, to.getTime()); - map.put(AccountingDataHarvesterPlugin.TEST, true); - accountingDataHarvesterPlugin.launch(map); + MeasureType measureType = MeasureType.MONTHLY; + inputs.put(AccountingDataHarvesterPlugin.MEASURE_TYPE_INPUT_PARAMETER, measureType); + + inputs.put(AccountingDataHarvesterPlugin.RERUN_INPUT_PARAMETER, true); + + inputs.put(AccountingDataHarvesterPlugin.DRY_RUN_INPUT_PARAMETER, true); + + Calendar from + //= DateUtils.getStartCalendar(2018, Calendar.APRIL, 1); + = DateUtils.getPreviousPeriod(measureType); + + String fromDate = DateUtils.LAUNCH_DATE_FORMAT.format(from.getTime()); + logger.trace("{} is {}", AccountingDataHarvesterPlugin.START_DATE_INPUT_PARAMETER, fromDate); + // inputs.put(AccountingDataHarvesterPlugin.START_DATE_INPUT_PARAMETER, fromDate); + + + + accountingDataHarvesterPlugin.launch(inputs); logger.info("End."); } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); + logger.error("", e); } } diff --git a/src/test/java/org/gcube/dataharvest/Harvester.java b/src/test/java/org/gcube/dataharvest/Harvester.java index 97eb414..c386bd4 100644 --- a/src/test/java/org/gcube/dataharvest/Harvester.java +++ b/src/test/java/org/gcube/dataharvest/Harvester.java @@ -2,14 +2,13 @@ package org.gcube.dataharvest; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; import java.util.Date; import java.util.List; import org.gcube.dataharvest.dao.Dao; import org.gcube.dataharvest.dao.DaoException; import org.gcube.dataharvest.dao.DatabaseConnectionData; -import org.gcube.dataharvest.dao.DatabaseDataExplorer; +import org.gcube.dataharvest.dao.DatabaseParameterRetriever; import org.gcube.dataharvest.datamodel.Harvest; import org.gcube.dataharvest.harvester.BasicHarvester; import org.gcube.dataharvest.harvester.DataMethodDownloadHarvester; @@ -122,6 +121,7 @@ public class Harvester { // collecting info on method invocation MethodInvocationHarvester methodInvocationHarvester = new MethodInvocationHarvester(dateFrom, dateTo); List res = methodInvocationHarvester.getData(); + logger.debug("{}", res); // insertMonthlyData((Date) dateFrom, (Date) dateTo, res); } catch (Exception x) { logger.error(x.getLocalizedMessage()); @@ -146,19 +146,13 @@ public class Harvester { } } - private boolean checkDate(Object date) { - if (date == null) - return false; - return date instanceof java.util.Date; - } - private Dao dbConnect() throws DaoException { - DatabaseDataExplorer dde = new DatabaseDataExplorer(); - dde.setTestMode(testMode); + DatabaseParameterRetriever dde = new DatabaseParameterRetriever(); + //dde.setTestMode(testMode); DatabaseConnectionData dcd = dde.retrieveDatabaseInfo(); Dao dao = new Dao(); dao.init(); - dao.connect(dcd.getUrl(), dcd.getUser(), dcd.getPassword()); + dao.connect(dcd.getURI(), dcd.getUser(), dcd.getPassword()); return dao; } @@ -188,7 +182,7 @@ public class Harvester { return tokens[1].trim(); } - private ArrayList getSubTree(int root) { + protected ArrayList getSubTree(int root) { Dao dao = null; try { dao = dbConnect(); @@ -208,7 +202,7 @@ public class Harvester { } } - private void createSocialReports(ArrayList ids) { + protected void createSocialReports(ArrayList ids) { Dao dao = null; try { dao = dbConnect(); diff --git a/src/test/java/org/gcube/dataharvest/utils/ContextAuthorizationTest.java b/src/test/java/org/gcube/dataharvest/utils/ContextAuthorizationTest.java index e863d25..2cf8b6a 100644 --- a/src/test/java/org/gcube/dataharvest/utils/ContextAuthorizationTest.java +++ b/src/test/java/org/gcube/dataharvest/utils/ContextAuthorizationTest.java @@ -21,6 +21,7 @@ public class ContextAuthorizationTest extends ScopedTest { properties = new Properties(); InputStream input = AccountingDataHarvesterPlugin.class.getClassLoader().getResourceAsStream(PROPERTY_FILENAME); properties.load(input); + AccountingDataHarvesterPlugin.getProperties().set(properties); } @Test @@ -30,7 +31,7 @@ public class ContextAuthorizationTest extends ScopedTest { }catch (Exception e) { logger.warn("Unable to load {} file containing configuration properties. AccountingDataHarvesterPlugin will use defaults", PROPERTY_FILENAME); } - ContextAuthorization contextAuthorization = new ContextAuthorization(properties); + ContextAuthorization contextAuthorization = new ContextAuthorization(); contextAuthorization.getVOFile(); } @@ -41,7 +42,7 @@ public class ContextAuthorizationTest extends ScopedTest { }catch (Exception e) { logger.warn("Unable to load {} file containing configuration properties. AccountingDataHarvesterPlugin will use defaults", PROPERTY_FILENAME); } - ContextAuthorization contextAuthorization = new ContextAuthorization(properties); + ContextAuthorization contextAuthorization = new ContextAuthorization(); contextAuthorization.retrieveContextsAndTokens(); } diff --git a/src/test/java/org/gcube/dataharvest/utils/DataFiller.java b/src/test/java/org/gcube/dataharvest/utils/DataFiller.java index 746137d..4420f46 100644 --- a/src/test/java/org/gcube/dataharvest/utils/DataFiller.java +++ b/src/test/java/org/gcube/dataharvest/utils/DataFiller.java @@ -1,7 +1,8 @@ package org.gcube.dataharvest.utils; public class DataFiller { - private static String[] data10 = { + + protected static String[] data10 = { "/d4science.research-infrastructures.eu/FARM/AlieiaVRE","12", "/d4science.research-infrastructures.eu/D4Research/AnalyticsLab","83", "/d4science.research-infrastructures.eu/FARM/Aquabiotech","8", @@ -56,7 +57,7 @@ public class DataFiller { "/d4science.research-infrastructures.eu/FARM/WECAFC-FIRMS","20" }; - private static String[] data11 = { + protected static String[] data11 = { "/d4science.research-infrastructures.eu/FARM/AlieiaVRE","12", "/d4science.research-infrastructures.eu/D4Research/AnalyticsLab","93", "/d4science.research-infrastructures.eu/FARM/Aquabiotech","8", @@ -111,7 +112,7 @@ public class DataFiller { "/d4science.research-infrastructures.eu/FARM/WECAFC-FIRMS","20" }; - private static String[] data12 = { + protected static String[] data12 = { "/d4science.research-infrastructures.eu/FARM/AlieiaVRE","12", "/d4science.research-infrastructures.eu/D4Research/AnalyticsLab","99", "/d4science.research-infrastructures.eu/FARM/Aquabiotech","8",