HeaderWriter.java 2.37 KB
package ipipan.clarin.tei.impl.io.write;

import ipipan.clarin.tei.api.entities.TEIHeader;
import ipipan.clarin.tei.api.exceptions.TEIException;
import ipipan.clarin.tei.impl.io.Constants;
import ipipan.clarin.tei.impl.utils.TimeUtils;

import java.util.Calendar;

import javax.xml.stream.XMLStreamException;

/**
 *
 * @author mlenart
 */
class HeaderWriter {

	void writeHeader(OutWrapper out, TEIHeader header) throws TEIException {
		try {
			doWriteHeader(out, header);
		} catch (XMLStreamException ex) {
			throw new TEIException(ex);
		}
	}

	private void doWriteHeader(OutWrapper out, TEIHeader header)
			throws XMLStreamException, TEIException {
		out.start("teiHeader");
		if (header.getLayer() != null) {
			out.attr("type", Constants.layer2AttrMap.get(header.getLayer()));
		}
		if (header != null) {
			out.start("fileDesc");
			writeTitle(out, header);
			writePub(out, header);
			writeSource(out, header);
			out.end(); // fileDesc
			// if (header != null && header.getLayer() != null)
			// out.attr("type", getTypeString(header.getLayer()));
		}
		out.end();
	}

	private void writeTitle(OutWrapper out, TEIHeader header)
			throws XMLStreamException {
		out.start("titleStmt");
		out.start("title");
		out.text(header.getTitle());
		out.end();
		out.end();
	}

	private void writePub(OutWrapper out, TEIHeader header)
			throws XMLStreamException {
		out.start("publicationStmt");
		if (header.getDistributor() != null) {
			out.start("distributor");
			out.text(header.getDistributor());
			out.end();
		}
		if (header.getTime() != null) {
			out.start("date");
			Calendar cal = header.getTime();
			out.attr("when", TimeUtils.getDateStr(cal));
			out.start("time");
			out.attr("when", TimeUtils.getTimeStr(cal));
			if (header.getDuration() != null) {
				out.attr("dur", header.getDuration());
			}
			out.end(); // time
			out.end(); // date
		}
		out.end(); // publicationStmt
	}

	private void writeSource(OutWrapper out, TEIHeader header)
			throws XMLStreamException {
		if (header.getSourceDescText() != null
				|| header.getRetrievedFrom() != null) {
			out.start("sourceDesc");
			out.start("p");
			if (header.getRetrievedFrom() != null) {
				out.text("Text retrieved from ");
				out.startEmpty("ptr");
				out.attr("target", header.getRetrievedFrom());
				out.text(".");
			} else {
				out.text(header.getSourceDescText());
			}
			out.end(); // p
			out.end(); // sourceDesc
		}
	}
}