/**
Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved.
Contact:
SYSTAP, LLC DBA Blazegraph
2501 Calvert ST NW #106
Washington, DC 20008
licenses@blazegraph.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.bigdata.blueprints;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Vertex;
/**
* Edge implementation that wraps an Edge statement and points to a
* {@link BigdataGraph} instance.
*
* @author mikepersonick
*
*/
public class BigdataEdge extends BigdataElement implements Edge {
private static final transient Logger log = Logger.getLogger(BigdataEdge.class);
private static final List<String> blacklist = Arrays.asList(new String[] {
"id", "", "label"
});
protected final Statement stmt;
public BigdataEdge(final Statement stmt, final BigdataGraph graph) {
super(stmt.getPredicate(), graph);
this.stmt = stmt;
}
@Override
public Object getId() {
if (log.isInfoEnabled())
log.info("");
return graph.factory.fromURI(uri);
}
@Override
public void remove() {
if (log.isInfoEnabled())
log.info("");
graph.removeEdge(this);
}
@Override
public String getLabel() {
if (log.isInfoEnabled())
log.info("");
return (String) graph.getProperty(uri, graph.getValueFactory().getLabelURI());
}
@Override
public Vertex getVertex(final Direction dir) throws IllegalArgumentException {
if (log.isInfoEnabled())
log.info("("+dir+")");
if (dir == Direction.BOTH) {
throw new IllegalArgumentException();
}
final URI uri = (URI)
(dir == Direction.OUT ? stmt.getSubject() : stmt.getObject());
final String id = graph.factory.fromURI(uri);
return graph.getVertex(id);
}
public BigdataVertex getFrom() {
return new BigdataVertex((URI) stmt.getSubject(), graph);
}
public BigdataVertex getTo() {
return new BigdataVertex((URI) stmt.getObject(), graph);
}
@Override
public void setProperty(final String prop, final Object val) {
if (log.isInfoEnabled())
log.info("("+prop+", "+val+")");
if (prop == null || blacklist.contains(prop)) {
throw new IllegalArgumentException();
}
super.setProperty(prop, val);
}
@Override
public String toString() {
final URI s = (URI) stmt.getSubject();
final URI p = (URI) stmt.getPredicate();
final URI o = (URI) stmt.getObject();
return "e["+p.getLocalName()+"]["+s.getLocalName()+"->"+o.getLocalName()+"]";
}
@Override
public <T> T getProperty(final String prop) {
if (log.isInfoEnabled())
log.info("("+prop+")");
return super.getProperty(prop);
}
@Override
public Set<String> getPropertyKeys() {
if (log.isInfoEnabled())
log.info("");
return super.getPropertyKeys();
}
@Override
public <T> T removeProperty(final String prop) {
if (log.isInfoEnabled())
log.info("("+prop+")");
return super.removeProperty(prop);
}
// @Override
// public void addProperty(final String prop, final Object val) {
//
// if (log.isInfoEnabled())
// log.info("("+prop+", "+val+")");
//
// super.addProperty(prop, val);
//
// }
//
// @Override
// public <T> List<T> getProperties(final String prop) {
//
// if (log.isInfoEnabled())
// log.info("("+prop+")");
//
// return super.getProperties(prop);
//
// }
}