package org.vertexium.blueprints; import com.tinkerpop.blueprints.Element; import org.vertexium.Authorizations; import org.vertexium.Property; import org.vertexium.Visibility; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public abstract class VertexiumBlueprintsElement implements Element { private static final String DEFAULT_PROPERTY_ID = ""; private final org.vertexium.Element element; private final Authorizations authorizations; private final VertexiumBlueprintsGraph graph; protected VertexiumBlueprintsElement(VertexiumBlueprintsGraph graph, org.vertexium.Element element, Authorizations authorizations) { this.graph = graph; this.element = element; this.authorizations = authorizations; } @Override public <T> T getProperty(String key) { Iterator<Object> values = getVertexiumElement().getPropertyValues(key).iterator(); if (values.hasNext()) { return (T) values.next(); } return null; } @Override public Set<String> getPropertyKeys() { Set<String> propertyKeys = new HashSet<String>(); for (Property property : getVertexiumElement().getProperties()) { propertyKeys.add(property.getName()); } return propertyKeys; } @Override public void setProperty(String propertyName, Object value) { if (value == null) { throw new IllegalArgumentException("value cannot be null."); } if (propertyName == null) { throw new IllegalArgumentException("Property Name cannot be null."); } if ("id".equals(propertyName)) { throw new IllegalArgumentException("Property Name cannot be \"id\""); } if ("".equals(propertyName)) { throw new IllegalArgumentException("Property Name cannot be empty."); } Visibility visibility = getGraph().getVisibilityProvider().getVisibilityForProperty(propertyName, value); getVertexiumElement().setProperty(propertyName, value, visibility, authorizations); } @Override public <T> T removeProperty(String key) { T old = getProperty(key); getVertexiumElement().deleteProperty(DEFAULT_PROPERTY_ID, key, authorizations); return old; } @Override public abstract void remove(); @Override public Object getId() { return getVertexiumElement().getId(); } public VertexiumBlueprintsGraph getGraph() { return graph; } public org.vertexium.Element getVertexiumElement() { return element; } @Override public int hashCode() { return getVertexiumElement().hashCode(); } @Override public boolean equals(Object obj) { if (obj instanceof VertexiumBlueprintsElement) { return getVertexiumElement().equals(((VertexiumBlueprintsElement) obj).getVertexiumElement()); } return super.equals(obj); } @Override public String toString() { return getVertexiumElement().toString(); } }