package com.bigdata.rdf.inf;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import org.openrdf.model.vocabulary.RDF;
import org.openrdf.model.vocabulary.RDFS;
import com.bigdata.rdf.internal.IV;
import com.bigdata.rdf.spo.ISPO;
import com.bigdata.rdf.spo.SPOFilter;
import com.bigdata.rdf.vocab.Vocabulary;
import com.bigdata.relation.rule.eval.ISolution;
/**
* Filter matches <code>(x rdf:type rdfs:Resource).
*
* @author <a href="mailto:thompsonbry@users.sourceforge.net">Bryan Thompson</a>
* @version $Id$
*/
public class RdfTypeRdfsResourceFilter<E extends ISPO> extends SPOFilter<E>
implements Externalizable {
/**
*
*/
private static final long serialVersionUID = -2157234197316632000L;
private IV rdfType;
private IV rdfsResource;
/**
* De-serialization ctor.
*/
public RdfTypeRdfsResourceFilter() {
}
/**
*
* @param vocab
*/
public RdfTypeRdfsResourceFilter(final Vocabulary vocab) {
this.rdfType = vocab.get(RDF.TYPE);
this.rdfsResource = vocab.get(RDFS.RESOURCE);
}
public boolean isValid(final Object o) {
if (!canAccept(o)) {
return true;
}
return accept((ISPO) o);
}
private boolean accept(final ISPO spo) {
if (spo.p().equals(rdfType) && spo.o().equals(rdfsResource)) {
// reject (?x, rdf:type, rdfs:Resource )
return true;
}
// Accept everything else.
return false;
}
/**
* The initial version.
*/
private static final transient short VERSION0 = 0;
/**
* The current version.
*/
private static final transient short VERSION = VERSION0;
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
final short version = in.readShort();
switch (version) {
case VERSION0:
break;
default:
throw new UnsupportedOperationException("Unknown version: "
+ version);
}
// rdfType = LongPacker.unpackLong(in);
//
// rdfsResource = LongPacker.unpackLong(in);
rdfType = (IV) in.readObject();
rdfsResource = (IV) in.readObject();
}
public void writeExternal(ObjectOutput out) throws IOException {
out.writeShort(VERSION);
// LongPacker.packLong(out,rdfType);
//
// LongPacker.packLong(out,rdfsResource);
out.writeObject(rdfType);
out.writeObject(rdfsResource);
}
}