| /** |
| * 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.atlas.repository.graphdb; |
| |
| import java.util.Collection; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.apache.atlas.AtlasException; |
| import org.codehaus.jettison.json.JSONException; |
| import org.codehaus.jettison.json.JSONObject; |
| |
| /** |
| * Represents a graph element. |
| * |
| */ |
| public interface AtlasElement { |
| |
| /** |
| * Gets the id of this element. If the object has not been physically created in the underlying graph, |
| * calling this method will force the element to be created so that a valid Id can be returned. |
| * |
| * @return |
| */ |
| Object getId(); |
| |
| /** |
| * Gets the names of the properties associated with this element. |
| * @return |
| */ |
| Collection<? extends String> getPropertyKeys(); |
| |
| /** |
| * Gets the value of the element property with the given name. The value |
| * returned is guaranteed to be an instance of the specified class (or |
| * an exception will be thrown). |
| * |
| * @param propertyName |
| * @return |
| * @throws IllegalStateException if the property is multi-valued in the graph schema. |
| */ |
| <T> T getProperty(String propertyName, Class<T> clazz); |
| |
| /** |
| * Gets all of the values of the given property. |
| * @param propertyName |
| * @return |
| */ |
| <T> Collection<T> getPropertyValues(String propertyName, Class<T> type); |
| |
| /** |
| * Gets the value of a multiplicity one property whose value is a String list. |
| * The lists of super types and traits are stored this way. A separate method |
| * is needed for this because special logic is required to handle this situation |
| * in some implementations. |
| */ |
| List<String> getListProperty(String propertyName); |
| |
| /** |
| * Gets the value of a multiplicity one property whose value is a list. It |
| * attempts to convert the elements in the list to the specified type. Currently |
| * conversion is only supported for subclasses of AtlasElement and String. |
| */ |
| <V> List<V> getListProperty(String propertyName, Class<V> elementType); |
| |
| /** |
| * Sets a multiplicity one property whose value is a String list. |
| * The lists of super types and traits are stored this way. A separate method |
| * is needed for this because special logic is required to handle this situation |
| * in some implementations. |
| */ |
| void setListProperty(String propertyName, List<String> values) throws AtlasException; |
| |
| |
| /** |
| * Sets a multiplicity one property whose effective value is a String list whose |
| * values consist of the ids of the supplied elements. This is implemented efficiently |
| * so that in many cases the property can be set without requiring new elements |
| * to be immediately created in the graph database. It allows the actual underlying element |
| * creation to be deferred until commit time. |
| */ |
| void setPropertyFromElementsIds(String propertyName, List<AtlasElement> values); |
| |
| /** |
| * Sets a multiplicity one property whose effective value is a String whose value is the id of the supplied |
| * element. This is implemented efficiently so that in many cases the property can be set without requiring |
| * new elements to be immediately created in the graph database. It allows the actual underlying element |
| * creation to be deferred until commit time. |
| */ |
| void setPropertyFromElementId(String propertyName, AtlasElement value); |
| |
| |
| /** |
| * Removes a property from the vertex. |
| */ |
| void removeProperty(String propertyName); |
| |
| /** |
| * Sets a single-valued property to the given value. For |
| * properties defined as multiplicty many in the graph schema, the value is added instead |
| * (following set semantics) |
| * |
| * @param propertyName |
| * @param value |
| */ |
| <T> void setProperty(String propertyName, T value); |
| |
| |
| /** |
| * Creates a Jettison JSONObject from this Element. |
| * |
| * @param propertyKeys The property keys at the root of the element to serialize. |
| * If null, then all keys are serialized. |
| */ |
| JSONObject toJson(Set<String> propertyKeys) throws JSONException; |
| |
| /** |
| * Determines if this element exists in the graph database. If the element has not |
| * actually been loaded from the underlying graph, this will cause it to be loaded |
| * so that the result is correct. |
| * |
| * @return |
| */ |
| boolean exists(); |
| |
| /** |
| * @param propertyName |
| * @param value |
| */ |
| <T> void setJsonProperty(String propertyName, T value); |
| |
| /** |
| * @param propertyName |
| * @return |
| */ |
| <T> T getJsonProperty(String propertyName); |
| |
| /** |
| * Gets a human-readable id without forcing the element to |
| * be created if it does not exist in the graph yet. |
| * |
| * @return |
| */ |
| String getIdForDisplay(); |
| |
| /** |
| * Whether or not an id has been assigned yet for this Element. This can happen if the element has been created |
| * in memory but has not been actually pushed into the underlying graph yet. |
| * |
| * @return |
| */ |
| boolean isIdAssigned(); |
| |
| <T> T getWrappedElement(); |
| } |