Modifier and Type | Field and Description |
---|---|
protected HyperGraph |
HGQuery.graph |
Modifier and Type | Method and Description |
---|---|
static HyperGraph |
HGEnvironment.get(String location)
Retrieve an already opened or open a HyperGraph instance.
|
static HyperGraph |
HGEnvironment.get(String location,
HGConfiguration config)
Retrieve the HyperGraphDB instance at the specified location and open it
(if not already opened) with the given configuration.
|
static HyperGraph |
HGEnvironment.getExistingOnly(String location)
Same as
get , but will return null if there is
no database at that location. |
HyperGraph |
HGQuery.getHyperGraph()
Return the
HyperGraph instance against which this query is executed. |
HyperGraph |
HGTypeSystem.getHyperGraph()
Return the
HyperGraph on which this type
system operates. |
Modifier and Type | Method and Description |
---|---|
static HGHandle |
HGQuery.hg.addUnique(HyperGraph graph,
Object instance,
Class<?> javaClass,
HGQueryCondition condition)
Add a new atom of a given type only if there's no atom matching the passed in
HGQueryCondition . |
static HGHandle |
HGQuery.hg.addUnique(HyperGraph graph,
Object instance,
HGHandle typeHandle,
HGQueryCondition condition)
Add a new atom of a given type only if there's no atom matching the passed in
HGQueryCondition . |
static HGHandle |
HGQuery.hg.addUnique(HyperGraph graph,
Object instance,
HGQueryCondition condition)
Add the given instance as an atom in the graph if and only if no atoms
match the passed in
HGQueryCondition |
static HGHandle |
HGQuery.hg.assertAtom(HyperGraph graph,
Object instance)
Return
assertAtom(graph, instance, false) . |
static HGHandle |
HGQuery.hg.assertAtom(HyperGraph graph,
Object instance,
boolean ignoreValue)
Return the atom handle if
instance is already a loaded atom in the cache. |
static HGHandle |
HGQuery.hg.assertAtom(HyperGraph graph,
Object instance,
HGHandle type)
Return
assertAtom(graph, instance, type, false) . |
static HGHandle |
HGQuery.hg.assertAtom(HyperGraph graph,
Object instance,
HGHandle type,
boolean ignoreValue)
Add a new atom to the specified graph only if it is not already there.
|
static long |
HGQuery.hg.count(HyperGraph graph,
HGQueryCondition cond)
Count the number of atoms that match the query condition parameter.
|
static <T> Mapping<HGHandle,T> |
HGQuery.hg.deref(HyperGraph graph)
|
static HGQueryCondition |
HGQuery.hg.deref(HyperGraph graph,
HGQueryCondition condition)
Short for
hg.apply(hg.deref(graph), condition) - assuming the condition
parameter yields a result set of HGHandle s, the returned condition will yield a result set
of atoms loaded from the graph parameter. |
static <T> List<T> |
HGQuery.hg.findAll(HyperGraph graph,
HGQueryCondition condition)
Run a query based on the specified condition and put all
HGHandle s
from the result set into a java.util.List . |
static <T> T |
HGQuery.hg.findOne(HyperGraph graph,
HGQueryCondition condition)
Run a query based on the passed in condition.
|
static <T> List<T> |
HGQuery.hg.getAll(HyperGraph graph,
HGQueryCondition condition)
Run a query based on the specified condition and put all atom instances
from the result set into a
java.util.List . |
static <T> T |
HGQuery.hg.getOne(HyperGraph graph,
HGQueryCondition condition)
Run a query based on the passed in condition.
|
static HGQueryCondition |
HGQuery.hg.guessUniquenessCondition(HyperGraph graph,
Object instance)
Construct a
HGQueryCondition that uniquely identifies an atom based on
the passed in Object instance. |
static <SearchResult> |
HGQuery.make(Class<SearchResult> type,
HyperGraph graph)
Create a new query with the given result type and bound to the given
HyperGraph instance. |
static <T> HGQuery<T> |
HGQuery.hg.make(Class<T> type,
HyperGraph graph) |
static <SearchResult> |
HGQuery.make(HyperGraph graph,
HGQueryCondition condition)
Create a new query returning all atoms matching the given
HGQueryCondition . |
void |
HGQuery.setHyperGraph(HyperGraph graph)
Specify the HyperGraph instance against which this method is executed.
|
void |
HGGraphHolder.setHyperGraph(HyperGraph graph)
During load time, set the
HyperGraph
instance to which this atom belongs. |
void |
HGAtomCache.setHyperGraph(HyperGraph hg)
Set the
HyperGraph within which this cache is operating. |
static Mapping<HGHandle,HGHandle> |
HGQuery.hg.targetAt(HyperGraph graph,
int targetPosition)
Return a
Mapping that given a handle to a link will return the target (handle) at the specified
target position. |
Constructor and Description |
---|
HGIndexManager(HyperGraph graph) |
HGTypeSystem(HyperGraph graph)
Construct the
HGtypeSystem associated with a hypergraph. |
IncidenceSetRef(HGHandle atomHandle,
HyperGraph graph) |
Modifier and Type | Field and Description |
---|---|
protected HyperGraph |
SimpleALGenerator.graph |
protected HyperGraph |
DefaultALGenerator.hg |
Modifier and Type | Method and Description |
---|---|
HyperGraph |
DefaultALGenerator.getGraph() |
HyperGraph |
SimpleALGenerator.getGraph() |
HyperGraph |
HyperTraversal.getHyperGraph() |
Modifier and Type | Method and Description |
---|---|
DefaultALGenerator |
DefaultALGenerator.setGraph(HyperGraph graph) |
void |
SimpleALGenerator.setGraph(HyperGraph graph) |
void |
HyperTraversal.setHyperGraph(HyperGraph graph) |
Constructor and Description |
---|
DefaultALGenerator(HyperGraph graph)
Construct with default values: no link or sibling predicate, returning all
siblings in their normal storage order.
|
DefaultALGenerator(HyperGraph hg,
HGAtomPredicate linkPredicate,
HGAtomPredicate siblingPredicate)
Construct a default adjacency list generator where links are considered unordered.
|
DefaultALGenerator(HyperGraph hg,
HGAtomPredicate linkPredicate,
HGAtomPredicate siblingPredicate,
boolean returnPreceeding,
boolean returnSucceeding,
boolean reverseOrder)
Construct a default adjacency list generator where links are considered ordered.
|
DefaultALGenerator(HyperGraph graph,
HGAtomPredicate linkPredicate,
HGAtomPredicate siblingPredicate,
boolean returnPreceeding,
boolean returnSucceeding,
boolean reverseOrder,
boolean returnSource)
Construct a default adjacency list generator where links are considered ordered.
|
HyperTraversal(HyperGraph graph,
HGTraversal flatTraversal) |
HyperTraversal(HyperGraph graph,
HGTraversal flatTraversal,
HGAtomPredicate linkPredicate) |
SimpleALGenerator(HyperGraph hg)
Construct a
SimpleALGenerator for the given HyperGraph instance. |
Modifier and Type | Field and Description |
---|---|
protected HyperGraph |
HGSubgraph.graph |
Modifier and Type | Method and Description |
---|---|
HyperGraph |
HGSubgraph.getHyperGraph() |
Modifier and Type | Method and Description |
---|---|
static HGIndex<HGPersistentHandle,HGPersistentHandle> |
HGSubgraph.getIndex(HyperGraph atGraph)
DO NOT USE: internal method, implementation dependent, may disappear at any time.
|
static HGIndex<HGPersistentHandle,HGPersistentHandle> |
HGSubgraph.getReverseIndex(HyperGraph atGraph)
DO NOT USE: internal method, implementation dependent, may disappear at any time.
|
void |
AtomQueueType.setHyperGraph(HyperGraph hg) |
void |
AtomStackType.setHyperGraph(HyperGraph hg) |
void |
HGSubgraph.setHyperGraph(HyperGraph graph) |
void |
AtomSetType.setHyperGraph(HyperGraph hg) |
void |
HGRelTypeConstructor.setHyperGraph(HyperGraph graph) |
Modifier and Type | Method and Description |
---|---|
void |
WeakRefAtomCache.setHyperGraph(HyperGraph graph) |
void |
DefaultAtomCache.setHyperGraph(HyperGraph hg) |
void |
PhantomRefAtomCache.setHyperGraph(HyperGraph hg) |
Modifier and Type | Method and Description |
---|---|
HyperGraph |
HGDefaultEventManager.getHyperGraph() |
Modifier and Type | Method and Description |
---|---|
HGListener.Result |
HGEventManager.dispatch(HyperGraph graph,
HGEvent event)
Dispatch an event to all listeners registered for its type.
|
HGListener.Result |
HGDefaultEventManager.dispatch(HyperGraph hg,
HGEvent event) |
HGListener.Result |
HGListener.handle(HyperGraph graph,
HGEvent event) |
void |
HGDefaultEventManager.setHyperGraph(HyperGraph graph) |
Constructor and Description |
---|
HGDefaultEventManager(HyperGraph graph) |
Modifier and Type | Method and Description |
---|---|
Comparator<byte[]> |
ByTargetIndexer.getComparator(HyperGraph graph) |
Comparator<byte[]> |
CompositeIndexer.getComparator(HyperGraph graph) |
Comparator<byte[]> |
HGIndexer.getComparator(HyperGraph graph)
Return a comparator used to compare key values return by this indexer.
|
Comparator<byte[]> |
TargetToTargetIndexer.getComparator(HyperGraph graph) |
Comparator<byte[]> |
DirectValueIndexer.getComparator(HyperGraph graph) |
Comparator<byte[]> |
ByPartIndexer.getComparator(HyperGraph graph) |
Comparator<byte[]> |
LinkIndexer.getComparator(HyperGraph graph) |
ByteArrayConverter<HGPersistentHandle> |
ByTargetIndexer.getConverter(HyperGraph graph) |
ByteArrayConverter<byte[]> |
CompositeIndexer.getConverter(HyperGraph graph) |
ByteArrayConverter<KeyType> |
HGIndexer.getConverter(HyperGraph graph)
Return a
ByteArrayConverter capable of translating keys
returned by this indexer to/from a byte[] . |
ByteArrayConverter<HGHandle> |
TargetToTargetIndexer.getConverter(HyperGraph graph) |
ByteArrayConverter<AtomType> |
DirectValueIndexer.getConverter(HyperGraph graph) |
ByteArrayConverter<KeyType> |
ByPartIndexer.getConverter(HyperGraph graph) |
ByteArrayConverter<byte[]> |
LinkIndexer.getConverter(HyperGraph graph) |
abstract KeyType |
HGKeyIndexer.getKey(HyperGraph graph,
Object atom)
Returns an index key for the given atom.
|
HGPersistentHandle |
ByTargetIndexer.getKey(HyperGraph graph,
Object atom) |
byte[] |
CompositeIndexer.getKey(HyperGraph graph,
Object atom) |
abstract KeyType |
HGValueIndexer.getKey(HyperGraph graph,
Object atom)
Returns an index key for the given atom.
|
HGHandle |
TargetToTargetIndexer.getKey(HyperGraph graph,
Object atom) |
AtomType |
DirectValueIndexer.getKey(HyperGraph graph,
Object atom) |
KeyType |
ByPartIndexer.getKey(HyperGraph graph,
Object atom) |
byte[] |
LinkIndexer.getKey(HyperGraph graph,
Object atom) |
abstract ValueType |
HGValueIndexer.getValue(HyperGraph graph,
Object atom)
Return the value of an index entry based on the passed in atom.
|
HGHandle |
TargetToTargetIndexer.getValue(HyperGraph graph,
Object atom) |
abstract ByteArrayConverter<ValueType> |
HGValueIndexer.getValueConverter(HyperGraph graph)
Return a
ByteArrayConverter capable of converting index
entry values to/from byte arrays. |
ByteArrayConverter<HGHandle> |
TargetToTargetIndexer.getValueConverter(HyperGraph graph) |
void |
HGKeyIndexer.index(HyperGraph graph,
HGHandle atomHandle,
Object atom,
HGIndex<KeyType,HGPersistentHandle> index) |
void |
HGValueIndexer.index(HyperGraph graph,
HGHandle atomHandle,
Object atom,
HGIndex<KeyType,ValueType> index) |
void |
HGIndexer.index(HyperGraph graph,
HGHandle atomHandle,
Object atom,
HGIndex<KeyType,ValueType> index)
Add a particular atom the the index.
|
void |
HGKeyIndexer.unindex(HyperGraph graph,
HGHandle atomHandle,
Object atom,
HGIndex<KeyType,HGPersistentHandle> index) |
void |
HGValueIndexer.unindex(HyperGraph graph,
HGHandle atomHandle,
Object atom,
HGIndex<KeyType,ValueType> index) |
void |
HGIndexer.unindex(HyperGraph graph,
HGHandle atomHandle,
Object atom,
HGIndex<KeyType,ValueType> index)
Remove a particular from the index, assuming it is currently being indexed.
|
Modifier and Type | Method and Description |
---|---|
void |
ApplyNewIndexer.execute(HyperGraph graph) |
void |
MaintenanceOperation.execute(HyperGraph graph)
Execute a maintenance operation.
|
Modifier and Type | Method and Description |
---|---|
static <SearchResult> |
QueryCompile.analyze(HyperGraph graph,
HGQueryCondition condition,
Map<String,Object> options) |
protected boolean |
SimpleValueCondition.compareToValue(HyperGraph graph,
Object x)
We are using the standard Java
java.lang.Comparable interface here
on the value parameter. |
Pair<HGQueryCondition,Set<HGQueryCondition>> |
QueryCompile.Contract.contract(HyperGraph graph,
HGQueryCondition expression) |
Set<HGQueryCondition> |
QueryCompile.Expand.contract(HyperGraph graph,
HGQueryCondition expression) |
List<HGHandle> |
TypePlusCondition.getSubTypes(HyperGraph graph) |
abstract HGTraversal |
TraversalCondition.getTraversal(HyperGraph graph) |
HGTraversal |
DFSCondition.getTraversal(HyperGraph graph) |
HGTraversal |
BFSCondition.getTraversal(HyperGraph graph) |
HGHandle |
AtomTypeCondition.getTypeHandle(HyperGraph graph) |
HGHandle |
TypedValueCondition.getTypeHandle(HyperGraph graph) |
HGALGenerator |
TraversalCondition.makeGenerator(HyperGraph graph) |
boolean |
AtomValueRegExPredicate.satisfies(HyperGraph hg,
HGHandle handle) |
boolean |
LinkCondition.satisfies(HyperGraph graph,
HGHandle handle)
Return
true if handle points to a link whose
target set is a superset of this condition's targetSet . |
boolean |
AnyAtomCondition.satisfies(HyperGraph hg,
HGHandle handle) |
boolean |
SubsumedCondition.satisfies(HyperGraph hg,
HGHandle specific) |
boolean |
PositionedIncidentCondition.satisfies(HyperGraph hg,
HGHandle handle) |
boolean |
AtomPartCondition.satisfies(HyperGraph hg,
HGHandle handle) |
boolean |
HGAtomPredicate.satisfies(HyperGraph graph,
HGHandle handle)
Check whether a given
Object satisfies this
query condition. |
boolean |
OrderedLinkCondition.satisfies(HyperGraph hg,
HGHandle handle) |
boolean |
AtomValueCondition.satisfies(HyperGraph hg,
HGHandle handle) |
boolean |
IncidentCondition.satisfies(HyperGraph hg,
HGHandle handle) |
boolean |
AtomTypeCondition.satisfies(HyperGraph hg,
HGHandle value) |
boolean |
MapCondition.satisfies(HyperGraph hg,
HGHandle handle) |
boolean |
SubgraphContainsCondition.satisfies(HyperGraph graph,
HGHandle subgHdl) |
boolean |
AtomPartRegExPredicate.satisfies(HyperGraph hg,
HGHandle handle) |
boolean |
TypePlusCondition.satisfies(HyperGraph graph,
HGHandle handle) |
boolean |
Not.satisfies(HyperGraph hg,
HGHandle value) |
boolean |
SubsumesCondition.satisfies(HyperGraph hg,
HGHandle general) |
boolean |
And.satisfies(HyperGraph hg,
HGHandle value) |
boolean |
IsCondition.satisfies(HyperGraph graph,
HGHandle handle) |
boolean |
DisconnectedPredicate.satisfies(HyperGraph graph,
HGHandle handle) |
boolean |
AtomProjectionCondition.satisfies(HyperGraph graph,
HGHandle handle) |
boolean |
TypedValueCondition.satisfies(HyperGraph hg,
HGHandle handle) |
boolean |
SubgraphMemberCondition.satisfies(HyperGraph graph,
HGHandle handle) |
boolean |
TargetCondition.satisfies(HyperGraph graph,
HGHandle handle) |
boolean |
ArityCondition.satisfies(HyperGraph hg,
HGHandle handle)
Return true if
handle to a HyperGraph link and
false if it refers to a HyperGraph node. |
boolean |
Or.satisfies(HyperGraph hg,
HGHandle value) |
static QueryMetaData |
QueryCompile.toMetaData(HyperGraph graph,
HGQueryCondition condition) |
static <T> HGQuery<T> |
QueryCompile.translate(HyperGraph graph,
HGQueryCondition condition) |
static <ResultType> |
QueryCompile.translator(HyperGraph graph,
Class<? extends HGQueryCondition> conditionType) |
HGHandle |
AtomTypeCondition.typeHandleIfAvailable(HyperGraph graph) |
Constructor and Description |
---|
ExpressionBasedQuery(HyperGraph graph,
boolean withVarContext) |
ExpressionBasedQuery(HyperGraph graph,
HGQueryCondition condition) |
Modifier and Type | Method and Description |
---|---|
HyperGraph |
DerefMapping.getGraph() |
Modifier and Type | Method and Description |
---|---|
boolean |
RABasedPredicate.satisfies(HyperGraph hg,
HGHandle handle)
Return
true if handle is a member of
the HGRandomAccessResult set on which this predicate
is based. |
boolean |
DelayedSetLoadPredicate.satisfies(HyperGraph hg,
HGHandle handle) |
Constructor and Description |
---|
AsyncSearchResultImpl(HyperGraph graph,
HGSearchResult<T> rs) |
DefaultKeyBasedQuery(HyperGraph graph,
HGQueryCondition cond,
ValueSetter<Key> setter) |
DerefMapping(HyperGraph graph) |
PredicateBasedFilter(HyperGraph graph,
HGQuery<T> query,
HGAtomPredicate atomPredicate)
Construct a
PredicateBasedFilter , filtering the result
set of a given query based on a HGQueryCondition . |
PredicateBasedFilter(HyperGraph graph,
HGQuery<T> query,
Mapping<T,Boolean> predicate) |
PredicateBasedRAFilter(HyperGraph graph,
HGQuery<T> query,
HGAtomPredicate atomPredicate)
Construct a
PredicateBasedFilter , filtering the result
set of a given query based on a HGQueryCondition . |
PredicateBasedRAFilter(HyperGraph graph,
HGQuery<T> query,
Mapping<T,Boolean> predicate) |
ProjectionAtomResultSet(HyperGraph graph,
HGSearchResult searchResult,
String[] dimensionPath,
HGHandle baseType)
The constructor assumes the underlying set is already positioned to the
first matching entity.
|
Constructor and Description |
---|
StorageBasedIncidenceSet(HGHandle atom,
HyperGraph graph) |
Modifier and Type | Method and Description |
---|---|
HyperGraph |
HGTransactionManager.getHyperGraph()
Return the
HyperGraph instance associated with this
HGTransactionManager . |
Modifier and Type | Method and Description |
---|---|
void |
HGTransactionManager.setHyperGraph(HyperGraph graph)
Set the
HyperGraph instance associated with this
HGTransactionManager . |
Modifier and Type | Field and Description |
---|---|
protected HyperGraph |
JavaObjectMapper.graph |
protected HyperGraph |
HGAtomTypeBase.graph |
protected HyperGraph |
RecordType.graph |
protected HyperGraph |
JavaAbstractBinding.graph |
protected HyperGraph |
JavaTypeFactory.graph |
Modifier and Type | Method and Description |
---|---|
HyperGraph |
HGAtomTypeBase.getHyperGraph() |
Modifier and Type | Method and Description |
---|---|
static boolean |
TypeUtils.deleteInstances(HyperGraph graph,
HGHandle type) |
static boolean |
TypeUtils.deleteType(HyperGraph graph,
Class<?> type,
boolean recursive) |
static boolean |
TypeUtils.deleteType(HyperGraph graph,
HGHandle type) |
static boolean |
TypeUtils.deleteType(HyperGraph graph,
HGHandle th,
boolean recursive) |
static HGPersistentHandle |
TypeUtils.getHandleFor(HyperGraph graph,
Object value) |
static HGPersistentHandle |
TypeUtils.getNewHandleFor(HyperGraph hg,
Object value) |
static HGProjection |
TypeUtils.getProjection(HyperGraph hg,
HGAtomType type,
String[] dimPath) |
static HGHandle |
JavaTypeFactory.getSlotHandle(HyperGraph graph,
String label,
HGHandle type) |
static Object |
TypeUtils.getValueFor(HyperGraph graph,
HGPersistentHandle h) |
void |
HGTypeSchema.initialize(HyperGraph graph)
Initialize the schema with the
HyperGraph instance to which it is bound. |
void |
JavaTypeSchema.initialize(HyperGraph graph) |
boolean |
JavaTypeSchema.isPresent(HyperGraph graph) |
static boolean |
TypeUtils.isValueReleased(HyperGraph graph,
HGPersistentHandle h) |
static Object |
TypeUtils.makeValue(HyperGraph graph,
HGPersistentHandle h,
HGAtomType type) |
static HGTypedValue |
TypeUtils.project(HyperGraph hg,
HGHandle type,
Object value,
String[] dimPath,
boolean throwExceptionOnNotFound) |
static void |
TypeUtils.releaseValue(HyperGraph graph,
HGAtomType type,
HGPersistentHandle h) |
void |
JavaObjectMapper.setHyperGraph(HyperGraph graph) |
void |
ArrayTypeConstructor.setHyperGraph(HyperGraph hg) |
void |
CollectionType.setHyperGraph(HyperGraph hg) |
void |
HGAtomTypeBase.setHyperGraph(HyperGraph hg) |
void |
RecordType.setHyperGraph(HyperGraph hg) |
void |
NullType.setHyperGraph(HyperGraph hg) |
void |
JavaAbstractBinding.setHyperGraph(HyperGraph hg) |
void |
MapType.setHyperGraph(HyperGraph hg) |
void |
HGAbstractType.setHyperGraph(HyperGraph hg) |
void |
ArrayType.setHyperGraph(HyperGraph hg) |
void |
AtomRefType.setHyperGraph(HyperGraph hg) |
void |
SubsumesType.setHyperGraph(HyperGraph hg) |
void |
PlainLinkType.setHyperGraph(HyperGraph hg) |
void |
CollectionTypeConstructor.setHyperGraph(HyperGraph hg) |
void |
MapTypeConstructor.setHyperGraph(HyperGraph hg) |
void |
LinkType.setHyperGraph(HyperGraph hg) |
void |
JavaTypeFactory.setHyperGraph(HyperGraph graph) |
void |
DefaultJavaTypeMapper.setHyperGraph(HyperGraph graph) |
void |
SerializableType.setHyperGraph(HyperGraph hg) |
void |
Top.setHyperGraph(HyperGraph hg) |
void |
SlotType.setHyperGraph(HyperGraph hg) |
void |
AbstractTypeConstructor.setHyperGraph(HyperGraph hg) |
static void |
TypeUtils.setValueFor(HyperGraph graph,
HGPersistentHandle h,
Object value) |
static HGPersistentHandle |
TypeUtils.storeValue(HyperGraph graph,
Object value,
HGAtomType type) |
static List<HGHandle> |
TypeUtils.subsumesClosure(HyperGraph graph,
HGHandle baseType) |
Constructor and Description |
---|
JavaTypeSchema(HyperGraph graph) |
SerializableType.SerInputStream(HyperGraph graph) |
SerializableType.SerInputStream(InputStream in,
HyperGraph graph) |
Modifier and Type | Field and Description |
---|---|
protected HyperGraph |
PrimitiveTypeBase.graph |
protected HyperGraph |
PrimitiveArrayType.hg |
Modifier and Type | Method and Description |
---|---|
void |
PrimitiveTypeBase.setHyperGraph(HyperGraph hg) |
void |
PrimitiveArrayType.setHyperGraph(HyperGraph hg) |
Modifier and Type | Method and Description |
---|---|
static ClassLoader |
HGUtils.getClassLoader(HyperGraph graph)
Returns the configured, the context or the class's classloader.
|
static <T> Class<T> |
HGUtils.loadClass(HyperGraph graph,
String classname)
Load a class using the class loader configured for the passed in
HyperGraph instance, if
such a loader was configured. |
Constructor and Description |
---|
HGLock(HyperGraph graph,
byte[] objectId)
Deprecated.
|
Copyright © 2015. All rights reserved.