diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
index 671fd1c..ca401f8 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -6,6 +6,9 @@
uses
+
+ uses
+
diff --git a/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/json/input/others/UpdateRecordStatus.java b/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/json/input/others/UpdateRecordStatus.java
new file mode 100644
index 0000000..d4fe30d
--- /dev/null
+++ b/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/json/input/others/UpdateRecordStatus.java
@@ -0,0 +1,58 @@
+package org.gcube.data_catalogue.grsf_publish_ws.json.input.others;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import org.gcube.datacatalogue.common.Constants;
+import org.gcube.datacatalogue.common.enums.Status;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class UpdateRecordStatus {
+
+ @JsonProperty(Constants.KB_ID)
+ @NotNull(message= Constants.KB_ID + " cannot be null")
+ @Size(min=1, message= Constants.KB_ID + " cannot be empty")
+ private String uuid;
+
+ @JsonProperty(Constants.NEW_STATUS)
+ private Status newStatus;
+
+ public UpdateRecordStatus() {
+ super();
+ }
+
+ /**
+ * @param uuid
+ * @param newStatus
+ */
+ public UpdateRecordStatus(String uuid, Status newStatus) {
+ super();
+ this.uuid = uuid;
+ this.newStatus = newStatus;
+ }
+
+ public Status getNewStatus() {
+ return newStatus;
+ }
+
+ public void setNewStatus(Status newStatus) {
+ this.newStatus = newStatus;
+ }
+
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ @Override
+ public String toString() {
+ return "UpdateRecordStatus [uuid=" + uuid + ", newStatus=" + newStatus
+ + "]";
+ }
+
+}
diff --git a/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/services/GrsfPublisherFisheryService.java b/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/services/GrsfPublisherFisheryService.java
index 334bc9d..354fe43 100644
--- a/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/services/GrsfPublisherFisheryService.java
+++ b/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/services/GrsfPublisherFisheryService.java
@@ -30,6 +30,7 @@ import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.authorization.library.utils.Caller;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.data_catalogue.grsf_publish_ws.json.input.others.DeleteRecord;
+import org.gcube.data_catalogue.grsf_publish_ws.json.input.others.UpdateRecordStatus;
import org.gcube.data_catalogue.grsf_publish_ws.json.input.record.FisheryRecord;
import org.gcube.data_catalogue.grsf_publish_ws.json.output.ResponseBean;
import org.gcube.data_catalogue.grsf_publish_ws.json.output.ResponseCreationBean;
@@ -546,4 +547,73 @@ public class GrsfPublisherFisheryService {
}
return Response.status(status).entity(responseBean).build();
}
+
+ @POST
+ @Path("update-status")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response updateStatusStock(
+ @Valid UpdateRecordStatus bean,
+ @PathParam("source") String source)
+ throws ValidationException{
+
+
+ Caller caller = AuthorizationProvider.instance.get();
+ String username = caller.getClient().getId();
+ String context = ScopeProvider.instance.get();
+
+ logger.info("Incoming request for updating a status of record = " + bean + ". Request comes from user " + username + " in context " + context);
+
+ ResponseCreationBean responseBean = new ResponseCreationBean();
+ Status status = Status.INTERNAL_SERVER_ERROR;
+
+ try{
+
+ DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
+
+ if(catalogue == null){
+ throw new Exception("There was a problem while serving your request. No catalogue instance was found in this context!");
+ }else{
+
+ // catalog id must be reported
+ String uuid = bean.getUuid();
+ String newStatus = bean.getNewStatus().getOrigName();
+
+ // get the dataset
+ String apiKeyUser = catalogue.getApiKeyFromUsername(username);
+ CkanDataset record = catalogue.getDataset(uuid, apiKeyUser);
+
+ if(record == null)
+ throw new Exception("A record with knowledge_base_id id " + uuid + " does not exist!");
+
+ // check system type
+ boolean isGRSF = !record.getExtrasAsHashMap().get(Constants.SYSTEM_TYPE_CUSTOM_KEY).equals(Constants.SYSTEM_TYPE_FOR_SOURCES_VALUE);
+
+ if(!isGRSF)
+ 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());
+
+ if(!rightDomain)
+ throw new Exception("This is not a Fishery record!");
+
+ // update it
+ Map> updateStatus = new HashMap>(1);
+ updateStatus.put(Constants.STATUS_OF_THE_GRSF_RECORD_CUSTOM_KEY, Arrays.asList(newStatus));
+ catalogue.patchProductCustomFields(uuid, apiKeyUser, updateStatus, true);
+ status = Status.OK;
+ responseBean.setError(null);
+ responseBean.setKbUuid(uuid);
+ responseBean.setId(record.getId());
+ responseBean.setItemUrl(record.getExtrasAsHashMap().get(Constants.ITEM_URL_FIELD));
+
+ }
+ }catch(Exception e){
+ logger.error("Failed to update fishery record's status", e);
+ responseBean.setError(e.getMessage());
+ }
+
+ return Response.status(status).entity(responseBean).build();
+
+ }
}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/services/GrsfPublisherStockService.java b/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/services/GrsfPublisherStockService.java
index 8764ec0..b6ba42b 100644
--- a/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/services/GrsfPublisherStockService.java
+++ b/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/services/GrsfPublisherStockService.java
@@ -30,6 +30,7 @@ import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.authorization.library.utils.Caller;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.data_catalogue.grsf_publish_ws.json.input.others.DeleteRecord;
+import org.gcube.data_catalogue.grsf_publish_ws.json.input.others.UpdateRecordStatus;
import org.gcube.data_catalogue.grsf_publish_ws.json.input.record.StockRecord;
import org.gcube.data_catalogue.grsf_publish_ws.json.output.ResponseBean;
import org.gcube.data_catalogue.grsf_publish_ws.json.output.ResponseCreationBean;
@@ -425,7 +426,7 @@ public class GrsfPublisherStockService {
CkanDataset recordPublished = catalogue.getDataset(catalogId, apiKey);
if(recordPublished == null)
- throw new Exception("A record with catalogue id " + catalogId + " does not exist!");
+ throw new Exception("A record with id " + catalogId + " does not exist!");
// retrieve the user's email and fullname
String authorMail = HelperMethods.getUserEmail(context, token);
@@ -544,4 +545,73 @@ public class GrsfPublisherStockService {
return Response.status(status).entity(responseBean).build();
}
+ @POST
+ @Path("update-status")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response updateStatusStock(
+ @Valid UpdateRecordStatus bean,
+ @PathParam("source") String source)
+ throws ValidationException{
+
+
+ Caller caller = AuthorizationProvider.instance.get();
+ String username = caller.getClient().getId();
+ String context = ScopeProvider.instance.get();
+
+ 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;
+
+ ResponseCreationBean responseBean = new ResponseCreationBean();
+
+ try{
+
+ DataCatalogue catalogue = HelperMethods.getDataCatalogueRunningInstance(context);
+
+ if(catalogue == null){
+ throw new Exception("There was a problem while serving your request. No catalogue instance was found in this context!");
+ }else{
+
+ // catalog id must be reported
+ String uuid = bean.getUuid();
+ String newStatus = bean.getNewStatus().getOrigName();
+
+ // get the dataset
+ String apiKeyUser = catalogue.getApiKeyFromUsername(username);
+ CkanDataset record = catalogue.getDataset(uuid, apiKeyUser);
+
+ if(record == null)
+ throw new Exception("A record with knowledge_base_id id " + uuid + " does not exist!");
+
+ // check system type
+ boolean isGRSF = !record.getExtrasAsHashMap().get(Constants.SYSTEM_TYPE_CUSTOM_KEY).equals(Constants.SYSTEM_TYPE_FOR_SOURCES_VALUE);
+
+ if(!isGRSF)
+ 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());
+
+ if(!rightDomain)
+ throw new Exception("This is not a Stock record!");
+
+ // update it
+ Map> updateStatus = new HashMap>(1);
+ updateStatus.put(Constants.STATUS_OF_THE_GRSF_RECORD_CUSTOM_KEY, Arrays.asList(newStatus));
+ catalogue.patchProductCustomFields(uuid, apiKeyUser, updateStatus, true);
+ status = Status.OK;
+ responseBean.setError(null);
+ responseBean.setKbUuid(uuid);
+ responseBean.setId(record.getId());
+ responseBean.setItemUrl(record.getExtrasAsHashMap().get(Constants.ITEM_URL_FIELD));
+ }
+ }catch(Exception e){
+ logger.error("Failed to update stock record's status", e);
+ responseBean.setError(e.getMessage());
+ }
+
+ return Response.status(status).entity(responseBean).build();
+
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/utils/CommonServiceUtils.java b/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/utils/CommonServiceUtils.java
index 8a6b02b..12f55ca 100644
--- a/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/utils/CommonServiceUtils.java
+++ b/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/utils/CommonServiceUtils.java
@@ -552,7 +552,7 @@ public class CommonServiceUtils {
Map> addField = new HashMap>();
String modifiedUUIDKey = namespaces.containsKey(Constants.ITEM_URL_FIELD) ? namespaces.get(Constants.ITEM_URL_FIELD) : Constants.ITEM_URL_FIELD;
addField.put(modifiedUUIDKey, Arrays.asList(itemUrl));
- catalogue.patchProductCustomFields(datasetId, apiKey, addField);
+ catalogue.patchProductCustomFields(datasetId, apiKey, addField, false);
}
// update description anyway
diff --git a/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/utils/HelperMethods.java b/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/utils/HelperMethods.java
index 2051ab4..2e167b1 100644
--- a/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/utils/HelperMethods.java
+++ b/src/main/java/org/gcube/data_catalogue/grsf_publish_ws/utils/HelperMethods.java
@@ -66,7 +66,7 @@ public abstract class HelperMethods {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(HelperMethods.class);
private static final String APPLICATION_ID_CATALOGUE_MANAGER = "org.gcube.datacatalogue.ProductCatalogue";
- private static final String NOTIFICATION_MESSAGE = "Dear members,
The item 'PRODUCT_TITLE' has been just published by USER_FULLNAME.
You can find it here: PRODUCT_URL
";
+ private static final String NOTIFICATION_MESSAGE = "Dear members,
The record 'PRODUCT_TITLE' has been just published by USER_FULLNAME.
You can find it here: PRODUCT_URL
";
private static final String SOCIAL_SERVICE_APPLICATION_TOKEN = "/2/tokens/generate-application-token/";
private static final String SOCIAL_SERVICE_WRITE_APPLICATION_POST = "/2/posts/write-post-app/";
private static final String MEDIATYPE_JSON = "application/json";