/* Copyright 2013 Fabian Steeg, Licensed under the Eclipse Public License 1.0 */ package org.lobid.lodmill; import java.util.ArrayList; import java.util.List; import org.culturegraph.mf.framework.StreamReceiver; import org.culturegraph.mf.framework.annotations.Description; import org.culturegraph.mf.framework.annotations.In; import org.culturegraph.mf.framework.annotations.Out; /** * @author Fabian Steeg */ @Description("Encode a stream as Graphviz DOT") @In(StreamReceiver.class) @Out(String.class) public final class PipeEncodeDot extends AbstractGraphPipeEncoder { private List<String> predicates; private List<String> objects; @Override protected void onSetReceiver() { super.onSetReceiver(); getReceiver().process("digraph g {"); getReceiver().process("\tgraph[layout=fdp]"); } @Override protected void onCloseStream() { getReceiver().process("}"); super.onCloseStream(); } @Override public void startRecord(final String identifier) { this.subject = null; predicates = new ArrayList<String>(); objects = new ArrayList<String>(); } @Override public void literal(final String name, final String value) { if (name.equalsIgnoreCase(SUBJECT_NAME)) { this.subject = value; } else { predicates.add(name); objects.add(uriOrLiteral(value)); } } @Override public void endRecord() { for (int i = 0; i < predicates.size(); i++) { String object = objects.get(i); object = object.charAt(0) == '"' ? object : "\"" + object + "\""; // NOPMD getReceiver().process(String.format("\t\"<%s>\" -> %s [label=\"%s\"]", subject, object, predicates.get(i))); } } private static String uriOrLiteral(final String value) { return isUriWithScheme(value) ? "<" + value + ">" : "\"" + value + "\""; } }