diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..fae1a2b
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..bac53d6
--- /dev/null
+++ b/.project
@@ -0,0 +1,29 @@
+
+
+ perform-service
+
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+ org.eclipse.wst.common.project.facet.core.nature
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..29abf99
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..714351a
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..905b677
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,61 @@
+
+ 4.0.0
+
+ org.gcube.tools
+ maven-parent
+ LATEST
+
+ org.gcube.application
+ perform-service
+ 1.0.0-SNAPSHOT
+ Perform Service
+ Service for Farm Perform Data Management
+ war
+
+
+
+
+
+ org.gcube.distribution
+ maven-smartgears-bom
+ LATEST
+ pom
+ import
+
+
+
+
+
+
+ org.gcube.core
+ common-smartgears-app
+
+
+ org.gcube.core
+ common-smartgears
+
+
+
+ org.apache.commons
+ commons-dbcp2
+ 2.0.1
+
+
+
+
+ javax.ws.rs
+ javax.ws.rs-api
+ 2.0
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.14.8
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/gcube/application/perform/service/LocalConfiguration.java b/src/main/java/org/gcube/application/perform/service/LocalConfiguration.java
new file mode 100644
index 0000000..b2b5dd5
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/LocalConfiguration.java
@@ -0,0 +1,16 @@
+package org.gcube.application.perform.service;
+
+public class LocalConfiguration {
+
+ public static final String POOL_MAX_IDLE="db.pools.max_idle";
+ public static final String POOL_MAX_TOTAL="db.pools.max_total";
+ public static final String POOL_MIN_IDLE="db.pools.min_total";
+
+
+
+
+ public static final String getProperty(String propertyName) {
+ throw new RuntimeException("Need to implement this");
+ }
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/PerformServiceLifecycleManager.java b/src/main/java/org/gcube/application/perform/service/PerformServiceLifecycleManager.java
new file mode 100644
index 0000000..9bf3739
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/PerformServiceLifecycleManager.java
@@ -0,0 +1,25 @@
+package org.gcube.application.perform.service;
+
+import org.gcube.smartgears.handlers.application.ApplicationLifecycleEvent.Start;
+import org.gcube.smartgears.handlers.application.ApplicationLifecycleEvent.Stop;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.gcube.smartgears.handlers.application.ApplicationLifecycleHandler;
+
+@XmlRootElement(name = "perform-lifecycle")
+public class PerformServiceLifecycleManager extends ApplicationLifecycleHandler {
+
+
+ @Override
+ public void onStart(Start e) {
+ super.onStart(e);
+
+ }
+
+ @Override
+ public void onStop(Stop e) {
+ super.onStop(e);
+ }
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/PerformServiceManager.java b/src/main/java/org/gcube/application/perform/service/PerformServiceManager.java
new file mode 100644
index 0000000..6cc4c51
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/PerformServiceManager.java
@@ -0,0 +1,21 @@
+package org.gcube.application.perform.service;
+
+import org.gcube.smartgears.ApplicationManager;
+
+public class PerformServiceManager implements ApplicationManager{
+
+
+ @Override
+ public void onInit() {
+ // TODO Auto-generated method stub
+
+ }
+
+
+ @Override
+ public void onShutdown() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/ServiceConstants.java b/src/main/java/org/gcube/application/perform/service/ServiceConstants.java
new file mode 100644
index 0000000..1f2aef8
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/ServiceConstants.java
@@ -0,0 +1,8 @@
+package org.gcube.application.perform.service;
+
+public interface ServiceConstants {
+
+
+ public static final String ANAGRAPHIC_INTERFACE="anagraphic";
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/AnagraphicManager.java b/src/main/java/org/gcube/application/perform/service/engine/AnagraphicManager.java
new file mode 100644
index 0000000..cbddcc1
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/AnagraphicManager.java
@@ -0,0 +1,15 @@
+package org.gcube.application.perform.service.engine;
+
+import java.sql.SQLException;
+
+import org.gcube.application.perform.service.engine.model.BeanNotFound;
+import org.gcube.application.perform.service.engine.model.DBQueryDescriptor;
+import org.gcube.application.perform.service.engine.model.anagraphic.Batch;
+import org.gcube.application.perform.service.engine.model.anagraphic.Farm;
+
+public interface AnagraphicManager {
+
+ public Batch getBatch(DBQueryDescriptor desc) throws BeanNotFound, SQLException;
+ public Farm getFarm(DBQueryDescriptor desc)throws BeanNotFound, SQLException;
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/AnagraphicManagerImpl.java b/src/main/java/org/gcube/application/perform/service/engine/AnagraphicManagerImpl.java
new file mode 100644
index 0000000..7683865
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/AnagraphicManagerImpl.java
@@ -0,0 +1,106 @@
+package org.gcube.application.perform.service.engine;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.gcube.application.perform.service.engine.model.BeanNotFound;
+import org.gcube.application.perform.service.engine.model.DBField;
+import org.gcube.application.perform.service.engine.model.DBQueryDescriptor;
+import org.gcube.application.perform.service.engine.model.ISQueryDescriptor;
+import org.gcube.application.perform.service.engine.model.InternalException;
+import org.gcube.application.perform.service.engine.model.anagraphic.Batch;
+import org.gcube.application.perform.service.engine.model.anagraphic.Farm;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class AnagraphicManagerImpl implements AnagraphicManager {
+
+
+ private static final String INSERT_BATCH="";
+ private static final String GET_BATCH="";
+ private static final String INSERT_FARM="";
+ private static final String GET_FARM="";
+
+
+ private ISQueryDescriptor getISQueryDescriptor() {
+ throw new RuntimeException("Implment this");
+ }
+
+
+ @Override
+ public Batch getBatch(DBQueryDescriptor desc) throws BeanNotFound,SQLException{
+ DataBaseManager db=DataBaseManager.get(getISQueryDescriptor());
+
+
+ Connection conn=db.getConnection();
+ PreparedStatement psInsert=conn.prepareStatement(INSERT_BATCH);
+ // TODO set values
+ boolean inserted=psInsert.executeUpdate()==1;
+ if(inserted)
+ conn.commit();
+
+ PreparedStatement psGet=conn.prepareStatement(GET_BATCH);
+ // TODO set values
+ ResultSet rs=psGet.executeQuery();
+ if(!rs.next())
+ throw new BeanNotFound("Batch not found. Condition was "+desc);
+
+ Batch toReturn=rowToBatch(rs);
+ if(inserted)
+ log.trace("Inserted Batch {} ",toReturn);
+
+ return toReturn;
+
+ }
+
+ @Override
+ public Farm getFarm(DBQueryDescriptor desc) throws BeanNotFound,SQLException{
+ DataBaseManager db=DataBaseManager.get(getISQueryDescriptor());
+
+
+ Connection conn=db.getConnection();
+ PreparedStatement psInsert=conn.prepareStatement(INSERT_FARM);
+ // TODO set values
+ boolean inserted=psInsert.executeUpdate()==1;
+ if(inserted)
+ conn.commit();
+
+ PreparedStatement psGet=conn.prepareStatement(GET_FARM);
+ // TODO set values
+ ResultSet rs=psGet.executeQuery();
+ if(!rs.next())
+ throw new BeanNotFound("Farm not found. Condition was "+desc);
+
+ Farm toReturn=rowToFarm(rs);
+ if(inserted)
+ log.trace("Inserted Batch {} ",toReturn);
+
+ return toReturn;
+ }
+
+
+
+ private static Batch rowToBatch(ResultSet rs) throws SQLException {
+ Batch toReturn=new Batch();
+ toReturn.setFarmId(rs.getLong(DBField.Batch.FARM_ID));
+ toReturn.setId(rs.getLong(DBField.Batch.BATCH_ID));
+ toReturn.setName(rs.getString(DBField.Batch.BATCH_NAME));
+ toReturn.setType(rs.getString(DBField.Batch.BATCH_TYPE));
+ return toReturn;
+ }
+
+
+ private static Farm rowToFarm(ResultSet rs) throws SQLException {
+ Farm toReturn=new Farm();
+ toReturn.setAssociationId(rs.getLong(DBField.Farm.ASSOCIATION_ID));
+ toReturn.setAssociationUUID(rs.getString(DBField.Farm.ASSOCIATION_UUID));
+ toReturn.setCompanyId(rs.getLong(DBField.Farm.COMPANY_ID));
+ toReturn.setCompanyUUID(rs.getString(DBField.Farm.COMPANY_UUID));
+ toReturn.setId(rs.getLong(DBField.Farm.FARM_ID));
+ toReturn.setUUID(rs.getString(DBField.Farm.UUID));
+ return toReturn;
+ }
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/DataBaseManager.java b/src/main/java/org/gcube/application/perform/service/engine/DataBaseManager.java
new file mode 100644
index 0000000..510353c
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/DataBaseManager.java
@@ -0,0 +1,19 @@
+package org.gcube.application.perform.service.engine;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.gcube.application.perform.service.engine.model.ISQueryDescriptor;
+
+public interface DataBaseManager {
+
+
+ public static DataBaseManager get(ISQueryDescriptor desc) {
+ return new DataBaseManagerImpl(desc);
+ }
+
+
+ public Connection getConnection() throws SQLException;
+
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/DataBaseManagerImpl.java b/src/main/java/org/gcube/application/perform/service/engine/DataBaseManagerImpl.java
new file mode 100644
index 0000000..d48d996
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/DataBaseManagerImpl.java
@@ -0,0 +1,119 @@
+package org.gcube.application.perform.service.engine;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.dbcp2.ConnectionFactory;
+import org.apache.commons.dbcp2.DriverManagerConnectionFactory;
+import org.apache.commons.dbcp2.PoolableConnection;
+import org.apache.commons.dbcp2.PoolableConnectionFactory;
+import org.apache.commons.dbcp2.PoolingDataSource;
+import org.apache.commons.pool2.ObjectPool;
+import org.apache.commons.pool2.impl.GenericObjectPool;
+import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
+import org.gcube.application.perform.service.LocalConfiguration;
+import org.gcube.application.perform.service.engine.model.DBType;
+import org.gcube.application.perform.service.engine.model.DatabaseConnectionDescriptor;
+import org.gcube.application.perform.service.engine.model.ISQueryDescriptor;
+import org.gcube.application.perform.service.engine.utils.ISUtils;
+import org.gcube.application.perform.service.engine.utils.ScopeUtils;
+
+import lombok.Synchronized;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class DataBaseManagerImpl implements DataBaseManager{
+
+
+// private static final ConcurrentHashMap instanceMap=new ConcurrentHashMap<>();
+//
+// @Synchronized
+// public static final DataBaseManagerImpl get(ISQueryDescriptor desc) {
+// if(!instanceMap.containsKey(desc.getType())){
+// return instanceMap.put(desc.getType(), new DataBaseManagerImpl(desc));
+// }
+//
+// return instanceMap.get(desc.getType());
+// }
+
+
+ // ************************************** INSTANCE
+
+
+ // Endpoint -> datasource
+ private static ConcurrentHashMap datasources=new ConcurrentHashMap<>();
+
+ /**
+ * Manages db connection pools by scope
+ *
+ *
+ */
+
+ private ISQueryDescriptor queryDescriptor;
+ private DatabaseConnectionDescriptor dbDescriptor=null;
+
+ public DataBaseManagerImpl(ISQueryDescriptor query) {
+ queryDescriptor=query;
+ }
+
+
+ private synchronized DatabaseConnectionDescriptor getDB() {
+ if(dbDescriptor==null) {
+ dbDescriptor=ISUtils.queryForDatabase(queryDescriptor);
+ }
+ return dbDescriptor;
+ }
+
+ @Override
+ public Connection getConnection() throws SQLException {
+ DataSource ds=getDataSource();
+ return ds.getConnection();
+ }
+
+ @Synchronized
+ private DataSource getDataSource() {
+ DatabaseConnectionDescriptor dbDescriptor=getDB();
+
+ if(!datasources.containsKey(dbDescriptor.getUrl())) {
+
+ datasources.put(dbDescriptor.getUrl(), setupDataSource(dbDescriptor));
+ }
+ return datasources.get(dbDescriptor.getUrl());
+ }
+
+ private static DataSource setupDataSource(DatabaseConnectionDescriptor db) {
+
+ log.trace("Setting up data source for {} ",db);
+
+
+ GenericObjectPoolConfig poolConfig=new GenericObjectPoolConfig();
+ poolConfig.setMaxIdle(Integer.parseInt(LocalConfiguration.getProperty(LocalConfiguration.POOL_MAX_IDLE)));
+ poolConfig.setMaxTotal(Integer.parseInt(LocalConfiguration.getProperty(LocalConfiguration.POOL_MAX_TOTAL)));
+ poolConfig.setMinIdle(Integer.parseInt(LocalConfiguration.getProperty(LocalConfiguration.POOL_MIN_IDLE)));
+
+
+ ConnectionFactory connectionFactory =
+ new DriverManagerConnectionFactory(db.getUrl(),db.getUsername(),db.getPassword());
+
+
+ PoolableConnectionFactory poolableConnectionFactory =
+ new PoolableConnectionFactory(connectionFactory, null);
+
+
+ ObjectPool connectionPool =
+ new GenericObjectPool<>(poolableConnectionFactory);
+
+
+ poolableConnectionFactory.setPool(connectionPool);
+
+
+ PoolingDataSource dataSource =
+ new PoolingDataSource<>(connectionPool);
+
+ return dataSource;
+ }
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/BeanNotFound.java b/src/main/java/org/gcube/application/perform/service/engine/model/BeanNotFound.java
new file mode 100644
index 0000000..0c0a0e2
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/model/BeanNotFound.java
@@ -0,0 +1,29 @@
+package org.gcube.application.perform.service.engine.model;
+
+public class BeanNotFound extends InternalException {
+
+ public BeanNotFound() {
+ // TODO Auto-generated constructor stub
+ }
+
+ public BeanNotFound(String message) {
+ super(message);
+ // TODO Auto-generated constructor stub
+ }
+
+ public BeanNotFound(Throwable cause) {
+ super(cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ public BeanNotFound(String message, Throwable cause) {
+ super(message, cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ public BeanNotFound(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ // TODO Auto-generated constructor stub
+ }
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/DBField.java b/src/main/java/org/gcube/application/perform/service/engine/model/DBField.java
new file mode 100644
index 0000000..4500133
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/model/DBField.java
@@ -0,0 +1,59 @@
+package org.gcube.application.perform.service.engine.model;
+
+import java.sql.Types;
+import java.util.HashMap;
+import java.util.Map;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public class DBField {
+
+ public static class Batch{
+ public static final Map fields=new HashMap<>();
+
+ public static final String BATCH_ID="id";
+ public static final String UUID="uuid";
+ public static final String FARM_ID="farmid";
+ public static final String BATCH_TYPE="type";
+ public static final String BATCH_NAME="name";
+
+ static {
+ fields.put(BATCH_ID, new DBField(Types.BIGINT,BATCH_ID));
+ fields.put(UUID, new DBField(Types.NVARCHAR,UUID));
+ fields.put(FARM_ID, new DBField(Types.BIGINT,FARM_ID));
+ fields.put(BATCH_TYPE, new DBField(Types.NVARCHAR,BATCH_TYPE));
+ fields.put(BATCH_NAME, new DBField(Types.NVARCHAR,BATCH_NAME));
+ }
+ }
+
+ public static class Farm{
+ public static final Map fields=new HashMap<>();
+
+ public static final String FARM_ID="id";
+ public static final String COMPANY_ID="companyid";
+ public static final String ASSOCIATION_ID="associationid";
+ public static final String UUID="uuid";
+ public static final String COMPANY_UUID="companyuuid";
+ public static final String ASSOCIATION_UUID="associationuuid";
+
+ static {
+ fields.put(FARM_ID, new DBField(Types.BIGINT,FARM_ID));
+ fields.put(COMPANY_ID, new DBField(Types.BIGINT,COMPANY_ID));
+ fields.put(ASSOCIATION_ID, new DBField(Types.BIGINT,ASSOCIATION_ID));
+ fields.put(UUID, new DBField(Types.NVARCHAR,UUID));
+ fields.put(COMPANY_UUID, new DBField(Types.NVARCHAR,COMPANY_UUID));
+ fields.put(ASSOCIATION_UUID, new DBField(Types.NVARCHAR,ASSOCIATION_UUID));
+
+ }
+ }
+
+
+
+ private int type;
+ private String fieldName;
+
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/DBQueryDescriptor.java b/src/main/java/org/gcube/application/perform/service/engine/model/DBQueryDescriptor.java
new file mode 100644
index 0000000..1b89483
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/model/DBQueryDescriptor.java
@@ -0,0 +1,5 @@
+package org.gcube.application.perform.service.engine.model;
+
+public class DBQueryDescriptor {
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/DBType.java b/src/main/java/org/gcube/application/perform/service/engine/model/DBType.java
new file mode 100644
index 0000000..f5c553d
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/model/DBType.java
@@ -0,0 +1,7 @@
+package org.gcube.application.perform.service.engine.model;
+
+public enum DBType {
+
+ Anagraphic,Performances
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/DatabaseConnectionDescriptor.java b/src/main/java/org/gcube/application/perform/service/engine/model/DatabaseConnectionDescriptor.java
new file mode 100644
index 0000000..f5b3d11
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/model/DatabaseConnectionDescriptor.java
@@ -0,0 +1,14 @@
+package org.gcube.application.perform.service.engine.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public class DatabaseConnectionDescriptor {
+
+ private String username;
+ private String url;
+ private String password;
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/ISQueryDescriptor.java b/src/main/java/org/gcube/application/perform/service/engine/model/ISQueryDescriptor.java
new file mode 100644
index 0000000..3fd7e7a
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/model/ISQueryDescriptor.java
@@ -0,0 +1,17 @@
+package org.gcube.application.perform.service.engine.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.ToString;
+
+@Getter
+@AllArgsConstructor
+@ToString
+public class ISQueryDescriptor {
+
+ private DBType type;
+ private String resourceName;
+ private String platformName;
+ private String category;
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/InternalException.java b/src/main/java/org/gcube/application/perform/service/engine/model/InternalException.java
new file mode 100644
index 0000000..f746179
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/model/InternalException.java
@@ -0,0 +1,29 @@
+package org.gcube.application.perform.service.engine.model;
+
+public class InternalException extends Exception {
+
+ public InternalException() {
+ // TODO Auto-generated constructor stub
+ }
+
+ public InternalException(String message) {
+ super(message);
+ // TODO Auto-generated constructor stub
+ }
+
+ public InternalException(Throwable cause) {
+ super(cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ public InternalException(String message, Throwable cause) {
+ super(message, cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ public InternalException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ // TODO Auto-generated constructor stub
+ }
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/anagraphic/Batch.java b/src/main/java/org/gcube/application/perform/service/engine/model/anagraphic/Batch.java
new file mode 100644
index 0000000..009dd5a
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/model/anagraphic/Batch.java
@@ -0,0 +1,20 @@
+package org.gcube.application.perform.service.engine.model.anagraphic;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class Batch {
+
+ private Long id;
+ private String uuid;
+ private String name;
+ private String type;
+ private Long farmId;
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/anagraphic/Farm.java b/src/main/java/org/gcube/application/perform/service/engine/model/anagraphic/Farm.java
new file mode 100644
index 0000000..56d0acd
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/model/anagraphic/Farm.java
@@ -0,0 +1,21 @@
+package org.gcube.application.perform.service.engine.model.anagraphic;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class Farm {
+
+
+ private Long id;
+ private Long companyId;
+ private Long associationId;
+ private String UUID;
+ private String companyUUID;
+ private String associationUUID;
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/utils/ISUtils.java b/src/main/java/org/gcube/application/perform/service/engine/utils/ISUtils.java
new file mode 100644
index 0000000..a7ab45b
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/utils/ISUtils.java
@@ -0,0 +1,14 @@
+package org.gcube.application.perform.service.engine.utils;
+
+import org.gcube.application.perform.service.engine.model.DatabaseConnectionDescriptor;
+import org.gcube.application.perform.service.engine.model.ISQueryDescriptor;
+
+public class ISUtils {
+
+
+ public static DatabaseConnectionDescriptor queryForDatabase(ISQueryDescriptor desc) {
+ throw new RuntimeException("Implment me, asshole!");
+ }
+
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/engine/utils/ScopeUtils.java b/src/main/java/org/gcube/application/perform/service/engine/utils/ScopeUtils.java
new file mode 100644
index 0000000..bcf5f89
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/engine/utils/ScopeUtils.java
@@ -0,0 +1,46 @@
+package org.gcube.application.perform.service.engine.utils;
+
+import static org.gcube.common.authorization.client.Constants.authorizationService;
+
+import org.gcube.common.authorization.library.AuthorizationEntry;
+import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
+import org.gcube.common.scope.api.ScopeProvider;
+
+import lombok.extern.slf4j.Slf4j;
+
+
+@Slf4j
+public class ScopeUtils {
+
+
+ public static String getCurrentScope(){
+ // try{
+ // String token=SecurityTokenProvider.instance.get();
+ // log.debug("Token is : "+token);
+ // if(token==null) throw new Exception("Security Token is null");
+ // AuthorizationEntry entry = authorizationService().get(token);
+ // return entry.getContext();
+ // }catch(Exception e ){
+ // log.debug("Unable to resolve token, checking scope provider..",e);
+ // return ScopeProvider.instance.get();
+ // }
+
+ String scope=ScopeProvider.instance.get();
+ if(scope!=null) {
+ log.debug("Found scope provider {}, skipping token",scope);
+ return scope;
+ }else{
+ try{
+ log.debug("Scope provider not set, reverting to token");
+ String token=SecurityTokenProvider.instance.get();
+ log.debug("Token is : "+token);
+ if(token==null) throw new Exception("Security Token is null");
+ AuthorizationEntry entry = authorizationService().get(token);
+ return entry.getContext();
+ }catch(Exception e){
+ throw new RuntimeException("Unable to evaluate scope ",e);
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/org/gcube/application/perform/service/rest/Anagraphic.java b/src/main/java/org/gcube/application/perform/service/rest/Anagraphic.java
new file mode 100644
index 0000000..976c2ca
--- /dev/null
+++ b/src/main/java/org/gcube/application/perform/service/rest/Anagraphic.java
@@ -0,0 +1,20 @@
+package org.gcube.application.perform.service.rest;
+
+import javax.ws.rs.Path;
+
+import org.gcube.application.perform.service.PerformServiceManager;
+import org.gcube.smartgears.annotations.ManagedBy;
+import org.gcube.application.perform.service.ServiceConstants;
+
+
+@Path(ServiceConstants.ANAGRAPHIC_INTERFACE)
+
+@ManagedBy(PerformServiceManager.class)
+
+public class Anagraphic {
+
+
+
+
+
+}
diff --git a/src/main/resources/META-INF/services/org.gcube.smartgears.handlers.application.ApplicationHandler b/src/main/resources/META-INF/services/org.gcube.smartgears.handlers.application.ApplicationHandler
new file mode 100644
index 0000000..a13e0df
--- /dev/null
+++ b/src/main/resources/META-INF/services/org.gcube.smartgears.handlers.application.ApplicationHandler
@@ -0,0 +1 @@
+org.gcube.application.perform.service.PerformServiceLifecycleManager
\ No newline at end of file