package com.mysema.rdfbean.model.io;
import java.io.IOException;
import java.io.Writer;
import com.mysema.commons.l10n.support.LocaleUtil;
import com.mysema.rdfbean.model.BID;
import com.mysema.rdfbean.model.LIT;
import com.mysema.rdfbean.model.NODE;
import com.mysema.rdfbean.model.RepositoryException;
import com.mysema.rdfbean.model.STMT;
import com.mysema.rdfbean.model.UID;
/**
* @author tiwe
*
*/
public class NTriplesWriter implements RDFWriter {
private final Writer writer;
public NTriplesWriter(Writer writer) {
this.writer = writer;
}
@Override
public void begin() {
}
@Override
public void end() {
try {
writer.flush();
} catch (IOException e) {
throw new RepositoryException(e);
}
}
@Override
public void handle(STMT stmt) {
try {
writer.append(toString(stmt.getSubject()));
writer.append(" ");
writer.append(toString(stmt.getPredicate()));
writer.append(" ");
writer.append(toString(stmt.getObject()));
writer.append(" .\n");
} catch (IOException e) {
throw new RepositoryException(e);
}
}
public static String toString(STMT stmt) {
return toString(stmt.getSubject()) + " "
+ toString(stmt.getPredicate()) + " "
+ toString(stmt.getObject()) + " . ";
}
public static String toString(NODE node) {
if (node.isURI()) {
return toString(node.asURI());
} else if (node.isLiteral()) {
return toString(node.asLiteral());
} else {
return toString(node.asBNode());
}
}
public static String toString(UID uid) {
return "<" + NTriplesUtil.escapeString(uid.getValue()) + ">";
}
public static String toString(LIT lit) {
String value = "\"" + NTriplesUtil.escapeString(lit.getValue()) + "\"";
if (lit.getLang() != null) {
return value + "@" + LocaleUtil.toLang(lit.getLang());
} else {
return value + "^^" + toString(lit.getDatatype());
}
}
public static String toString(BID bid) {
return "_:" + bid.getValue();
}
}