Fixing update properties

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@134816 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Luca Frosini 2016-11-25 14:44:21 +00:00
parent eb2c8022ba
commit e4cbaf19d4
2 changed files with 132 additions and 76 deletions

View File

@ -52,6 +52,7 @@ import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Element; import com.tinkerpop.blueprints.Element;
import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.orient.OrientBaseGraph;
import com.tinkerpop.blueprints.impls.orient.OrientEdge; import com.tinkerpop.blueprints.impls.orient.OrientEdge;
import com.tinkerpop.blueprints.impls.orient.OrientGraph; import com.tinkerpop.blueprints.impls.orient.OrientGraph;
import com.tinkerpop.blueprints.impls.orient.OrientVertex; import com.tinkerpop.blueprints.impls.orient.OrientVertex;
@ -62,6 +63,52 @@ import com.tinkerpop.blueprints.impls.orient.OrientVertex;
*/ */
public class EntityManagementImpl implements EntityManagement { public class EntityManagementImpl implements EntityManagement {
public static final Set<String> RELATION_IGNORE_KEYS;
public static final Set<String> RELATION_IGNORE_START_WITH_KEYS;
public static final Set<String> ENTITY_IGNORE_KEYS;
public static final Set<String> ENTITY_IGNORE_START_WITH_KEYS;
public static final Set<String> EMBEDDED_IGNORE_KEYS;
public static final Set<String> EMBEDDED_IGNORE_START_WITH_KEYS;
public static final String AT = "@";
public static final String UNDERSCORE = "_";
static {
RELATION_IGNORE_KEYS = new HashSet<String>();
RELATION_IGNORE_KEYS.add(Relation.HEADER_PROPERTY);
RELATION_IGNORE_KEYS.add(Relation.TARGET_PROPERTY);
RELATION_IGNORE_KEYS.add(Relation.SOURCE_PROPERTY);
RELATION_IGNORE_KEYS.add(OrientBaseGraph.CONNECTION_IN.toLowerCase());
RELATION_IGNORE_KEYS.add(OrientBaseGraph.CONNECTION_OUT.toLowerCase());
RELATION_IGNORE_KEYS.add(OrientBaseGraph.CONNECTION_IN.toUpperCase());
RELATION_IGNORE_KEYS.add(OrientBaseGraph.CONNECTION_OUT.toUpperCase());
RELATION_IGNORE_START_WITH_KEYS = new HashSet<String>();
RELATION_IGNORE_START_WITH_KEYS.add(AT);
RELATION_IGNORE_START_WITH_KEYS.add(UNDERSCORE);
ENTITY_IGNORE_KEYS = new HashSet<String>();
ENTITY_IGNORE_KEYS.add(Entity.HEADER_PROPERTY);
ENTITY_IGNORE_START_WITH_KEYS = new HashSet<String>();
ENTITY_IGNORE_START_WITH_KEYS.add(OrientVertex.CONNECTION_IN_PREFIX.toLowerCase());
ENTITY_IGNORE_START_WITH_KEYS.add(OrientVertex.CONNECTION_OUT_PREFIX.toLowerCase());
ENTITY_IGNORE_START_WITH_KEYS.add(OrientVertex.CONNECTION_IN_PREFIX.toUpperCase());
ENTITY_IGNORE_START_WITH_KEYS.add(OrientVertex.CONNECTION_OUT_PREFIX.toUpperCase());
ENTITY_IGNORE_START_WITH_KEYS.add(AT);
ENTITY_IGNORE_START_WITH_KEYS.add(UNDERSCORE);
EMBEDDED_IGNORE_KEYS = new HashSet<String>();
EMBEDDED_IGNORE_START_WITH_KEYS = new HashSet<String>();
ENTITY_IGNORE_START_WITH_KEYS.add(AT);
ENTITY_IGNORE_START_WITH_KEYS.add(UNDERSCORE);
}
private static Logger logger = LoggerFactory private static Logger logger = LoggerFactory
.getLogger(EntityManagementImpl.class); .getLogger(EntityManagementImpl.class);
@ -277,7 +324,7 @@ public class EntityManagementImpl implements EntityManagement {
} }
public static Map<String, Object> getPropertyMap(JsonNode jsonNode, public static Map<String, Object> getPropertyMap(JsonNode jsonNode,
Set<String> ignoreKeys) throws JsonProcessingException, IOException { Set<String> ignoreKeys, Set<String> ignoreStartWith) throws JsonProcessingException, IOException {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
@ -285,21 +332,28 @@ public class EntityManagementImpl implements EntityManagement {
ignoreKeys = new HashSet<>(); ignoreKeys = new HashSet<>();
} }
if (ignoreStartWith == null) {
ignoreStartWith = new HashSet<>();
}
Iterator<Entry<String, JsonNode>> fields = jsonNode.fields(); Iterator<Entry<String, JsonNode>> fields = jsonNode.fields();
OUTER_WHILE:
while (fields.hasNext()) { while (fields.hasNext()) {
Entry<String, JsonNode> entry = fields.next(); Entry<String, JsonNode> entry = fields.next();
String key = entry.getKey(); String key = entry.getKey();
if (key.compareTo(Entity.HEADER_PROPERTY) == 0) {
continue;
}
if (key.startsWith("@") || key.startsWith("_")) {
continue;
}
if (ignoreKeys.contains(key)) { if (ignoreKeys.contains(key)) {
continue; continue;
} }
for(String prefix : ignoreStartWith){
if(key.startsWith(prefix)){
break OUTER_WHILE;
}
}
JsonNode value = entry.getValue(); JsonNode value = entry.getValue();
Object object = null; Object object = null;
try { try {
@ -318,10 +372,9 @@ public class EntityManagementImpl implements EntityManagement {
private Map<String, Object> getVertexProperties(JsonNode node) private Map<String, Object> getVertexProperties(JsonNode node)
throws ResourceRegistryException { throws ResourceRegistryException {
Set<String> ignoreKeys = new HashSet<>();
Map<String, Object> vertexProperties = null; Map<String, Object> vertexProperties = null;
try { try {
vertexProperties = getPropertyMap(node, ignoreKeys); vertexProperties = getPropertyMap(node, ENTITY_IGNORE_KEYS, ENTITY_IGNORE_START_WITH_KEYS);
} catch (Exception e) { } catch (Exception e) {
String error = "Error while parsing json to get Relation properties"; String error = "Error while parsing json to get Relation properties";
logger.error(error, e); logger.error(error, e);
@ -332,14 +385,9 @@ public class EntityManagementImpl implements EntityManagement {
private Map<String, Object> getEdgeProperties(JsonNode node) private Map<String, Object> getEdgeProperties(JsonNode node)
throws ResourceRegistryException { throws ResourceRegistryException {
Set<String> ignoreKeys = new HashSet<>();
ignoreKeys.add(Relation.TARGET_PROPERTY);
ignoreKeys.add(Relation.SOURCE_PROPERTY);
ignoreKeys.add(Relation.HEADER_PROPERTY);
Map<String, Object> edgeProperties = null; Map<String, Object> edgeProperties = null;
try { try {
edgeProperties = getPropertyMap(node, ignoreKeys); edgeProperties = getPropertyMap(node, RELATION_IGNORE_KEYS, RELATION_IGNORE_START_WITH_KEYS);
} catch (Exception e) { } catch (Exception e) {
String error = "Error while parsing json to get Relation properties"; String error = "Error while parsing json to get Relation properties";
logger.error(error, e); logger.error(error, e);
@ -348,6 +396,62 @@ public class EntityManagementImpl implements EntityManagement {
return edgeProperties; return edgeProperties;
} }
private Element updateProperties(Element element, JsonNode jsonNode)
throws ResourceRegistryException {
Set<String> ignoreKeys = null;
Set<String> ignoreStartWithKeys = null;
Set<String> oldKeys = element.getPropertyKeys();
Map<String, Object> properties;
if (element instanceof Vertex) {
properties = getVertexProperties(jsonNode);
ignoreKeys = EMBEDDED_IGNORE_KEYS;
ignoreStartWithKeys = EMBEDDED_IGNORE_START_WITH_KEYS;
} else if (element instanceof Edge) {
properties = getEdgeProperties(jsonNode);
ignoreKeys = RELATION_IGNORE_KEYS;
ignoreStartWithKeys = RELATION_IGNORE_START_WITH_KEYS;
} else {
String error = String.format("Error while updating {} properties",
element.toString());
throw new ResourceRegistryException(error);
}
oldKeys.removeAll(properties.keySet());
for (String key : properties.keySet()) {
try {
element.setProperty(key, properties.get(key));
} catch (Exception e) {
String error = String.format(
"Error while setting property %s : %s", key, properties
.get(key).toString());
logger.error(error);
throw new ResourceRegistryException(error, e);
}
}
OUTER_FOR:
for (String key : oldKeys) {
if (ignoreKeys.contains(key)) {
continue;
}
for(String prefix : ignoreStartWithKeys){
if(key.startsWith(prefix)){
break OUTER_FOR;
}
}
element.removeProperty(key);
}
return element;
}
private Vertex getOrCreateTargetVertex(OrientGraph orientGraph, private Vertex getOrCreateTargetVertex(OrientGraph orientGraph,
@SuppressWarnings("rawtypes") Class<? extends Relation> relation, @SuppressWarnings("rawtypes") Class<? extends Relation> relation,
JsonNode target) throws ResourceRegistryException { JsonNode target) throws ResourceRegistryException {
@ -745,48 +849,6 @@ public class EntityManagementImpl implements EntityManagement {
} }
} }
private Element updateProperties(Element element, JsonNode jsonNode)
throws ResourceRegistryException {
Set<String> oldKeys = element.getPropertyKeys();
Map<String, Object> properties;
if (element instanceof Vertex) {
properties = getVertexProperties(jsonNode);
} else if (element instanceof Edge) {
properties = getEdgeProperties(jsonNode);
} else {
String error = String.format("Error while updating {} properties",
element.toString());
throw new ResourceRegistryException(error);
}
oldKeys.removeAll(properties.keySet());
for (String key : properties.keySet()) {
try {
element.setProperty(key, properties.get(key));
} catch (Exception e) {
String error = String.format(
"Error while setting property %s : %s", key, properties
.get(key).toString());
logger.error(error);
throw new ResourceRegistryException(error, e);
}
}
for (String key : oldKeys) {
if (key.startsWith("@") || key.startsWith("_")) {
continue;
}
if (key.compareTo(Facet.HEADER_PROPERTY) == 0) {
continue;
}
element.removeProperty(key);
}
return element;
}
protected Vertex updateFacet(OrientGraph orientGraph, UUID uuid, protected Vertex updateFacet(OrientGraph orientGraph, UUID uuid,
JsonNode jsonNode) throws ResourceRegistryException { JsonNode jsonNode) throws ResourceRegistryException {
logger.debug("Trying to update {} with UUID {} usign {}", Facet.NAME, logger.debug("Trying to update {} with UUID {} usign {}", Facet.NAME,

View File

@ -9,6 +9,8 @@ import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean; import java.lang.management.OperatingSystemMXBean;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.file.FileStore; import java.nio.file.FileStore;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
@ -25,8 +27,13 @@ import org.gcube.informationsystem.impl.embedded.HeaderImpl;
import org.gcube.informationsystem.impl.entity.facet.CPUFacetImpl; import org.gcube.informationsystem.impl.entity.facet.CPUFacetImpl;
import org.gcube.informationsystem.impl.entity.facet.ContainerStateFacetImpl; import org.gcube.informationsystem.impl.entity.facet.ContainerStateFacetImpl;
import org.gcube.informationsystem.impl.entity.facet.MemoryFacetImpl; import org.gcube.informationsystem.impl.entity.facet.MemoryFacetImpl;
import org.gcube.informationsystem.impl.entity.facet.NetworkingFacetImpl;
import org.gcube.informationsystem.impl.entity.facet.SimplePropertyFacetImpl; import org.gcube.informationsystem.impl.entity.facet.SimplePropertyFacetImpl;
import org.gcube.informationsystem.impl.entity.facet.SoftwareFacetImpl;
import org.gcube.informationsystem.impl.entity.resource.HostingNodeImpl; import org.gcube.informationsystem.impl.entity.resource.HostingNodeImpl;
import org.gcube.informationsystem.impl.relation.IsIdentifiedByImpl;
import org.gcube.informationsystem.impl.relation.consistsof.HasPersistentMemoryImpl;
import org.gcube.informationsystem.impl.relation.consistsof.HasVolatileMemoryImpl;
import org.gcube.informationsystem.impl.utils.Entities; import org.gcube.informationsystem.impl.utils.Entities;
import org.gcube.informationsystem.model.embedded.Header; import org.gcube.informationsystem.model.embedded.Header;
import org.gcube.informationsystem.model.entity.Facet; import org.gcube.informationsystem.model.entity.Facet;
@ -35,10 +42,14 @@ import org.gcube.informationsystem.model.entity.facet.CPUFacet;
import org.gcube.informationsystem.model.entity.facet.ContainerStateFacet; import org.gcube.informationsystem.model.entity.facet.ContainerStateFacet;
import org.gcube.informationsystem.model.entity.facet.MemoryFacet; import org.gcube.informationsystem.model.entity.facet.MemoryFacet;
import org.gcube.informationsystem.model.entity.facet.MemoryFacet.MemoryUnit; import org.gcube.informationsystem.model.entity.facet.MemoryFacet.MemoryUnit;
import org.gcube.informationsystem.model.entity.facet.NetworkingFacet;
import org.gcube.informationsystem.model.entity.facet.SimplePropertyFacet; import org.gcube.informationsystem.model.entity.facet.SimplePropertyFacet;
import org.gcube.informationsystem.model.entity.facet.SoftwareFacet;
import org.gcube.informationsystem.model.entity.resource.EService; import org.gcube.informationsystem.model.entity.resource.EService;
import org.gcube.informationsystem.model.entity.resource.HostingNode; import org.gcube.informationsystem.model.entity.resource.HostingNode;
import org.gcube.informationsystem.model.relation.ConsistsOf; import org.gcube.informationsystem.model.relation.ConsistsOf;
import org.gcube.informationsystem.model.relation.IsIdentifiedBy;
import org.gcube.informationsystem.model.relation.consistsof.HasPersistentMemory;
import org.gcube.informationsystem.model.relation.consistsof.HasVolatileMemory; import org.gcube.informationsystem.model.relation.consistsof.HasVolatileMemory;
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
import org.junit.Test; import org.junit.Test;
@ -107,7 +118,6 @@ public class SmartgearResourcesTest {
Header header = new HeaderImpl(uuid); Header header = new HeaderImpl(uuid);
hostingNode.setHeader(header); hostingNode.setHeader(header);
/*
NetworkingFacet networkingFacet = new NetworkingFacetImpl(); NetworkingFacet networkingFacet = new NetworkingFacetImpl();
try { try {
networkingFacet.setIPAddress(InetAddress.getLocalHost().getHostAddress()); networkingFacet.setIPAddress(InetAddress.getLocalHost().getHostAddress());
@ -138,37 +148,28 @@ public class SmartgearResourcesTest {
SimplePropertyFacet simplePropertyFacet = addEnvironmentVariables(); SimplePropertyFacet simplePropertyFacet = addEnvironmentVariables();
hostingNode.addFacet(simplePropertyFacet); hostingNode.addFacet(simplePropertyFacet);
*/
ContainerStateFacet containerStateFacet = getContainerStateFacet(null); ContainerStateFacet containerStateFacet = getContainerStateFacet(null);
hostingNode.addFacet(containerStateFacet); hostingNode.addFacet(containerStateFacet);
/*
MemoryFacet ramFacet = getRamInfo(null); MemoryFacet ramFacet = getRamInfo(null);
HasVolatileMemory<HostingNode, MemoryFacet> hasVolatileRAMMemory = HasVolatileMemory<HostingNode, MemoryFacet> hasVolatileRAMMemory =
new HasVolatileMemoryImpl<HostingNode, MemoryFacet>( new HasVolatileMemoryImpl<HostingNode, MemoryFacet>(
hostingNode, ramFacet, null); hostingNode, ramFacet, null);
hasVolatileRAMMemory.setAdditionalProperty(MEMORY_TYPE, MEMORY_TYPE_RAM); hasVolatileRAMMemory.setAdditionalProperty(MEMORY_TYPE, MEMORY_TYPE_RAM);
hostingNode.addFacet(hasVolatileRAMMemory); hostingNode.addFacet(hasVolatileRAMMemory);
*/
/*
MemoryFacet jvmMemoryFacet = getJVMMemoryInfo(null); MemoryFacet jvmMemoryFacet = getJVMMemoryInfo(null);
HasVolatileMemory<HostingNode, MemoryFacet> hasVolatileJVMMemory = HasVolatileMemory<HostingNode, MemoryFacet> hasVolatileJVMMemory =
new HasVolatileMemoryImpl<HostingNode, MemoryFacet>( new HasVolatileMemoryImpl<HostingNode, MemoryFacet>(
hostingNode, jvmMemoryFacet, null); hostingNode, jvmMemoryFacet, null);
hasVolatileJVMMemory.setAdditionalProperty(MEMORY_TYPE, MEMORY_TYPE_JVM); hasVolatileJVMMemory.setAdditionalProperty(MEMORY_TYPE, MEMORY_TYPE_JVM);
hostingNode.addFacet(hasVolatileJVMMemory); hostingNode.addFacet(hasVolatileJVMMemory);
*/
/*
MemoryFacet disk = getDiskSpace(null); MemoryFacet disk = getDiskSpace(null);
HasPersistentMemory<HostingNode, MemoryFacet> hasPersistentMemory = HasPersistentMemory<HostingNode, MemoryFacet> hasPersistentMemory =
new HasPersistentMemoryImpl<HostingNode, MemoryFacet>(hostingNode, disk, null); new HasPersistentMemoryImpl<HostingNode, MemoryFacet>(hostingNode, disk, null);
hostingNode.addFacet(hasPersistentMemory); hostingNode.addFacet(hasPersistentMemory);
*/
String json = entityManagementImpl.createResource(HostingNode.NAME, Entities.marshal(hostingNode)); String json = entityManagementImpl.createResource(HostingNode.NAME, Entities.marshal(hostingNode));
@ -179,40 +180,33 @@ public class SmartgearResourcesTest {
List<ConsistsOf<? extends Resource, ? extends Facet>> consistsOfList = hostingNodeToUpdate.getConsistsOf(); List<ConsistsOf<? extends Resource, ? extends Facet>> consistsOfList = hostingNodeToUpdate.getConsistsOf();
for(ConsistsOf<? extends Resource, ? extends Facet> c : consistsOfList){ for(ConsistsOf<? extends Resource, ? extends Facet> c : consistsOfList){
/*
if(c.getTarget() instanceof ContainerStateFacet){ if(c.getTarget() instanceof ContainerStateFacet){
containerStateFacet = (ContainerStateFacet) c.getTarget(); containerStateFacet = (ContainerStateFacet) c.getTarget();
containerStateFacet = getContainerStateFacet(containerStateFacet); containerStateFacet = getContainerStateFacet(containerStateFacet);
continue; continue;
} }
*/
if(c instanceof HasVolatileMemory){ if(c instanceof HasVolatileMemory){
/*
String memoryType = (String) c.getAdditionalProperty(MEMORY_TYPE); String memoryType = (String) c.getAdditionalProperty(MEMORY_TYPE);
if(memoryType.compareTo(MEMORY_TYPE_RAM)==0){ if(memoryType.compareTo(MEMORY_TYPE_RAM)==0){
ramFacet = (MemoryFacet) c.getTarget(); ramFacet = (MemoryFacet) c.getTarget();
ramFacet = getRamInfo(ramFacet); ramFacet = getRamInfo(ramFacet);
continue; continue;
} }
*/
/*
if(memoryType.compareTo(MEMORY_TYPE_JVM)==0){ if(memoryType.compareTo(MEMORY_TYPE_JVM)==0){
jvmMemoryFacet = (MemoryFacet) c.getTarget(); jvmMemoryFacet = (MemoryFacet) c.getTarget();
jvmMemoryFacet = getJVMMemoryInfo(jvmMemoryFacet); jvmMemoryFacet = getJVMMemoryInfo(jvmMemoryFacet);
continue; continue;
} }
*/
} }
/*
if(c instanceof HasPersistentMemory){ if(c instanceof HasPersistentMemory){
disk = (MemoryFacet) c.getTarget(); disk = (MemoryFacet) c.getTarget();
disk = getDiskSpace(disk); disk = getDiskSpace(disk);
continue; continue;
} }
*/
consistsOfToRemove.add(c); consistsOfToRemove.add(c);