/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.tinkerpop.gremlin.neo4j.structure; import org.apache.tinkerpop.gremlin.structure.Element; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.util.ElementHelper; import org.apache.tinkerpop.gremlin.structure.util.wrapped.WrappedElement; import org.neo4j.tinkerpop.api.Neo4jEntity; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * @author Stephen Mallette (http://stephen.genoprime.com) */ public abstract class Neo4jElement implements Element, WrappedElement<Neo4jEntity> { protected final Neo4jGraph graph; protected final Neo4jEntity baseElement; public Neo4jElement(final Neo4jEntity baseElement, final Neo4jGraph graph) { this.baseElement = baseElement; this.graph = graph; } @Override public Graph graph() { return this.graph; } @Override public Object id() { this.graph.tx().readWrite(); return this.baseElement.getId(); } @Override public Set<String> keys() { this.graph.tx().readWrite(); final Set<String> keys = new HashSet<>(); for (final String key : this.baseElement.getKeys()) { if (!Graph.Hidden.isHidden(key)) keys.add(key); } return Collections.unmodifiableSet(keys); } @Override public boolean equals(final Object object) { return ElementHelper.areEqual(this, object); } @Override public int hashCode() { return ElementHelper.hashCode(this); } @Override public Neo4jEntity getBaseElement() { return this.baseElement; } }