blob: 42837f49dc1cc7f4cbe1b408248aae40dcaf9acb [file] [log] [blame]
/**
* 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();
}