From 76417a6212ce2a31a647fa6073e90abdf7042474 Mon Sep 17 00:00:00 2001 From: "fabio.sinibaldi" Date: Thu, 28 Mar 2019 17:59:52 +0000 Subject: [PATCH] git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-publishing/gCat-Feeder-Suite@178777 82a268e6-3cf1-43bd-a215-b396298e98cf --- DataMinerAlgorithmsCrawler/pom.xml | 8 + .../gCatFeeder/collectors/dm/Constants.java | 2 +- .../collectors/dm/DataMinerPlugin.java | 28 ++- ...{CKANRetriever.java => GCATRetriever.java} | 8 +- ...NTransformer.java => GCATTransformer.java} | 2 +- ...hing.gCatfeeder.collectors.CollectorPlugin | 1 + .../collectors/dm/TranslationTest.java | 50 ++--- ckan-controller-plugin/.classpath | 36 ---- ckan-controller-plugin/.project | 23 -- .../org.eclipse.core.resources.prefs | 6 - .../.settings/org.eclipse.jdt.core.prefs | 5 - .../.settings/org.eclipse.m2e.core.prefs | 4 - ckan-controller-plugin/pom.xml | 26 --- .../catalogues/ckan/CKANController.java | 203 ------------------ .../catalogues/ckan/CkanPlugin.java | 23 -- .../target/classes/META-INF/MANIFEST.MF | 5 - .../ckan-controller-plugin/pom.properties | 7 - .../ckan-controller-plugin/pom.xml | 26 --- .../catalogues/ckan/CKANController.class | Bin 9026 -> 0 bytes .../catalogues/ckan/CkanPlugin.class | Bin 2004 -> 0 bytes .../gCat-Controller/pom.properties | 2 +- .../catalogues/gCat/GCatController.class | Bin 9988 -> 13145 bytes .../catalogues/gCat/GCatPlugin.class | Bin 1818 -> 1518 bytes .../catalogues/gCat/Interactions.class | Bin 4261 -> 3909 bytes .../service/engine/impl/ExecutionTask.java | 3 +- pom.xml | 1 - test-commons/pom.xml | 16 ++ .../tests/BaseCataloguePluginTest.java | 45 ++++ .../gCatFeeder/tests/BaseCollectorTest.java | 86 ++++++++ .../test-commons/pom.properties | 2 +- .../test-commons/pom.xml | 16 ++ .../tests/BaseCataloguePluginTest.class | Bin 0 -> 2690 bytes .../gCatFeeder/tests/BaseCollectorTest.class | Bin 0 -> 5599 bytes 33 files changed, 224 insertions(+), 410 deletions(-) rename DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/{CKANRetriever.java => GCATRetriever.java} (69%) rename DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/{CKANTransformer.java => GCATTransformer.java} (91%) create mode 100644 DataMinerAlgorithmsCrawler/src/main/resources/META-INF/services/org.gcube.data.publishing.gCatfeeder.collectors.CollectorPlugin delete mode 100644 ckan-controller-plugin/.classpath delete mode 100644 ckan-controller-plugin/.project delete mode 100644 ckan-controller-plugin/.settings/org.eclipse.core.resources.prefs delete mode 100644 ckan-controller-plugin/.settings/org.eclipse.jdt.core.prefs delete mode 100644 ckan-controller-plugin/.settings/org.eclipse.m2e.core.prefs delete mode 100644 ckan-controller-plugin/pom.xml delete mode 100644 ckan-controller-plugin/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CKANController.java delete mode 100644 ckan-controller-plugin/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CkanPlugin.java delete mode 100644 ckan-controller-plugin/target/classes/META-INF/MANIFEST.MF delete mode 100644 ckan-controller-plugin/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/ckan-controller-plugin/pom.properties delete mode 100644 ckan-controller-plugin/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/ckan-controller-plugin/pom.xml delete mode 100644 ckan-controller-plugin/target/classes/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CKANController.class delete mode 100644 ckan-controller-plugin/target/classes/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CkanPlugin.class create mode 100644 test-commons/src/main/java/org/gcube/data/publishing/gCatFeeder/tests/BaseCataloguePluginTest.java create mode 100644 test-commons/src/main/java/org/gcube/data/publishing/gCatFeeder/tests/BaseCollectorTest.java create mode 100644 test-commons/target/classes/org/gcube/data/publishing/gCatFeeder/tests/BaseCataloguePluginTest.class create mode 100644 test-commons/target/classes/org/gcube/data/publishing/gCatFeeder/tests/BaseCollectorTest.class diff --git a/DataMinerAlgorithmsCrawler/pom.xml b/DataMinerAlgorithmsCrawler/pom.xml index 944f864..a7b13f9 100644 --- a/DataMinerAlgorithmsCrawler/pom.xml +++ b/DataMinerAlgorithmsCrawler/pom.xml @@ -26,6 +26,14 @@ + + + org.gcube.data-publishing.gCat-Feeder + test-commons + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + + + org.codehaus.jackson jackson-mapper-asl diff --git a/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/Constants.java b/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/Constants.java index 3daf1ec..79b68ac 100644 --- a/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/Constants.java +++ b/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/Constants.java @@ -2,6 +2,6 @@ package org.gcube.data.publishing.gCatFeeder.collectors.dm; public class Constants { - public static final String CKAN_TYPE="CKAN"; + public static final String GCAT_TYPE="GCAT"; } diff --git a/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/DataMinerPlugin.java b/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/DataMinerPlugin.java index f661e55..61e8cdf 100644 --- a/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/DataMinerPlugin.java +++ b/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/DataMinerPlugin.java @@ -5,6 +5,7 @@ import java.util.Set; import org.gcube.data.publishing.gCatFeeder.collectors.dm.model.InternalAlgorithmDescriptor; import org.gcube.data.publishing.gCatFeeder.model.CatalogueFormatData; +import org.gcube.data.publishing.gCatFeeder.model.ControllerConfiguration; import org.gcube.data.publishing.gCatfeeder.collectors.CatalogueRetriever; import org.gcube.data.publishing.gCatfeeder.collectors.CollectorPlugin; import org.gcube.data.publishing.gCatfeeder.collectors.DataCollector; @@ -16,21 +17,20 @@ public class DataMinerPlugin implements CollectorPlugin getSupportedCatalogueTypes() { - return Collections.singleton(Constants.CKAN_TYPE); + return Collections.singleton(Constants.GCAT_TYPE); } @Override @@ -42,9 +42,27 @@ public class DataMinerPlugin implements CollectorPlugin getTransformerByCatalogueType( String catalogueType) throws CatalogueNotSupportedException { switch(catalogueType) { - case Constants.CKAN_TYPE : return new CKANTransformer(); + case Constants.GCAT_TYPE : return new GCATTransformer(); default : throw new CatalogueNotSupportedException("No support for "+catalogueType); } } + @Override + public void init() throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public void initInScope() throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public ControllerConfiguration getPublisherControllerConfiguration(String catalogueType) + throws CatalogueNotSupportedException { + return new ControllerConfiguration(); + } + } 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/GCATRetriever.java similarity index 69% rename from DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/CKANRetriever.java rename to DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/GCATRetriever.java index 1b6a221..857d394 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/GCATRetriever.java @@ -3,12 +3,12 @@ package org.gcube.data.publishing.gCatFeeder.collectors.dm; import org.gcube.data.publishing.gCatFeeder.model.CatalogueInstanceDescriptor; import org.gcube.data.publishing.gCatfeeder.collectors.CatalogueRetriever; -public class CKANRetriever implements CatalogueRetriever { +public class GCATRetriever implements CatalogueRetriever { - private static CKANRetriever instance=null; + private static GCATRetriever instance=null; - static synchronized CKANRetriever get() { - if(instance==null) instance =new CKANRetriever(); + static synchronized GCATRetriever get() { + if(instance==null) instance =new GCATRetriever(); return instance; } diff --git a/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/CKANTransformer.java b/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/GCATTransformer.java similarity index 91% rename from DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/CKANTransformer.java rename to DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/GCATTransformer.java index 497a866..170538a 100644 --- a/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/CKANTransformer.java +++ b/DataMinerAlgorithmsCrawler/src/main/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/GCATTransformer.java @@ -8,7 +8,7 @@ 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.collectors.DataTransformer; -public class CKANTransformer implements DataTransformer{ +public class GCATTransformer implements DataTransformer{ @Override public Set transform(Collection collectedData) { diff --git a/DataMinerAlgorithmsCrawler/src/main/resources/META-INF/services/org.gcube.data.publishing.gCatfeeder.collectors.CollectorPlugin b/DataMinerAlgorithmsCrawler/src/main/resources/META-INF/services/org.gcube.data.publishing.gCatfeeder.collectors.CollectorPlugin new file mode 100644 index 0000000..9c0d63d --- /dev/null +++ b/DataMinerAlgorithmsCrawler/src/main/resources/META-INF/services/org.gcube.data.publishing.gCatfeeder.collectors.CollectorPlugin @@ -0,0 +1 @@ +org.gcube.data.publishing.gCatFeeder.collectors.dm.DataMinerPlugin \ No newline at end of file diff --git a/DataMinerAlgorithmsCrawler/src/test/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/TranslationTest.java b/DataMinerAlgorithmsCrawler/src/test/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/TranslationTest.java index 81ca9ab..7f7d8dc 100644 --- a/DataMinerAlgorithmsCrawler/src/test/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/TranslationTest.java +++ b/DataMinerAlgorithmsCrawler/src/test/java/org/gcube/data/publishing/gCatFeeder/collectors/dm/TranslationTest.java @@ -7,49 +7,37 @@ import java.util.Set; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; -import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.data.publishing.gCatFeeder.collectors.dm.model.InternalAlgorithmDescriptor; import org.gcube.data.publishing.gCatFeeder.model.CatalogueFormatData; +import org.gcube.data.publishing.gCatFeeder.tests.BaseCollectorTest; 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.faults.CatalogueNotSupportedException; import org.gcube.data.publishing.gCatfeeder.collectors.model.faults.CollectorFault; -import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; -public class TranslationTest { +public class TranslationTest extends BaseCollectorTest{ + - @BeforeClass - public static void checkTestEnabled() { - - } - - @Before - public void setToken() { - // disable if maven property - // set token - SecurityTokenProvider.instance.set("***REMOVED***"); - } - - @Test public void testTranslation() throws CollectorFault, CatalogueNotSupportedException, JsonGenerationException, JsonMappingException, IOException { - - ObjectMapper mapper = new ObjectMapper(); - - CollectorPlugin plugin=new DataMinerPlugin(); - DataCollector collector=plugin.getCollector(); - Collection collected=collector.collect(); - System.out.println("Found "+collected.size()+" elements"); - for(Object obj:collected) - System.out.println(mapper.writeValueAsString(obj)+"\n"); - - for(String destinationcatalogue : (Set)plugin.getSupportedCatalogueTypes()) { - DataTransformer transformer=plugin.getTransformerByCatalogueType(destinationcatalogue); - transformer.transform(collected); + if(isTestInfrastructureEnabled()) { + System.out.println("Entering Infrastructure enabled tests.."); + ObjectMapper mapper = new ObjectMapper(); + + CollectorPlugin plugin=new DataMinerPlugin(); + DataCollector collector=plugin.getCollector(); + Collection collected=collector.collect(); + System.out.println("Found "+collected.size()+" elements"); + for(Object obj:collected) + System.out.println(mapper.writeValueAsString(obj)+"\n"); + + for(String destinationcatalogue : (Set)plugin.getSupportedCatalogueTypes()) { + DataTransformer transformer=plugin.getTransformerByCatalogueType(destinationcatalogue); + transformer.transform(collected); + } } } - + } diff --git a/ckan-controller-plugin/.classpath b/ckan-controller-plugin/.classpath deleted file mode 100644 index fae1a2b..0000000 --- a/ckan-controller-plugin/.classpath +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ckan-controller-plugin/.project b/ckan-controller-plugin/.project deleted file mode 100644 index 29e74b7..0000000 --- a/ckan-controller-plugin/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - ckan-controller-plugin - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/ckan-controller-plugin/.settings/org.eclipse.core.resources.prefs b/ckan-controller-plugin/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 29abf99..0000000 --- a/ckan-controller-plugin/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,6 +0,0 @@ -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/ckan-controller-plugin/.settings/org.eclipse.jdt.core.prefs b/ckan-controller-plugin/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 714351a..0000000 --- a/ckan-controller-plugin/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,5 +0,0 @@ -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/ckan-controller-plugin/.settings/org.eclipse.m2e.core.prefs b/ckan-controller-plugin/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/ckan-controller-plugin/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/ckan-controller-plugin/pom.xml b/ckan-controller-plugin/pom.xml deleted file mode 100644 index 623869d..0000000 --- a/ckan-controller-plugin/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - 4.0.0 - - org.gcube.data-publishing.gCat-Feeder - gCat-Feeder-Suite - 1.0.0-SNAPSHOT - - ckan-controller-plugin - ckan-controller-plugin - controller plugin for gCat-Feeder aimed to publish metadata to CKAN catalogue - - - - - org.gcube.data-publishing.gCat-Feeder - catalogue-plugin-framework - [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) - - - - - - - - - \ No newline at end of file diff --git a/ckan-controller-plugin/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CKANController.java b/ckan-controller-plugin/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CKANController.java deleted file mode 100644 index 0585358..0000000 --- a/ckan-controller-plugin/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CKANController.java +++ /dev/null @@ -1,203 +0,0 @@ -package org.gcube.data.publishing.gCatFeeder.catalogues.ckan; - -import java.net.URL; -import java.util.Iterator; - -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.Entity; -import javax.ws.rs.core.Response; - -import org.gcube.data.publishing.gCatFeeder.catalogues.CatalogueController; -import org.gcube.data.publishing.gCatFeeder.catalogues.model.PublishReport; -import org.gcube.data.publishing.gCatFeeder.catalogues.model.faults.ControllerInstantiationFault; -import org.gcube.data.publishing.gCatFeeder.catalogues.model.faults.PublicationException; -import org.gcube.data.publishing.gCatFeeder.catalogues.model.faults.WrongObjectFormatException; -import org.gcube.data.publishing.gCatFeeder.model.CatalogueFormatData; -import org.gcube.data.publishing.gCatFeeder.model.CatalogueInstanceDescriptor; -import org.gcube.data.publishing.gCatFeeder.utils.GCubeAuthorizationFilter; -import org.gcube.data.publishing.gCatFeeder.utils.TokenUtils; -import org.glassfish.jersey.client.ClientConfig; -import org.glassfish.jersey.client.ClientProperties; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; - -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class CKANController implements CatalogueController { - - private static ObjectMapper mapper=new ObjectMapper(); - - - - private static final String PUBLISH_ITEM="catalogue-ws/rest/api/items/create"; - private static final String PUBLSIH_RESOURCE="catalogue-ws/rest/api/resources/create"; - - private String hostname=null; - private String customToken=null; - private final int maxAttempts=3; - - public CKANController(CatalogueInstanceDescriptor instance) throws ControllerInstantiationFault { - try{ - log.trace("Instantiating controller towards {} ",instance); - URL url=new URL(instance.getUrl()); - this.hostname=url.getHost(); - this.customToken=instance.getCustomToken(); - }catch(Throwable t) { - throw new ControllerInstantiationFault("Unable to instantiate CKAN controller. ",t); - } - } - - - /** - * Expected structure - * - * { "item" : "", - * "resources" : [ - * "", - * "", - * ....] - * } - * - * NB serialized resources are updated with "package_id" set as the published item id - * - * - */ - @Override - public PublishReport publishItem(CatalogueFormatData toPublish) throws WrongObjectFormatException { - //Get serialized format - log.debug("Publishing {} ",toPublish); - String serialized=toPublish.toCatalogueFormat(); - String toResetToken=TokenUtils.getCurrentToken(); - - if(customToken!=null) { - log.debug("Custom token found.. Setting it.."); - TokenUtils.setToken(customToken); - } - - - try { - log.debug("Checking serialized structure.. "); - JsonNode node=mapper.readTree(serialized); - String item=node.path("item").asText(); - String itemResp=publishItem(item); - String itemUrl=getPublishedUrl(itemResp); - log.info("Published item {} ",itemUrl); - if(node.has("resources")) { - log.debug("Publishing resources.."); - JsonNode resourcesNode=node.path("resources"); - String itemId=getId(itemResp); - log.debug("Setting package id {} ",itemId); - Iterator it=resourcesNode.iterator(); - while(it.hasNext()) { - JsonNode res=it.next(); - ((ObjectNode)res).put("package_id",itemId); - String resResp=publishResource(res.asText()); - String resUrl=getPublishedUrl(resResp); - log.info("Published resource {} ",resUrl); - } - } - - return new PublishReport(true, itemUrl); - - }catch(PublicationException e) { - log.error("Unable to Publish ",e); - return new PublishReport(false, e.getMessage()); - }catch(Throwable t) { - throw new WrongObjectFormatException("Unable to parse Serialized object.",t); - }finally { - TokenUtils.setToken(toResetToken); - } - } - - - - private String publishItem(String jsonItem) throws PublicationException { - String urlString="http://"+hostname+":80/"+PUBLISH_ITEM; - String respString=null; - int attemptCounter=0; - while(respString==null&&attemptCounter=300) { - throw new PublicationException("RESP STATUS IS "+resp.getStatus()+". Message : "+resp.readEntity(String.class)); - }else { - try { - String respString=resp.readEntity(String.class); - if(!mapper.readTree(respString).path("success").asBoolean()) - throw new PublicationException("Error : response is "+respString); - return respString; - }catch(PublicationException e) { - throw e; - }catch(Throwable t) { - throw new PublicationException("Unable to check response ",t); - } - } - } - - private static String getId(String publishResponse) { - try { - return mapper.readTree(publishResponse).path("result").path("id").asText(); - } catch (Throwable t) { - t.printStackTrace(); - throw new RuntimeException("FAILED Parsing of "+publishResponse); - } - } - - private static String getPublishedUrl(String publishResponse) { - try { - Iterator iterator=mapper.readTree(publishResponse).path("result").path("extras").elements(); - while(iterator.hasNext()) { - JsonNode node=iterator.next(); - if(node.path("key").asText().equals("Item URL")) - return node.path("value").asText(); - } - return "N/A"; - } catch (Throwable t) { - t.printStackTrace(); - throw new RuntimeException("FAILED Parsing of "+publishResponse); - } - } - - private static Client getWebClient() { - return ClientBuilder.newClient(new ClientConfig().register(GCubeAuthorizationFilter.class)) - .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); - } - - -} diff --git a/ckan-controller-plugin/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CkanPlugin.java b/ckan-controller-plugin/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CkanPlugin.java deleted file mode 100644 index bb1b958..0000000 --- a/ckan-controller-plugin/src/main/java/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CkanPlugin.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.gcube.data.publishing.gCatFeeder.catalogues.ckan; - -import org.gcube.data.publishing.gCatFeeder.catalogues.CataloguePlugin; -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 class CkanPlugin implements CataloguePlugin{ - - @Override - public CataloguePluginDescriptor getDescriptor() { - return new CataloguePluginDescriptor("CKAN"); - } - - @Override - public CKANController instantiateController(CatalogueInstanceDescriptor desc) - throws ControllerInstantiationFault { - return new CKANController(desc); - } - - - -} diff --git a/ckan-controller-plugin/target/classes/META-INF/MANIFEST.MF b/ckan-controller-plugin/target/classes/META-INF/MANIFEST.MF deleted file mode 100644 index e2601c5..0000000 --- a/ckan-controller-plugin/target/classes/META-INF/MANIFEST.MF +++ /dev/null @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -Built-By: fabio -Build-Jdk: 1.8.0_201 -Created-By: Maven Integration for Eclipse - diff --git a/ckan-controller-plugin/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/ckan-controller-plugin/pom.properties b/ckan-controller-plugin/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/ckan-controller-plugin/pom.properties deleted file mode 100644 index da3f57b..0000000 --- a/ckan-controller-plugin/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/ckan-controller-plugin/pom.properties +++ /dev/null @@ -1,7 +0,0 @@ -#Generated by Maven Integration for Eclipse -#Mon Mar 25 12:23:14 CET 2019 -version=1.0.0-SNAPSHOT -groupId=org.gcube.data-publishing.gCat-Feeder -m2e.projectName=ckan-controller-plugin -m2e.projectLocation=/home/fabio/workspaces/DEV/gCat-Feeder-Suite/ckan-controller-plugin -artifactId=ckan-controller-plugin diff --git a/ckan-controller-plugin/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/ckan-controller-plugin/pom.xml b/ckan-controller-plugin/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/ckan-controller-plugin/pom.xml deleted file mode 100644 index 623869d..0000000 --- a/ckan-controller-plugin/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/ckan-controller-plugin/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - 4.0.0 - - org.gcube.data-publishing.gCat-Feeder - gCat-Feeder-Suite - 1.0.0-SNAPSHOT - - ckan-controller-plugin - ckan-controller-plugin - controller plugin for gCat-Feeder aimed to publish metadata to CKAN catalogue - - - - - org.gcube.data-publishing.gCat-Feeder - catalogue-plugin-framework - [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) - - - - - - - - - \ No newline at end of file diff --git a/ckan-controller-plugin/target/classes/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CKANController.class b/ckan-controller-plugin/target/classes/org/gcube/data/publishing/gCatFeeder/catalogues/ckan/CKANController.class deleted file mode 100644 index d9229fb071c17f399159eba74eb562005809a4e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9026 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 QEl_Tb3eN1pLGW6%n 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

I#6BcXN3HG*n! zv7lO<$&=i}L9=+y1J#){3#*)orvqv|qS{>EPrki0cbE!Vhp2EbmFy?~URt=HF4#+p z2WasiE!j(z1GI3Es`k>V0jkVheSm5mw3iz8P)^M-HMQohAEFHh9|I5b=we*?ZL-?; zVU^8Ttx!oa4;(B4&liBd3&F`nn6(sFearAp1^!i14XvOpn6HD&3cM4bHarFKmqm`Z zXqiT`0l}WP150(H+l8ktCD6-Q%88z;!Xdh>koVEn!lHfDji=~t($K{5w=Mm+qi~q6 zg2Y$vqiYHur)vi2LxXg~9?GmMh9IbwlptM}0E=*o2xVctYK+vw5No0Cb-4Cugi@Pv zr@S6#cpGs^x(V-X2J>5JIhfyqw|pjF^ild4p1>j93`2>44hVP)K1IM&$u$CU_@M`D zbSqI#i$+}zOuL=#z^B-338p&GW{PCjJce%$rCpEe?Erc@)q>N^S*Zmx<#q-%m_AN- zVoVh022;D>^Sgzza~=c(#@IhVb93)2IzSKLn(6?3hN&*CvA7I=?f^aFpaCi=9;7eS zm*hS+NPF+4NyD_OHTS>}4IflpPn5Yzat~r?Hx8H?x;OJ9)7RC!O zUW`NWE#T@F2`|_eTR6oQmO%rlk!P|KF6#h?huFm#fX-@qmNW6q1rDbGurr{EC}pu5 z-!j4Fby!*Y?nE8yQGHL-0?uan{ltrO8c)KzIJBf3&cSFFcoSb}BPY1arT|aIHwkhQ z2+TL9;!W|Bt0?<0&D1#eFy(9X_+eUz&!e;&J@P*tn)4sZ5>L{VCq1M(AIBVX0w{pc zn*<9v$eEfVPS;+k(MS#cMzCyldPrW8mqzgEkaJ>uiVJ0;-DNruzXDk^(f2Ud7Y^|$ zfWa_NZ^c*d5YMdNL)r2;#J+mxB3DV#AfMIZTIAY8?y?MY?B{&UoHxitrJo0l8vHT- zocKE(e@pS_<^EG$yQy@TcDD|*zcr7~9pVKbbbcORh|fVT8{&%(${bHgQSl%z=~qof zf0@gR1*#ZdhUxBBuWN``9fUNq5k>t<3mfQmu0ia&QMEVGZK`$92D+E)RKK*+FRdBS z>yb`~9)SkFfOz;t*zik;a|58dkLJ@LXb;i3w4ctWVbFO3RGtFbzX~eP0=drtwcnt7 z=y|%AUZDHwn+ksoKm;_H#2<7iXcA34tPm!_?;%_jtN{*9^wsUF2t)mZY?f4z?)p;brqEi^85QG z#0~Q1K@Lvk-4D_;#{gj;n70F=49@^U8UtOx0Bk)P18Swq(kl&eSYl|2Hxm)NO!I0I zDBWC^wTI5}x>K>zmj;8dL*e)kdImJhKO%(l6uFU;!DIR>sk) zae0>Uvw4RamsZBns&RQXgYNaHuLzeePWl0W@iKDZ55d7Js61Z9n?Iv6`US0`*C&Ycc8pH>O);fEUv( zGB{s-yN)taLDr-(6*R6?zBAZ`Z^U~cf!$bs4GTH z{0P#v3VBG~cej?PfG5FY4$TFoq%Bd{*$jfJGKKXVutOGS(+ud*2P@8nHReHgMbJbnX%iXH^)YAhDA?Ik8KF*N4Y@2@)Ge-VnbW9#6>cQcJeUa z(P|MN;yaJ!biR%9E3r|@8O@&#&hSGhi`;5FnSu}Su0g&R zl|Q~%vVrT7A|IMQQ}Wa3j}_#c*vJ!?i_IJkCLWuw@Sw*5&bMTu+j-)hPls?&r_eBlwme z@P5vT)Y{crQar?ustt>S@FPGqq|m$?8FVh<2`=GnBJWa&xeioi$1-Pt zRuvBN7i$Nop=f{~KfqshB9rI#*Gh4n$4?hYb*;=Oo7bcexxy4&*3GpLpbp8eUTNDW zhQzOUrS24On8IJ>uilwRG#av zMfiADcC==Z^*j` z_SL2xIaie;KPo)HKXDQ)wK;kL_fkG>T|vgZ8_T8(Ke&K6Kxdj zF0?nI-HrA$X#ausNx`OxgI`$1Hp*;l01qFOykd?VvXAhuY$Lxu?#S!M9r@jHM}9wM zB)Jjzbi;}flnYVX#y$Ai-sSi;QjEUNar!wY=xy#zgBFUH$PlevKPiB3n)dux=wR#V~jXSpQI;Kh8B=is% zT-H`K)zq-(qtY_f{Ur1f7~dGb6`l>sM~dJH?86!YLq!JWnU#@cwdho<)EyW-yWG|#8*nq{iXn!e&WHlJ3>u*-o|Q@lBLOjb1Acifi*E)|*RYbxti*IbXf zo;u;^4U5|T-G*VJ0`j6Q>sAsq1kP{X4cqsx&1ilt9BVk%X|0Z5)W__5gukEH5;!4m zh=@IOt&a0OD{nA~AF1aVj?J2usizaT&lT6+%7GOur%X*XG(f@je9hMB1Y)>G9d(6> z2Xu{DeBN21HnT`%^f})})?kxf-LWeM+UsO7vLQZUUBlIUAzANj!#4ao1RiE~O1SJI zf%N2>PU~z8F9{zJc(PUc2_00lhUt51B)-svZ*cMR>?%(`Ln&Pv^NN+z|uTS~fbzD5CKO$>ZO2ziRA~ydb0g2Nc!6T=_<&-5kpg56+?#NGppJ)>KZ=UUMqP%Gl^nRzvh&c&{omhn$|A()XL0Z zKg~2=X~>dnx-V+AnFbW!Q8b0gw;OtK;_!uL#z6+Xl$caZXjMafpf3L3Niok13>LT| zH%@50yyIG$KY{+3Rh$afx|9{pDs^3>Owqq%4AB&?fr}RBk{AVN*Yxdz-H{K+&E26F z#=FEOsJm42>5S`C43lO=9KWoHGOJWv$KsThG2f*XTrC+cBfVwd!edv3He@o1xD)7A z3@bR#*N!(n)-1;3hO56m$2T?CX-A>Wyl~$Hzc8668u}MQt%Z?oa?|#WqRLaOA&MIz3uld-+mJq5R_{kau9gX5$9Sd zmu;;|!5B$A-(w*=hU~)8-k(E&a8t1LQ%t<(FdSA*X=Viv@o}WtVz{Bkh1>AP@#xjDf-BAe zkNWE>P$qWKh*xRU5852mYgAup-j`w|MoEI>^l8n)Y-&GN6v~*`u@53k31&FdN-P2y zLH#xLg{R_ObeprkQI?2(Pspzu>xN%6c0vAac=ERHGIry*TUReKXpY}S)Pg ziaEy8Bxv|=0B!sz33#tR__{Zv6HJLan0dSg^zf(weF*>dLmEDWB&6^^Khn^Lf2=$J z{k%K~1H3#0gSC@ znf?RLJ{day8+`m1z9k@ozrENB5HE|r{rou%m*7);BXAk6;ID$u>k)Di1S&)yi1UR6?}h~Ll>{#Vw_r5D>&5a~3~e7uDdu-ug7%9P?GAk12CXMV`$mHHj}+}L zjJH9HbU)FGMv_vrJlu=vp4mvu?!E+JSc>of9!e345`+siWe6C6n7Pf$JU5c=X2r}>5SR*$jSZP=a`NFh&jcfN3j}1**%d}hI zSe#Mt7!ibjZr*P$*6+y{`aO&FdkWu47`}e&XA*X;gcu2Uj!aI#4^U=|#uzmMKcW|x F{sUcqke~nn diff --git a/gCat-Controller/target/classes/org/gcube/data/publishing/gCataFeeder/catalogues/gCat/GCatPlugin.class b/gCat-Controller/target/classes/org/gcube/data/publishing/gCataFeeder/catalogues/gCat/GCatPlugin.class index 81317e1b050d3d870a76c70edbb7e540f7406b6c..9c4ec64852df9f3a69d208eac70de657ad968d45 100644 GIT binary patch delta 210 zcmbQm_l{fO)W2Q(7#J8#7_`|Lm>3xxCU0bx+o)H~$mkDbsZKu2#64M`nQd|xqa+sx zgD4{di@UR9$Yup5A0|FV2JXzf%o5MM;N<**)XC+nos1hMGqUwnY6A^q1mTT9f{B3# yNV0(iq!@UCY#xXt10MrFND+eu0|!u*G?2{#Y5Qb+jK`)mt2^bL(rjo>uq)C-Z5%B{HAzE07oViW1a<_Zz?F9rOwT;bn z{tK}X6in~0u(R_gh+|?Cu~3`geVLhOUYNJ+O=0Hw{ox4!8c?4Gi@|!bk!s%VowA+c zx!ZT^zAL-+Ev=QdVU~e=BsGte-{&5-RS*i_H9|=YwL0^8&_pM5*yGfakSr zn=e;dMhn@kqKGh-9`6XrJ?AcE?OOvIstn@afdg)O%0nTAsZ>#Q&|HKZw>MpL;KyAd zF^D6Bs?W6+9!EMaf{=o7Y0$+e4!Is}j5!X2tQZh$SGL+JPM? Vq$XJ_Kd=_Rvp&x-Sfgq|?E_nOmmdHC diff --git a/gCat-Controller/target/test-classes/org/gcube/data/publishing/gCatFeeder/catalogues/gCat/Interactions.class b/gCat-Controller/target/test-classes/org/gcube/data/publishing/gCatFeeder/catalogues/gCat/Interactions.class index 3dad7a9ff99b0cfeef3013cf13638ba59ce60d0d..912f015eeef6c137fdee163dc3e9bcb4be5f75f2 100644 GIT binary patch literal 3909 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 commons catalogue-plugin-framework - ckan-controller-plugin gCat-Controller test-commons diff --git a/test-commons/pom.xml b/test-commons/pom.xml index f69b76e..d079e9d 100644 --- a/test-commons/pom.xml +++ b/test-commons/pom.xml @@ -8,4 +8,20 @@ test-commons test commons Utility classes for test purposes + + + + org.gcube.data-publishing.gCat-Feeder + collectors-plugin-framework + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + + + + + org.gcube.data-publishing.gCat-Feeder + catalogue-plugin-framework + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + + + \ No newline at end of file diff --git a/test-commons/src/main/java/org/gcube/data/publishing/gCatFeeder/tests/BaseCataloguePluginTest.java b/test-commons/src/main/java/org/gcube/data/publishing/gCatFeeder/tests/BaseCataloguePluginTest.java new file mode 100644 index 0000000..1a0ab3f --- /dev/null +++ b/test-commons/src/main/java/org/gcube/data/publishing/gCatFeeder/tests/BaseCataloguePluginTest.java @@ -0,0 +1,45 @@ +package org.gcube.data.publishing.gCatFeeder.tests; + +import java.util.ServiceLoader; + +import org.gcube.data.publishing.gCatFeeder.catalogues.CataloguePlugin; +import org.gcube.data.publishing.gCatFeeder.catalogues.model.CataloguePluginDescriptor; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class BaseCataloguePluginTest { + + private static final Logger log= LoggerFactory.getLogger(BaseCataloguePluginTest.class); + + private static ServiceLoader cataloguePluginsLoader = ServiceLoader.load(CataloguePlugin.class); + + + + @BeforeClass + public void checkPluginRegistration() { + int pluginsCounter=0; + for(CataloguePlugin pl:cataloguePluginsLoader) { + pluginsCounter++; + } + + Assert.assertFalse(pluginsCounter==0); + } + + @Test + public void checkImplementations() throws Exception{ + for(CataloguePlugin plugin:cataloguePluginsLoader) { + CataloguePluginDescriptor desc=plugin.getDescriptor(); + Assert.assertNotNull(plugin.getClass()+" No Descriptor exposed", desc); + try{ + plugin.init(); + }catch(Throwable t) { + throw new Exception("Unable to init plugin "+desc.getId()); + } + } + } + + +} diff --git a/test-commons/src/main/java/org/gcube/data/publishing/gCatFeeder/tests/BaseCollectorTest.java b/test-commons/src/main/java/org/gcube/data/publishing/gCatFeeder/tests/BaseCollectorTest.java new file mode 100644 index 0000000..4ad5cc7 --- /dev/null +++ b/test-commons/src/main/java/org/gcube/data/publishing/gCatFeeder/tests/BaseCollectorTest.java @@ -0,0 +1,86 @@ +package org.gcube.data.publishing.gCatFeeder.tests; + +import java.io.IOException; +import java.util.Properties; +import java.util.ServiceLoader; + +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.data.publishing.gCatfeeder.collectors.CollectorPlugin; +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; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class BaseCollectorTest { + + private static String testContext=null; + + private static final Logger log= LoggerFactory.getLogger(BaseCollectorTest.class); + + private static ServiceLoader collectorPluginsLoader = ServiceLoader.load(CollectorPlugin.class); + + + + @BeforeClass + public static void checkPluginRegistration() { + int pluginsCounter=0; + for(CollectorPlugin pl:collectorPluginsLoader) { + pluginsCounter++; + } + + Assert.assertFalse("No plugin is actually registered ",pluginsCounter==0); + + for(CollectorPlugin plugin:collectorPluginsLoader) { + PluginDescriptor desc=plugin.getDescriptor(); + Assert.assertNotNull(plugin.getClass()+" No Descriptor exposed", desc); + try{ + plugin.init(); + }catch(Throwable t) { + Assert.fail("Unable to init plugin "+desc.getName()); + } + + Assert.assertTrue(desc.getName()+": No catalogues supported",plugin.getSupportedCatalogueTypes().size()>0); + + for(String supportedCatalogue:plugin.getSupportedCatalogueTypes()) { + try{ + Assert.assertNotNull(desc.getName()+": Null configuration for exposed "+supportedCatalogue,plugin.getPublisherControllerConfiguration(supportedCatalogue)); + Assert.assertNotNull(desc.getName()+": Null retriever for exposed "+supportedCatalogue,plugin.getRetrieverByCatalogueType(supportedCatalogue)); + Assert.assertNotNull(desc.getName()+": Null transformer for exposed "+supportedCatalogue,plugin.getTransformerByCatalogueType(supportedCatalogue)); + }catch(CatalogueNotSupportedException e) { + Assert.fail("Exposed supported catalogue actually not covered."+e.getMessage()); + } + } + + Assert.assertNotNull(desc.getName()+": No actual collector ",plugin.getCollector()); + } + + + // Check if instrastructure is enabled + testContext=System.getProperty("testContext"); + System.out.println("TEST CONTEXT = "+testContext); + + + if(isTestInfrastructureEnabled()) { + Properties props=new Properties(); + try{ + props.load(BaseCollectorTest.class.getResourceAsStream("/tokens.properties")); + }catch(IOException e) {throw new RuntimeException(e);} + if(!props.containsKey(testContext)) throw new RuntimeException("No token found for scope : "+testContext); + SecurityTokenProvider.instance.set(props.getProperty(testContext)); + ScopeProvider.instance.set(testContext); + } + } + + + + + +protected static boolean isTestInfrastructureEnabled() { + return testContext!=null; +} + +} diff --git a/test-commons/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/test-commons/pom.properties b/test-commons/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/test-commons/pom.properties index 8227f35..f860194 100644 --- a/test-commons/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/test-commons/pom.properties +++ b/test-commons/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/test-commons/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven Integration for Eclipse -#Mon Mar 25 12:23:24 CET 2019 +#Thu Mar 28 15:36:44 CET 2019 version=1.0.0-SNAPSHOT groupId=org.gcube.data-publishing.gCat-Feeder m2e.projectName=test-commons diff --git a/test-commons/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/test-commons/pom.xml b/test-commons/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/test-commons/pom.xml index f69b76e..d079e9d 100644 --- a/test-commons/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/test-commons/pom.xml +++ b/test-commons/target/classes/META-INF/maven/org.gcube.data-publishing.gCat-Feeder/test-commons/pom.xml @@ -8,4 +8,20 @@ test-commons test commons Utility classes for test purposes + + + + org.gcube.data-publishing.gCat-Feeder + collectors-plugin-framework + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + + + + + org.gcube.data-publishing.gCat-Feeder + catalogue-plugin-framework + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + + + \ No newline at end of file diff --git a/test-commons/target/classes/org/gcube/data/publishing/gCatFeeder/tests/BaseCataloguePluginTest.class b/test-commons/target/classes/org/gcube/data/publishing/gCatFeeder/tests/BaseCataloguePluginTest.class new file mode 100644 index 0000000000000000000000000000000000000000..47f5b5b21358fee9fbd530711562da4d9f3dcfa9 GIT binary patch literal 2690 zcmb_dYf}_g5IuKyVQ?805f>F78x;iD#xv&*{@WfByaJZvY1HgMpO5h#yp} ziWARBYu1izs}|3AZaC*wX&tqraVckIU_~;FLTkhhC2h9nS7Ld?iz{w*iU$TV0&Vm5 zBir(9-n%|CFP%srO+SJ5qRJ3@4+iF~qF<@VpdgTQwuT9dzRf%Whl)B*9J!uVmcb*} zk;xG+?JB#KsvX6F6u7^W-=I$SpMW;u+fL*MPfWC9KP#=sD8VYw-IJ86sTuX`Ff8=`o044+IAEd)%?3IJuDnrK zb_S8fA#@oy%u09Q)5H-RB`%M|3!HmZkvrThs9KMkFwi2fx9C=7DPEY7!IVAYu`}$q zV|&wf;Hvk!v3XFlnME3>Oq_tp%+Z`13S51&e!W(JY*?o=C!L3hCU41#8%BX0xqg+3 zx)oO=cR^0Oq054Xt5rYJM@-(Slh4QOv^63h_<>9sr06?q;vD)Z1viq6s>Fmqs^$p{zZu&* z3yW0mE=RWWaMG^Td)uL@pIE4QazR!%xXq3&IX4*srusO$&7fp=a(zg2ZRIH7?i-0+kNYT#B2FpM z-Y{_!wvmP`gnZ=Zl`WshG_Q)AS6ksBci<}$^iF57 z0N((o`TAS#zloaSq=|iqw&tW@&e<$gDRA?xtC6G1EpecM z(v9?-ylmNz14oX#YR?|o;cI+eDGTp#N2mFjPvNlosPI=-Eo@qMX=@f4zO}-nWj8Gs z`BeY*wTo5kd5(_u+$s(}$FXNLrjY0VSw6upU<>v!yt0CqxXbGyEIw6`roI)N+`QJT zjl1;~MafL~9 zv=3pJ_eL1&I5KOjFJnM(FLTGkTtgdD`W-_G>?qIExJu^?-^MnOT%(0ZL@Tj2@wZHH zOfF&S+&Yfp*%$a!p!5>OJ1Z!iUB>lgl-s{p#+_x{?_b5Ybm00}LjF?bCC2V3$M(t! z-2P>FiPs9g`<($b7e7B^2^UcymY~kV3HAy^+(GnRILXs)o}VVhGq^|lEc!GbeVT4r z=c5DH5RnDJJ41-^NVC#~$5^DFVrBs8HOe7PCK6)Sa6$8AAV;DMPOC5wtda6fANoGw I-4wq62Q(MJI{*Lx literal 0 HcmV?d00001 diff --git a/test-commons/target/classes/org/gcube/data/publishing/gCatFeeder/tests/BaseCollectorTest.class b/test-commons/target/classes/org/gcube/data/publishing/gCatFeeder/tests/BaseCollectorTest.class new file mode 100644 index 0000000000000000000000000000000000000000..df7ad411579b13ca0a976cca5ef219eade98b4e1 GIT binary patch literal 5599 zcmb_gd3+sJ75?taGRf<-v=5q+6zBsiB;6jnnv|9_O=xMF*5(meia2?>Nv565JZ32k zDsF%~?kGjvHKGWTVwx5N6a@sW8}2ABh$}9ri0F^_-I;kyHn7$FkvDViIp=<7KX)E{ z_P|{L&cMGlBm`DF?m%WB7xc1K^yi$0>~bB5Jp zxTboK7pqr?c1@xJjXF-kJf7?inx4R#=keTg$0?n*C^sl`J0mY{lLMybyM}K%Hto4B zuzhn#_L!bYD6O{b_~90hT@)U>BcQi4>tw&<%E&d!a2Xw^;8cc#=}XFT7@&2HO=Y3C zFY0NEwCm`=xdL+;yX&QwbIp9H`gsI?sL?pYw6QXgPfD^{G;AycWN3v5 zz`DS+SOt>UfJPM{ojNw7i{>Yg&?y2(PBLD>QyZ{V$4jtHpxVgirOh~AS*~AHw3uyE zt5keqOAWF#Nt#wJflSNYdB>A|3Qms_|I#T^W2?C03pXcs!q(9s(vl}fW3&=Pg$+baLkzLQpKg*Z~+ z`c($9MlYPK$B_LCSH!!=2kB&~~9J}8f2%@T$W+^I!U|QjPla4pzEiAaixixCx z(p4SURlQU_m6!!CD7Q~+jOR<=xWYy`JBwtd%G(5vjS;(&&0g-3?liP-*YOU#Q(!UC zZYxl&8=hp>!$Ubk%PTmmco0#(TVP3yl6}DTXwIP-aK2Z^b$A~&BF=1yZW_|_55u0* zk*+7wvQr52dVy2hqe4>(%TlbCYCT&P1B9lQeXEkV0XJ&+fWXCvmzn)WU~$?jdV{5= z82atIb26{`rj8G)bWPGSo2BO&1F{AmW<3eBDe6H)6wiubh<;SZ$MA6hoh-$%N}%;H z8i%q}Q3UN&mBa{c((tLt#bMa<<&cg~<1=h*9lT{i+L~t8toNRk{Hr=+RE8BiSHhngm?p}Oe!|m)#q2S3p zI>uCK)ACA;WhXf-jqBL2TKr$jJE4PHB6q@{zvb<~{h5hA$FjNy)H5>bMtQCPbQNoAjK(&B<0TQcIv|#<(tM zv(e561q-Ot?^DC#{Q^hFTvWK6q^U>4S6N9*0OG-`7*k0+fQMAq`C3UxI00k_UFUMu zr&?6wIe>#YzJYJjsVs`V!5hLRNvBR~RE4U~5$W4BDNB546qcgE?h6Z&mt!=fo9U+q z&|i!1;`nw&E<9 z^Ql2ykolWbmrw4_;d25yD!Dor^SE*ZSI*|I`dcXWVtz`DBefStry9m_%wC*u8#fYo z0sqeng&#%cI*K?NOT!(InfKFJREEDwSk;RJ4rZgfXnzJc9Wv_Tw~xd(hB%6$D>iB(P`ViPY+bJ<-`xg zkoMyv?8ew0+xppCQ=b^eCmAK9xH**hIm#Tx{D^!EqvP0jJt*w}4Si?l@{~w@VGMVV z;VUDUyZH`0aN&x5c<}D!A5R$-L82XPwyhSNm@zfYWlGetYj65DZ#=tr}-8cW5sSSzmMr-NH~L%E#+ zbtgK+{rm#(FgA#%u`yAF^AhvX83y@w26iHG1b&0x5=$L1{|>)rc&`_&_(S-#Ni^dL z{E<6(?*9pYCi;W87Jp$HRPyXacoKg_HBZSB)!!k+LzMX>o}ym=piGrUk+i4z^iQtb ziv<&0uHY=i&n(a