package com.mysema.rdfbean.model.io; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.Map; import com.mysema.rdfbean.Namespaces; import com.mysema.rdfbean.model.RepositoryException; import com.mysema.rdfbean.model.UID; /** * @author tiwe * */ public class SPARQLUpdateWriter extends TurtleWriter { private final Map<String, String> prefixes = new HashMap<String, String>(); private final StringBuilder prefixesString = new StringBuilder(); private final boolean delete; private final UID graph; public SPARQLUpdateWriter(UID graph, boolean delete) { this(graph, false, false); } public SPARQLUpdateWriter(UID graph, boolean delete, boolean blankNodeAsURI) { super(new StringBuilder(), Collections.<String, String> emptyMap(), blankNodeAsURI); this.graph = graph; this.delete = delete; } @Override protected void append(UID uid) { String prefix = prefixes.get(uid.ns()); if (prefix == null) { prefix = Namespaces.DEFAULT.get(uid.ns()); if (prefix == null) { prefix = "ns" + (prefixes.size() + 1); } prefixes.put(uid.ns(), prefix); prefixesString.append("PREFIX " + prefix + ": <" + NTriplesUtil.escapeString(uid.ns()) + ">\n"); } try { appendable.append(prefix).append(":").append(uid.ln()); } catch (IOException e) { throw new RepositoryException(e); } } @Override protected void appendPredicate(UID uid) { append(uid); } @Override public void begin() { try { if (delete) { appendable.append("DELETE DATA FROM <").append(graph.getId()).append("> {\n"); } else { appendable.append("INSERT DATA INTO <").append(graph.getId()).append("> {\n"); } } catch (IOException e) { throw new RepositoryException(e); } } @Override public void end() { try { if (last != null) { appendable.append(" .\n"); } appendable.append("}\n"); } catch (IOException e) { throw new RepositoryException(e); } } @Override public String toString() { ((StringBuilder) appendable).insert(0, prefixesString.toString()); prefixesString.setLength(0); return appendable.toString(); } }