First release, implemented the plugin [#26454]
This commit is contained in:
parent
987dc4f378
commit
daf6f65f48
|
@ -51,6 +51,7 @@ public class CatalogueBindingPlugin extends AbstractPlugin implements EventListe
|
||||||
public static final PluginDescriptor DESCRIPTOR = new PluginDescriptor(PLUGIN_ID, PLUGIN_TYPE);
|
public static final PluginDescriptor DESCRIPTOR = new PluginDescriptor(PLUGIN_ID, PLUGIN_TYPE);
|
||||||
private static final String FREEMARKER_TEMPLATE_PATH = "freemarker_template_path";
|
private static final String FREEMARKER_TEMPLATE_PATH = "freemarker_template_path";
|
||||||
private static final String FREEMARKER_TEMPLATE_HOST = "freemarker_template_host";
|
private static final String FREEMARKER_TEMPLATE_HOST = "freemarker_template_host";
|
||||||
|
private static final String CONFIG_ENABLED = "enabled";
|
||||||
|
|
||||||
static {
|
static {
|
||||||
DESCRIPTOR.setVersion(new Semver("1.0.0"));
|
DESCRIPTOR.setVersion(new Semver("1.0.0"));
|
||||||
|
@ -232,29 +233,35 @@ public class CatalogueBindingPlugin extends AbstractPlugin implements EventListe
|
||||||
|
|
||||||
Document profileConfiguration = getConfigurationFromProfile(useCaseDescriptor).getConfiguration();
|
Document profileConfiguration = getConfigurationFromProfile(useCaseDescriptor).getConfiguration();
|
||||||
log.debug("UseCaseDescriptor Configuration is {} ", profileConfiguration);
|
log.debug("UseCaseDescriptor Configuration is {} ", profileConfiguration);
|
||||||
|
|
||||||
|
boolean configEnabled = profileConfiguration.getBoolean(CONFIG_ENABLED, false);
|
||||||
|
log.info("Is Config enabled? {} ", CONFIG_ENABLED, configEnabled);
|
||||||
|
|
||||||
|
if(configEnabled) {
|
||||||
|
|
||||||
for (Object fsConfigObj : profileConfiguration.get(SUBSCRIBE_EVENTS_CONFIG, List.class)) {
|
for (Object fsConfigObj : profileConfiguration.get(SUBSCRIBE_EVENTS_CONFIG, List.class)) {
|
||||||
log.debug("Managing {} ", fsConfigObj);
|
log.debug("Managing {} ", fsConfigObj);
|
||||||
SubscribeEventsConfig fsConfig = SerializationUtil.convert(fsConfigObj,
|
SubscribeEventsConfig fsConfig = SerializationUtil.convert(fsConfigObj,
|
||||||
SubscribeEventsConfig.class);
|
SubscribeEventsConfig.class);
|
||||||
log.debug("Converted config {}", fsConfig);
|
log.debug("Converted config {}", fsConfig);
|
||||||
String theEventSubsribed = fsConfig.getEvent();
|
String theEventSubsribed = fsConfig.getEvent();
|
||||||
if (theEventSubsribed == null || theEventSubsribed.isEmpty())
|
if (theEventSubsribed == null || theEventSubsribed.isEmpty())
|
||||||
throw new MaterializationException(
|
throw new MaterializationException(
|
||||||
"Invalid Field Definition path in configuration [NO MATCH] : " + fsConfig.getEvent());
|
"Invalid Field Definition path in configuration [NO MATCH] : " + fsConfig.getEvent());
|
||||||
|
|
||||||
EventSubscribed eventSub = new EventSubscribed();
|
EventSubscribed eventSub = new EventSubscribed();
|
||||||
|
|
||||||
Event event = SerializationUtil.convert(theEventSubsribed, Event.class);
|
Event event = SerializationUtil.convert(theEventSubsribed, Event.class);
|
||||||
log.debug("Added event {} ", event);
|
log.debug("Added event {} ", event);
|
||||||
|
|
||||||
eventSub.setEvent(event);
|
eventSub.setEvent(event);
|
||||||
|
|
||||||
if (fsConfig.getWhen() != null)
|
if (fsConfig.getWhen() != null)
|
||||||
eventSub.setWhen(fsConfig.getWhen());
|
eventSub.setWhen(fsConfig.getWhen());
|
||||||
|
|
||||||
eventsSubscrInTheUCD.add(eventSub);
|
eventsSubscrInTheUCD.add(eventSub);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String freemarkerTPath = profileConfiguration.get(FREEMARKER_TEMPLATE_PATH, String.class);
|
String freemarkerTPath = profileConfiguration.get(FREEMARKER_TEMPLATE_PATH, String.class);
|
||||||
|
|
|
@ -9,11 +9,13 @@ import lombok.Data;
|
||||||
@Data
|
@Data
|
||||||
public class CatalogueBindingPluginConfigModel {
|
public class CatalogueBindingPluginConfigModel {
|
||||||
|
|
||||||
String context; //the scope
|
String context; // the scope
|
||||||
|
|
||||||
List<EventSubscribed> listEventSubscribed;
|
List<EventSubscribed> listEventSubscribed;
|
||||||
|
|
||||||
String freemarker_template_path;
|
String freemarker_template_path;
|
||||||
String freemarker_template_host;
|
String freemarker_template_host;
|
||||||
|
|
||||||
|
Boolean enabled = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package org.gcube.application.cms.cataloguebinding.doaction;
|
package org.gcube.application.cms.cataloguebinding.doaction;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.gcube.application.cms.cataloguebinding.EventSubscribed;
|
import org.gcube.application.cms.cataloguebinding.EventSubscribed;
|
||||||
|
@ -12,11 +11,8 @@ import org.gcube.application.cms.plugins.events.ItemObserved;
|
||||||
import org.gcube.application.geoportal.common.model.document.Project;
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
|
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
|
||||||
|
|
||||||
import freemarker.core.ParseException;
|
|
||||||
import freemarker.template.MalformedTemplateNameException;
|
|
||||||
import freemarker.template.Template;
|
import freemarker.template.Template;
|
||||||
import freemarker.template.TemplateException;
|
import freemarker.template.TemplateException;
|
||||||
import freemarker.template.TemplateNotFoundException;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@ -43,84 +39,95 @@ public class BindingAction {
|
||||||
// The project id is the dataset name
|
// The project id is the dataset name
|
||||||
String datasetName = itemObserved.getProjectId();
|
String datasetName = itemObserved.getProjectId();
|
||||||
|
|
||||||
switch (eventSubscribed.getEvent()) {
|
try {
|
||||||
case PROJECT_CREATED: {
|
|
||||||
log.info("Going to create item with id {} on the catalogue...", datasetName);
|
|
||||||
// Create or Update the item on the catalogue
|
|
||||||
String catalogueItemJSON = toCatalogueItem();
|
|
||||||
new GCatCaller().createOrUpdateTheDatasetOnCatalogue(datasetName, catalogueItemJSON);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case PROJECT_DELETED: {
|
|
||||||
log.info("Going to delete item with name {} on the catalogue...", datasetName);
|
|
||||||
new GCatCaller().deleteDatasetOnCatalogue(datasetName);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case PROJECT_UPDATED: {
|
|
||||||
log.info("Going to update item with id {} on the catalogue...", datasetName);
|
|
||||||
// Create or Update the item on the catalogue
|
|
||||||
String catalogueItemJSON = toCatalogueItem();
|
|
||||||
new GCatCaller().createOrUpdateTheDatasetOnCatalogue(datasetName, catalogueItemJSON);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case LIFECYCLE_STEP_PERFORMED: {
|
|
||||||
|
|
||||||
List<BindingWhen> listBindingWhen = eventSubscribed.getWhen();
|
switch (eventSubscribed.getEvent()) {
|
||||||
if (listBindingWhen == null || listBindingWhen.size() == 0) {
|
case PROJECT_CREATED: {
|
||||||
log.warn("No binding found, so returning!!");
|
log.info("Going to create item with id {} on the catalogue...", datasetName);
|
||||||
return;
|
// Create or Update the item on the catalogue
|
||||||
|
String catalogueItemJSON = toCatalogueItem();
|
||||||
|
if (catalogueItemJSON != null)
|
||||||
|
new GCatCaller().createOrUpdateTheDatasetOnCatalogue(datasetName, catalogueItemJSON);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
case PROJECT_DELETED: {
|
||||||
|
log.info("Going to delete item with name {} on the catalogue...", datasetName);
|
||||||
|
new GCatCaller().deleteDatasetOnCatalogue(datasetName);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PROJECT_UPDATED: {
|
||||||
|
log.info("Going to update item with id {} on the catalogue...", datasetName);
|
||||||
|
// Create or Update the item on the catalogue
|
||||||
|
String catalogueItemJSON = toCatalogueItem();
|
||||||
|
if (catalogueItemJSON != null)
|
||||||
|
new GCatCaller().createOrUpdateTheDatasetOnCatalogue(datasetName, catalogueItemJSON);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case LIFECYCLE_STEP_PERFORMED: {
|
||||||
|
|
||||||
for (BindingWhen bindingWhen : listBindingWhen) {
|
List<BindingWhen> listBindingWhen = eventSubscribed.getWhen();
|
||||||
log.info("Checking configuration matching on: {}", bindingWhen);
|
if (listBindingWhen == null || listBindingWhen.size() == 0) {
|
||||||
|
log.warn("No binding found, so returning!!");
|
||||||
if (bindingWhen.getTarget_phase() == null || bindingWhen.getTarget_phase().size() == 0) {
|
return;
|
||||||
log.warn("No binding on target_phase, so returning!!");
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bindingWhen.getLast_invoked_step() == null || bindingWhen.getLast_invoked_step().length() == 0) {
|
for (BindingWhen bindingWhen : listBindingWhen) {
|
||||||
log.warn("No binding on last invoked step, so returning!!");
|
log.info("Checking configuration matching on: {}", bindingWhen);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reading 'phase' and 'lastInvokedStep' properties from itemObserved
|
if (bindingWhen.getTarget_phase() == null || bindingWhen.getTarget_phase().size() == 0) {
|
||||||
LifecycleInformation lInfo = itemObserved.getProject().getLifecycleInformation();
|
log.warn("No binding on target_phase, so returning!!");
|
||||||
String itemPhase = lInfo.getPhase();
|
continue;
|
||||||
String lastInvokedStep = lInfo.getLastInvokedStep();
|
|
||||||
log.info("ItemObserved phase is: {}, lastInvokedStep is: {}", itemPhase, lastInvokedStep);
|
|
||||||
|
|
||||||
// If there is matching between the plugin configuration and item observed on
|
|
||||||
// phase' and 'lastInvokedStep' fields
|
|
||||||
if (bindingWhen.getTarget_phase().contains(itemPhase)
|
|
||||||
&& bindingWhen.getLast_invoked_step().equalsIgnoreCase(lastInvokedStep)) {
|
|
||||||
log.info(
|
|
||||||
"The item observerd has phase '{}' and lastInvokedStep '{}' like the plugin configuration model",
|
|
||||||
itemPhase, lastInvokedStep);
|
|
||||||
|
|
||||||
if (itemPhase.equalsIgnoreCase(TARGET_PHASE_PUBLISHED)) {
|
|
||||||
String catalogueItemJSON = toCatalogueItem();
|
|
||||||
log.info("Going to create item with name {} on the catalogue...", datasetName);
|
|
||||||
new GCatCaller().createOrUpdateTheDatasetOnCatalogue(datasetName, catalogueItemJSON);
|
|
||||||
|
|
||||||
} else if (itemPhase.equalsIgnoreCase(TARGET_PHASE_DRAFT)) {
|
|
||||||
// Delete the item on the catalogue
|
|
||||||
log.info("Going to delete item with name {} on the catalogue...", datasetName);
|
|
||||||
new GCatCaller().deleteDatasetOnCatalogue(datasetName);
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
log.info(
|
if (bindingWhen.getLast_invoked_step() == null
|
||||||
"Skipping the operation!! No mathing {} status with plugin configuration model [bindingWhen phase '{}', lastInvokedStep '{}']",
|
|| bindingWhen.getLast_invoked_step().length() == 0) {
|
||||||
ItemObserved.class.getSimpleName(), itemPhase, lastInvokedStep);
|
log.warn("No binding on last invoked step, so returning!!");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reading 'phase' and 'lastInvokedStep' properties from itemObserved
|
||||||
|
LifecycleInformation lInfo = itemObserved.getProject().getLifecycleInformation();
|
||||||
|
String itemPhase = lInfo.getPhase();
|
||||||
|
String lastInvokedStep = lInfo.getLastInvokedStep();
|
||||||
|
log.info("ItemObserved phase is: {}, lastInvokedStep is: {}", itemPhase, lastInvokedStep);
|
||||||
|
|
||||||
|
// If there is matching between the plugin configuration and item observed on
|
||||||
|
// phase' and 'lastInvokedStep' fields
|
||||||
|
if (bindingWhen.getTarget_phase().contains(itemPhase)
|
||||||
|
&& bindingWhen.getLast_invoked_step().equalsIgnoreCase(lastInvokedStep)) {
|
||||||
|
log.info(
|
||||||
|
"The item observerd has phase '{}' and lastInvokedStep '{}' like the plugin configuration model",
|
||||||
|
itemPhase, lastInvokedStep);
|
||||||
|
|
||||||
|
if (itemPhase.equalsIgnoreCase(TARGET_PHASE_PUBLISHED)) {
|
||||||
|
String catalogueItemJSON = toCatalogueItem();
|
||||||
|
if (catalogueItemJSON != null) {
|
||||||
|
log.info("Going to create item with name {} on the catalogue...", datasetName);
|
||||||
|
new GCatCaller().createOrUpdateTheDatasetOnCatalogue(datasetName, catalogueItemJSON);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (itemPhase.equalsIgnoreCase(TARGET_PHASE_DRAFT)) {
|
||||||
|
// Delete the item on the catalogue
|
||||||
|
log.info("Going to delete item with name {} on the catalogue...", datasetName);
|
||||||
|
new GCatCaller().deleteDatasetOnCatalogue(datasetName);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.info(
|
||||||
|
"Skipping the operation!! No mathing {} status with plugin configuration model [bindingWhen phase '{}', lastInvokedStep '{}']",
|
||||||
|
ItemObserved.class.getSimpleName(), itemPhase, lastInvokedStep);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
default:
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
} catch (Exception e) {
|
||||||
break;
|
log.error("Error on applying binding action: ", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,17 +142,7 @@ public class BindingAction {
|
||||||
toCatalogueJSON = MappingToCatalogue.apply(fmTemplate, itemObserved.getProject(),
|
toCatalogueJSON = MappingToCatalogue.apply(fmTemplate, itemObserved.getProject(),
|
||||||
itemObserved.getUseCaseDescriptor(), itemObserved.getContext().getId());
|
itemObserved.getUseCaseDescriptor(), itemObserved.getContext().getId());
|
||||||
|
|
||||||
} catch (MalformedURLException e) {
|
} catch (TemplateException | IOException e) {
|
||||||
log.error("Error: ", e);
|
|
||||||
} catch (TemplateException e) {
|
|
||||||
log.error("Error: ", e);
|
|
||||||
} catch (TemplateNotFoundException e) {
|
|
||||||
log.error("Error: ", e);
|
|
||||||
} catch (MalformedTemplateNameException e) {
|
|
||||||
log.error("Error: ", e);
|
|
||||||
} catch (ParseException e) {
|
|
||||||
log.error("Error: ", e);
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error("Error: ", e);
|
log.error("Error: ", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,8 +26,9 @@ public class GCatCaller {
|
||||||
*
|
*
|
||||||
* @param datasetName the dataset name
|
* @param datasetName the dataset name
|
||||||
* @param datasetJSON the dataset JSON
|
* @param datasetJSON the dataset JSON
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public void createOrUpdateTheDatasetOnCatalogue(String datasetName, String datasetJSON) {
|
public void createOrUpdateTheDatasetOnCatalogue(String datasetName, String datasetJSON) throws Exception {
|
||||||
log.info("createOrUpdateTheDatasetOnCatalogue with name {} called", datasetName);
|
log.info("createOrUpdateTheDatasetOnCatalogue with name {} called", datasetName);
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
@ -58,6 +59,7 @@ public class GCatCaller {
|
||||||
|
|
||||||
} catch (WebApplicationException | MalformedURLException e) {
|
} catch (WebApplicationException | MalformedURLException e) {
|
||||||
log.error("Error occurred on creating the dataset " + datasetName + " on the catalogue", e);
|
log.error("Error occurred on creating the dataset " + datasetName + " on the catalogue", e);
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,9 @@ import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonParseException;
|
import com.fasterxml.jackson.core.JsonParseException;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.JsonMappingException;
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||||
import com.jayway.jsonpath.DocumentContext;
|
import com.jayway.jsonpath.DocumentContext;
|
||||||
|
@ -35,7 +35,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
*
|
*
|
||||||
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
*
|
*
|
||||||
* Jun 20, 2024
|
* Jun 20, 2024
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class MappingToCatalogue {
|
public class MappingToCatalogue {
|
||||||
|
@ -48,13 +48,14 @@ public class MappingToCatalogue {
|
||||||
*
|
*
|
||||||
* @param fmTemplate the fm template
|
* @param fmTemplate the fm template
|
||||||
* @param theProject the the project
|
* @param theProject the the project
|
||||||
* @param ucd the ucd
|
* @param ucd the ucd
|
||||||
* @param scope the scope
|
* @param scope the scope
|
||||||
* @return the string
|
* @return the string
|
||||||
* @throws JsonProcessingException the json processing exception
|
* @throws TemplateException
|
||||||
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
public static String apply(Template fmTemplate, Project theProject, UseCaseDescriptor ucd, String scope)
|
public static String apply(Template fmTemplate, Project theProject, UseCaseDescriptor ucd, String scope)
|
||||||
throws JsonProcessingException {
|
throws TemplateException, IOException {
|
||||||
log.info("Apply template {} to project with id '{}' and ucd id '{}' called", fmTemplate.getName(),
|
log.info("Apply template {} to project with id '{}' and ucd id '{}' called", fmTemplate.getName(),
|
||||||
theProject.getId(), ucd.getId());
|
theProject.getId(), ucd.getId());
|
||||||
|
|
||||||
|
@ -86,6 +87,8 @@ public class MappingToCatalogue {
|
||||||
log.info("Adding service fields..");
|
log.info("Adding service fields..");
|
||||||
|
|
||||||
// Adding GIS LINK to doc
|
// Adding GIS LINK to doc
|
||||||
|
// TODO ACTIVATE THIS FOR GENERATING GIS LINK
|
||||||
|
|
||||||
JSONObject theGisLinkObj = JSONObjectOrdered.instance();
|
JSONObject theGisLinkObj = JSONObjectOrdered.instance();
|
||||||
try {
|
try {
|
||||||
String link = GisClient.gisLink(RESOLVE_AS.PUBLIC, ucd.getId(), theProject.getId(), scope,
|
String link = GisClient.gisLink(RESOLVE_AS.PUBLIC, ucd.getId(), theProject.getId(), scope,
|
||||||
|
@ -96,8 +99,7 @@ public class MappingToCatalogue {
|
||||||
theDoc.add("$.extras", theGisLinkObj);
|
theDoc.add("$.extras", theGisLinkObj);
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
String error = "Error occurrend on adding " + GIS_LINK;
|
String error = "Error occurrend on adding " + GIS_LINK;
|
||||||
log.warn(error);
|
log.warn(error, e);
|
||||||
log.debug(error, e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adding system:type to doc
|
// Adding system:type to doc
|
||||||
|
@ -108,26 +110,22 @@ public class MappingToCatalogue {
|
||||||
theDoc.add("$.extras", theSystemType);
|
theDoc.add("$.extras", theSystemType);
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
String error = "Error occurrend on adding " + SYSTEM_TYPE;
|
String error = "Error occurrend on adding " + SYSTEM_TYPE;
|
||||||
log.warn(error);
|
log.warn(error, e);
|
||||||
log.debug(error, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
String catalogueDatasetJSON = prettyPrintJsonUtil(theDoc.jsonString());
|
|
||||||
|
|
||||||
if (log.isTraceEnabled()) {
|
|
||||||
log.trace("To pretty print JSON: \n" + catalogueDatasetJSON);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String catalogueDatasetJSON = prettyPrintJsonUtil(theDoc.jsonString(), false);
|
||||||
|
log.info("To catalogue JSON: \n" + catalogueDatasetJSON);
|
||||||
|
|
||||||
log.info("returning catalogue dataset, json lenght is: " + catalogueDatasetJSON.length());
|
log.info("returning catalogue dataset, json lenght is: " + catalogueDatasetJSON.length());
|
||||||
return catalogueDatasetJSON;
|
return catalogueDatasetJSON;
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error("Error on apply mapping to catalogue: ", e);
|
log.error(IOException.class.getName() + " on apply mapping to catalogue: ", e);
|
||||||
|
throw e;
|
||||||
} catch (TemplateException e) {
|
} catch (TemplateException e) {
|
||||||
log.error("Error on apply mapping to catalogue: ", e);
|
log.error(TemplateException.class.getName() + " on apply mapping to catalogue: ", e);
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -135,9 +133,9 @@ public class MappingToCatalogue {
|
||||||
*
|
*
|
||||||
* @param json the json
|
* @param json the json
|
||||||
* @return the map
|
* @return the map
|
||||||
* @throws JsonParseException the json parse exception
|
* @throws JsonParseException the json parse exception
|
||||||
* @throws JsonMappingException the json mapping exception
|
* @throws JsonMappingException the json mapping exception
|
||||||
* @throws IOException Signals that an I/O exception has occurred.
|
* @throws IOException Signals that an I/O exception has occurred.
|
||||||
*/
|
*/
|
||||||
public static Map<String, Object> fmtJsonUtil(String json)
|
public static Map<String, Object> fmtJsonUtil(String json)
|
||||||
throws JsonParseException, JsonMappingException, IOException {
|
throws JsonParseException, JsonMappingException, IOException {
|
||||||
|
@ -153,12 +151,20 @@ public class MappingToCatalogue {
|
||||||
* @param uglyJsonString the ugly json string
|
* @param uglyJsonString the ugly json string
|
||||||
* @return the string
|
* @return the string
|
||||||
*/
|
*/
|
||||||
public static String prettyPrintJsonUtil(String uglyJsonString) {
|
public static String prettyPrintJsonUtil(String uglyJsonString, boolean indent) {
|
||||||
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
if (indent)
|
||||||
|
mapper.enable(SerializationFeature.INDENT_OUTPUT);
|
||||||
|
|
||||||
Object jsonObject;
|
Object jsonObject;
|
||||||
String prettyJson = "";
|
String prettyJson = "";
|
||||||
try {
|
try {
|
||||||
jsonObject = mapper.readValue(uglyJsonString, Object.class);
|
if (indent)
|
||||||
|
jsonObject = mapper.readValue(uglyJsonString, Object.class);
|
||||||
|
else
|
||||||
|
jsonObject = mapper.readValue(uglyJsonString, JsonNode.class);
|
||||||
|
|
||||||
prettyJson = mapper.writeValueAsString(jsonObject);
|
prettyJson = mapper.writeValueAsString(jsonObject);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return uglyJsonString;
|
return uglyJsonString;
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
package geoportal_to_catalogue;
|
||||||
|
|
||||||
|
import org.gcube.application.cms.cataloguebinding.doaction.GCatCaller;
|
||||||
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||||
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
|
||||||
|
import test.TestContextConfig;
|
||||||
|
|
||||||
|
public class CataloguePurgeDatasets {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
TestContextConfig.readContextSettings();
|
||||||
|
|
||||||
|
System.out.println("CONTEXT: " + TestContextConfig.CONTEXT);
|
||||||
|
System.out.println("TOKEN: " + TestContextConfig.TOKEN);
|
||||||
|
|
||||||
|
int limit = 10;
|
||||||
|
int offset = 0;
|
||||||
|
|
||||||
|
boolean resultExists = true;
|
||||||
|
|
||||||
|
while (resultExists) {
|
||||||
|
System.out.println("offest: " + offset + ", limit: " + limit);
|
||||||
|
ScopeProvider.instance.set(TestContextConfig.CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TestContextConfig.TOKEN);
|
||||||
|
String items = new GCatCaller().list(limit, offset);
|
||||||
|
System.out.println("items: " + items);
|
||||||
|
if (items != null) {
|
||||||
|
resultExists = true;
|
||||||
|
JSONArray array;
|
||||||
|
try {
|
||||||
|
array = new JSONArray(items);
|
||||||
|
|
||||||
|
if (array.length() > 0) {
|
||||||
|
purgeDatasets(array);
|
||||||
|
} else
|
||||||
|
resultExists = false;
|
||||||
|
} catch (JSONException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
offset = limit + offset;
|
||||||
|
} else
|
||||||
|
resultExists = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("done!");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void purgeDatasets(JSONArray array) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
int sleepingTime = 4000;
|
||||||
|
for (int i = 0; i < array.length(); i++) {
|
||||||
|
index++;
|
||||||
|
String datasetName = array.getString(i);
|
||||||
|
System.out.println(index + ") Deleting dataset name : " + datasetName);
|
||||||
|
ScopeProvider.instance.set(TestContextConfig.CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TestContextConfig.TOKEN);
|
||||||
|
new GCatCaller().deleteDatasetOnCatalogue(datasetName);
|
||||||
|
System.out.println("sleeping..." + sleepingTime);
|
||||||
|
Thread.sleep(sleepingTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("done!");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void purgeDatasets(int limit, int offset) {
|
||||||
|
|
||||||
|
TestContextConfig.readContextSettings();
|
||||||
|
try {
|
||||||
|
ScopeProvider.instance.set(TestContextConfig.CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TestContextConfig.TOKEN);
|
||||||
|
String items = new GCatCaller().list(limit, offset);
|
||||||
|
System.out.println("items: " + items);
|
||||||
|
|
||||||
|
JSONArray array = new JSONArray(items);
|
||||||
|
for (int i = 0; i < array.length(); i++) {
|
||||||
|
String datasetName = array.getString(i);
|
||||||
|
System.out.println(i + ") name : " + datasetName);
|
||||||
|
ScopeProvider.instance.set(TestContextConfig.CONTEXT);
|
||||||
|
SecurityTokenProvider.instance.set(TestContextConfig.TOKEN);
|
||||||
|
new GCatCaller().deleteDatasetOnCatalogue(datasetName);
|
||||||
|
|
||||||
|
Thread.sleep(5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("done!");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,310 +0,0 @@
|
||||||
package geoportal_to_catalogue;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.bson.BsonDocument;
|
|
||||||
import org.bson.BsonString;
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.gcube.application.cms.cataloguebinding.doaction.BindingAction;
|
|
||||||
import org.gcube.application.cms.cataloguebinding.doaction.GCatCaller;
|
|
||||||
import org.gcube.application.cms.cataloguebinding.freemarker.FreemarkerConfig;
|
|
||||||
import org.gcube.application.cms.cataloguebinding.freemarker.MappingToCatalogue;
|
|
||||||
import org.gcube.application.cms.cataloguebinding.util.SerializationUtil;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.Project;
|
|
||||||
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
|
|
||||||
import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
|
|
||||||
import org.gcube.application.geoportalcommon.geoportal.ProjectsCaller;
|
|
||||||
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
|
|
||||||
import org.gcube.application.geoportalcommon.shared.SearchingFilter.ORDER;
|
|
||||||
import org.gcube.application.geoportalcommon.shared.geoportal.config.ItemFieldDV;
|
|
||||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonParseException;
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
|
||||||
import com.fasterxml.jackson.databind.JsonMappingException;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.GsonBuilder;
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
import com.google.gson.JsonParser;
|
|
||||||
import com.jayway.jsonpath.DocumentContext;
|
|
||||||
import com.jayway.jsonpath.JsonPath;
|
|
||||||
import com.jayway.jsonpath.spi.json.JsonOrgJsonProvider;
|
|
||||||
|
|
||||||
import freemarker.template.Configuration;
|
|
||||||
import freemarker.template.Template;
|
|
||||||
import freemarker.template.TemplateException;
|
|
||||||
import test.TestContextConfig;
|
|
||||||
|
|
||||||
public class GeoportalToCatalogue {
|
|
||||||
|
|
||||||
public final static String profileID = "profiledConcessioni";
|
|
||||||
public final static String projectID = "666afb4ea08b3011b506de90";
|
|
||||||
//666afb4ea08b3011b506de90
|
|
||||||
//66697afda08b3011b506ddb6
|
|
||||||
|
|
||||||
/*
|
|
||||||
* public static void main(String[] args) {
|
|
||||||
*
|
|
||||||
* try {
|
|
||||||
*
|
|
||||||
* TestContextConfig.readContextSettings();
|
|
||||||
*
|
|
||||||
* ScopeProvider.instance.set(TestContextConfig.CONTEXT);
|
|
||||||
* SecurityTokenProvider.instance.set(TestContextConfig.TOKEN);
|
|
||||||
*
|
|
||||||
* ProjectsCaller clientProjects = GeoportalClientCaller.projects(); Project
|
|
||||||
* theProject = clientProjects.getProjectByID(profileID, projectID); Document
|
|
||||||
* asDocument = SerializationUtil.asDocument(theProject);
|
|
||||||
*
|
|
||||||
* UseCaseDescriptor ucd =
|
|
||||||
* GeoportalClientCaller.useCaseDescriptors().getUCDForId(profileID);
|
|
||||||
*
|
|
||||||
* System.out.println("Source JSON:");
|
|
||||||
* System.out.println(prettyPrintUsingGson(asDocument.toJson()));
|
|
||||||
* applyMappingToCatalogue(theProject, ucd);
|
|
||||||
*
|
|
||||||
* } catch (Exception e) { // TODO: handle exception }
|
|
||||||
*
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
TestContextConfig.readContextSettings();
|
|
||||||
String sourceScope = TestContextConfig.CONTEXT;
|
|
||||||
String sourceToken = TestContextConfig.TOKEN;
|
|
||||||
|
|
||||||
String targetScope = "/gcube/devsec/devVRE";
|
|
||||||
String targetToken = "";
|
|
||||||
|
|
||||||
publishProjectsOnCatalogue(10, sourceScope, sourceToken, targetScope, targetToken);
|
|
||||||
|
|
||||||
//purgeDatasets(10, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Harvesting from scope and copy to another scope
|
|
||||||
*
|
|
||||||
* @param limit
|
|
||||||
*/
|
|
||||||
public static void publishProjectsOnCatalogue(int limit, String sourceScope, String sourceToken, String targetScope,
|
|
||||||
String targetToken) {
|
|
||||||
|
|
||||||
TestContextConfig.readContextSettings();
|
|
||||||
|
|
||||||
List<Project> list = new ArrayList<Project>();
|
|
||||||
try {
|
|
||||||
ScopeProvider.instance.set(sourceScope);
|
|
||||||
SecurityTokenProvider.instance.set(sourceToken);
|
|
||||||
|
|
||||||
//Single Project
|
|
||||||
// ProjectsCaller clientProjects = GeoportalClientCaller.projects();
|
|
||||||
// Project project = clientProjects.getProjectByID(profileID, projectID);
|
|
||||||
// list.add(project);
|
|
||||||
|
|
||||||
list = getListProjects(limit, 0);
|
|
||||||
|
|
||||||
UseCaseDescriptor ucd = GeoportalClientCaller.useCaseDescriptors().getUCDForId(profileID);
|
|
||||||
|
|
||||||
for (int i = 0; i < limit; i++) {
|
|
||||||
Project theProject = list.get(i);
|
|
||||||
System.out.println("\n\n######Publishing the PROJECT N. "+i);
|
|
||||||
|
|
||||||
Template fmTemplate = getLocalFreemarkerTemplate();
|
|
||||||
|
|
||||||
ScopeProvider.instance.set(sourceScope);
|
|
||||||
SecurityTokenProvider.instance.set(sourceToken);
|
|
||||||
String toCatalogueJSON = MappingToCatalogue.apply(fmTemplate, theProject, ucd, sourceScope);
|
|
||||||
|
|
||||||
ScopeProvider.instance.set(targetScope);
|
|
||||||
SecurityTokenProvider.instance.set(targetToken);
|
|
||||||
new GCatCaller().createOrUpdateTheDatasetOnCatalogue(theProject.getId(), toCatalogueJSON);
|
|
||||||
|
|
||||||
System.out.println("\n###### END Publishing the PROJECT N. "+i);
|
|
||||||
|
|
||||||
System.out.println("\n###### sleeping "+i);
|
|
||||||
Thread.sleep(5000);
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("\ndone!!!!");
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Harvesting from scope and copy to another scope
|
|
||||||
*
|
|
||||||
* @param limit
|
|
||||||
*/
|
|
||||||
/*public static void purgeDatasets(int limit, int offset) {
|
|
||||||
|
|
||||||
TestContextConfig.readContextSettings();
|
|
||||||
|
|
||||||
List<Project> list;
|
|
||||||
try {
|
|
||||||
ScopeProvider.instance.set(TestContextConfig.CONTEXT);
|
|
||||||
SecurityTokenProvider.instance.set(TestContextConfig.TOKEN);
|
|
||||||
String items = new GCatCaller().list(limit, offset);
|
|
||||||
System.out.println("items: "+items);
|
|
||||||
|
|
||||||
JSONArray array = new JSONArray(items);
|
|
||||||
for (int i=0; i<array.length(); i++) {
|
|
||||||
String datasetName = array.getString(i);
|
|
||||||
System.out.println(i+") name : "+datasetName);
|
|
||||||
ScopeProvider.instance.set(TestContextConfig.CONTEXT);
|
|
||||||
SecurityTokenProvider.instance.set(TestContextConfig.TOKEN);
|
|
||||||
new GCatCaller().deleteDatasetOnCatalogue(datasetName);
|
|
||||||
|
|
||||||
Thread.sleep(5000);
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("done!");
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
public static List<Project> getListProjects() throws Exception {
|
|
||||||
ProjectsCaller clientProjects = GeoportalClientCaller.projects();
|
|
||||||
return clientProjects.getListForProfileID(profileID);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<Project> getListProjects(int limit, int offset) throws Exception {
|
|
||||||
ProjectsCaller clientProjects = GeoportalClientCaller.projects();
|
|
||||||
SearchingFilter filter = new SearchingFilter();
|
|
||||||
filter.setOrder(ORDER.DESC);
|
|
||||||
List<ItemFieldDV> orederByFields = new ArrayList<ItemFieldDV>();
|
|
||||||
ItemFieldDV field = new ItemFieldDV("Updated", Arrays.asList("_info._lastEditInfo._instant"), "$or", true, true, true);
|
|
||||||
orederByFields.add(field);
|
|
||||||
filter.setOrderByFields(orederByFields);
|
|
||||||
Iterator<Project> iterator = clientProjects.queryOnMongo(profileID, 300, offset, limit, filter);
|
|
||||||
List<Project> listP = new ArrayList<Project>();
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
|
|
||||||
listP.add(iterator.next());
|
|
||||||
}
|
|
||||||
|
|
||||||
return listP;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Map<String, Object> fmtJsonUtil(String json)
|
|
||||||
throws JsonParseException, JsonMappingException, IOException {
|
|
||||||
ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
|
||||||
return OBJECT_MAPPER.readValue(json, new TypeReference<HashMap<String, Object>>() {
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Template getLocalFreemarkerTemplate() throws IOException {
|
|
||||||
|
|
||||||
// Create your Configuration instance, and specify if up to what FreeMarker
|
|
||||||
// version (here 2.3.32) do you want to apply the fixes that are not 100%
|
|
||||||
// backward-compatible. See the Configuration JavaDoc for details.
|
|
||||||
Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
|
|
||||||
System.out.println("Working Directory = " + System.getProperty("user.dir"));
|
|
||||||
// Specify the source where the template files come from. Here I set a
|
|
||||||
// plain directory for it, but non-file-system sources are possible too:
|
|
||||||
cfg.setDirectoryForTemplateLoading(
|
|
||||||
new File(System.getProperty("user.dir") + "/src/test/java/geoportal_to_catalogue"));
|
|
||||||
// Set the preferred charset template files are stored in. UTF-8 is
|
|
||||||
// a good choice in most applications:
|
|
||||||
cfg.setDefaultEncoding("UTF-8");
|
|
||||||
|
|
||||||
Template template = cfg.getTemplate("d4gna_to_catalogue_template.ftl");
|
|
||||||
return template;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void applyMappingToCatalogue(Project theProject, UseCaseDescriptor ucd)
|
|
||||||
throws JsonProcessingException {
|
|
||||||
|
|
||||||
Document asDocument = SerializationUtil.asDocument(theProject);
|
|
||||||
String json = asDocument.toJson();
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
Template template = getLocalFreemarkerTemplate();
|
|
||||||
|
|
||||||
Map toJsonMap = fmtJsonUtil(json);
|
|
||||||
File tempFile = writeTempFile(json);
|
|
||||||
StringWriter stringWriter = new StringWriter();
|
|
||||||
|
|
||||||
Map root = new HashMap();
|
|
||||||
root.put("doc", toJsonMap);
|
|
||||||
|
|
||||||
template.process(root, stringWriter);
|
|
||||||
String toCatalogueJSON = stringWriter.toString();
|
|
||||||
System.out.println("\n\ntoCatalogueString:" + toCatalogueJSON);
|
|
||||||
|
|
||||||
System.out.println("\nPretty printing 1");
|
|
||||||
System.out.println(prettyPrintUsingGson(toCatalogueJSON));
|
|
||||||
|
|
||||||
com.jayway.jsonpath.Configuration configuration = com.jayway.jsonpath.Configuration.builder()
|
|
||||||
.jsonProvider(new JsonOrgJsonProvider()).build();
|
|
||||||
|
|
||||||
DocumentContext theDoc = JsonPath.parse(toCatalogueJSON, configuration);
|
|
||||||
// GIS LINK
|
|
||||||
JSONObject theGisLinkObj = JSONObjectOrdered.instance();
|
|
||||||
theGisLinkObj.put("key", "Gis Link");
|
|
||||||
theGisLinkObj.put("value", "https://data.dev.d4science.org/test/my_gis_link");
|
|
||||||
theDoc.add("$.extras", theGisLinkObj);
|
|
||||||
|
|
||||||
// system:type
|
|
||||||
JSONObject theSystemType = JSONObjectOrdered.instance();
|
|
||||||
theSystemType.put("key", "system:type");
|
|
||||||
theSystemType.put("value", ucd.getName());
|
|
||||||
theDoc.add("$.extras", theSystemType);
|
|
||||||
|
|
||||||
System.out.println("\n\nTo pretty print JSON:");
|
|
||||||
// System.out.println("gis link: "+theDoc.jsonString());
|
|
||||||
System.out.println(prettyPrintUsingGson(theDoc.jsonString()));
|
|
||||||
|
|
||||||
} catch (IOException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (TemplateException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (JSONException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String prettyPrintUsingGson(String uglyJson) {
|
|
||||||
Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
|
||||||
JsonElement jsonElement = new JsonParser().parse(uglyJson);
|
|
||||||
String prettyJsonString = gson.toJson(jsonElement);
|
|
||||||
return prettyJsonString;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static File writeTempFile(String toWrite) throws IOException {
|
|
||||||
File tmpFile = File.createTempFile("test", ".tmp");
|
|
||||||
FileWriter writer = new FileWriter(tmpFile);
|
|
||||||
writer.write(toWrite);
|
|
||||||
writer.close();
|
|
||||||
|
|
||||||
return tmpFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,487 @@
|
||||||
|
package geoportal_to_catalogue;
|
||||||
|
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.rmi.RemoteException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.gcube.application.cms.cataloguebinding.doaction.GCatCaller;
|
||||||
|
import org.gcube.application.cms.cataloguebinding.freemarker.MappingToCatalogue;
|
||||||
|
import org.gcube.application.geoportal.common.model.configuration.Archive;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
|
||||||
|
import org.gcube.application.geoportal.common.rest.Projects;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
|
||||||
|
import org.gcube.application.geoportalcommon.geoportal.ProjectsCaller;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.SearchingFilter.LOGICAL_OP;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.SearchingFilter.ORDER;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.WhereClause;
|
||||||
|
import org.gcube.application.geoportalcommon.shared.geoportal.config.ItemFieldDV;
|
||||||
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||||
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonParseException;
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
|
||||||
|
import freemarker.template.Configuration;
|
||||||
|
import freemarker.template.Template;
|
||||||
|
import freemarker.template.TemplateException;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import test.TestContextConfig;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class GeoportalToCatalogueBatchPublisher.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Jun 25, 2024
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class GeoportalToCatalogueBatchPublisher {
|
||||||
|
|
||||||
|
public final static String profileID = "profiledConcessioni";
|
||||||
|
public final static Integer MAX_ITEMS = 100;
|
||||||
|
|
||||||
|
static PrintWriter reportPrintWriter;
|
||||||
|
static PrintWriter errorPrintWriter;
|
||||||
|
private static long startTime;
|
||||||
|
|
||||||
|
private static final String CSV_DELIMITER = ";";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The main method.
|
||||||
|
*
|
||||||
|
* @param args the arguments
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
//procedureToPublishProjectsOnCatalogue();
|
||||||
|
|
||||||
|
String projectId = " 6663016a312dc236d217be5c";
|
||||||
|
checkMappingToJSONForProjectByID(projectId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void checkMappingToJSONForProjectByID(String projectID) {
|
||||||
|
TestContextConfig.readContextSettings();
|
||||||
|
String sourceScope = TestContextConfig.CONTEXT;
|
||||||
|
String sourceToken = TestContextConfig.TOKEN;
|
||||||
|
|
||||||
|
ScopeProvider.instance.set(sourceScope);
|
||||||
|
SecurityTokenProvider.instance.set(sourceToken);
|
||||||
|
ProjectsCaller clientProjects = GeoportalClientCaller.projects();
|
||||||
|
Projects<Project> client = (Projects<Project>) clientProjects.getClient(profileID);
|
||||||
|
|
||||||
|
try {
|
||||||
|
UseCaseDescriptor ucd = GeoportalClientCaller.useCaseDescriptors().getUCDForId(profileID);
|
||||||
|
Project theProject = client.getById(projectID);
|
||||||
|
log.info("\n\nConverting the project {}", theProject.getId());
|
||||||
|
String toCatalogueJSON = mapToCatalogue(theProject, ucd, sourceScope, sourceToken);
|
||||||
|
String jsonPretty = prettyPrintUsingGson(toCatalogueJSON);
|
||||||
|
log.info(jsonPretty);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (Exception e1) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void procedureToPublishProjectsOnCatalogue() {
|
||||||
|
TestContextConfig.readContextSettings();
|
||||||
|
String sourceScope = TestContextConfig.CONTEXT;
|
||||||
|
String sourceToken = TestContextConfig.TOKEN;
|
||||||
|
|
||||||
|
String reportFile = TestContextConfig.CONTEXT.replaceAll("/", "_") + "_report_.csv";
|
||||||
|
String errorFile = TestContextConfig.CONTEXT.replaceAll("/", "_") + "_error_.csv";
|
||||||
|
try {
|
||||||
|
Files.deleteIfExists(Paths.get(reportFile));
|
||||||
|
Files.deleteIfExists(Paths.get(errorFile));
|
||||||
|
} catch (IOException e1) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
|
||||||
|
FileWriter reportWriter = new FileWriter(reportFile, true);
|
||||||
|
FileWriter errorWriter = new FileWriter(errorFile, true);
|
||||||
|
BufferedWriter reportBW = new BufferedWriter(reportWriter);
|
||||||
|
BufferedWriter errorBW = new BufferedWriter(errorWriter);
|
||||||
|
reportPrintWriter = new PrintWriter(reportBW);
|
||||||
|
reportPrintWriter.println("NB." + CSV_DELIMITER + " PROJECT_ID" + CSV_DELIMITER + " MAPPING_TO_CATALOGUE"
|
||||||
|
+ CSV_DELIMITER + "");
|
||||||
|
errorPrintWriter = new PrintWriter(errorBW);
|
||||||
|
errorPrintWriter.println("NB." + CSV_DELIMITER + " PROJECT_ID" + CSV_DELIMITER + " MAPPING_TO_CATALOGUE"
|
||||||
|
+ CSV_DELIMITER + " ERROR" + CSV_DELIMITER + "");
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("Procedure starting at: "+getFormattedDateTime());
|
||||||
|
startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
Integer totalProjects = null;
|
||||||
|
try {
|
||||||
|
ScopeProvider.instance.set(sourceScope);
|
||||||
|
SecurityTokenProvider.instance.set(sourceToken);
|
||||||
|
totalProjects = getTotalProjects(profileID);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totalProjects == null) {
|
||||||
|
log.error("No document found!!!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("Total projects are: " + totalProjects);
|
||||||
|
boolean documentFound = true;
|
||||||
|
boolean maxItemsReached = false;
|
||||||
|
int limit = 10;
|
||||||
|
int offset = 0;
|
||||||
|
|
||||||
|
int counter = 0;
|
||||||
|
try {
|
||||||
|
while (documentFound && !maxItemsReached) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ##### NB!!!! USING SOURCE SCOPE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ScopeProvider.instance.set(sourceScope);
|
||||||
|
SecurityTokenProvider.instance.set(sourceToken);
|
||||||
|
List<Project> list = getListProjects(limit, offset);
|
||||||
|
log.info("limit {}, offset {}", limit, offset);
|
||||||
|
|
||||||
|
if (list.size() > 0) {
|
||||||
|
UseCaseDescriptor ucd = GeoportalClientCaller.useCaseDescriptors().getUCDForId(profileID);
|
||||||
|
for (int i = 0; i < list.size(); i++) {
|
||||||
|
counter++;
|
||||||
|
log.info("\n\nConuter is: " + counter);
|
||||||
|
if (MAX_ITEMS != null && counter > MAX_ITEMS) {
|
||||||
|
maxItemsReached = true;
|
||||||
|
log.info("\n###### MAX_ITEMS reached: " + maxItemsReached);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Project theProject = list.get(i);
|
||||||
|
log.info("\n\nConverting the project {}", theProject.getId());
|
||||||
|
String toCatalogueJSON = "";
|
||||||
|
try {
|
||||||
|
toCatalogueJSON = mapToCatalogue(theProject, ucd, sourceScope, sourceToken);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ##### NB!!!! USING TARGET SCOPE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
String targetScope = "";
|
||||||
|
String targetToken = "";
|
||||||
|
|
||||||
|
if(targetScope==null || targetToken==null) {
|
||||||
|
throw new Exception("Check targetScope and/or targetToken!!!");
|
||||||
|
}
|
||||||
|
|
||||||
|
ScopeProvider.instance.set(targetScope);
|
||||||
|
SecurityTokenProvider.instance.set(targetToken);
|
||||||
|
log.info("\n publishOnCatalogue the PROJECT N. " + counter + " with id: "
|
||||||
|
+ theProject.getId());
|
||||||
|
|
||||||
|
publishOnCatalogue(theProject, toCatalogueJSON);
|
||||||
|
|
||||||
|
log.info("\n end publishOnCatalogue the PROJECT N. " + counter);
|
||||||
|
|
||||||
|
writeReport(counter + CSV_DELIMITER + " " + theProject.getId() + CSV_DELIMITER + "'"
|
||||||
|
+ toCatalogueJSON + "'" + CSV_DELIMITER);
|
||||||
|
|
||||||
|
log.info("\n###### sleeping " + counter);
|
||||||
|
Thread.sleep(3000);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("ERROR on publishing project with id: " + theProject.getId());
|
||||||
|
writeError(counter + CSV_DELIMITER + " " + theProject.getId() + CSV_DELIMITER + " '"
|
||||||
|
+ toCatalogueJSON + "'" + CSV_DELIMITER + " '" + e.getMessage() + "'"
|
||||||
|
+ CSV_DELIMITER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
documentFound = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
offset = offset + limit;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
documentFound = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("External error");
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if (reportPrintWriter != null)
|
||||||
|
reportPrintWriter.close();
|
||||||
|
|
||||||
|
if (errorPrintWriter != null)
|
||||||
|
errorPrintWriter.close();
|
||||||
|
|
||||||
|
System.out.println("\n\nFINISHED!!!");
|
||||||
|
System.out.println("Procedure terimated at: "+getFormattedDateTime());
|
||||||
|
long millis = System.currentTimeMillis()-startTime;
|
||||||
|
long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
|
||||||
|
System.out.println("Done! In ms: "+(millis) + ", minutes: "+minutes);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Publish on catalogue.
|
||||||
|
*
|
||||||
|
* @param theProject the the project
|
||||||
|
* @param toCatalogueJSON the to catalogue JSON
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
public static void publishOnCatalogue(Project theProject, String toCatalogueJSON) throws Exception {
|
||||||
|
|
||||||
|
new GCatCaller().createOrUpdateTheDatasetOnCatalogue(theProject.getId(), toCatalogueJSON);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map to catalogue.
|
||||||
|
*
|
||||||
|
* @param theProject the the project
|
||||||
|
* @param ucd the ucd
|
||||||
|
* @param sourceScope the source scope
|
||||||
|
* @param sourceToken the source token
|
||||||
|
* @return the string
|
||||||
|
* @throws TemplateException the template exception
|
||||||
|
* @throws IOException Signals that an I/O exception has occurred.
|
||||||
|
*/
|
||||||
|
public static String mapToCatalogue(Project theProject, UseCaseDescriptor ucd, String sourceScope,
|
||||||
|
String sourceToken) throws TemplateException, IOException {
|
||||||
|
log.info("\n\nMapping the PROJECT with id: " + theProject.getId());
|
||||||
|
ScopeProvider.instance.set(sourceScope);
|
||||||
|
SecurityTokenProvider.instance.set(sourceToken);
|
||||||
|
Template fmTemplate = getLocalFreemarkerTemplate();
|
||||||
|
String toCatalogueJSON = MappingToCatalogue.apply(fmTemplate, theProject, ucd, sourceScope);
|
||||||
|
|
||||||
|
log.trace("mapping is: " + toCatalogueJSON);
|
||||||
|
return toCatalogueJSON;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list projects.
|
||||||
|
*
|
||||||
|
* @return the list projects
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
public static List<Project> getListProjects() throws Exception {
|
||||||
|
ProjectsCaller clientProjects = GeoportalClientCaller.projects();
|
||||||
|
return clientProjects.getListForProfileID(profileID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list projects.
|
||||||
|
*
|
||||||
|
* @param limit the limit
|
||||||
|
* @param offset the offset
|
||||||
|
* @return the list projects
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
public static List<Project> getListProjects(int limit, int offset) throws Exception {
|
||||||
|
ProjectsCaller clientProjects = GeoportalClientCaller.projects();
|
||||||
|
SearchingFilter filter = new SearchingFilter();
|
||||||
|
filter.setOrder(ORDER.DESC);
|
||||||
|
List<ItemFieldDV> orederByFields = new ArrayList<ItemFieldDV>();
|
||||||
|
// Order By
|
||||||
|
ItemFieldDV fieldUpdated = new ItemFieldDV("Updated", Arrays.asList("_info._lastEditInfo._instant"), "$or",
|
||||||
|
true, true, true);
|
||||||
|
orederByFields.add(fieldUpdated);
|
||||||
|
|
||||||
|
// Where Conditions
|
||||||
|
List<WhereClause> conditions = new ArrayList<WhereClause>();
|
||||||
|
Map<String, Object> searchInto = new HashMap<String, Object>();
|
||||||
|
searchInto.put("_lifecycleInformation._phase", "Published");
|
||||||
|
conditions.add(new WhereClause(LOGICAL_OP.OR, searchInto));
|
||||||
|
filter.setConditions(conditions);
|
||||||
|
|
||||||
|
filter.setOrderByFields(orederByFields);
|
||||||
|
Iterator<Project> iterator = clientProjects.queryOnMongo(profileID, 300, offset, limit, filter);
|
||||||
|
List<Project> listP = new ArrayList<Project>();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
|
||||||
|
listP.add(iterator.next());
|
||||||
|
}
|
||||||
|
|
||||||
|
return listP;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the total projects.
|
||||||
|
*
|
||||||
|
* @param profileID the profile ID
|
||||||
|
* @return the total projects
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
public static Integer getTotalProjects(String profileID) throws Exception {
|
||||||
|
System.out.println("getTotalDocument called for profileID: " + profileID);
|
||||||
|
ProjectsCaller clientProjects = GeoportalClientCaller.projects();
|
||||||
|
Projects<Project> client = (Projects<Project>) clientProjects.getClient(profileID);
|
||||||
|
org.gcube.application.geoportal.common.model.configuration.Configuration config = client.getConfiguration();
|
||||||
|
List<Archive> listArchives = config.getArchives();
|
||||||
|
|
||||||
|
for (Archive archive : listArchives) {
|
||||||
|
String theType = archive.getString("_type");
|
||||||
|
if (theType.equalsIgnoreCase(ProjectsCaller.DOCUMENT_STORE_COLLECTION)) {
|
||||||
|
String totalDocumentAre = archive.get("count").toString();
|
||||||
|
int total = Integer.parseInt(totalDocumentAre);
|
||||||
|
log.info("total docs for profileID: {}, are: {}", profileID, total);
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fmt json util.
|
||||||
|
*
|
||||||
|
* @param json the json
|
||||||
|
* @return the map
|
||||||
|
* @throws JsonParseException the json parse exception
|
||||||
|
* @throws JsonMappingException the json mapping exception
|
||||||
|
* @throws IOException Signals that an I/O exception has occurred.
|
||||||
|
*/
|
||||||
|
public static Map<String, Object> fmtJsonUtil(String json)
|
||||||
|
throws JsonParseException, JsonMappingException, IOException {
|
||||||
|
ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
||||||
|
return OBJECT_MAPPER.readValue(json, new TypeReference<HashMap<String, Object>>() {
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the local freemarker template.
|
||||||
|
*
|
||||||
|
* @return the local freemarker template
|
||||||
|
* @throws IOException Signals that an I/O exception has occurred.
|
||||||
|
*/
|
||||||
|
public static Template getLocalFreemarkerTemplate() throws IOException {
|
||||||
|
|
||||||
|
// Create your Configuration instance, and specify if up to what FreeMarker
|
||||||
|
// version (here 2.3.32) do you want to apply the fixes that are not 100%
|
||||||
|
// backward-compatible. See the Configuration JavaDoc for details.
|
||||||
|
Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
|
||||||
|
System.out.println("Working Directory = " + System.getProperty("user.dir"));
|
||||||
|
// Specify the source where the template files come from. Here I set a
|
||||||
|
// plain directory for it, but non-file-system sources are possible too:
|
||||||
|
cfg.setDirectoryForTemplateLoading(
|
||||||
|
new File(System.getProperty("user.dir") + "/src/test/java/geoportal_to_catalogue"));
|
||||||
|
// Set the preferred charset template files are stored in. UTF-8 is
|
||||||
|
// a good choice in most applications:
|
||||||
|
cfg.setDefaultEncoding("UTF-8");
|
||||||
|
|
||||||
|
Template template = cfg.getTemplate("d4gna_to_catalogue_template.ftl");
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pretty print using gson.
|
||||||
|
*
|
||||||
|
* @param uglyJson the ugly json
|
||||||
|
* @return the string
|
||||||
|
*/
|
||||||
|
public static String prettyPrintUsingGson(String uglyJson) {
|
||||||
|
Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
||||||
|
JsonElement jsonElement = new JsonParser().parse(uglyJson);
|
||||||
|
String prettyJsonString = gson.toJson(jsonElement);
|
||||||
|
return prettyJsonString;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write report.
|
||||||
|
*
|
||||||
|
* @param newline the newline
|
||||||
|
*/
|
||||||
|
private static synchronized void writeReport(String newline) {
|
||||||
|
reportPrintWriter.println(newline);
|
||||||
|
reportPrintWriter.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write error.
|
||||||
|
*
|
||||||
|
* @param newline the newline
|
||||||
|
*/
|
||||||
|
private static synchronized void writeError(String newline) {
|
||||||
|
errorPrintWriter.println(newline);
|
||||||
|
errorPrintWriter.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the formatted date time.
|
||||||
|
*
|
||||||
|
* @return the formatted date time
|
||||||
|
*/
|
||||||
|
public static String getFormattedDateTime(){
|
||||||
|
long yourmilliseconds = System.currentTimeMillis();
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm:ss");
|
||||||
|
Date resultdate = new Date(yourmilliseconds);
|
||||||
|
return sdf.format(resultdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* public static void main(String[] args) {
|
||||||
|
*
|
||||||
|
* try {
|
||||||
|
*
|
||||||
|
* TestContextConfig.readContextSettings();
|
||||||
|
*
|
||||||
|
* ScopeProvider.instance.set(TestContextConfig.CONTEXT);
|
||||||
|
* SecurityTokenProvider.instance.set(TestContextConfig.TOKEN);
|
||||||
|
*
|
||||||
|
* ProjectsCaller clientProjects = GeoportalClientCaller.projects(); Project
|
||||||
|
* theProject = clientProjects.getProjectByID(profileID, projectID); Document
|
||||||
|
* asDocument = SerializationUtil.asDocument(theProject);
|
||||||
|
*
|
||||||
|
* UseCaseDescriptor ucd =
|
||||||
|
* GeoportalClientCaller.useCaseDescriptors().getUCDForId(profileID);
|
||||||
|
*
|
||||||
|
* System.out.println("Source JSON:");
|
||||||
|
* System.out.println(prettyPrintUsingGson(asDocument.toJson()));
|
||||||
|
* applyMappingToCatalogue(theProject, ucd);
|
||||||
|
*
|
||||||
|
* } catch (Exception e) { // TODO: handle exception }
|
||||||
|
*
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
|
@ -140,23 +140,29 @@
|
||||||
|
|
||||||
|
|
||||||
<#--
|
<#--
|
||||||
Starting document mapping to Catalogue
|
############################################################
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Starting document mapping to Catalogue
|
||||||
|
#
|
||||||
|
#
|
||||||
|
############################################################
|
||||||
-->
|
-->
|
||||||
<#compress>
|
<#compress>
|
||||||
{
|
{
|
||||||
"name": "${jsonProj._id}",
|
"name": "${jsonProj._id}",
|
||||||
"title": "${theDocument.nome}",
|
"title": "${sanitizeString(theDocument.nome)}",
|
||||||
"license_id": "CC-BY-SA-4.0",
|
"license_id": "CC-BY-SA-4.0",
|
||||||
"private": false,
|
"private": false,
|
||||||
<#assign sanitizedNotes = sanitizeString(theDocument.introduzione) />
|
<#assign sanitizedNotes = sanitizeString(theDocument.introduzione) />
|
||||||
"notes": "${sanitizedNotes}",
|
"notes": "${sanitizedNotes}",
|
||||||
|
|
||||||
<#--
|
<#--
|
||||||
#######################################
|
######################
|
||||||
|
|
||||||
RESOURCES
|
RESOURCES
|
||||||
|
|
||||||
#######################################
|
######################
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<#-- Mapping "Relazione Scavo" as resource -->
|
<#-- Mapping "Relazione Scavo" as resource -->
|
||||||
|
@ -197,11 +203,11 @@ Starting document mapping to Catalogue
|
||||||
|
|
||||||
|
|
||||||
<#--
|
<#--
|
||||||
#######################################
|
######################
|
||||||
|
|
||||||
TAGS
|
TAGS
|
||||||
|
|
||||||
#######################################
|
######################
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<#-- Mapping "paroleChiaveLibere" as tag -->
|
<#-- Mapping "paroleChiaveLibere" as tag -->
|
||||||
|
@ -214,11 +220,11 @@ Starting document mapping to Catalogue
|
||||||
|
|
||||||
|
|
||||||
<#--
|
<#--
|
||||||
#######################################
|
######################
|
||||||
|
|
||||||
GROUPS
|
GROUPS
|
||||||
|
|
||||||
#######################################
|
######################
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<#-- Mapping the year of the "dataInizioProgetto" as group -->
|
<#-- Mapping the year of the "dataInizioProgetto" as group -->
|
||||||
|
@ -230,14 +236,19 @@ Starting document mapping to Catalogue
|
||||||
|
|
||||||
|
|
||||||
<#--
|
<#--
|
||||||
#######################################
|
######################
|
||||||
|
|
||||||
EXTRAS
|
EXTRAS
|
||||||
|
|
||||||
#######################################
|
######################
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<#-- Mapping extras fields -->
|
<#-- Mapping extras fields -->
|
||||||
|
|
||||||
|
<#if theDocument.contributore??>
|
||||||
|
<@assignExtraField key="Contributore" value=theDocument.contributore asObject=false></@assignExtraField>
|
||||||
|
</#if>
|
||||||
|
|
||||||
<#if theDocument.responsabile??>
|
<#if theDocument.responsabile??>
|
||||||
<@assignExtraField key="Responsabile dei contenuti" value=theDocument.responsabile asObject=false></@assignExtraField>
|
<@assignExtraField key="Responsabile dei contenuti" value=theDocument.responsabile asObject=false></@assignExtraField>
|
||||||
</#if>
|
</#if>
|
||||||
|
@ -250,6 +261,10 @@ Starting document mapping to Catalogue
|
||||||
<@assignExtraField key="Ufficio MiC competente per territorio" value=theDocument.ufficioMic asObject=false></@assignExtraField>
|
<@assignExtraField key="Ufficio MiC competente per territorio" value=theDocument.ufficioMic asObject=false></@assignExtraField>
|
||||||
</#if>
|
</#if>
|
||||||
|
|
||||||
|
<#if theDocument.funzionarioResponsabile??>
|
||||||
|
<@assignExtraField key="Funzionario Responsabile" value=theDocument.funzionarioResponsabile asObject=false></@assignExtraField>
|
||||||
|
</#if>
|
||||||
|
|
||||||
<#if theDocument.fontiFinanziamento??>
|
<#if theDocument.fontiFinanziamento??>
|
||||||
<#if theDocument.fontiFinanziamento?is_sequence>
|
<#if theDocument.fontiFinanziamento?is_sequence>
|
||||||
<#list theDocument.fontiFinanziamento as my_extra>
|
<#list theDocument.fontiFinanziamento as my_extra>
|
||||||
|
@ -260,6 +275,16 @@ Starting document mapping to Catalogue
|
||||||
</#if>
|
</#if>
|
||||||
</#if>
|
</#if>
|
||||||
|
|
||||||
|
<#if theDocument.risorseCorrelate??>
|
||||||
|
<#if theDocument.risorseCorrelate?is_sequence>
|
||||||
|
<#list theDocument.risorseCorrelate as my_extra>
|
||||||
|
<@assignExtraField key="Risorse Correlate" value=my_extra asObject=false></@assignExtraField>
|
||||||
|
</#list>
|
||||||
|
<#else>
|
||||||
|
<@assignExtraField key="Risorse Correlate" value=theDocument.risorseCorrelate asObject=false></@assignExtraField>
|
||||||
|
</#if>
|
||||||
|
</#if>
|
||||||
|
|
||||||
<#if theDocument.dataInizioProgetto??>
|
<#if theDocument.dataInizioProgetto??>
|
||||||
<@assignExtraField key="Data inizio Campagna" value=theDocument.dataInizioProgetto?trim asObject=false></@assignExtraField>
|
<@assignExtraField key="Data inizio Campagna" value=theDocument.dataInizioProgetto?trim asObject=false></@assignExtraField>
|
||||||
</#if>
|
</#if>
|
||||||
|
|
|
@ -61,7 +61,7 @@ public class CatalogueBindingPluginTest extends BasicPluginTest {
|
||||||
/**
|
/**
|
||||||
* Check plugin config.
|
* Check plugin config.
|
||||||
*/
|
*/
|
||||||
// @Test
|
//@Test
|
||||||
public void checkPluginConfig() {
|
public void checkPluginConfig() {
|
||||||
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
CatalogueBindingPlugin plugin = (CatalogueBindingPlugin) plugins.get(CatalogueBindingPlugin.DESCRIPTOR.getId());
|
CatalogueBindingPlugin plugin = (CatalogueBindingPlugin) plugins.get(CatalogueBindingPlugin.DESCRIPTOR.getId());
|
||||||
|
@ -219,7 +219,7 @@ public class CatalogueBindingPluginTest extends BasicPluginTest {
|
||||||
/**
|
/**
|
||||||
* Check notify PROJEC T DELETE D on catalogue.
|
* Check notify PROJEC T DELETE D on catalogue.
|
||||||
*/
|
*/
|
||||||
@Test
|
//@Test
|
||||||
public void checkNotify_PROJECT_DELETED_onCatalogue() {
|
public void checkNotify_PROJECT_DELETED_onCatalogue() {
|
||||||
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
CatalogueBindingPlugin plugin = (CatalogueBindingPlugin) plugins.get(CatalogueBindingPlugin.DESCRIPTOR.getId());
|
CatalogueBindingPlugin plugin = (CatalogueBindingPlugin) plugins.get(CatalogueBindingPlugin.DESCRIPTOR.getId());
|
||||||
|
|
Loading…
Reference in New Issue