All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tinkerpop.blueprints.impls.sparksee.SparkseeElement Maven / Gradle / Ivy

package com.tinkerpop.blueprints.impls.sparksee;

import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Element;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.util.ElementHelper;
import com.tinkerpop.blueprints.util.StringFactory;

import java.util.HashSet;
import java.util.Set;

/**
 * {@link Element} implementation for Sparksee.
 * 

* All elements are typed or labeled. The way to get the type or label for an * element is retrieving the property {@link StringFactory#LABEL}. This * property cannot be set or removed. *

* TODO: When a Float value is set for an attribute, it is stored as a Double * value. Thus, when it is retrieved later, it is retrieved as a Double and not * as a Float. * * @author Sparsity * Technologies */ class SparkseeElement implements Element { private static final int NODE_SCOPE = com.sparsity.sparksee.gdb.Type.NodesType; private static final int EDGE_SCOPE = com.sparsity.sparksee.gdb.Type.EdgesType; /** * SparkseeGraph instance. */ protected SparkseeGraph graph = null; /** * Sparksee OID. */ protected long oid = com.sparsity.sparksee.gdb.Objects.InvalidOID; /** * Sparksee object type. *

* It is loaded as late as possible (and just if required). * * @see #getObjectType() */ private int type = com.sparsity.sparksee.gdb.Type.InvalidType; /** * Gets the Sparksee object type. *

* If it has not been loaded yet, it is retrieved from Sparksee database. * * @return The element type. */ protected int getObjectType() { if (type == com.sparsity.sparksee.gdb.Type.InvalidType) { type = graph.getRawGraph().getObjectType(oid); } return type; } /** * Gets the type or label of the element. *

* The label is the name of the Sparksee object type. * * @return Type or label of the element. */ protected String getTypeLabel() { return graph.getRawGraph().getType(getObjectType()).getName(); } /** * Creates a new instance. * * @param g SparkseeGraph. * @param oid Sparksee OID. */ protected SparkseeElement(final SparkseeGraph g, final long oid) { assert g != null; assert oid != com.sparsity.sparksee.gdb.Objects.InvalidOID; this.graph = g; this.oid = oid; } /* * (non-Javadoc) * * @see com.tinkerpop.blueprints.Element#getProperty(java.lang.String) */ @Override public T getProperty(final String key) { graph.autoStartTransaction(false); if (key.compareTo(StringFactory.LABEL) == 0) { com.sparsity.sparksee.gdb.Type tdata = graph.getRawGraph().getType(getObjectType()); return (T) tdata.getName(); } int attrType = getObjectType(); if (!graph.typeScope.get()) { if (graph.getRawGraph().getType(getObjectType()).getObjectType() == com.sparsity.sparksee.gdb.ObjectType.Node) { attrType = NODE_SCOPE; } else { attrType = EDGE_SCOPE; } } int attr = graph.getRawGraph().findAttribute(attrType, key); if (attr == com.sparsity.sparksee.gdb.Attribute.InvalidAttribute) { return null; } com.sparsity.sparksee.gdb.Attribute adata = graph.getRawGraph().getAttribute(attr); assert adata != null; com.sparsity.sparksee.gdb.Value v = new com.sparsity.sparksee.gdb.Value(); graph.getRawGraph().getAttribute(oid, attr, v); Object result = null; if (!v.isNull()) { switch (v.getDataType()) { case Boolean: result = v.getBoolean(); break; case Integer: result = v.getInteger(); break; case Long: result = v.getLong(); break; case String: result = v.getString(); break; case Double: result = v.getDouble(); break; default: throw new UnsupportedOperationException(SparkseeTokens.TYPE_EXCEPTION_MESSAGE); } } return (T) result; } /* * (non-Javadoc) * * @see com.tinkerpop.blueprints.Element#getPropertyKeys() */ @Override public Set getPropertyKeys() { graph.autoStartTransaction(false); com.sparsity.sparksee.gdb.AttributeList alist; if (graph.typeScope.get()) { alist = graph.getRawGraph().getAttributes(oid); } else { int attrType; if (graph.getRawGraph().getType(getObjectType()).getObjectType() == com.sparsity.sparksee.gdb.ObjectType.Node) { attrType = NODE_SCOPE; } else { attrType = EDGE_SCOPE; } alist = graph.getRawGraph().findAttributes(attrType); } Set attrKeys = new HashSet(); com.sparsity.sparksee.gdb.Value v = new com.sparsity.sparksee.gdb.Value(); for (Integer attr : alist) { if (!graph.typeScope.get()) { graph.getRawGraph().getAttribute(oid, attr, v); if (v.isNull()) { continue; } } String key = graph.getRawGraph().getAttribute(attr).getName(); attrKeys.add(key); } alist.delete(); alist = null; return attrKeys; } /* * (non-Javadoc) * * @see com.tinkerpop.blueprints.Element#setProperty(java.lang.String, * java.lang.Object) */ @Override public void setProperty(final String key, final Object value) { ElementHelper.validateProperty(this, key, value); if (key.equals(StringFactory.LABEL)) { throw new IllegalArgumentException("Property key is reserved for all vertices and edges: " + StringFactory.LABEL); } graph.autoStartTransaction(true); int attrType = getObjectType(); if (!graph.typeScope.get()) { if (graph.getRawGraph().getType(attrType).getObjectType() == com.sparsity.sparksee.gdb.ObjectType.Node) { attrType = NODE_SCOPE; } else { attrType = EDGE_SCOPE; } } int attr = graph.getRawGraph().findAttribute(attrType, key); com.sparsity.sparksee.gdb.DataType datatype = null; if (attr == com.sparsity.sparksee.gdb.Attribute.InvalidAttribute) { // // First time we set this attribute, let's create it. // if (value instanceof Boolean) { datatype = com.sparsity.sparksee.gdb.DataType.Boolean; } else if (value instanceof Integer) { datatype = com.sparsity.sparksee.gdb.DataType.Integer; } else if (value instanceof Long) { datatype = com.sparsity.sparksee.gdb.DataType.Long; } else if (value instanceof String) { datatype = com.sparsity.sparksee.gdb.DataType.String; } else if (value instanceof Double || value instanceof Float) { datatype = com.sparsity.sparksee.gdb.DataType.Double; } else if (value instanceof com.sparsity.sparksee.gdb.Value) { datatype = ((com.sparsity.sparksee.gdb.Value) value).getDataType(); } else { throw new IllegalArgumentException(SparkseeTokens.TYPE_EXCEPTION_MESSAGE); } assert datatype != null; attr = graph.getRawGraph().newAttribute(attrType, key, datatype, com.sparsity.sparksee.gdb.AttributeKind.Basic); assert attr != com.sparsity.sparksee.gdb.Attribute.InvalidAttribute; } else { datatype = graph.getRawGraph().getAttribute(attr).getDataType(); } // // Set the Value // com.sparsity.sparksee.gdb.Value v = new com.sparsity.sparksee.gdb.Value(); if (value instanceof com.sparsity.sparksee.gdb.Value) { v = (com.sparsity.sparksee.gdb.Value) value; } else { // from Object to Value switch (datatype) { case Boolean: v.setBooleanVoid((Boolean) value); break; case Integer: v.setIntegerVoid((Integer) value); break; case Long: if (value instanceof Long) { v.setLongVoid((Long) value); } else if (value instanceof Integer) { v.setLongVoid(((Integer) value).longValue()); } else { throw new IllegalArgumentException(SparkseeTokens.TYPE_EXCEPTION_MESSAGE); } break; case String: v.setString((String) value); break; case Double: if (value instanceof Double) { v.setDouble((Double) value); } if (value instanceof Float) { v.setDouble(((Float) value)); } break; default: throw new IllegalArgumentException(SparkseeTokens.TYPE_EXCEPTION_MESSAGE); } } this.graph.getRawGraph().setAttribute(oid, attr, v); } /* * (non-Javadoc) * * @see * com.tinkerpop.blueprints.Element#removeProperty(java.lang.String) */ @Override public T removeProperty(final String key) { graph.autoStartTransaction(true); try { Object ret = getProperty(key); com.sparsity.sparksee.gdb.Value v = new com.sparsity.sparksee.gdb.Value(); v.setNull(); setProperty(key, v); return (T) ret; } catch (RuntimeException e) { return null; } } /* * (non-Javadoc) * * @see com.tinkerpop.blueprints.Element#getId() */ @Override public Object getId() { return oid; } public void remove() { if (this instanceof Vertex) { this.graph.removeVertex((Vertex) this); } else { this.graph.removeEdge((Edge) this); } } public boolean equals(final Object object) { graph.autoStartTransaction(false); return ElementHelper.areEqual(this, object); } @Override public int hashCode() { return (int) oid; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy