diff --git a/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/CKANRetriever.java b/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/CKANRetriever.java index 95cd364..1b6a221 100644 --- a/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/CKANRetriever.java +++ b/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/CKANRetriever.java @@ -1,8 +1,6 @@ package org.gcube.data.publishing.gCatFeeder.collectors.dm; -import org.gcube.common.resources.gcore.GCoreEndpoint; import org.gcube.data.publishing.gCatFeeder.model.CatalogueInstanceDescriptor; -import org.gcube.data.publishing.gCatFeeder.utils.ISUtils; import org.gcube.data.publishing.gCatfeeder.collectors.CatalogueRetriever; public class CKANRetriever implements CatalogueRetriever { diff --git a/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/DataMinerCrawler.java b/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/DataMinerPlugin.java similarity index 90% rename from DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/DataMinerCrawler.java rename to DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/DataMinerPlugin.java index 3227837..ac51f5f 100644 --- a/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/DataMinerCrawler.java +++ b/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/DataMinerPlugin.java @@ -7,14 +7,14 @@ import org.gcube.data.publishing.gCatFeeder.collectors.dm.model.CkanModel; import org.gcube.data.publishing.gCatFeeder.collectors.dm.model.InternalAlgorithmDescriptor; import org.gcube.data.publishing.gCatFeeder.model.FormatData; import org.gcube.data.publishing.gCatfeeder.collectors.CatalogueRetriever; -import org.gcube.data.publishing.gCatfeeder.collectors.CrawlerPlugin; +import org.gcube.data.publishing.gCatfeeder.collectors.CollectorPlugin; import org.gcube.data.publishing.gCatfeeder.collectors.DataCollector; import org.gcube.data.publishing.gCatfeeder.collectors.DataTransformer; import org.gcube.data.publishing.gCatfeeder.collectors.model.CustomData; import org.gcube.data.publishing.gCatfeeder.collectors.model.PluginDescriptor; import org.gcube.data.publishing.gCatfeeder.collectors.model.faults.CatalogueNotSupportedException; -public class DataMinerCrawler implements CrawlerPlugin { +public class DataMinerPlugin implements CollectorPlugin { @Override public PluginDescriptor getDescriptor() { diff --git a/catalogue-plugin-framework/.classpath b/catalogue-plugin-framework/.classpath new file mode 100644 index 0000000..fae1a2b --- /dev/null +++ b/catalogue-plugin-framework/.classpath @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalogue-plugin-framework/.project b/catalogue-plugin-framework/.project new file mode 100644 index 0000000..f7c4632 --- /dev/null +++ b/catalogue-plugin-framework/.project @@ -0,0 +1,23 @@ + + + catalogue-plugin-framework + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/catalogue-plugin-framework/.settings/org.eclipse.core.resources.prefs b/catalogue-plugin-framework/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/catalogue-plugin-framework/.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/catalogue-plugin-framework/.settings/org.eclipse.jdt.core.prefs b/catalogue-plugin-framework/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..714351a --- /dev/null +++ b/catalogue-plugin-framework/.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/catalogue-plugin-framework/.settings/org.eclipse.m2e.core.prefs b/catalogue-plugin-framework/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/catalogue-plugin-framework/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/catalogue-plugin-framework/pom.xml b/catalogue-plugin-framework/pom.xml new file mode 100644 index 0000000..3f9219a --- /dev/null +++ b/catalogue-plugin-framework/pom.xml @@ -0,0 +1,23 @@ + + 4.0.0 + + org.gcube.data-publishing.gCat-Feeder + gCat-Feeder-Suite + 1.0.0-SNAPSHOT + + catalogue-plugin-framework + + + org.projectlombok + lombok + 1.14.8 + + + + + org.gcube.data-publishing.gCat-Feeder + commons + 1.0.0-SNAPSHOT + + + diff --git a/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/CatalogueController.java b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/CatalogueController.java new file mode 100644 index 0000000..aad25a8 --- /dev/null +++ b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/CatalogueController.java @@ -0,0 +1,11 @@ +package org.gcube.data.publishing.gCatFeeder.catalogues; + +import org.gcube.data.publishing.gCatFeeder.catalogues.model.PublishReport; +import org.gcube.data.publishing.gCatFeeder.catalogues.model.faults.WrongObjectFormatException; + +public interface CatalogueController { + + public PublishReport publishItem(String serializedItem) throws WrongObjectFormatException; + + +} diff --git a/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/CataloguePlugin.java b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/CataloguePlugin.java new file mode 100644 index 0000000..3e111cc --- /dev/null +++ b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/CataloguePlugin.java @@ -0,0 +1,13 @@ +package org.gcube.data.publishing.gCatFeeder.catalogues; + +import org.gcube.data.publishing.gCatFeeder.catalogues.model.CataloguePluginDescriptor; +import org.gcube.data.publishing.gCatFeeder.catalogues.model.faults.ControllerInstantiationFault; +import org.gcube.data.publishing.gCatFeeder.model.CatalogueInstanceDescriptor; + +public interface CataloguePlugin { + + public CataloguePluginDescriptor getDescriptor(); + + public CatalogueController instantiateController(CatalogueInstanceDescriptor desc) throws ControllerInstantiationFault; + +} diff --git a/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/CataloguePluginDescriptor.java b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/CataloguePluginDescriptor.java new file mode 100644 index 0000000..af0f9bf --- /dev/null +++ b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/CataloguePluginDescriptor.java @@ -0,0 +1,9 @@ +package org.gcube.data.publishing.gCatFeeder.catalogues.model; + +public class CataloguePluginDescriptor { + + public CataloguePluginDescriptor() { + // TODO Auto-generated constructor stub + } + +} diff --git a/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/PublishReport.java b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/PublishReport.java new file mode 100644 index 0000000..5186aec --- /dev/null +++ b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/PublishReport.java @@ -0,0 +1,16 @@ +package org.gcube.data.publishing.gCatFeeder.catalogues.model; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + +@Getter +@RequiredArgsConstructor +@Setter +public class PublishReport { + + private boolean successful=false; + + private String publishedId; + +} diff --git a/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/faults/ControllerInstantiationFault.java b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/faults/ControllerInstantiationFault.java new file mode 100644 index 0000000..1f9a2c3 --- /dev/null +++ b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/faults/ControllerInstantiationFault.java @@ -0,0 +1,30 @@ +package org.gcube.data.publishing.gCatFeeder.catalogues.model.faults; + +public class ControllerInstantiationFault extends Exception { + + public ControllerInstantiationFault() { + // TODO Auto-generated constructor stub + } + + public ControllerInstantiationFault(String message) { + super(message); + // TODO Auto-generated constructor stub + } + + public ControllerInstantiationFault(Throwable cause) { + super(cause); + // TODO Auto-generated constructor stub + } + + public ControllerInstantiationFault(String message, Throwable cause) { + super(message, cause); + // TODO Auto-generated constructor stub + } + + public ControllerInstantiationFault(String message, Throwable cause, boolean enableSuppression, + boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + // TODO Auto-generated constructor stub + } + +} diff --git a/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/faults/WrongObjectFormatException.java b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/faults/WrongObjectFormatException.java new file mode 100644 index 0000000..c7de532 --- /dev/null +++ b/catalogue-plugin-framework/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/model/faults/WrongObjectFormatException.java @@ -0,0 +1,30 @@ +package org.gcube.data.publishing.gCatFeeder.catalogues.model.faults; + +public class WrongObjectFormatException extends Exception { + + public WrongObjectFormatException() { + // TODO Auto-generated constructor stub + } + + public WrongObjectFormatException(String message) { + super(message); + // TODO Auto-generated constructor stub + } + + public WrongObjectFormatException(Throwable cause) { + super(cause); + // TODO Auto-generated constructor stub + } + + public WrongObjectFormatException(String message, Throwable cause) { + super(message, cause); + // TODO Auto-generated constructor stub + } + + public WrongObjectFormatException(String message, Throwable cause, boolean enableSuppression, + boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + // TODO Auto-generated constructor stub + } + +} diff --git a/collectors-plugin-framework/src/main/java/org/gcube/data/publishing/gCatfeeder/collectors/CrawlerPlugin.java b/collectors-plugin-framework/src/main/java/org/gcube/data/publishing/gCatfeeder/collectors/CollectorPlugin.java similarity index 93% rename from collectors-plugin-framework/src/main/java/org/gcube/data/publishing/gCatfeeder/collectors/CrawlerPlugin.java rename to collectors-plugin-framework/src/main/java/org/gcube/data/publishing/gCatfeeder/collectors/CollectorPlugin.java index 8b95aa0..2763583 100644 --- a/collectors-plugin-framework/src/main/java/org/gcube/data/publishing/gCatfeeder/collectors/CrawlerPlugin.java +++ b/collectors-plugin-framework/src/main/java/org/gcube/data/publishing/gCatfeeder/collectors/CollectorPlugin.java @@ -8,7 +8,7 @@ import org.gcube.data.publishing.gCatfeeder.collectors.model.PluginDescriptor; import org.gcube.data.publishing.gCatfeeder.collectors.model.PublisherFormatData; import org.gcube.data.publishing.gCatfeeder.collectors.model.faults.CatalogueNotSupportedException; -public interface CrawlerPlugin{ +public interface CollectorPlugin{ public PluginDescriptor getDescriptor(); diff --git a/gCat-Feeder/pom.xml b/gCat-Feeder/pom.xml index b6ad280..581f821 100644 --- a/gCat-Feeder/pom.xml +++ b/gCat-Feeder/pom.xml @@ -31,6 +31,15 @@ + + + org.gcube.data-publishing.gCat-Feeder + collectors-plugin-framework + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + + + + org.gcube.core common-smartgears-app diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CollectorsManager.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CollectorsManager.java index 1cd607a..c581f72 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CollectorsManager.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CollectorsManager.java @@ -1,9 +1,15 @@ package org.gcube.data.publishing.gCatFeeder.service.engine; +import java.util.Set; + +import org.gcube.data.publishing.gCatFeeder.service.model.fault.CollectorNotFound; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.InternalError; +import org.gcube.data.publishing.gCatfeeder.collectors.CollectorPlugin; + public interface CollectorsManager { + public Set getAvailableCollectors(); + public CollectorPlugin getPluginById() throws CollectorNotFound; - - - + public void init() throws InternalError; } diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/FeederEngine.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/FeederEngine.java index c487e98..b56acd1 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/FeederEngine.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/FeederEngine.java @@ -5,12 +5,17 @@ import java.util.Collection; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptor; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptorFilter; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionRequest; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.CollectorNotFound; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.DescriptorNotFound; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.ElementNotFound; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.InvalidRequest; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.PersistenceError; public interface FeederEngine { - public Collection get(ExecutionDescriptorFilter filter); - public ExecutionDescriptor getById(String id); - public ExecutionDescriptor submit(ExecutionRequest req); + public Collection get(ExecutionDescriptorFilter filter) throws PersistenceError, InvalidRequest; + public ExecutionDescriptor getById(String id) throws PersistenceError, ElementNotFound, InvalidRequest; + public ExecutionDescriptor submit(ExecutionRequest req) throws InternalError, CollectorNotFound, DescriptorNotFound, PersistenceError, InvalidRequest; } diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/PersistenceManager.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/PersistenceManager.java index 1f77c22..03a24a9 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/PersistenceManager.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/PersistenceManager.java @@ -5,12 +5,15 @@ import java.util.Collection; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptor; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptorFilter; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionRequest; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.ElementNotFound; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.InvalidRequest; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.PersistenceError; public interface PersistenceManager { - public ExecutionDescriptor create(ExecutionRequest request); - public ExecutionDescriptor getById(String id); - public Collection get(ExecutionDescriptorFilter filter); + public ExecutionDescriptor create(ExecutionRequest request) throws PersistenceError,InvalidRequest; + public ExecutionDescriptor getById(String id)throws PersistenceError,ElementNotFound,InvalidRequest; + public Collection get(ExecutionDescriptorFilter filter)throws PersistenceError,InvalidRequest; } diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/FeederEngineImpl.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/FeederEngineImpl.java index db41426..2bc546c 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/FeederEngineImpl.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/FeederEngineImpl.java @@ -12,6 +12,11 @@ import org.gcube.data.publishing.gCatFeeder.service.engine.PersistenceManager; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptor; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptorFilter; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionRequest; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.CollectorNotFound; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.DescriptorNotFound; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.ElementNotFound; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.InvalidRequest; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.PersistenceError; public class FeederEngineImpl implements FeederEngine { @@ -26,29 +31,32 @@ public class FeederEngineImpl implements FeederEngine { private PersistenceManager persistence; @Override - public ExecutionDescriptor submit(ExecutionRequest req) { - // verify request correctness - // store in persistence : returns descriptor - // pass it to executor - // return the descriptor - throw new RuntimeException("Not YET Implemented"); + public ExecutionDescriptor submit(ExecutionRequest req) throws InternalError, PersistenceError, InvalidRequest { + try{ + verifyRequest(req); + ExecutionDescriptor related=persistence.create(req); + executions.submit(related); + return related; + }catch(CollectorNotFound | DescriptorNotFound e) { + throw new InvalidRequest(e); + } } @Override - public Collection get(ExecutionDescriptorFilter filter) { + public Collection get(ExecutionDescriptorFilter filter) throws PersistenceError, InvalidRequest { return persistence.get(filter); } @Override - public ExecutionDescriptor getById(String id) { + public ExecutionDescriptor getById(String id) throws PersistenceError, ElementNotFound, InvalidRequest { return persistence.getById(id); } - private void verifyRequest(ExecutionRequest request) { + private void verifyRequest(ExecutionRequest request) throws InternalError,CollectorNotFound,DescriptorNotFound{ // for each requested source check if available // for each requested target check if available - // + } } diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/model/fault/ElementNotFound.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/model/fault/ElementNotFound.java new file mode 100644 index 0000000..b694540 --- /dev/null +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/model/fault/ElementNotFound.java @@ -0,0 +1,29 @@ +package org.gcube.data.publishing.gCatFeeder.service.model.fault; + +public class ElementNotFound extends InvalidRequest { + + public ElementNotFound() { + // TODO Auto-generated constructor stub + } + + public ElementNotFound(String message) { + super(message); + // TODO Auto-generated constructor stub + } + + public ElementNotFound(Throwable cause) { + super(cause); + // TODO Auto-generated constructor stub + } + + public ElementNotFound(String message, Throwable cause) { + super(message, cause); + // TODO Auto-generated constructor stub + } + + public ElementNotFound(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + // TODO Auto-generated constructor stub + } + +} diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/model/fault/InvalidRequest.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/model/fault/InvalidRequest.java new file mode 100644 index 0000000..017e3fc --- /dev/null +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/model/fault/InvalidRequest.java @@ -0,0 +1,29 @@ +package org.gcube.data.publishing.gCatFeeder.service.model.fault; + +public class InvalidRequest extends Exception { + + public InvalidRequest() { + // TODO Auto-generated constructor stub + } + + public InvalidRequest(String message) { + super(message); + // TODO Auto-generated constructor stub + } + + public InvalidRequest(Throwable cause) { + super(cause); + // TODO Auto-generated constructor stub + } + + public InvalidRequest(String message, Throwable cause) { + super(message, cause); + // TODO Auto-generated constructor stub + } + + public InvalidRequest(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + // TODO Auto-generated constructor stub + } + +} diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/rest/Executions.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/rest/Executions.java index 6f5ae82..6a042f5 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/rest/Executions.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/rest/Executions.java @@ -1,46 +1,100 @@ package org.gcube.data.publishing.gCatFeeder.service.rest; +import java.util.Collection; + import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.GenericEntity; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.gcube.data.publishing.gCatFeeder.service.ServiceConstants; import org.gcube.data.publishing.gCatFeeder.service.engine.FeederEngine; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptor; +import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptorFilter; +import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionRequest; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.ElementNotFound; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.InvalidRequest; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.PersistenceError; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @Path(ServiceConstants.Executions.PATH) public class Executions { + private static final Logger log= LoggerFactory.getLogger(Executions.class); + + @Inject private FeederEngine engine; - - + + @POST @Produces(MediaType.APPLICATION_JSON) public ExecutionDescriptor submit() { - throw new WebApplicationException("Method Unavailable.", Response.Status.NOT_IMPLEMENTED); + + try { + ExecutionRequest request=new ExecutionRequest(); + return engine.submit(request); + } catch (PersistenceError e) { + log.warn("Unexpected Exception while talking to persistnce",e); + throw new WebApplicationException("Invalid Request.", e,Response.Status.INTERNAL_SERVER_ERROR); + } catch (InvalidRequest e) { + log.warn("Unexpected Exception ",e); + throw new WebApplicationException("Invalid Request.", e,Response.Status.BAD_REQUEST); + }catch(Throwable t) { + log.warn("Unexpected Exception ",t); + throw new WebApplicationException("Unexpected Exception.", t,Response.Status.INTERNAL_SERVER_ERROR); + } + } - - + + @GET @Produces(MediaType.APPLICATION_JSON) public Response getAll() { - - - - - throw new WebApplicationException("Method Unavailable.", Response.Status.NOT_IMPLEMENTED); + try { + ExecutionDescriptorFilter filter=new ExecutionDescriptorFilter(); + Collection toReturn=engine.get(filter); + GenericEntity> entity=new GenericEntity>(toReturn) {}; + return Response.ok(entity).build(); + } catch (PersistenceError e) { + log.warn("Unexpected Exception while talking to persistnce",e); + throw new WebApplicationException("Invalid Request.", e,Response.Status.INTERNAL_SERVER_ERROR); + } catch (InvalidRequest e) { + log.warn("Unexpected Exception ",e); + throw new WebApplicationException("Invalid Request.", e,Response.Status.BAD_REQUEST); + }catch(Throwable t) { + log.warn("Unexpected Exception ",t); + throw new WebApplicationException("Unexpected Exception.", t,Response.Status.INTERNAL_SERVER_ERROR); + } + } - + @GET @Produces(MediaType.APPLICATION_JSON) @Path("{"+ServiceConstants.Executions.EXECUTION_ID_PARAMETER+"}") - public ExecutionDescriptor get() { - throw new WebApplicationException("Method Unavailable.", Response.Status.NOT_IMPLEMENTED); + public ExecutionDescriptor get(@PathParam(ServiceConstants.Executions.EXECUTION_ID_PARAMETER) String executionId) { + try { + return engine.getById(executionId); + } catch (PersistenceError e) { + log.warn("Unexpected Exception while talking to persistnce",e); + throw new WebApplicationException("Invalid Request.", e,Response.Status.INTERNAL_SERVER_ERROR); + } catch (ElementNotFound e) { + log.warn("Unexpected Exception ",e); + throw new WebApplicationException("Descriptor not found for "+executionId, e,Response.Status.NOT_FOUND); + } catch (InvalidRequest e) { + log.warn("Unexpected Exception ",e); + throw new WebApplicationException("Invalid Request.", e,Response.Status.BAD_REQUEST); + }catch(Throwable t) { + log.warn("Unexpected Exception ",t); + throw new WebApplicationException("Unexpected Exception.", t,Response.Status.INTERNAL_SERVER_ERROR); + } + } } diff --git a/pom.xml b/pom.xml index a592546..624a86f 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,7 @@ collectors-plugin-framework DataMinerAlgorithmsCrawler commons + catalogue-plugin-framework