Java tutorial
/* Copyright 2013 Jan Schnasse. * Licensed under the Eclipse Public License 1.0 */ package org.lobid.lodmill; import java.io.StringWriter; import org.apache.commons.lang3.StringEscapeUtils; import org.culturegraph.mf.framework.DefaultStreamPipe; import org.culturegraph.mf.framework.ObjectReceiver; 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; /** * The XML Encoder takes the result of a morph an treats all literal names as * tag names and all literal values as tag values. The start and end of the * result can be modified using the setXmlPraeambel and setXmlPostambel methods. * * @author Jan Schnasse * */ @Description("Encodes streams in oai_dc xml. Takes the result of a morph " + "an treats all literal names as tag names and all literal values as " + "tag values.") @In(StreamReceiver.class) @Out(String.class) public final class OaiDcEncoder extends DefaultStreamPipe<ObjectReceiver<String>> { private final StringWriter writer = new StringWriter(); private final String xmlPraeambel = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + "<oai_dc:dc \n" + "\txmlns:oai_dc=\"http://www.openarchives.org/OAI/2.0/oai_dc/\" \n" + "\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n" + "\txmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" \n" + "\txsi:schemaLocation=\"http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd\">\n"; private final String xmlPostambel = "</oai_dc:dc>\n"; @Override public void startRecord(final String id) { final StringBuffer buffer = writer.getBuffer(); buffer.delete(0, buffer.length()); writer.write(xmlPraeambel); } @Override public void endRecord() { writer.write(xmlPostambel); String result = writer.toString(); if (getReceiver() != null) getReceiver().process(result); } @Override public void literal(final String name, final String value) { writer.write("<" + name + ">\n\t"); writer.write(StringEscapeUtils.escapeXml(value)); writer.write("\n</" + name + ">\n"); } }