package com.tinkerpop.blueprints.util.wrappers.id; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Element; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.util.ElementHelper; import java.util.HashSet; import java.util.Set; /** * @author Joshua Shinavier (http://fortytwo.net) */ public abstract class IdElement implements Element { protected final Element baseElement; protected final IdGraph idGraph; protected final boolean propertyBased; protected IdElement(final Element baseElement, final IdGraph idGraph, final boolean propertyBased) { this.baseElement = baseElement; this.idGraph = idGraph; this.propertyBased = propertyBased; } public <T> T getProperty(final String key) { if (propertyBased && key.equals(IdGraph.ID)) { return null; } else { return baseElement.getProperty(key); } } public Set<String> getPropertyKeys() { if (propertyBased) { final Set<String> keys = baseElement.getPropertyKeys(); final Set<String> s = new HashSet<String>(); s.addAll(keys); s.remove(IdGraph.ID); return s; } else { return baseElement.getPropertyKeys(); } } public void setProperty(final String key, final Object value) { if (propertyBased && key.equals(IdGraph.ID)) { throw new IllegalArgumentException("Unable to set value for reserved property " + IdGraph.ID); } baseElement.setProperty(key, value); } public <T> T removeProperty(final String key) { if (propertyBased) { if (key.equals(IdGraph.ID)) { throw new IllegalArgumentException("Unable to remove value for reserved property " + IdGraph.ID); } } return baseElement.removeProperty(key); } public Object getId() { return propertyBased ? baseElement.getProperty(IdGraph.ID) : baseElement.getId(); } public int hashCode() { return this.baseElement.hashCode(); } public boolean equals(final Object object) { return ElementHelper.areEqual(this, object); } public void remove() { if (this instanceof Vertex) { this.idGraph.removeVertex((Vertex) this); } else { this.idGraph.removeEdge((Edge) this); } } }