com.datastax.driver.dse.graph.DefaultPath Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dse-java-driver-core Show documentation
Show all versions of dse-java-driver-core Show documentation
A driver for DataStax Enterprise (DSE)
and Apache Cassandra 1.2+ clusters that works exclusively with the
Cassandra Query Language version 3 (CQL3) and Cassandra's binary protocol,
supporting DSE-specific features such as geospatial types, DSE Graph and DSE authentication.
/*
* Copyright DataStax, Inc.
*
* This software can be used solely with DataStax Enterprise. Please consult the license at
* http://www.datastax.com/terms/datastax-dse-driver-license-terms
*/
package com.datastax.driver.dse.graph;
import com.google.common.base.Function;
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
class DefaultPath implements Path {
private static final Function, Set> TO_UNMODIFIABLE_SET =
new Function, Set>() {
@Override
public Set apply(Set input) {
return Collections.unmodifiableSet(input);
}
};
List> labels;
List objects;
DefaultPath() {}
@Override
public List> getLabels() {
return labels == null || labels.isEmpty()
? Collections.>emptyList()
: Collections.unmodifiableList(Lists.transform(labels, TO_UNMODIFIABLE_SET));
}
@Override
public List getObjects() {
return objects == null || objects.isEmpty()
? Collections.emptyList()
: Collections.unmodifiableList(objects);
}
@Override
public int size() {
return objects == null ? 0 : objects.size();
}
@Override
public GraphNode getObject(int index) {
if (index < 0 || index >= size()) return null;
return getObjects().get(index);
}
@Override
public GraphNode getObject(String label) {
List objects = getObjects(label);
return objects.isEmpty() ? null : objects.get(0);
}
@Override
public List getObjects(String label) {
List objects = Lists.newArrayListWithExpectedSize(1);
List> labels = getLabels();
for (int i = 0; i < labels.size(); i++) {
if (labels.get(i).contains(label)) {
objects.add(getObject(i));
}
}
return Collections.unmodifiableList(objects);
}
@Override
public boolean hasLabel(String label) {
for (Set labelGroup : getLabels()) {
if (labelGroup.contains(label)) return true;
}
return false;
}
@Override
public Iterator iterator() {
return getObjects().iterator();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Path)) return false;
Path that = (Path) o;
return Objects.equal(getLabels(), that.getLabels())
&& Objects.equal(getObjects(), that.getObjects());
}
@Override
public int hashCode() {
// getLabels() deliberately left out for faster hashcodes
return Objects.hashCode(getObjects());
}
@Override
public String toString() {
return "Path{" + "labels=" + getLabels() + ", objects=" + getObjects() + '}';
}
}