115 lines
4.3 KiB
Java
115 lines
4.3 KiB
Java
package org.gcube.informationsystem.resourceregistry.utils;
|
|
|
|
import java.io.IOException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Calendar;
|
|
import java.util.Date;
|
|
|
|
import org.gcube.com.fasterxml.jackson.core.JsonParseException;
|
|
import org.gcube.com.fasterxml.jackson.databind.JsonMappingException;
|
|
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
|
import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode;
|
|
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
|
|
import org.gcube.informationsystem.base.reference.Element;
|
|
import org.gcube.informationsystem.base.reference.IdentifiableElement;
|
|
import org.gcube.informationsystem.model.reference.properties.Metadata;
|
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
|
import org.gcube.informationsystem.serialization.ElementMapper;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import com.arcadedb.database.Document;
|
|
import com.arcadedb.database.MutableDocument;
|
|
import com.arcadedb.database.MutableEmbeddedDocument;
|
|
|
|
/**
|
|
* @author Luca Frosini (ISTI - CNR)
|
|
*/
|
|
public class MetadataUtility {
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(MetadataUtility.class);
|
|
|
|
public static String getUser() {
|
|
String user = Metadata.UNKNOWN_USER;
|
|
try {
|
|
user = SecretManagerProvider.instance.get().getUser().getUsername();
|
|
} catch(Exception e) {
|
|
logger.error("Unable to retrieve user. {} will be used", user);
|
|
}
|
|
return user;
|
|
}
|
|
|
|
public static Metadata createMetadata() {
|
|
MetadataOrient metadata = new MetadataOrient();
|
|
|
|
String creator = getUser();
|
|
metadata.setCreatedBy(creator);
|
|
metadata.setLastUpdateBy(creator);
|
|
|
|
Date date = Calendar.getInstance().getTime();
|
|
SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
|
|
logger.trace("Setting Last Update and Creation Time to " + ft.format(date));
|
|
|
|
metadata.setCreationTime(date);
|
|
metadata.setLastUpdateTime(date);
|
|
|
|
return metadata;
|
|
}
|
|
|
|
public static Metadata getMetadata(JsonNode jsonNode)
|
|
throws JsonParseException, JsonMappingException, IOException, ResourceRegistryException {
|
|
if(jsonNode.has(IdentifiableElement.METADATA_PROPERTY)) {
|
|
ObjectNode metadataNode = jsonNode.get(IdentifiableElement.METADATA_PROPERTY).deepCopy();
|
|
if(metadataNode.isNull()) {
|
|
return null;
|
|
}
|
|
MetadataOrient metadata = new MetadataOrient();
|
|
metadataNode.set(DBUtility.DB_TYPE_PROPERTY, metadataNode.get(Element.TYPE_PROPERTY));
|
|
metadataNode.remove(Element.TYPE_PROPERTY);
|
|
metadata.fromJSON(metadataNode.toString());
|
|
return metadata;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static MetadataOrient getMetadataOrient(Document document) throws ResourceRegistryException {
|
|
if(document instanceof MetadataOrient) {
|
|
return (MetadataOrient) document;
|
|
} else {
|
|
try {
|
|
MetadataOrient metadataOrient = new MetadataOrient();
|
|
String json = DBUtility.toJsonString(document);
|
|
Metadata metadata = ElementMapper.unmarshal(Metadata.class, json);
|
|
metadataOrient.setCreatedBy(metadata.getCreatedBy());
|
|
metadataOrient.setCreationTime(metadata.getCreationTime());
|
|
metadataOrient.setLastUpdateBy(metadata.getLastUpdateBy());
|
|
metadataOrient.setLastUpdateTime(metadata.getLastUpdateTime());
|
|
return metadataOrient;
|
|
} catch(Exception e) {
|
|
throw new ResourceRegistryException(
|
|
"Unable to recreate Metadata. " + DBUtility.SHOULD_NOT_OCCUR_ERROR_MESSAGE);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static Metadata addMetadata(Document element) {
|
|
Metadata metadata = createMetadata();
|
|
((MutableDocument) element).set(IdentifiableElement.METADATA_PROPERTY, metadata);
|
|
return metadata;
|
|
}
|
|
|
|
public static Metadata getMetadata(Document element) throws ResourceRegistryException {
|
|
return DBUtility.getPropertyDocument(Metadata.class, element, IdentifiableElement.METADATA_PROPERTY);
|
|
}
|
|
|
|
public static void updateModifiedByAndLastUpdate(Document element) throws ResourceRegistryException {
|
|
MutableEmbeddedDocument document = (MutableEmbeddedDocument) element.getEmbedded(IdentifiableElement.METADATA_PROPERTY);
|
|
String lastUpdateBy = getUser();
|
|
document.set(Metadata.LAST_UPDATE_BY_PROPERTY, lastUpdateBy);
|
|
Date lastUpdateTime = Calendar.getInstance().getTime();
|
|
document.set(Metadata.LAST_UPDATE_TIME_PROPERTY, lastUpdateTime);
|
|
((MutableDocument) element).set(IdentifiableElement.METADATA_PROPERTY, document);
|
|
}
|
|
|
|
}
|