2017-05-09 15:41:59 +02:00
|
|
|
package org.gcube.informationsystem.exporter.mapper;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
import org.gcube.common.resources.gcore.GenericResource;
|
|
|
|
import org.gcube.common.resources.gcore.GenericResource.Profile;
|
2020-01-29 15:54:12 +01:00
|
|
|
import org.gcube.informationsystem.model.impl.properties.HeaderImpl;
|
2019-02-06 10:01:35 +01:00
|
|
|
import org.gcube.informationsystem.model.reference.entities.Facet;
|
|
|
|
import org.gcube.informationsystem.model.reference.entities.Resource;
|
2020-01-29 15:54:12 +01:00
|
|
|
import org.gcube.informationsystem.model.reference.properties.Header;
|
2019-02-06 10:01:35 +01:00
|
|
|
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
|
2019-02-12 18:12:24 +01:00
|
|
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.AvailableInAnotherContextException;
|
|
|
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException;
|
2019-02-06 10:18:06 +01:00
|
|
|
import org.gcube.resourcemanagement.model.impl.entities.facets.SimpleFacetImpl;
|
|
|
|
import org.gcube.resourcemanagement.model.impl.entities.facets.SoftwareFacetImpl;
|
|
|
|
import org.gcube.resourcemanagement.model.impl.entities.resources.ConfigurationImpl;
|
2019-12-05 12:33:57 +01:00
|
|
|
import org.gcube.resourcemanagement.model.impl.relations.consistsof.IsIdentifiedByImpl;
|
2019-02-06 10:18:06 +01:00
|
|
|
import org.gcube.resourcemanagement.model.reference.entities.facets.SimpleFacet;
|
|
|
|
import org.gcube.resourcemanagement.model.reference.entities.facets.SoftwareFacet;
|
|
|
|
import org.gcube.resourcemanagement.model.reference.entities.resources.Configuration;
|
2019-12-05 12:33:57 +01:00
|
|
|
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
|
2017-05-09 15:41:59 +02:00
|
|
|
import org.json.JSONObject;
|
|
|
|
import org.json.XML;
|
|
|
|
|
2019-02-12 18:12:24 +01:00
|
|
|
/**
|
|
|
|
* @author Luca Frosini (ISTI - CNR)
|
|
|
|
*/
|
2019-02-06 12:49:43 +01:00
|
|
|
public class GenericResourceExporter extends GCoreResourceMapper<GenericResource,Configuration> {
|
2017-05-09 15:41:59 +02:00
|
|
|
|
2019-02-06 12:49:43 +01:00
|
|
|
public static final String FIXED_VERSION = "1.0.0";
|
|
|
|
public static final String FULL_BODY = "FULL_BODY";
|
2017-05-09 15:41:59 +02:00
|
|
|
|
2019-02-26 09:44:11 +01:00
|
|
|
public GenericResourceExporter(Boolean filteredReport, Boolean statistics) {
|
|
|
|
super(GenericResource.class, Configuration.class, filteredReport, statistics);
|
2017-05-09 15:41:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected Configuration map(GenericResource gr) throws Exception {
|
|
|
|
Profile profile = gr.profile();
|
|
|
|
UUID uuid = UUID.fromString(gr.id());
|
|
|
|
boolean readFromIS = false;
|
|
|
|
|
|
|
|
Configuration configuration = null;
|
|
|
|
SoftwareFacet softwareFacet = null;
|
|
|
|
SimpleFacet simpleFacet = null;
|
|
|
|
|
|
|
|
try {
|
2019-02-06 11:52:23 +01:00
|
|
|
readFromIS = resourceRegistryClient.exists(rClass, uuid);
|
2019-02-12 18:12:24 +01:00
|
|
|
} catch(NotFoundException e) {
|
2017-05-09 15:41:59 +02:00
|
|
|
readFromIS = false;
|
2019-02-12 18:12:24 +01:00
|
|
|
} catch(AvailableInAnotherContextException e) {
|
2021-08-25 09:41:15 +02:00
|
|
|
resourceRegistryPublisher.addResourceToCurrentContext(Configuration.NAME, uuid, false);
|
2017-05-09 15:41:59 +02:00
|
|
|
Thread.sleep(100);
|
|
|
|
readFromIS = true;
|
|
|
|
}
|
|
|
|
|
2019-02-06 12:49:43 +01:00
|
|
|
if(readFromIS) {
|
2017-05-09 15:41:59 +02:00
|
|
|
configuration = read(uuid);
|
|
|
|
//softwareFacet = (SoftwareFacet) configuration.getIdentificationFacets().get(0);
|
|
|
|
|
2019-02-06 12:49:43 +01:00
|
|
|
List<ConsistsOf<? extends Resource,? extends Facet>> consistsOfs = configuration.getConsistsOf();
|
2017-05-09 15:41:59 +02:00
|
|
|
|
2019-02-06 12:49:43 +01:00
|
|
|
for(ConsistsOf<? extends Resource,? extends Facet> c : consistsOfs) {
|
2017-05-09 15:41:59 +02:00
|
|
|
Facet target = c.getTarget();
|
2019-02-06 12:49:43 +01:00
|
|
|
if(c instanceof IsIdentifiedBy) {
|
2017-05-09 15:41:59 +02:00
|
|
|
if(target instanceof SoftwareFacet) {
|
|
|
|
softwareFacet = (SoftwareFacet) target;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-02-06 12:49:43 +01:00
|
|
|
if(c instanceof ConsistsOf) {
|
|
|
|
if(target instanceof SimpleFacet) {
|
2017-05-09 15:41:59 +02:00
|
|
|
simpleFacet = (SimpleFacet) target;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2019-02-06 12:49:43 +01:00
|
|
|
} else {
|
2017-05-09 15:41:59 +02:00
|
|
|
configuration = new ConfigurationImpl();
|
|
|
|
Header header = new HeaderImpl(uuid);
|
|
|
|
configuration.setHeader(header);
|
|
|
|
}
|
2019-02-06 12:49:43 +01:00
|
|
|
|
2017-05-09 15:41:59 +02:00
|
|
|
/* ----------------------------------------- */
|
2019-02-06 12:49:43 +01:00
|
|
|
if(softwareFacet == null) {
|
2017-05-09 15:41:59 +02:00
|
|
|
softwareFacet = new SoftwareFacetImpl();
|
2019-02-06 12:49:43 +01:00
|
|
|
IsIdentifiedBy<Configuration,SoftwareFacet> identifiedBy = new IsIdentifiedByImpl<Configuration,SoftwareFacet>(
|
|
|
|
configuration, softwareFacet, null);
|
2017-05-09 15:41:59 +02:00
|
|
|
configuration.addFacet(identifiedBy);
|
|
|
|
}
|
|
|
|
|
|
|
|
softwareFacet.setGroup(profile.type());
|
|
|
|
softwareFacet.setName(profile.name());
|
|
|
|
softwareFacet.setVersion(FIXED_VERSION);
|
|
|
|
String description = profile.description();
|
2019-02-06 12:49:43 +01:00
|
|
|
if(description != null && description.compareTo("") != 0) {
|
2017-05-09 15:41:59 +02:00
|
|
|
softwareFacet.setDescription(getStringAsUTF8(description));
|
|
|
|
}
|
|
|
|
/* ----------------------------------------- */
|
2019-02-06 12:49:43 +01:00
|
|
|
|
2017-05-09 15:41:59 +02:00
|
|
|
/* ----------------------------------------- */
|
|
|
|
String xmlBody = profile.bodyAsString();
|
|
|
|
JSONObject jsonBody = XML.toJSONObject(getStringAsUTF8(xmlBody));
|
2019-02-06 12:49:43 +01:00
|
|
|
Map<String,Object> map = jsonBody.toMap();
|
|
|
|
if(simpleFacet == null) {
|
2017-05-09 15:41:59 +02:00
|
|
|
simpleFacet = new SimpleFacetImpl();
|
|
|
|
configuration.addFacet(simpleFacet);
|
|
|
|
|
|
|
|
try {
|
|
|
|
SimpleFacet testSimpleFacet = new SimpleFacetImpl();
|
|
|
|
testSimpleFacet.setAdditionalProperties(map);
|
2017-12-07 13:58:32 +01:00
|
|
|
SimpleFacet created = resourceRegistryPublisher.createFacet(testSimpleFacet);
|
2017-05-09 15:41:59 +02:00
|
|
|
resourceRegistryPublisher.deleteFacet(created);
|
|
|
|
simpleFacet.setAdditionalProperties(map);
|
2019-02-06 12:49:43 +01:00
|
|
|
} catch(Exception e) {
|
2017-05-09 15:41:59 +02:00
|
|
|
simpleFacet.setAdditionalProperty(FULL_BODY, getStringAsUTF8(xmlBody));
|
|
|
|
}
|
2019-02-06 12:49:43 +01:00
|
|
|
} else {
|
|
|
|
if(simpleFacet.getAdditionalProperty(FULL_BODY) != null) {
|
2017-05-09 15:41:59 +02:00
|
|
|
simpleFacet.setAdditionalProperty(FULL_BODY, getStringAsUTF8(xmlBody));
|
2019-02-06 12:49:43 +01:00
|
|
|
} else {
|
2017-05-09 15:41:59 +02:00
|
|
|
simpleFacet.setAdditionalProperties(map);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* ----------------------------------------- */
|
|
|
|
|
|
|
|
return configuration;
|
|
|
|
}
|
2019-02-26 09:44:11 +01:00
|
|
|
|
2017-05-09 15:41:59 +02:00
|
|
|
}
|