Refs #11749: Add 'With Similarities' - 'No Similarities' tag to GRSF Records
Task-Url: https://support.d4science.org/issues/11749 git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-catalogue/grsf-publisher-ws@167394 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
06d369db23
commit
3a451b5ac7
|
@ -24,7 +24,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Information that both Stock and Fishery records must contain.
|
* Information that both Stock and Fishery records must contain.
|
||||||
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
|
* @author Costantino Perciante (ISTI - CNR)
|
||||||
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
*/
|
*/
|
||||||
public abstract class Common extends Base{
|
public abstract class Common extends Base{
|
||||||
|
|
||||||
|
@ -119,6 +120,11 @@ public abstract class Common extends Base{
|
||||||
@CustomField(key=Constants.ANNOTATION_PUBLISHER_CUSTOM_KEY)
|
@CustomField(key=Constants.ANNOTATION_PUBLISHER_CUSTOM_KEY)
|
||||||
private List<AnnotationBean> annotations;
|
private List<AnnotationBean> annotations;
|
||||||
|
|
||||||
|
@JsonProperty(Constants.SIMILARITIES_INDICATOR)
|
||||||
|
@Tag
|
||||||
|
private String similaritiesIndicator;
|
||||||
|
|
||||||
|
|
||||||
public Common() {
|
public Common() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -342,6 +348,14 @@ public abstract class Common extends Base{
|
||||||
this.sdgFlag = sdgFlag;
|
this.sdgFlag = sdgFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getSimilaritiesIndicator() {
|
||||||
|
return similaritiesIndicator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSimilaritiesIndicator(String similaritiesIndicator) {
|
||||||
|
this.similaritiesIndicator = similaritiesIndicator;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Common [dataOwner=" + dataOwner + ", databaseSources="
|
return "Common [dataOwner=" + dataOwner + ", databaseSources="
|
||||||
|
|
|
@ -48,13 +48,15 @@ import eu.trentorise.opendata.jackan.model.CkanDataset;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fishery web service methods.
|
* Fishery web service methods.
|
||||||
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
|
* @author Costantino Perciante (ISTI - CNR)
|
||||||
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
*/
|
*/
|
||||||
@Path("{source:firms|FIRMS|grsf|GRSF|FishSource|fishsource}/fishery/")
|
@Path("{source:firms|FIRMS|grsf|GRSF|FishSource|fishsource}/fishery/")
|
||||||
public class GrsfPublisherFisheryService {
|
public class GrsfPublisherFisheryService {
|
||||||
|
|
||||||
// the context
|
// the context
|
||||||
@Context ServletContext contextServlet;
|
@Context
|
||||||
|
ServletContext contextServlet;
|
||||||
|
|
||||||
// Logger
|
// Logger
|
||||||
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(GrsfPublisherFisheryService.class);
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(GrsfPublisherFisheryService.class);
|
||||||
|
@ -81,8 +83,9 @@ public class GrsfPublisherFisheryService {
|
||||||
return Response.status(status).entity(licenses).build();
|
return Response.status(status).entity(licenses).build();
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
status = Status.INTERNAL_SERVER_ERROR;
|
status = Status.INTERNAL_SERVER_ERROR;
|
||||||
return Response.status(status).entity(new ResponseBean(false,
|
return Response.status(status)
|
||||||
"Unable to retrieve license list " + e.getLocalizedMessage(), null)).build();
|
.entity(new ResponseBean(false, "Unable to retrieve license list " + e.getLocalizedMessage(), null))
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,18 +93,16 @@ public class GrsfPublisherFisheryService {
|
||||||
@Path("publish-product")
|
@Path("publish-product")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response publishFishery(
|
public Response publishFishery(@NotNull(message = "record cannot be null") @Valid FisheryRecord record,
|
||||||
@NotNull(message="record cannot be null")
|
@PathParam("source") String source) throws ValidationException {
|
||||||
@Valid FisheryRecord record,
|
|
||||||
@PathParam("source") String source)
|
|
||||||
throws ValidationException{
|
|
||||||
|
|
||||||
Caller caller = AuthorizationProvider.instance.get();
|
Caller caller = AuthorizationProvider.instance.get();
|
||||||
String username = caller.getClient().getId();
|
String username = caller.getClient().getId();
|
||||||
String context = ScopeProvider.instance.get();
|
String context = ScopeProvider.instance.get();
|
||||||
String token = SecurityTokenProvider.instance.get();
|
String token = SecurityTokenProvider.instance.get();
|
||||||
|
|
||||||
logger.info("Incoming request for creating a fishery record = " + record + ".\nRequest comes from user " + username + " in context " + context);
|
logger.info("Incoming request for creating a fishery record = " + record + ".\nRequest comes from user "
|
||||||
|
+ username + " in context " + context);
|
||||||
|
|
||||||
ResponseCreationBean responseBean = new ResponseCreationBean();
|
ResponseCreationBean responseBean = new ResponseCreationBean();
|
||||||
Status status = Status.INTERNAL_SERVER_ERROR;
|
Status status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
@ -122,7 +123,8 @@ public class GrsfPublisherFisheryService {
|
||||||
CommonServiceUtils.hasAdminRole(username, catalogue, apiKey, organization);
|
CommonServiceUtils.hasAdminRole(username, catalogue, apiKey, organization);
|
||||||
|
|
||||||
// extend this role to the other organizations in this context
|
// extend this role to the other organizations in this context
|
||||||
CommonServiceUtils.extendRoleToOtherOrganizations(username, catalogue, organization, RolesCkanGroupOrOrg.ADMIN);
|
CommonServiceUtils.extendRoleToOtherOrganizations(username, catalogue, organization,
|
||||||
|
RolesCkanGroupOrOrg.ADMIN);
|
||||||
|
|
||||||
// retrieve the user's email and fullname
|
// retrieve the user's email and fullname
|
||||||
String authorMail = HelperMethods.getUserEmail(context, token);
|
String authorMail = HelperMethods.getUserEmail(context, token);
|
||||||
|
@ -146,26 +148,14 @@ public class GrsfPublisherFisheryService {
|
||||||
List<ResourceBean> resources = record.getExtrasResources();
|
List<ResourceBean> resources = record.getExtrasResources();
|
||||||
|
|
||||||
// validate end set sources
|
// validate end set sources
|
||||||
CommonServiceUtils.validateRecordAndMapFields(
|
CommonServiceUtils.validateRecordAndMapFields(apiKey, context, contextServlet, sourceInPath, record,
|
||||||
apiKey,
|
Product_Type.FISHERY, tags, customFields, groups, resources, username, futureTitle);
|
||||||
context,
|
|
||||||
contextServlet,
|
|
||||||
sourceInPath,
|
|
||||||
record,
|
|
||||||
Product_Type.FISHERY,
|
|
||||||
tags,
|
|
||||||
customFields,
|
|
||||||
groups,
|
|
||||||
resources,
|
|
||||||
username,
|
|
||||||
futureTitle);
|
|
||||||
|
|
||||||
// check the license id
|
// check the license id
|
||||||
String license = null;
|
String license = null;
|
||||||
if(record.getLicense() == null || record.getLicense().isEmpty())
|
if(record.getLicense() == null || record.getLicense().isEmpty())
|
||||||
license = Constants.DEFAULT_LICENSE;
|
license = Constants.DEFAULT_LICENSE;
|
||||||
else
|
else if(HelperMethods.existsLicenseId(record.getLicense(), catalogue))
|
||||||
if(HelperMethods.existsLicenseId(record.getLicense(), catalogue))
|
|
||||||
license = record.getLicense();
|
license = record.getLicense();
|
||||||
else
|
else
|
||||||
throw new Exception("Please check the license id!");
|
throw new Exception("Please check the license id!");
|
||||||
|
@ -173,37 +163,29 @@ public class GrsfPublisherFisheryService {
|
||||||
long version = record.getVersion() == null ? 1 : record.getVersion();
|
long version = record.getVersion() == null ? 1 : record.getVersion();
|
||||||
|
|
||||||
// set the visibility of the datatest according the context
|
// set the visibility of the datatest according the context
|
||||||
boolean publicDataset = context.equals((String)contextServlet.getInitParameter(HelperMethods.PUBLIC_CONTEX_KEY));
|
boolean publicDataset = context
|
||||||
|
.equals((String) contextServlet.getInitParameter(HelperMethods.PUBLIC_CONTEX_KEY));
|
||||||
|
|
||||||
// convert extras' keys to keys with namespace
|
// convert extras' keys to keys with namespace
|
||||||
Map<String, String> namespaces = HelperMethods.getFieldToFieldNameSpaceMapping(Constants.GENERIC_RESOURCE_NAME_MAP_KEY_NAMESPACES_FISHERY);
|
Map<String,String> namespaces = HelperMethods
|
||||||
|
.getFieldToFieldNameSpaceMapping(Constants.GENERIC_RESOURCE_NAME_MAP_KEY_NAMESPACES_FISHERY);
|
||||||
|
|
||||||
if(namespaces == null)
|
if(namespaces == null)
|
||||||
throw new Exception("Failed to retrieve the namespaces for the key fields!");
|
throw new Exception("Failed to retrieve the namespaces for the key fields!");
|
||||||
|
|
||||||
customFields = HelperMethods.replaceFieldsKey(customFields, namespaces, !sourceInPath.equals(Sources.GRSF));
|
customFields = HelperMethods.replaceFieldsKey(customFields, namespaces,
|
||||||
|
!sourceInPath.equals(Sources.GRSF));
|
||||||
|
|
||||||
String publishInOrganization = CommonServiceUtils.evaluateOrganization(organization, sourceInPath);
|
String publishInOrganization = CommonServiceUtils.evaluateOrganization(organization, sourceInPath);
|
||||||
|
|
||||||
logger.info("Invoking create method..");
|
logger.info("Invoking create method..");
|
||||||
|
|
||||||
// create the product
|
// create the product
|
||||||
id = catalogue.createCKanDatasetMultipleCustomFields(
|
id = catalogue.createCKanDatasetMultipleCustomFields(apiKey, futureTitle, futureName,
|
||||||
apiKey,
|
publishInOrganization, authorFullname, authorMail,
|
||||||
futureTitle,
|
|
||||||
futureName,
|
|
||||||
publishInOrganization,
|
|
||||||
authorFullname,
|
|
||||||
authorMail,
|
|
||||||
record.getMaintainer() == null ? authorFullname : record.getMaintainer(),
|
record.getMaintainer() == null ? authorFullname : record.getMaintainer(),
|
||||||
record.getMaintainerContact() == null? authorMail : record.getMaintainerContact(),
|
record.getMaintainerContact() == null ? authorMail : record.getMaintainerContact(), version,
|
||||||
version,
|
null, license, new ArrayList<String>(tags), customFields, resources, publicDataset);
|
||||||
null,
|
|
||||||
license,
|
|
||||||
new ArrayList<String>(tags),
|
|
||||||
customFields,
|
|
||||||
resources,
|
|
||||||
publicDataset);
|
|
||||||
|
|
||||||
// post actions
|
// post actions
|
||||||
if(id != null) {
|
if(id != null) {
|
||||||
|
@ -212,12 +194,12 @@ public class GrsfPublisherFisheryService {
|
||||||
String description = Constants.SHORT_NAME_CUSTOM_KEY + ": " + record.getShortName() + "\n";
|
String description = Constants.SHORT_NAME_CUSTOM_KEY + ": " + record.getShortName() + "\n";
|
||||||
|
|
||||||
if(sourceInPath.equals(Sources.GRSF))
|
if(sourceInPath.equals(Sources.GRSF))
|
||||||
description += Constants.GRSF_SEMANTIC_IDENTIFIER_CUSTOM_KEY + ": " + record.getFisheryId() + "\n";
|
description += Constants.GRSF_SEMANTIC_IDENTIFIER_CUSTOM_KEY + ": " + record.getFisheryId()
|
||||||
|
+ "\n";
|
||||||
|
|
||||||
CommonServiceUtils.actionsPostCreateOrUpdate(
|
CommonServiceUtils.actionsPostCreateOrUpdate(id, futureName, record, apiKey, username, organization,
|
||||||
id, futureName, record, apiKey, username, organization,
|
null, responseBean, catalogue, namespaces, groups, context, token, futureTitle,
|
||||||
null, responseBean, catalogue, namespaces, groups, context, token, futureTitle, authorFullname,
|
authorFullname, contextServlet, false, description);
|
||||||
contextServlet, false, description);
|
|
||||||
|
|
||||||
status = Status.CREATED;
|
status = Status.CREATED;
|
||||||
|
|
||||||
|
@ -238,9 +220,7 @@ public class GrsfPublisherFisheryService {
|
||||||
@Path("delete-product")
|
@Path("delete-product")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response deleteFishery(
|
public Response deleteFishery(@NotNull(message = "input value is missing") @Valid DeleteRecord recordToDelete,
|
||||||
@NotNull(message="input value is missing")
|
|
||||||
@Valid DeleteRecord recordToDelete,
|
|
||||||
@PathParam("source") String source) throws ValidationException {
|
@PathParam("source") String source) throws ValidationException {
|
||||||
|
|
||||||
// retrieve context and username
|
// retrieve context and username
|
||||||
|
@ -252,7 +232,8 @@ public class GrsfPublisherFisheryService {
|
||||||
Status status = Status.INTERNAL_SERVER_ERROR;
|
Status status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
|
||||||
// check it is a fishery ...
|
// check it is a fishery ...
|
||||||
logger.info("Received call to delete product with id " + recordToDelete.getId() + ", checking if it is a fishery");
|
logger.info(
|
||||||
|
"Received call to delete product with id " + recordToDelete.getId() + ", checking if it is a fishery");
|
||||||
try {
|
try {
|
||||||
|
|
||||||
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
||||||
|
@ -273,8 +254,9 @@ public class GrsfPublisherFisheryService {
|
||||||
// check it is in the right source and it is a fishery
|
// check it is in the right source and it is a fishery
|
||||||
String type = fisheryInCkan.getExtrasAsHashMap().get(Constants.DOMAIN_CUSTOM_KEY);
|
String type = fisheryInCkan.getExtrasAsHashMap().get(Constants.DOMAIN_CUSTOM_KEY);
|
||||||
|
|
||||||
if((fisheryInCkan.getOrganization().getName().equalsIgnoreCase(source) || fisheryInCkan.getOrganization().getName().toLowerCase().contains(source))&&
|
if((fisheryInCkan.getOrganization().getName().equalsIgnoreCase(source)
|
||||||
Product_Type.FISHERY.getOrigName().equals(type)){
|
|| fisheryInCkan.getOrganization().getName().toLowerCase().contains(source))
|
||||||
|
&& Product_Type.FISHERY.getOrigName().equals(type)) {
|
||||||
|
|
||||||
logger.debug("Ok, this is a fishery of the right source, removing it");
|
logger.debug("Ok, this is a fishery of the right source, removing it");
|
||||||
boolean deleted = catalogue.deleteProduct(fisheryInCkan.getId(), apiKey, true);
|
boolean deleted = catalogue.deleteProduct(fisheryInCkan.getId(), apiKey, true);
|
||||||
|
@ -286,7 +268,8 @@ public class GrsfPublisherFisheryService {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
status = Status.BAD_REQUEST;
|
status = Status.BAD_REQUEST;
|
||||||
throw new Exception("The id you are using doesn't belong to a Fishery item having source " + source + "!");
|
throw new Exception(
|
||||||
|
"The id you are using doesn't belong to a Fishery item having source " + source + "!");
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
logger.error("Failed to delete this", e);
|
logger.error("Failed to delete this", e);
|
||||||
|
@ -299,8 +282,7 @@ public class GrsfPublisherFisheryService {
|
||||||
@GET
|
@GET
|
||||||
@Path("get-fisheries-ids")
|
@Path("get-fisheries-ids")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response getFisheriesIds(
|
public Response getFisheriesIds(@PathParam("source") String source) {
|
||||||
@PathParam("source") String source){
|
|
||||||
|
|
||||||
logger.info("Received call to get fisheries with source " + source);
|
logger.info("Received call to get fisheries with source " + source);
|
||||||
|
|
||||||
|
@ -352,8 +334,7 @@ public class GrsfPublisherFisheryService {
|
||||||
@GET
|
@GET
|
||||||
@Path("get-catalogue-id-and-url-from-name")
|
@Path("get-catalogue-id-and-url-from-name")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response getCatalogueIdAndUrlFromKBID(
|
public Response getCatalogueIdAndUrlFromKBID(@QueryParam("name") String name) {
|
||||||
@QueryParam("name") String name){
|
|
||||||
|
|
||||||
String context = ScopeProvider.instance.get();
|
String context = ScopeProvider.instance.get();
|
||||||
Caller caller = AuthorizationProvider.instance.get();
|
Caller caller = AuthorizationProvider.instance.get();
|
||||||
|
@ -390,18 +371,16 @@ public class GrsfPublisherFisheryService {
|
||||||
@Path("update-product")
|
@Path("update-product")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response updateFishery(
|
public Response updateFishery(@NotNull(message = "record cannot be null") @Valid FisheryRecord record,
|
||||||
@NotNull(message="record cannot be null")
|
@PathParam("source") String source) throws ValidationException {
|
||||||
@Valid FisheryRecord record,
|
|
||||||
@PathParam("source") String source)
|
|
||||||
throws ValidationException{
|
|
||||||
|
|
||||||
Caller caller = AuthorizationProvider.instance.get();
|
Caller caller = AuthorizationProvider.instance.get();
|
||||||
String username = caller.getClient().getId();
|
String username = caller.getClient().getId();
|
||||||
String context = ScopeProvider.instance.get();
|
String context = ScopeProvider.instance.get();
|
||||||
String token = SecurityTokenProvider.instance.get();
|
String token = SecurityTokenProvider.instance.get();
|
||||||
|
|
||||||
logger.info("Incoming request for updating a fishery record = " + record + ". Request comes from user " + username + " in context " + context);
|
logger.info("Incoming request for updating a fishery record = " + record + ". Request comes from user "
|
||||||
|
+ username + " in context " + context);
|
||||||
|
|
||||||
ResponseCreationBean responseBean = new ResponseCreationBean();
|
ResponseCreationBean responseBean = new ResponseCreationBean();
|
||||||
Status status = Status.INTERNAL_SERVER_ERROR;
|
Status status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
@ -419,7 +398,8 @@ public class GrsfPublisherFisheryService {
|
||||||
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
||||||
|
|
||||||
if(catalogue == null) {
|
if(catalogue == null) {
|
||||||
throw new Exception("There was a problem while serving your request. No catalogue instance was found in this context!");
|
throw new Exception(
|
||||||
|
"There was a problem while serving your request. No catalogue instance was found in this context!");
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// get already published record and modify it
|
// get already published record and modify it
|
||||||
|
@ -457,72 +437,51 @@ public class GrsfPublisherFisheryService {
|
||||||
List<ResourceBean> resources = record.getExtrasResources();
|
List<ResourceBean> resources = record.getExtrasResources();
|
||||||
|
|
||||||
// validate end set sources
|
// validate end set sources
|
||||||
CommonServiceUtils.validateRecordAndMapFields(
|
CommonServiceUtils.validateRecordAndMapFields(apiKey, context, contextServlet, sourceInPath, record,
|
||||||
apiKey,
|
Product_Type.FISHERY, tags, customFields, groups, resources, username, title);
|
||||||
context,
|
|
||||||
contextServlet,
|
|
||||||
sourceInPath,
|
|
||||||
record,
|
|
||||||
Product_Type.FISHERY,
|
|
||||||
tags,
|
|
||||||
customFields,
|
|
||||||
groups,
|
|
||||||
resources,
|
|
||||||
username,
|
|
||||||
title);
|
|
||||||
|
|
||||||
// check the license id
|
// check the license id
|
||||||
String license = null;
|
String license = null;
|
||||||
if(record.getLicense() == null || record.getLicense().isEmpty())
|
if(record.getLicense() == null || record.getLicense().isEmpty())
|
||||||
license = Constants.DEFAULT_LICENSE;
|
license = Constants.DEFAULT_LICENSE;
|
||||||
else
|
else if(HelperMethods.existsLicenseId(record.getLicense(), catalogue))
|
||||||
if(HelperMethods.existsLicenseId(record.getLicense(), catalogue))
|
|
||||||
license = record.getLicense();
|
license = record.getLicense();
|
||||||
else throw new Exception("Please check the license id!");
|
else
|
||||||
|
throw new Exception("Please check the license id!");
|
||||||
|
|
||||||
long version = record.getVersion() == null ? 1 : record.getVersion();
|
long version = record.getVersion() == null ? 1 : record.getVersion();
|
||||||
|
|
||||||
// set the visibility of the datatest according the context
|
// set the visibility of the datatest according the context
|
||||||
boolean publicDataset = context.equals((String)contextServlet.getInitParameter(HelperMethods.PUBLIC_CONTEX_KEY));
|
boolean publicDataset = context
|
||||||
|
.equals((String) contextServlet.getInitParameter(HelperMethods.PUBLIC_CONTEX_KEY));
|
||||||
|
|
||||||
// convert extras' keys to keys with namespace
|
// convert extras' keys to keys with namespace
|
||||||
Map<String, String> namespaces = HelperMethods.getFieldToFieldNameSpaceMapping(Constants.GENERIC_RESOURCE_NAME_MAP_KEY_NAMESPACES_FISHERY);
|
Map<String,String> namespaces = HelperMethods
|
||||||
|
.getFieldToFieldNameSpaceMapping(Constants.GENERIC_RESOURCE_NAME_MAP_KEY_NAMESPACES_FISHERY);
|
||||||
|
|
||||||
if(namespaces == null)
|
if(namespaces == null)
|
||||||
throw new Exception("Failed to retrieve the namespaces for the key fields!");
|
throw new Exception("Failed to retrieve the namespaces for the key fields!");
|
||||||
|
|
||||||
// retrieve the already generated url
|
// retrieve the already generated url
|
||||||
String modifiedUUIDKey = namespaces.containsKey(Constants.ITEM_URL_FIELD) ?
|
String modifiedUUIDKey = namespaces.containsKey(Constants.ITEM_URL_FIELD)
|
||||||
namespaces.get(Constants.ITEM_URL_FIELD) :
|
? namespaces.get(Constants.ITEM_URL_FIELD)
|
||||||
Constants.ITEM_URL_FIELD;
|
: Constants.ITEM_URL_FIELD;
|
||||||
String itemUrl = recordPublished.getExtrasAsHashMap().get(modifiedUUIDKey);
|
String itemUrl = recordPublished.getExtrasAsHashMap().get(modifiedUUIDKey);
|
||||||
customFields.put(Constants.ITEM_URL_FIELD, Arrays.asList(itemUrl));
|
customFields.put(Constants.ITEM_URL_FIELD, Arrays.asList(itemUrl));
|
||||||
|
|
||||||
// replace fields
|
// replace fields
|
||||||
customFields = HelperMethods.replaceFieldsKey(customFields, namespaces, !sourceInPath.equals(Sources.GRSF));
|
customFields = HelperMethods.replaceFieldsKey(customFields, namespaces,
|
||||||
|
!sourceInPath.equals(Sources.GRSF));
|
||||||
|
|
||||||
String publishInOrganization = CommonServiceUtils.evaluateOrganization(organization, sourceInPath);
|
String publishInOrganization = CommonServiceUtils.evaluateOrganization(organization, sourceInPath);
|
||||||
|
|
||||||
logger.info("Invoking update method..");
|
logger.info("Invoking update method..");
|
||||||
|
|
||||||
// update the product
|
// update the product
|
||||||
String id = catalogue.updateCKanDataset(
|
String id = catalogue.updateCKanDataset(apiKey, catalogId, title, name, publishInOrganization,
|
||||||
apiKey,
|
authorFullname, authorMail, record.getMaintainer(), record.getMaintainerContact(), version,
|
||||||
catalogId,
|
HelperMethods.removeHTML(record.getDescription()), license, new ArrayList<String>(tags), null, // remove any previous group
|
||||||
title, name,
|
customFields, resources, publicDataset);
|
||||||
publishInOrganization,
|
|
||||||
authorFullname,
|
|
||||||
authorMail,
|
|
||||||
record.getMaintainer(),
|
|
||||||
record.getMaintainerContact(),
|
|
||||||
version,
|
|
||||||
HelperMethods.removeHTML(record.getDescription()),
|
|
||||||
license,
|
|
||||||
new ArrayList<String>(tags),
|
|
||||||
null, // remove any previous group
|
|
||||||
customFields,
|
|
||||||
resources,
|
|
||||||
publicDataset);
|
|
||||||
|
|
||||||
if(id != null) {
|
if(id != null) {
|
||||||
logger.info("Item updated!");
|
logger.info("Item updated!");
|
||||||
|
@ -530,10 +489,10 @@ public class GrsfPublisherFisheryService {
|
||||||
String description = Constants.SHORT_NAME_CUSTOM_KEY + ": " + record.getShortName() + "\n";
|
String description = Constants.SHORT_NAME_CUSTOM_KEY + ": " + record.getShortName() + "\n";
|
||||||
|
|
||||||
if(sourceInPath.equals(Sources.GRSF))
|
if(sourceInPath.equals(Sources.GRSF))
|
||||||
description += Constants.GRSF_SEMANTIC_IDENTIFIER_CUSTOM_KEY + ": " + record.getFisheryId() + "\n";
|
description += Constants.GRSF_SEMANTIC_IDENTIFIER_CUSTOM_KEY + ": " + record.getFisheryId()
|
||||||
|
+ "\n";
|
||||||
|
|
||||||
CommonServiceUtils.actionsPostCreateOrUpdate(
|
CommonServiceUtils.actionsPostCreateOrUpdate(id, name, record, apiKey, username, organization,
|
||||||
id, name, record, apiKey, username, organization,
|
|
||||||
itemUrl, responseBean, catalogue, namespaces, groups, context, token, title, authorFullname,
|
itemUrl, responseBean, catalogue, namespaces, groups, context, token, title, authorFullname,
|
||||||
contextServlet, true, description);
|
contextServlet, true, description);
|
||||||
status = Status.OK;
|
status = Status.OK;
|
||||||
|
@ -552,17 +511,15 @@ public class GrsfPublisherFisheryService {
|
||||||
@Path("update-status")
|
@Path("update-status")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response updateStatusStock(
|
public Response updateStatusStock(@Valid UpdateRecordStatus bean, @PathParam("source") String source)
|
||||||
@Valid UpdateRecordStatus bean,
|
|
||||||
@PathParam("source") String source)
|
|
||||||
throws ValidationException {
|
throws ValidationException {
|
||||||
|
|
||||||
|
|
||||||
Caller caller = AuthorizationProvider.instance.get();
|
Caller caller = AuthorizationProvider.instance.get();
|
||||||
String username = caller.getClient().getId();
|
String username = caller.getClient().getId();
|
||||||
String context = ScopeProvider.instance.get();
|
String context = ScopeProvider.instance.get();
|
||||||
|
|
||||||
logger.info("Incoming request for updating a status of record = " + bean + ". Request comes from user " + username + " in context " + context);
|
logger.info("Incoming request for updating a status of record = " + bean + ". Request comes from user "
|
||||||
|
+ username + " in context " + context);
|
||||||
|
|
||||||
ResponseCreationBean responseBean = new ResponseCreationBean();
|
ResponseCreationBean responseBean = new ResponseCreationBean();
|
||||||
Status status = Status.INTERNAL_SERVER_ERROR;
|
Status status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
@ -572,7 +529,8 @@ public class GrsfPublisherFisheryService {
|
||||||
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
||||||
|
|
||||||
if(catalogue == null) {
|
if(catalogue == null) {
|
||||||
throw new Exception("There was a problem while serving your request. No catalogue instance was found in this context!");
|
throw new Exception(
|
||||||
|
"There was a problem while serving your request. No catalogue instance was found in this context!");
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// catalog id must be reported
|
// catalog id must be reported
|
||||||
|
@ -587,12 +545,14 @@ public class GrsfPublisherFisheryService {
|
||||||
throw new Exception("A record with knowledge_base_id id " + uuid + " does not exist!");
|
throw new Exception("A record with knowledge_base_id id " + uuid + " does not exist!");
|
||||||
|
|
||||||
// check system type
|
// check system type
|
||||||
boolean isGRSF = !record.getExtrasAsHashMap().get(Constants.SYSTEM_TYPE_CUSTOM_KEY).equals(Constants.SYSTEM_TYPE_FOR_SOURCES_VALUE);
|
boolean isGRSF = !record.getExtrasAsHashMap().get(Constants.SYSTEM_TYPE_CUSTOM_KEY)
|
||||||
|
.equals(Constants.SYSTEM_TYPE_FOR_SOURCES_VALUE);
|
||||||
|
|
||||||
if(!isGRSF)
|
if(!isGRSF)
|
||||||
throw new Exception("You are trying to modify a Legacy record!");
|
throw new Exception("You are trying to modify a Legacy record!");
|
||||||
|
|
||||||
boolean rightDomain = record.getExtrasAsHashMap().get(Constants.DOMAIN_CUSTOM_KEY).equalsIgnoreCase(Product_Type.FISHERY.getOrigName());
|
boolean rightDomain = record.getExtrasAsHashMap().get(Constants.DOMAIN_CUSTOM_KEY)
|
||||||
|
.equalsIgnoreCase(Product_Type.FISHERY.getOrigName());
|
||||||
|
|
||||||
if(!rightDomain)
|
if(!rightDomain)
|
||||||
throw new Exception("This is not a Fishery record!");
|
throw new Exception("This is not a Fishery record!");
|
||||||
|
|
|
@ -48,13 +48,15 @@ import eu.trentorise.opendata.jackan.model.CkanDataset;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stock web service methods.
|
* Stock web service methods.
|
||||||
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
|
* @author Costantino Perciante (ISTI - CNR)
|
||||||
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
*/
|
*/
|
||||||
@Path("{source:firms|FIRMS|ram|RAM|grsf|GRSF|FishSource|fishsource}/stock/")
|
@Path("{source:firms|FIRMS|ram|RAM|grsf|GRSF|FishSource|fishsource}/stock/")
|
||||||
public class GrsfPublisherStockService {
|
public class GrsfPublisherStockService {
|
||||||
|
|
||||||
// the context
|
// the context
|
||||||
@Context ServletContext contextServlet;
|
@Context
|
||||||
|
ServletContext contextServlet;
|
||||||
|
|
||||||
// Logger
|
// Logger
|
||||||
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(GrsfPublisherStockService.class);
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(GrsfPublisherStockService.class);
|
||||||
|
@ -81,8 +83,9 @@ public class GrsfPublisherStockService {
|
||||||
return Response.status(status).entity(licenses).build();
|
return Response.status(status).entity(licenses).build();
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
status = Status.INTERNAL_SERVER_ERROR;
|
status = Status.INTERNAL_SERVER_ERROR;
|
||||||
return Response.status(status).entity(new ResponseBean(false,
|
return Response.status(status)
|
||||||
"Unable to retrieve license list " + e.getLocalizedMessage(), null)).build();
|
.entity(new ResponseBean(false, "Unable to retrieve license list " + e.getLocalizedMessage(), null))
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,8 +93,7 @@ public class GrsfPublisherStockService {
|
||||||
@Path("publish-product")
|
@Path("publish-product")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response publishStock(
|
public Response publishStock(@NotNull(message = "record cannot be null") @Valid StockRecord record,
|
||||||
@NotNull(message="record cannot be null") @Valid StockRecord record,
|
|
||||||
@PathParam("source") String source) throws ValidationException {
|
@PathParam("source") String source) throws ValidationException {
|
||||||
|
|
||||||
Caller caller = AuthorizationProvider.instance.get();
|
Caller caller = AuthorizationProvider.instance.get();
|
||||||
|
@ -99,7 +101,8 @@ public class GrsfPublisherStockService {
|
||||||
String context = ScopeProvider.instance.get();
|
String context = ScopeProvider.instance.get();
|
||||||
String token = SecurityTokenProvider.instance.get();
|
String token = SecurityTokenProvider.instance.get();
|
||||||
|
|
||||||
logger.info("Incoming request for creating a stock record = " + record + ".\nRequest coming from user " + username + " in context " + context);
|
logger.info("Incoming request for creating a stock record = " + record + ".\nRequest coming from user "
|
||||||
|
+ username + " in context " + context);
|
||||||
|
|
||||||
ResponseCreationBean responseBean = new ResponseCreationBean();
|
ResponseCreationBean responseBean = new ResponseCreationBean();
|
||||||
Status status = Status.INTERNAL_SERVER_ERROR;
|
Status status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
@ -122,7 +125,8 @@ public class GrsfPublisherStockService {
|
||||||
CommonServiceUtils.hasAdminRole(username, catalogue, apiKey, organization);
|
CommonServiceUtils.hasAdminRole(username, catalogue, apiKey, organization);
|
||||||
|
|
||||||
// extend this role to the other organizations in this context
|
// extend this role to the other organizations in this context
|
||||||
CommonServiceUtils.extendRoleToOtherOrganizations(username, catalogue, organization, RolesCkanGroupOrOrg.ADMIN);
|
CommonServiceUtils.extendRoleToOtherOrganizations(username, catalogue, organization,
|
||||||
|
RolesCkanGroupOrOrg.ADMIN);
|
||||||
|
|
||||||
// retrieve the user's email and fullname
|
// retrieve the user's email and fullname
|
||||||
String authorMail = HelperMethods.getUserEmail(context, token);
|
String authorMail = HelperMethods.getUserEmail(context, token);
|
||||||
|
@ -146,64 +150,46 @@ public class GrsfPublisherStockService {
|
||||||
List<ResourceBean> resources = record.getExtrasResources();
|
List<ResourceBean> resources = record.getExtrasResources();
|
||||||
|
|
||||||
// validate end set sources, tags, etc
|
// validate end set sources, tags, etc
|
||||||
CommonServiceUtils.validateRecordAndMapFields(
|
CommonServiceUtils.validateRecordAndMapFields(apiKey, context, contextServlet, sourceInPath, record,
|
||||||
apiKey,
|
Product_Type.STOCK, tags, customFields, groups, resources, username, futureTitle);
|
||||||
context,
|
|
||||||
contextServlet,
|
|
||||||
sourceInPath,
|
|
||||||
record,
|
|
||||||
Product_Type.STOCK,
|
|
||||||
tags,
|
|
||||||
customFields,
|
|
||||||
groups,
|
|
||||||
resources,
|
|
||||||
username,
|
|
||||||
futureTitle);
|
|
||||||
|
|
||||||
// check the license id
|
// check the license id
|
||||||
String license = null;
|
String license = null;
|
||||||
if(record.getLicense() == null || record.getLicense().isEmpty())
|
if(record.getLicense() == null || record.getLicense().isEmpty())
|
||||||
license = Constants.DEFAULT_LICENSE;
|
license = Constants.DEFAULT_LICENSE;
|
||||||
else
|
else if(HelperMethods.existsLicenseId(record.getLicense(), catalogue))
|
||||||
if(HelperMethods.existsLicenseId(record.getLicense(), catalogue))
|
|
||||||
license = record.getLicense();
|
license = record.getLicense();
|
||||||
else throw new Exception("Please check the license id!");
|
else
|
||||||
|
throw new Exception("Please check the license id!");
|
||||||
|
|
||||||
// check the version
|
// check the version
|
||||||
long version = record.getVersion() == null ? 1 : record.getVersion();
|
long version = record.getVersion() == null ? 1 : record.getVersion();
|
||||||
|
|
||||||
// set the visibility of the datatest according the context
|
// set the visibility of the datatest according the context
|
||||||
boolean publicDataset = context.equals((String)contextServlet.getInitParameter(HelperMethods.PUBLIC_CONTEX_KEY));
|
boolean publicDataset = context
|
||||||
|
.equals((String) contextServlet.getInitParameter(HelperMethods.PUBLIC_CONTEX_KEY));
|
||||||
|
|
||||||
// convert extras' keys to keys with namespace
|
// convert extras' keys to keys with namespace
|
||||||
Map<String, String> namespaces = HelperMethods.getFieldToFieldNameSpaceMapping(Constants.GENERIC_RESOURCE_NAME_MAP_KEY_NAMESPACES_STOCK);
|
Map<String,String> namespaces = HelperMethods
|
||||||
|
.getFieldToFieldNameSpaceMapping(Constants.GENERIC_RESOURCE_NAME_MAP_KEY_NAMESPACES_STOCK);
|
||||||
|
|
||||||
if(namespaces == null)
|
if(namespaces == null)
|
||||||
throw new Exception("Failed to retrieve the namespaces for the key fields!");
|
throw new Exception("Failed to retrieve the namespaces for the key fields!");
|
||||||
|
|
||||||
customFields = HelperMethods.replaceFieldsKey(customFields, namespaces, !sourceInPath.equals(Sources.GRSF));
|
customFields = HelperMethods.replaceFieldsKey(customFields, namespaces,
|
||||||
|
!sourceInPath.equals(Sources.GRSF));
|
||||||
|
|
||||||
String publishInOrganization = CommonServiceUtils.evaluateOrganization(organization, sourceInPath);
|
String publishInOrganization = CommonServiceUtils.evaluateOrganization(organization, sourceInPath);
|
||||||
|
|
||||||
logger.info("Invoking create method..");
|
logger.info("Invoking create method..");
|
||||||
|
|
||||||
// create the product
|
// create the product
|
||||||
id = catalogue.createCKanDatasetMultipleCustomFields(
|
id = catalogue.createCKanDatasetMultipleCustomFields(apiKey, futureTitle, futureName,
|
||||||
apiKey,
|
publishInOrganization, authorFullname, authorMail,
|
||||||
futureTitle,
|
|
||||||
futureName,
|
|
||||||
publishInOrganization,
|
|
||||||
authorFullname,
|
|
||||||
authorMail,
|
|
||||||
record.getMaintainer() == null ? authorFullname : record.getMaintainer(),
|
record.getMaintainer() == null ? authorFullname : record.getMaintainer(),
|
||||||
record.getMaintainerContact() == null? authorMail : record.getMaintainerContact(),
|
record.getMaintainerContact() == null ? authorMail : record.getMaintainerContact(), version,
|
||||||
version,
|
HelperMethods.removeHTML(record.getDescription()), license, new ArrayList<String>(tags),
|
||||||
HelperMethods.removeHTML(record.getDescription()),
|
customFields, resources, publicDataset);
|
||||||
license,
|
|
||||||
new ArrayList<String>(tags),
|
|
||||||
customFields,
|
|
||||||
resources,
|
|
||||||
publicDataset);
|
|
||||||
|
|
||||||
if(id != null) {
|
if(id != null) {
|
||||||
|
|
||||||
|
@ -211,17 +197,18 @@ public class GrsfPublisherStockService {
|
||||||
String description = Constants.SHORT_NAME_CUSTOM_KEY + ": " + record.getShortName() + "\n";
|
String description = Constants.SHORT_NAME_CUSTOM_KEY + ": " + record.getShortName() + "\n";
|
||||||
|
|
||||||
if(sourceInPath.equals(Sources.GRSF))
|
if(sourceInPath.equals(Sources.GRSF))
|
||||||
description += Constants.GRSF_SEMANTIC_IDENTIFIER_CUSTOM_KEY + ": " + record.getStockId() + "\n";
|
description += Constants.GRSF_SEMANTIC_IDENTIFIER_CUSTOM_KEY + ": " + record.getStockId()
|
||||||
|
+ "\n";
|
||||||
|
|
||||||
CommonServiceUtils.actionsPostCreateOrUpdate(
|
CommonServiceUtils.actionsPostCreateOrUpdate(id, futureName, record, apiKey, username, organization,
|
||||||
id, futureName, record, apiKey, username, organization, null,
|
null, responseBean, catalogue, namespaces, groups, context, token, futureTitle,
|
||||||
responseBean, catalogue, namespaces, groups, context, token,
|
authorFullname, contextServlet, false, description);
|
||||||
futureTitle, authorFullname, contextServlet, false, description);
|
|
||||||
|
|
||||||
status = Status.CREATED;
|
status = Status.CREATED;
|
||||||
|
|
||||||
} else
|
} else
|
||||||
throw new Exception("There was an error during the product generation, sorry! Unable to create the dataset");
|
throw new Exception(
|
||||||
|
"There was an error during the product generation, sorry! Unable to create the dataset");
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
logger.error("Failed to create stock record", e);
|
logger.error("Failed to create stock record", e);
|
||||||
|
@ -235,9 +222,7 @@ public class GrsfPublisherStockService {
|
||||||
@Path("delete-product")
|
@Path("delete-product")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response deleteStock(
|
public Response deleteStock(@NotNull(message = "missing input value") @Valid DeleteRecord recordToDelete,
|
||||||
@NotNull(message="missing input value")
|
|
||||||
@Valid DeleteRecord recordToDelete,
|
|
||||||
@PathParam("source") String source) throws ValidationException {
|
@PathParam("source") String source) throws ValidationException {
|
||||||
|
|
||||||
// retrieve context and username
|
// retrieve context and username
|
||||||
|
@ -249,7 +234,8 @@ public class GrsfPublisherStockService {
|
||||||
Status status = Status.INTERNAL_SERVER_ERROR;
|
Status status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
|
||||||
// check it is a stock ...
|
// check it is a stock ...
|
||||||
logger.info("Received call to delete product with id " + recordToDelete.getId() + ", checking if it is a stock");
|
logger.info(
|
||||||
|
"Received call to delete product with id " + recordToDelete.getId() + ", checking if it is a stock");
|
||||||
try {
|
try {
|
||||||
|
|
||||||
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
||||||
|
@ -273,7 +259,8 @@ public class GrsfPublisherStockService {
|
||||||
|
|
||||||
// check it is in the right source and it is a stock
|
// check it is in the right source and it is a stock
|
||||||
String type = stockInCkan.getExtrasAsHashMap().get(Constants.DOMAIN_CUSTOM_KEY);
|
String type = stockInCkan.getExtrasAsHashMap().get(Constants.DOMAIN_CUSTOM_KEY);
|
||||||
if((stockInCkan.getOrganization().getName().equalsIgnoreCase(source) || stockInCkan.getOrganization().getName().toLowerCase().contains(source))
|
if((stockInCkan.getOrganization().getName().equalsIgnoreCase(source)
|
||||||
|
|| stockInCkan.getOrganization().getName().toLowerCase().contains(source))
|
||||||
&& Product_Type.STOCK.getOrigName().equals(type)) {
|
&& Product_Type.STOCK.getOrigName().equals(type)) {
|
||||||
|
|
||||||
logger.debug("Ok, this is a stock of the right type, removing it");
|
logger.debug("Ok, this is a stock of the right type, removing it");
|
||||||
|
@ -282,14 +269,14 @@ public class GrsfPublisherStockService {
|
||||||
logger.info("Stock DELETED AND PURGED!");
|
logger.info("Stock DELETED AND PURGED!");
|
||||||
status = Status.OK;
|
status = Status.OK;
|
||||||
responseBean.setId(stockInCkan.getId());
|
responseBean.setId(stockInCkan.getId());
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
status = Status.INTERNAL_SERVER_ERROR;
|
status = Status.INTERNAL_SERVER_ERROR;
|
||||||
throw new Exception("Request failed, sorry. Unable to delete/purge the stock");
|
throw new Exception("Request failed, sorry. Unable to delete/purge the stock");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
status = Status.BAD_REQUEST;
|
status = Status.BAD_REQUEST;
|
||||||
throw new Exception("The id you are using doesn't belong to a Stock product having source " + source + "!");
|
throw new Exception(
|
||||||
|
"The id you are using doesn't belong to a Stock product having source " + source + "!");
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
logger.error("Failed to delete this ", e);
|
logger.error("Failed to delete this ", e);
|
||||||
|
@ -301,8 +288,7 @@ public class GrsfPublisherStockService {
|
||||||
@GET
|
@GET
|
||||||
@Path("get-stocks-ids")
|
@Path("get-stocks-ids")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response getStocksIds(
|
public Response getStocksIds(@PathParam("source") String source) {
|
||||||
@PathParam("source") String source){
|
|
||||||
|
|
||||||
// retrieve context and username
|
// retrieve context and username
|
||||||
Caller caller = AuthorizationProvider.instance.get();
|
Caller caller = AuthorizationProvider.instance.get();
|
||||||
|
@ -352,8 +338,7 @@ public class GrsfPublisherStockService {
|
||||||
@GET
|
@GET
|
||||||
@Path("get-catalogue-id-and-url-from-name")
|
@Path("get-catalogue-id-and-url-from-name")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response getCatalogueIdAndUrlFromKBID(
|
public Response getCatalogueIdAndUrlFromKBID(@QueryParam("name") String name) {
|
||||||
@QueryParam("name") String name){
|
|
||||||
|
|
||||||
// retrieve context and username
|
// retrieve context and username
|
||||||
String context = ScopeProvider.instance.get();
|
String context = ScopeProvider.instance.get();
|
||||||
|
@ -389,18 +374,16 @@ public class GrsfPublisherStockService {
|
||||||
@Path("update-product")
|
@Path("update-product")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response updateStock(
|
public Response updateStock(@NotNull(message = "record cannot be null") @Valid StockRecord record,
|
||||||
@NotNull(message="record cannot be null")
|
@PathParam("source") String source) throws ValidationException {
|
||||||
@Valid StockRecord record,
|
|
||||||
@PathParam("source") String source)
|
|
||||||
throws ValidationException{
|
|
||||||
|
|
||||||
Caller caller = AuthorizationProvider.instance.get();
|
Caller caller = AuthorizationProvider.instance.get();
|
||||||
String username = caller.getClient().getId();
|
String username = caller.getClient().getId();
|
||||||
String context = ScopeProvider.instance.get();
|
String context = ScopeProvider.instance.get();
|
||||||
String token = SecurityTokenProvider.instance.get();
|
String token = SecurityTokenProvider.instance.get();
|
||||||
|
|
||||||
logger.info("Incoming request for updating a stock record = " + record + ". Request comes from user " + username + " in context " + context);
|
logger.info("Incoming request for updating a stock record = " + record + ". Request comes from user " + username
|
||||||
|
+ " in context " + context);
|
||||||
|
|
||||||
ResponseCreationBean responseBean = new ResponseCreationBean();
|
ResponseCreationBean responseBean = new ResponseCreationBean();
|
||||||
Status status = Status.INTERNAL_SERVER_ERROR;
|
Status status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
@ -418,7 +401,8 @@ public class GrsfPublisherStockService {
|
||||||
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
||||||
|
|
||||||
if(catalogue == null) {
|
if(catalogue == null) {
|
||||||
throw new Exception("There was a problem while serving your request. No catalogue instance was found in this context!");
|
throw new Exception(
|
||||||
|
"There was a problem while serving your request. No catalogue instance was found in this context!");
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// get already published record and modify it
|
// get already published record and modify it
|
||||||
|
@ -455,70 +439,51 @@ public class GrsfPublisherStockService {
|
||||||
List<ResourceBean> resources = record.getExtrasResources();
|
List<ResourceBean> resources = record.getExtrasResources();
|
||||||
|
|
||||||
// validate end set sources
|
// validate end set sources
|
||||||
CommonServiceUtils.validateRecordAndMapFields(
|
CommonServiceUtils.validateRecordAndMapFields(apiKey, context, contextServlet, sourceInPath, record,
|
||||||
apiKey,
|
Product_Type.STOCK, tags, customFields, groups, resources, username, title);
|
||||||
context,
|
|
||||||
contextServlet,
|
|
||||||
sourceInPath,
|
|
||||||
record,
|
|
||||||
Product_Type.STOCK,
|
|
||||||
tags,
|
|
||||||
customFields,
|
|
||||||
groups,
|
|
||||||
resources,
|
|
||||||
username,
|
|
||||||
title);
|
|
||||||
|
|
||||||
// check the license id
|
// check the license id
|
||||||
String license = null;
|
String license = null;
|
||||||
if(record.getLicense() == null || record.getLicense().isEmpty())
|
if(record.getLicense() == null || record.getLicense().isEmpty())
|
||||||
license = Constants.DEFAULT_LICENSE;
|
license = Constants.DEFAULT_LICENSE;
|
||||||
else
|
else if(HelperMethods.existsLicenseId(record.getLicense(), catalogue))
|
||||||
if(HelperMethods.existsLicenseId(record.getLicense(), catalogue))
|
|
||||||
license = record.getLicense();
|
license = record.getLicense();
|
||||||
else throw new Exception("Please check the license id!");
|
else
|
||||||
|
throw new Exception("Please check the license id!");
|
||||||
|
|
||||||
long version = record.getVersion() == null ? 1 : record.getVersion();
|
long version = record.getVersion() == null ? 1 : record.getVersion();
|
||||||
|
|
||||||
// set the visibility of the datatest according the context
|
// set the visibility of the datatest according the context
|
||||||
boolean publicDataset = context.equals((String)contextServlet.getInitParameter(HelperMethods.PUBLIC_CONTEX_KEY));
|
boolean publicDataset = context
|
||||||
|
.equals((String) contextServlet.getInitParameter(HelperMethods.PUBLIC_CONTEX_KEY));
|
||||||
|
|
||||||
// convert extras' keys to keys with namespace
|
// convert extras' keys to keys with namespace
|
||||||
Map<String, String> namespaces = HelperMethods.getFieldToFieldNameSpaceMapping(Constants.GENERIC_RESOURCE_NAME_MAP_KEY_NAMESPACES_STOCK);
|
Map<String,String> namespaces = HelperMethods
|
||||||
|
.getFieldToFieldNameSpaceMapping(Constants.GENERIC_RESOURCE_NAME_MAP_KEY_NAMESPACES_STOCK);
|
||||||
|
|
||||||
if(namespaces == null)
|
if(namespaces == null)
|
||||||
throw new Exception("Failed to retrieve the namespaces for the key fields!");
|
throw new Exception("Failed to retrieve the namespaces for the key fields!");
|
||||||
|
|
||||||
// retrieve the url
|
// retrieve the url
|
||||||
String modifiedUUIDKey = namespaces.containsKey(Constants.ITEM_URL_FIELD) ? namespaces.get(Constants.ITEM_URL_FIELD) : Constants.ITEM_URL_FIELD;
|
String modifiedUUIDKey = namespaces.containsKey(Constants.ITEM_URL_FIELD)
|
||||||
|
? namespaces.get(Constants.ITEM_URL_FIELD)
|
||||||
|
: Constants.ITEM_URL_FIELD;
|
||||||
String itemUrl = recordPublished.getExtrasAsHashMap().get(modifiedUUIDKey);
|
String itemUrl = recordPublished.getExtrasAsHashMap().get(modifiedUUIDKey);
|
||||||
customFields.put(Constants.ITEM_URL_FIELD, Arrays.asList(itemUrl));
|
customFields.put(Constants.ITEM_URL_FIELD, Arrays.asList(itemUrl));
|
||||||
|
|
||||||
// replace fields
|
// replace fields
|
||||||
customFields = HelperMethods.replaceFieldsKey(customFields, namespaces,!sourceInPath.equals(Sources.GRSF));
|
customFields = HelperMethods.replaceFieldsKey(customFields, namespaces,
|
||||||
|
!sourceInPath.equals(Sources.GRSF));
|
||||||
|
|
||||||
String publishInOrganization = CommonServiceUtils.evaluateOrganization(organization, sourceInPath);
|
String publishInOrganization = CommonServiceUtils.evaluateOrganization(organization, sourceInPath);
|
||||||
|
|
||||||
logger.info("Invoking update method..");
|
logger.info("Invoking update method..");
|
||||||
|
|
||||||
// update the product
|
// update the product
|
||||||
String id = catalogue.updateCKanDataset(
|
String id = catalogue.updateCKanDataset(apiKey, catalogId, title, name, publishInOrganization,
|
||||||
apiKey,
|
authorFullname, authorMail, record.getMaintainer(), record.getMaintainerContact(), version,
|
||||||
catalogId,
|
HelperMethods.removeHTML(record.getDescription()), license, new ArrayList<String>(tags), null, // remove any previous group
|
||||||
title, name,
|
customFields, resources, publicDataset);
|
||||||
publishInOrganization,
|
|
||||||
authorFullname,
|
|
||||||
authorMail,
|
|
||||||
record.getMaintainer(),
|
|
||||||
record.getMaintainerContact(),
|
|
||||||
version,
|
|
||||||
HelperMethods.removeHTML(record.getDescription()),
|
|
||||||
license,
|
|
||||||
new ArrayList<String>(tags),
|
|
||||||
null, // remove any previous group
|
|
||||||
customFields,
|
|
||||||
resources,
|
|
||||||
publicDataset);
|
|
||||||
|
|
||||||
if(id != null) {
|
if(id != null) {
|
||||||
|
|
||||||
|
@ -527,11 +492,11 @@ public class GrsfPublisherStockService {
|
||||||
String description = Constants.SHORT_NAME_CUSTOM_KEY + ": " + record.getShortName() + "\n";
|
String description = Constants.SHORT_NAME_CUSTOM_KEY + ": " + record.getShortName() + "\n";
|
||||||
|
|
||||||
if(sourceInPath.equals(Sources.GRSF))
|
if(sourceInPath.equals(Sources.GRSF))
|
||||||
description += Constants.GRSF_SEMANTIC_IDENTIFIER_CUSTOM_KEY + ": " + record.getStockId() + "\n";
|
description += Constants.GRSF_SEMANTIC_IDENTIFIER_CUSTOM_KEY + ": " + record.getStockId()
|
||||||
CommonServiceUtils.actionsPostCreateOrUpdate(
|
+ "\n";
|
||||||
recordPublished.getId(), name, record, apiKey, username, organization, itemUrl,
|
CommonServiceUtils.actionsPostCreateOrUpdate(recordPublished.getId(), name, record, apiKey,
|
||||||
responseBean, catalogue, namespaces, groups, context, token,
|
username, organization, itemUrl, responseBean, catalogue, namespaces, groups, context,
|
||||||
title, authorFullname, contextServlet, true, description);
|
token, title, authorFullname, contextServlet, true, description);
|
||||||
status = Status.OK;
|
status = Status.OK;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -549,17 +514,15 @@ public class GrsfPublisherStockService {
|
||||||
@Path("update-status")
|
@Path("update-status")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response updateStatusStock(
|
public Response updateStatusStock(@Valid UpdateRecordStatus bean, @PathParam("source") String source)
|
||||||
@Valid UpdateRecordStatus bean,
|
|
||||||
@PathParam("source") String source)
|
|
||||||
throws ValidationException {
|
throws ValidationException {
|
||||||
|
|
||||||
|
|
||||||
Caller caller = AuthorizationProvider.instance.get();
|
Caller caller = AuthorizationProvider.instance.get();
|
||||||
String username = caller.getClient().getId();
|
String username = caller.getClient().getId();
|
||||||
String context = ScopeProvider.instance.get();
|
String context = ScopeProvider.instance.get();
|
||||||
|
|
||||||
logger.info("Incoming request for updating a status of record = " + bean + ". Request comes from user " + username + " in context " + context);
|
logger.info("Incoming request for updating a status of record = " + bean + ". Request comes from user "
|
||||||
|
+ username + " in context " + context);
|
||||||
|
|
||||||
Status status = Status.INTERNAL_SERVER_ERROR;
|
Status status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
|
||||||
|
@ -570,7 +533,8 @@ public class GrsfPublisherStockService {
|
||||||
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
|
||||||
|
|
||||||
if(catalogue == null) {
|
if(catalogue == null) {
|
||||||
throw new Exception("There was a problem while serving your request. No catalogue instance was found in this context!");
|
throw new Exception(
|
||||||
|
"There was a problem while serving your request. No catalogue instance was found in this context!");
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// catalog id must be reported
|
// catalog id must be reported
|
||||||
|
@ -585,12 +549,14 @@ public class GrsfPublisherStockService {
|
||||||
throw new Exception("A record with knowledge_base_id id " + uuid + " does not exist!");
|
throw new Exception("A record with knowledge_base_id id " + uuid + " does not exist!");
|
||||||
|
|
||||||
// check system type
|
// check system type
|
||||||
boolean isGRSF = !record.getExtrasAsHashMap().get(Constants.SYSTEM_TYPE_CUSTOM_KEY).equals(Constants.SYSTEM_TYPE_FOR_SOURCES_VALUE);
|
boolean isGRSF = !record.getExtrasAsHashMap().get(Constants.SYSTEM_TYPE_CUSTOM_KEY)
|
||||||
|
.equals(Constants.SYSTEM_TYPE_FOR_SOURCES_VALUE);
|
||||||
|
|
||||||
if(!isGRSF)
|
if(!isGRSF)
|
||||||
throw new Exception("You are trying to modify a Legacy record!");
|
throw new Exception("You are trying to modify a Legacy record!");
|
||||||
|
|
||||||
boolean rightDomain = record.getExtrasAsHashMap().get(Constants.DOMAIN_CUSTOM_KEY).equals(Product_Type.STOCK.getOrigName());
|
boolean rightDomain = record.getExtrasAsHashMap().get(Constants.DOMAIN_CUSTOM_KEY)
|
||||||
|
.equals(Product_Type.STOCK.getOrigName());
|
||||||
|
|
||||||
if(!rightDomain)
|
if(!rightDomain)
|
||||||
throw new Exception("This is not a Stock record!");
|
throw new Exception("This is not a Stock record!");
|
||||||
|
|
Loading…
Reference in New Issue