Code redesign

Refs #11756: Refactor DataHArvesterPlugin to support scheduled execution from smart-executor 

Task-Url: https://support.d4science.org/issues/11756

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/accounting/accounting-dashboard-harvester-se-plugin@167567 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Luca Frosini 2018-05-17 14:04:22 +00:00
parent 1430fb676f
commit 9dec451f4c
16 changed files with 463 additions and 532 deletions

View File

@ -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<DataHarvestPluginDeclaration> {
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> properties = new InheritableThreadLocal<Properties>() {
@Override
protected Properties initialValue() {
return new Properties();
}
};
public static InheritableThreadLocal<Properties> 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> contextAuthorization = new InheritableThreadLocal<ContextAuthorization>() {
@Override
protected ContextAuthorization initialValue() {
return null;
}
};
public static InheritableThreadLocal<ContextAuthorization> 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<DataHarvestPluginDecla
/** {@inheritDoc} */
@Override
public void launch(Map<String, Object> 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<String,Object> 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<Harvest> 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<Harvest> 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<Harvest> 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<Harvest> 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<Harvest> 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<Harvest> 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();
}
}

View File

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

View File

@ -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);

View File

@ -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 + "]";
}
}

View File

@ -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<String> client = ICFactory.client();
List<String> 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;
}
}

View File

@ -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<Harvest> 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;
}
}

View File

@ -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<ServiceEndpoint> client = ICFactory.clientFor(ServiceEndpoint.class);
List<ServiceEndpoint> serviceEndpoints = client.submit(query);
if(serviceEndpoints.size() > 1) {
throw new DaoException("More than one endpoint found. Not sure which one use.");
}
Group<AccessPoint> 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);
}
}

View File

@ -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<Property> 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();
// }
// }
}

View File

@ -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<String, ScopeBean> map = ScopeManager.readScopes(getVOFile().getAbsolutePath());
for(String scope : map.keySet()) {
try {

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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" };
}

View File

@ -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<String,Object> inputs = new HashMap<>();
Map<String,Object> 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);
}
}

View File

@ -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<Harvest> 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<Integer> getSubTree(int root) {
protected ArrayList<Integer> getSubTree(int root) {
Dao dao = null;
try {
dao = dbConnect();
@ -208,7 +202,7 @@ public class Harvester {
}
}
private void createSocialReports(ArrayList<Integer> ids) {
protected void createSocialReports(ArrayList<Integer> ids) {
Dao dao = null;
try {
dao = dbConnect();

View File

@ -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();
}

View File

@ -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",