/**
* This file is part of Archiv-Editor.
*
* The software Archiv-Editor serves as a client user interface for working with
* the Person Data Repository. See: pdr.bbaw.de
*
* The software Archiv-Editor was developed at the Berlin-Brandenburg Academy
* of Sciences and Humanities, Jägerstr. 22/23, D-10117 Berlin.
* www.bbaw.de
*
* Copyright (C) 2010-2013 Berlin-Brandenburg Academy
* of Sciences and Humanities
*
* The software Archiv-Editor was developed by @author: Christoph Plutte.
*
* Archiv-Editor is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Archiv-Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Archiv-Editor.
* If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>.
*/
package org.bbaw.pdr.ae.control.core;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartDocument;
import javax.xml.stream.events.StartElement;
import org.bbaw.pdr.ae.common.AEConstants;
import org.bbaw.pdr.ae.control.internal.Activator;
import org.bbaw.pdr.ae.metamodel.PdrMetaObject;
import org.bbaw.pdr.ae.metamodel.Record;
import org.bbaw.pdr.ae.metamodel.Revision;
import org.bbaw.pdr.ae.model.Aspect;
import org.bbaw.pdr.ae.model.Concurrence;
import org.bbaw.pdr.ae.model.Identifier;
import org.bbaw.pdr.ae.model.NameMods;
import org.bbaw.pdr.ae.model.OriginInfo;
import org.bbaw.pdr.ae.model.PartMods;
import org.bbaw.pdr.ae.model.PdrObject;
import org.bbaw.pdr.ae.model.Person;
import org.bbaw.pdr.ae.model.Place;
import org.bbaw.pdr.ae.model.Reference;
import org.bbaw.pdr.ae.model.ReferenceMods;
import org.bbaw.pdr.ae.model.ReferenceModsTemplate;
import org.bbaw.pdr.ae.model.RelatedItem;
import org.bbaw.pdr.ae.model.Relation;
import org.bbaw.pdr.ae.model.RelationStm;
import org.bbaw.pdr.ae.model.SemanticStm;
import org.bbaw.pdr.ae.model.SpatialStm;
import org.bbaw.pdr.ae.model.TaggingRange;
import org.bbaw.pdr.ae.model.TimeStm;
import org.bbaw.pdr.ae.model.ValidationStm;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
/**
* The Class XMLProcessor.
* @author Christoph Plutte
*/
public class XMLProcessor implements XMLProcessorInterface
{
/** The _admin date format. */
private SimpleDateFormat _adminDateFormat = AEConstants.ADMINDATE_FORMAT;
/** The _encoding. */
private final String _encoding = "iso8601";
/** The _mods uri. */
private final String _modsUri = "http://www.loc.gov/mods/v3";
/** Logger. */
private static ILog iLogger = AEConstants.ILOGGER;
/** status. */
private IStatus _log;
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name of node
* @param c the concurrence
* @param person
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final Concurrence c, PdrMetaObject person)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("podl", "http://pdr.bbaw.de/namespaces/podl/", name);
eventWriter.add(sElement);
// FIXME nullpointer abfangen!!1
eventWriter.add(eventFactory.createAttribute("person", c.getPersonId().toString()));
if (c.getReferences() != null)
{
for (int j = 0; j < c.getReferences().size(); j++)
{
createNode(eventWriter, "validationStm", c.getReferences().get(j), "podl",
"http://pdr.bbaw.de/namespaces/podl/", person);
}
}
// Create End node
EndElement eElement = eventFactory.createEndElement("podl", "http://pdr.bbaw.de/namespaces/podl/", name);
eventWriter.add(eElement);
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param d the documentation
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final HashMap<String, String> d)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("", "", name);
eventWriter.add(sElement);
// FIXME nullpointer abfangen!!1
for (String str : d.keySet())
{
createNode(eventWriter, "docPart", d.get(str), str);
}
if (d.isEmpty())
{
createNode(eventWriter, "docPart", "", "de");
}
eventWriter.add(eventFactory.createEndElement("", "", name));
}
// private void createNode(XMLEventWriter eventWriter, String name,
// Reference ref, String prefix, String uri) throws XMLStreamException {
// XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// XMLEvent end = eventFactory.createCharacters("\n");
//
// // Create Start node
// StartElement sElement = eventFactory.createStartElement(prefix, uri,
// name);
//
// eventWriter.add(sElement);
// if (ref.getInternal() != null)
// eventWriter.add(eventFactory.createAttribute("internal",
// ref.getInternal()));
// if (ref.getQuality() !=
// null)eventWriter.add(eventFactory.createAttribute("quality",
// ref.getQuality()));
// if (ref.getAuthority() !=
// null)eventWriter.add(eventFactory.createAttribute("authority",
// ref.getAuthority().toString()));
//
// // Create Content
// if (ref.getSourceId() != null)
// {
// Characters characters =
// eventFactory.createCharacters(ref.getSourceId().toString());
// eventWriter.add(characters);
// }
// // Create End node
// EndElement eElement = eventFactory.createEndElement(prefix, uri, name);
// eventWriter.add(eElement);
//
// }
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param i the identifier
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final Identifier i)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("podl", "http://pdr.bbaw.de/namespaces/podl/", name);
eventWriter.add(sElement);
if (i.getProvider() != null)
{
eventWriter.add(eventFactory.createAttribute("provider", i.getProvider()));
}
if (i.getQuality() != null)
{
eventWriter.add(eventFactory.createAttribute("quality", i.getQuality()));
}
if (i.getAuthority() != null)
{
eventWriter.add(eventFactory.createAttribute("authority", i.getAuthority().toString()));
}
// Create Content
Characters characters = eventFactory.createCharacters(i.getIdentifier());
eventWriter.add(characters);
// Create End node
EndElement eElement = eventFactory.createEndElement("podl", "http://pdr.bbaw.de/namespaces/podl/", name);
eventWriter.add(eElement);
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param nameMods the namemods object
* @param prefix the prefix
* @param uri the uri
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final NameMods nameMods,
final String prefix, final String uri) throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement(prefix, uri, "name");
eventWriter.add(sElement);
if (nameMods.getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", nameMods.getType()));
}
for (int i = 0; i < nameMods.getNameParts().size(); i++)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "namePart");
eventWriter.add(sE);
if (nameMods.getNameParts().get(i).getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", nameMods.getNameParts().get(i).getType()));
}
Characters characters = eventFactory.createCharacters(nameMods.getNameParts().get(i).getNamePart());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "namePart"));
}
if (nameMods.getAffiliation() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "affiliation");
eventWriter.add(sE);
Characters characters = eventFactory.createCharacters(nameMods.getAffiliation());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "affiliation"));
}
if (nameMods.getRoleMods() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "role");
eventWriter.add(sE);
if (nameMods.getRoleMods().getRoleTerm() != null)
{
StartElement sE2 = eventFactory.createStartElement(prefix, uri, "roleTerm");
eventWriter.add(sE2);
if (nameMods.getRoleMods().getAuthority() != null)
{
eventWriter.add(eventFactory.createAttribute("authority", nameMods.getRoleMods().getAuthority()));
}
if (nameMods.getRoleMods().getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", nameMods.getRoleMods().getType()));
}
Characters characters = eventFactory.createCharacters(nameMods.getRoleMods().getRoleTerm());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "roleTerm"));
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "role"));
}
if (nameMods.getDescription() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "description");
eventWriter.add(sE);
Characters characters = eventFactory.createCharacters(nameMods.getDescription());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "description"));
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "name"));
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param originInfo the origin info
* @param prefix the prefix
* @param uri the uri
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final OriginInfo originInfo,
final String prefix, final String uri) throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement(prefix, uri, name);
eventWriter.add(sElement);
if (originInfo.getDateCreated() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "dateCreated");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
Characters characters = eventFactory.createCharacters(originInfo.getDateCreated().toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "dateCreated"));
}
if (originInfo.getDateCreatedTimespan() != null)
{
if (originInfo.getDateCreatedTimespan().getDateFrom() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "dateCreated");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
eventWriter.add(eventFactory.createAttribute("point", "start"));
Characters characters = eventFactory.createCharacters(originInfo.getDateCreatedTimespan().getDateFrom()
.toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "dateCreated"));
}
if (originInfo.getDateCreatedTimespan().getDateTo() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "dateCreated");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
eventWriter.add(eventFactory.createAttribute("point", "end"));
Characters characters = eventFactory.createCharacters(originInfo.getDateCreatedTimespan().getDateTo()
.toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "dateCreated"));
}
}
if (originInfo.getDateIssued() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "dateIssued");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
Characters characters = eventFactory.createCharacters(originInfo.getDateIssued().toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "dateIssued"));
}
if (originInfo.getDateIssuedTimespan() != null)
{
if (originInfo.getDateIssuedTimespan().getDateFrom() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "dateIssued");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
eventWriter.add(eventFactory.createAttribute("point", "start"));
Characters characters = eventFactory.createCharacters(originInfo.getDateIssuedTimespan().getDateFrom()
.toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "dateIssued"));
}
if (originInfo.getDateIssuedTimespan().getDateTo() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "dateIssued");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
eventWriter.add(eventFactory.createAttribute("point", "end"));
Characters characters = eventFactory.createCharacters(originInfo.getDateIssuedTimespan().getDateTo()
.toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "dateIssued"));
}
}
if (originInfo.getDateCaptured() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "dateCaptured");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
Characters characters = eventFactory.createCharacters(originInfo.getDateCaptured().toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "dateCaptured"));
}
if (originInfo.getDateCapturedTimespan() != null)
{
if (originInfo.getDateCapturedTimespan().getDateFrom() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "dateCaptured");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
eventWriter.add(eventFactory.createAttribute("point", "start"));
Characters characters = eventFactory.createCharacters(originInfo.getDateCapturedTimespan()
.getDateFrom().toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "dateCaptured"));
}
if (originInfo.getDateCapturedTimespan().getDateTo() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "dateCaptured");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
eventWriter.add(eventFactory.createAttribute("point", "end"));
Characters characters = eventFactory.createCharacters(originInfo.getDateCapturedTimespan().getDateTo()
.toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "dateCaptured"));
}
}
if (originInfo.getCopyrightDate() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "copyrightDate");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
Characters characters = eventFactory.createCharacters(originInfo.getCopyrightDate().toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "copyrightDate"));
}
if (originInfo.getCopyrightDateTimespan() != null)
{
if (originInfo.getCopyrightDateTimespan().getDateFrom() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "copyrightDate");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
eventWriter.add(eventFactory.createAttribute("point", "start"));
Characters characters = eventFactory.createCharacters(originInfo.getCopyrightDateTimespan()
.getDateFrom().toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "copyrightDate"));
}
if (originInfo.getCopyrightDateTimespan().getDateTo() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "copyrightDate");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
eventWriter.add(eventFactory.createAttribute("point", "end"));
Characters characters = eventFactory.createCharacters(originInfo.getCopyrightDateTimespan().getDateTo()
.toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "copyrightDate"));
}
}
if (originInfo.getPublisher() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "publisher");
eventWriter.add(sE);
Characters characters = eventFactory.createCharacters(originInfo.getPublisher());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "publisher"));
}
if (originInfo.getPlaceTerm() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "place");
eventWriter.add(sE);
StartElement sE2 = eventFactory.createStartElement(prefix, uri, "placeTerm");
eventWriter.add(sE2);
eventWriter.add(eventFactory.createAttribute("type", originInfo.getPlaceType()));
Characters characters = eventFactory.createCharacters(originInfo.getPlaceTerm());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "placeTerm"));
eventWriter.add(eventFactory.createEndElement(prefix, uri, "place"));
}
if (originInfo.getEdition() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "edition");
eventWriter.add(sE);
Characters characters = eventFactory.createCharacters(originInfo.getEdition());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "edition"));
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, name));
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param part the part
* @param prefix the prefix
* @param uri the uri
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final PartMods part,
final String prefix, final String uri) throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement(prefix, uri, "part");
eventWriter.add(sElement);
if (part.getDetails() != null && !part.getDetails().isEmpty())
{
for (int i = 0; i < part.getDetails().size(); i++)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "detail");
eventWriter.add(sE);
if (part.getDetails().get(i).getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", part.getDetails().get(i).getType()));
}
if (part.getDetails().get(i).getNumber() != null)
{
sElement = eventFactory.createStartElement(prefix, uri, "number");
eventWriter.add(sElement);
Characters characters = eventFactory.createCharacters(part.getDetails().get(i).getNumber());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "number"));
}
if (part.getDetails().get(i).getCaption() != null)
{
sElement = eventFactory.createStartElement(prefix, uri, "caption");
eventWriter.add(sElement);
Characters characters = eventFactory.createCharacters(part.getDetails().get(i).getCaption());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "caption"));
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "detail"));
}
}
if (part.getExtendsMods() != null && !part.getExtendsMods().isEmpty())
{
for (int i = 0; i < part.getExtendsMods().size(); i++)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "extent");
eventWriter.add(sE);
if (part.getDetails().get(i).getType() != null)
{
eventWriter.add(eventFactory.createAttribute("unit", part.getExtendsMods().get(i).getUnit()));
}
if (part.getExtendsMods().get(i).getStart() != null)
{
sElement = eventFactory.createStartElement(prefix, uri, "start");
eventWriter.add(sElement);
Characters characters = eventFactory.createCharacters(part.getExtendsMods().get(i).getStart());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "start"));
}
if (part.getExtendsMods().get(i).getEnd() != null)
{
sElement = eventFactory.createStartElement(prefix, uri, "end");
eventWriter.add(sElement);
Characters characters = eventFactory.createCharacters(part.getExtendsMods().get(i).getEnd());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "end"));
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "extent"));
}
}
if (part.getDates() != null && !part.getDates().isEmpty())
{
for (int i = 0; i < part.getDates().size(); i++)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "date");
eventWriter.add(sE);
Characters characters = eventFactory.createCharacters(part.getDates().get(i).toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "date"));
}
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "part"));
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param place the place
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final Place place)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", name);
eventWriter.add(sElement);
if (place.getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", place.getType()));
}
if (place.getSubtype() != null)
{
eventWriter.add(eventFactory.createAttribute("subtype", place.getSubtype()));
}
if (place.getKey() != null)
{
eventWriter.add(eventFactory.createAttribute("key", place.getKey()));
}
// Create Content
if (place.getPlaceName() != null)
{
Characters characters = eventFactory.createCharacters(place.getPlaceName());
eventWriter.add(characters);
}
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "place"));
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param r the Reference
* @param prefix the prefix
* @param uri the uri
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final ReferenceMods r,
final String prefix, final String uri) throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create config open tag
StartElement startElement = eventFactory.createStartElement(prefix, uri, "mods");
eventWriter.add(startElement);
// add display name to reference node
// TODO nicht lieber pdrID?
eventWriter.add(eventFactory.createAttribute("xmlns:mods", "http://www.loc.gov/mods/v3"));
eventWriter.add(eventFactory.createAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"));
eventWriter.add(eventFactory.createAttribute("xsi:schemaLocation",
"http://pdr.bbaw.de/namespaces/rodl/ http://pdr.bbaw.de/schema/rodl_mods.xsd"));
if (!r.getPdrId().getType().equals("genre"))
{
eventWriter.add(eventFactory.createAttribute("ID", r.getPdrId().toString()));
}
// Write the different nodes
if (r.getTitleInfo() != null)
{
startElement = eventFactory.createStartElement(prefix, uri, "titleInfo");
eventWriter.add(startElement);
if (r.getTitleInfo() != null && r.getTitleInfo().getTitle() != null)
{
createNode(eventWriter, "title", r.getTitleInfo().getTitle(), prefix, uri);
}
if (r.getTitleInfo() != null && r.getTitleInfo().getSubTitle() != null)
{
createNode(eventWriter, "subTitle", r.getTitleInfo().getSubTitle(), prefix, uri);
}
if (r.getTitleInfo() != null && r.getTitleInfo().getPartNumber() != null)
{
createNode(eventWriter, "partNumber", r.getTitleInfo().getPartNumber(), prefix, uri);
}
if (r.getTitleInfo() != null && r.getTitleInfo().getPartName() != null)
{
createNode(eventWriter, "partName", r.getTitleInfo().getPartName(), prefix, uri);
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "titleInfo"));
}
if (r.getNameMods() != null)
{
for (int i = 0; i < r.getNameMods().size(); i++)
{
createNode(eventWriter, "name", r.getNameMods().get(i), prefix, uri);
}
}
if (r.getGenre() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "genre");
eventWriter.add(sE);
if (r.getGenre().getAuthority() != null)
{
eventWriter.add(eventFactory.createAttribute("authority", r.getGenre().getAuthority()));
}
Characters characters = eventFactory.createCharacters(r.getGenre().getGenre());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "genre"));
}
if (r.getOriginInfo() != null)
{
createNode(eventWriter, "originInfo", r.getOriginInfo(), prefix, uri);
}
if (r.getNote() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "note");
eventWriter.add(sE);
if (r.getNote().getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", r.getNote().getType()));
}
Characters characters = eventFactory.createCharacters(r.getNote().getNote());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "note"));
}
if (r.getIdentifiersMods() != null && !r.getIdentifiersMods().isEmpty())
{
for (int i = 0; i < r.getIdentifiersMods().size(); i++)
{
if (r.getIdentifiersMods().get(i).getIdentifier() != null && !"".equals(r.getIdentifiersMods().get(i).getIdentifier()))
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "identifier");
eventWriter.add(sE);
if (r.getIdentifiersMods().get(i).getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", r.getIdentifiersMods().get(i).getType()));
}
else
{
eventWriter.add(eventFactory.createAttribute("type", "pdr"));
}
Characters characters = eventFactory.createCharacters(r.getIdentifiersMods().get(i).getIdentifier());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "identifier"));
}
}
}
if (r.getLocation() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "location");
eventWriter.add(sE);
if (r.getLocation().getPhysicalLocation() != null)
{
StartElement sE2 = eventFactory.createStartElement(prefix, uri, "physicalLocation");
eventWriter.add(sE2);
Characters characters = eventFactory.createCharacters(r.getLocation().getPhysicalLocation());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "physicalLocation"));
}
if (r.getLocation().getShelfLocator() != null)
{
StartElement sE2 = eventFactory.createStartElement(prefix, uri, "shelfLocator");
eventWriter.add(sE2);
Characters characters = eventFactory.createCharacters(r.getLocation().getShelfLocator());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "shelfLocator"));
}
if (r.getLocation().getUrl() != null)
{
StartElement sE2 = eventFactory.createStartElement(prefix, uri, "url");
eventWriter.add(sE2);
Characters characters = eventFactory.createCharacters(r.getLocation().getUrl());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "url"));
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "location"));
}
if (r.getAccessCondition() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "accessCondition");
eventWriter.add(sE);
if (r.getAccessCondition().getAccessCondition() != null)
{
eventWriter.add(eventFactory.createAttribute("type", r.getAccessCondition().getType()));
}
Characters characters = eventFactory.createCharacters(r.getAccessCondition().getAccessCondition());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "accessCondition"));
}
if (r.getSeriesTitleInfo() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "relatedItem");
eventWriter.add(sE);
eventWriter.add(eventFactory.createAttribute("type", "series"));
if (r.getSeriesTitleInfo() != null)
{
startElement = eventFactory.createStartElement(prefix, uri, "titleInfo");
eventWriter.add(startElement);
if (r.getSeriesTitleInfo() != null && r.getSeriesTitleInfo().getTitle() != null)
{
createNode(eventWriter, "title", r.getSeriesTitleInfo().getTitle(), prefix, uri);
}
if (r.getSeriesTitleInfo() != null && r.getSeriesTitleInfo().getSubTitle() != null)
{
createNode(eventWriter, "subTitle", r.getSeriesTitleInfo().getSubTitle(), prefix, uri);
}
if (r.getSeriesTitleInfo() != null && r.getSeriesTitleInfo().getPartNumber() != null)
{
createNode(eventWriter, "partNumber", r.getSeriesTitleInfo().getPartNumber(), prefix, uri);
}
if (r.getSeriesTitleInfo() != null && r.getSeriesTitleInfo().getPartName() != null)
{
createNode(eventWriter, "partName", r.getSeriesTitleInfo().getPartName(), prefix, uri);
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "titleInfo"));
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "relatedItem"));
}
if (r.getRelatedItems() != null && !r.getRelatedItems().isEmpty())
{
for (RelatedItem relItem : r.getRelatedItems())
{
StartElement sE = eventFactory.createStartElement(prefix, uri, "relatedItem");
eventWriter.add(sE);
if (relItem.getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", relItem.getType()));
}
if (relItem.getId() != null)
{
eventWriter.add(eventFactory.createAttribute("ID", relItem.getId()));
}
if (relItem.getPart() != null)
{
createNode(eventWriter, "part", relItem.getPart(), prefix, uri);
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "relatedItem"));
}
}
if (r.getRecord() != null)
{
createNodeNoNamespace(eventWriter, "recordInfo", r.getRecord(), prefix, uri);
}
eventWriter.add(eventFactory.createEndElement(prefix, uri, "mods"));
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param relation the relation
* @param relationStm
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final Relation relation, RelationStm relationStm)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", name);
eventWriter.add(sElement);
if (relation.getObject() != null)
{
eventWriter.add(eventFactory.createAttribute("object", relation.getObject().toString()));
}
else
{
eventWriter.add(eventFactory.createAttribute("object", relationStm.getSubject().toString()));
}
if (relation.getProvider() != null)
{
eventWriter.add(eventFactory.createAttribute("provider", relation.getProvider()));
}
if (relation.getRClass() != null)
{
eventWriter.add(eventFactory.createAttribute("class", relation.getRClass()));
}
if (relation.getContext() != null)
{
eventWriter.add(eventFactory.createAttribute("context", relation.getContext()));
}
// Create Content
if (relation.getRelation() != null)
{
Characters characters = eventFactory.createCharacters(relation.getRelation());
eventWriter.add(characters);
}
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "relation"));
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param relStm the relationStatement
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final RelationStm relStm)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", name);
eventWriter.add(sElement);
if (relStm.getSubject() != null)
{
eventWriter.add(eventFactory.createAttribute("subject", relStm.getSubject().toString()));
}
// Create Content
if (relStm.getRelations() != null)
{
for (int j = 0; j < relStm.getRelations().size(); j++)
{
createNode(eventWriter, "relation", relStm.getRelations().get(j), relStm);
}
}
// Create End node
EndElement eElement = eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", name);
eventWriter.add(eElement);
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param r the revision
* @param prefix the prefix
* @param uri the uri
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final Revision r, final String prefix,
final String uri) throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement(prefix, uri, name);
eventWriter.add(sElement);
eventWriter.add(eventFactory.createAttribute("ref", new Integer(r.getRef()).toString()));
eventWriter
.add(eventFactory.createAttribute("timestamp", _adminDateFormat.format(r.getTimeStamp()).toString()));
eventWriter.add(eventFactory.createAttribute("authority", r.getAuthority().toString()));
// TODO das Schema sieht keinen authority namen mehr vor, änderung im
// model umsetzen.
// // Create Content
// Characters characters =
// eventFactory.createCharacters(r.getRevisor());
// eventWriter.add(characters);
// Create End node
EndElement eElement = eventFactory.createEndElement(prefix, uri, name);
eventWriter.add(eElement);
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param semStm the semantic Statement
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final SemanticStm semStm)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", name);
eventWriter.add(sElement);
if (semStm.getProvider() != null)
{
eventWriter.add(eventFactory.createAttribute("provider", semStm.getProvider()));
}
// Create Content
if (semStm.getLabel() != null)
{
Characters characters = eventFactory.createCharacters(semStm.getLabel());
eventWriter.add(characters);
}
// Create End node
EndElement eElement = eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", name);
eventWriter.add(eElement);
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param spaStm the spatial Statement
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final SpatialStm spaStm)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", name);
eventWriter.add(sElement);
if (spaStm.getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", spaStm.getType()));
}
// Create Content
if (spaStm.getPlaces() != null)
{
for (int j = 0; j < spaStm.getPlaces().size(); j++)
{
createNode(eventWriter, "place", spaStm.getPlaces().get(j));
}
}
// Create End node
EndElement eElement = eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", name);
eventWriter.add(eElement);
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param value the value
* @param lang the lang
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final String value, final String lang)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("", "", name);
eventWriter.add(sElement);
eventWriter.add(eventFactory.createAttribute("xml:lang", lang));
if (value.trim().length() > 0)
{
Characters characters = eventFactory.createCharacters(value.trim());
eventWriter.add(characters);
}
eventWriter.add(eventFactory.createEndElement("", "", name));
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param text the text
* @param prefix the prefix
* @param uri the uri
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final String text,
final String prefix, final String uri) throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement(prefix, uri, name);
eventWriter.add(sElement);
Characters characters = eventFactory.createCharacters(text);
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, name));
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param tStm the time Statement
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final TimeStm tStm)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", name);
eventWriter.add(sElement);
if (tStm.getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", tStm.getType()));
}
// Create Content
if (tStm.getTimes() != null)
{
for (int j = 0; j < tStm.getTimes().size(); j++)
{
StartElement startElement = eventFactory.createStartElement("aodl",
"http://pdr.bbaw.de/namespaces/aodl/", "time");
eventWriter.add(startElement);
if (tStm.getTimes().get(j).getAccuracy() != null)
{
eventWriter.add(eventFactory.createAttribute("accuracy", tStm.getTimes().get(j).getAccuracy()));
}
if (tStm.getTimes().get(j).getType() != null)
{
eventWriter.add(eventFactory.createAttribute("type", tStm.getTimes().get(j).getType()));
}
// Create Content
if (tStm.getTimes().get(j).getTimeStamp() != null)
{
Characters characters = eventFactory.createCharacters(tStm.getTimes().get(j).getTimeStamp()
.toString());
eventWriter.add(characters);
}
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "time"));
}
}
// Create End node
EndElement eElement = eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", name);
eventWriter.add(eElement);
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param name the name
* @param validationStm the validation statement
* @param prefix the prefix
* @param uri the uri
* @param aspect
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final String name, final ValidationStm validationStm,
final String prefix, final String uri, PdrMetaObject aspect) throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement(prefix, uri, name);
eventWriter.add(sElement);
if (validationStm.getAuthority() != null)
{
eventWriter.add(eventFactory.createAttribute("authority", validationStm.getAuthority().toString()));
}
else
{
eventWriter.add(eventFactory.createAttribute("authority", aspect.getRecord().getRevisions().get(0).getAuthority().toString()));
}
if (validationStm.getReference() != null)
{
Reference ref = validationStm.getReference();
sElement = eventFactory.createStartElement(prefix, uri, "reference");
eventWriter.add(sElement);
if (ref.getInternal() != null)
{
eventWriter.add(eventFactory.createAttribute("internal", ref.getInternal()));
}
if (ref.getQuality() != null)
{
eventWriter.add(eventFactory.createAttribute("quality", ref.getQuality()));
}
if (ref.getAuthority() != null)
{
eventWriter.add(eventFactory.createAttribute("authority", ref.getAuthority().toString()));
}
// Create Content
if (ref.getSourceId() != null)
{
Characters characters = eventFactory.createCharacters(ref.getSourceId().toString());
eventWriter.add(characters);
}
EndElement eElement = eventFactory.createEndElement(prefix, uri, "reference");
eventWriter.add(eElement);
}
sElement = eventFactory.createStartElement(prefix, uri, "interpretation");
eventWriter.add(sElement);
if (validationStm.getInterpretation() != null)
{
Characters characters = eventFactory.createCharacters(validationStm.getInterpretation());
eventWriter.add(characters);
}
EndElement eElement = eventFactory.createEndElement(prefix, uri, "interpretation");
eventWriter.add(eElement);
// Create End node
eElement = eventFactory.createEndElement(prefix, uri, name);
eventWriter.add(eElement);
}
/**
* Creates the node.
* @param eventWriter the event writer
* @param tr the tagging range
* @param text the text
* @throws XMLStreamException the xML stream exception
*/
private void createNode(final XMLEventWriter eventWriter, final TaggingRange tr, String text)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
StartElement sElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/",
tr.getName());
eventWriter.add(sElement);
if (tr.getType() != null && tr.getType().length() > 0)
{
eventWriter.add(eventFactory.createAttribute("type", tr.getType()));
}
else
{
eventWriter.add(eventFactory.createAttribute("type", "undefined"));
}
if (tr.getSubtype() != null && tr.getSubtype().length() > 0)
{
eventWriter.add(eventFactory.createAttribute("subtype", tr.getSubtype()));
}
if (tr.getRole() != null && tr.getRole().length() > 0)
{
eventWriter.add(eventFactory.createAttribute("role", tr.getRole()));
}
if (tr.getAna() != null && tr.getAna().length() > 0)
{
eventWriter.add(eventFactory.createAttribute("ana", tr.getAna()));
}
if (tr.getKey() != null && tr.getKey().length() > 0)
{
eventWriter.add(eventFactory.createAttribute("key", tr.getKey()));
}
if (tr.getWhen() != null)
{
eventWriter.add(eventFactory.createAttribute("when", tr.getWhen().toString()));
}
if (tr.getFrom() != null)
{
eventWriter.add(eventFactory.createAttribute("from", (tr.getFrom().toString())));
}
if (tr.getTo() != null)
{
eventWriter.add(eventFactory.createAttribute("to", tr.getTo().toString()));
}
if (tr.getNotBefore() != null)
{
eventWriter.add(eventFactory.createAttribute("notBefore", tr.getNotBefore().toString()));
}
if (tr.getNotAfter() != null)
{
eventWriter.add(eventFactory.createAttribute("notAfter", tr.getNotAfter().toString()));
}
// FIXME Workaround
text = text + " ";
// System.out.println("injester, tr.start " + tr.getStart() + " ln " +
// tr.getLength());
String subText = text.substring(tr.getStart(), Math.min(tr.getStart() + tr.getLength(), text.length()));
Characters characters = eventFactory.createCharacters(subText);
eventWriter.add(characters);
EndElement eElement = eventFactory
.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", tr.getName());
eventWriter.add(eElement);
}
/**
* Creates the node no namespace.
* @param eventWriter the event writer
* @param name the name
* @param record the record
* @param prefix the prefix
* @param uri the uri
* @throws XMLStreamException the xML stream exception
*/
private void createNodeNoNamespace(final XMLEventWriter eventWriter, final String name, final Record record,
final String prefix, final String uri) throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create Start node
if (!record.getRevisions().isEmpty())
{
if (record.getRevisions().firstElement() != null
&& record.getRevisions().firstElement().getTimeStamp() != null
&& record.getRevisions().firstElement().getAuthority() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, name);
eventWriter.add(sE);
StartElement sE2 = eventFactory.createStartElement(prefix, uri, "recordCreationDate");
eventWriter.add(sE2);
Characters characters;
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
characters = eventFactory.createCharacters(_adminDateFormat.format(record.getRevisions().firstElement()
.getTimeStamp()));
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "recordCreationDate"));
sE2 = eventFactory.createStartElement(prefix, uri, "recordContentSource");
eventWriter.add(sE2);
eventWriter.add(eventFactory.createAttribute("authority", "PDR"));
characters = eventFactory.createCharacters(record.getRevisions().firstElement().getAuthority()
.toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "recordContentSource"));
eventWriter.add(eventFactory.createEndElement(prefix, uri, name));
}
if (record.getRevisions().size() > 1)
{
for (int j = 1; j < record.getRevisions().size(); j++)
{
if (record.getRevisions().get(j).getTimeStamp() != null
&& record.getRevisions().get(j).getAuthority() != null)
{
StartElement sE = eventFactory.createStartElement(prefix, uri, name);
eventWriter.add(sE);
Characters characters;
StartElement sE2 = eventFactory.createStartElement(prefix, uri, "recordContentSource");
eventWriter.add(sE2);
eventWriter.add(eventFactory.createAttribute("authority", "PDR"));
characters = eventFactory.createCharacters(record.getRevisions().get(j).getAuthority()
.toString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "recordContentSource"));
sE2 = eventFactory.createStartElement(prefix, uri, "recordChangeDate");
eventWriter.add(sE2);
eventWriter.add(eventFactory.createAttribute("encoding", _encoding));
characters = eventFactory.createCharacters(_adminDateFormat.format(record.getRevisions().get(j)
.getTimeStamp()));
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement(prefix, uri, "recordChangeDate"));
eventWriter.add(eventFactory.createEndElement(prefix, uri, name));
}
}
}
}
}
/**
* Process append text with line breaks.
* @param eventWriter the event writer
* @param subText the sub text
* @throws XMLStreamException the xML stream exception
*/
private void processAppendTextWithLineBreaks(final XMLEventWriter eventWriter, final String subText)
throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
if (subText.contains("\n") || subText.contains("\r"))
{
String[] subs = subText.split("\\n|\\r");
for (int i = 0; i < subs.length; i++)
{
String removeLB = subs[i].replace("\n", "");
removeLB = subs[i].replace("\r", "");
Characters characters = eventFactory.createCharacters(removeLB);
eventWriter.add(characters);
if (i < subs.length - 1)
{
StartElement startElement = eventFactory.createStartElement("aodl",
"http://pdr.bbaw.de/namespaces/aodl/", "lb");
eventWriter.add(startElement);
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "lb"));
}
}
if (subText.endsWith("\n") || subText.endsWith("\r"))
{
StartElement startElement = eventFactory.createStartElement("aodl",
"http://pdr.bbaw.de/namespaces/aodl/", "lb");
eventWriter.add(startElement);
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "lb"));
}
}
else
{
Characters characters = eventFactory.createCharacters(subText);
eventWriter.add(characters);
}
}
/**
* @param a Aspect
* @return xml string
* @throws XMLStreamException xml stream exc.
* @see org.bbaw.pdr.ae.control.core.XMLProcessorInterface#writeToXML(org.bbaw.pdr.ae.model.Aspect)
*/
@Override
public final String writeToXML(final Aspect a) throws XMLStreamException
{
// Create a XMLOutputFactory
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
// Create XMLEventWriter
ByteArrayOutputStream bout = new ByteArrayOutputStream();
XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(bout, "UTF-8");
// Create a EventFactory
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create and write Start Tag
StartDocument startDocument = eventFactory.createStartDocument();
eventWriter.add(startDocument);
// Create config open tag
StartElement startElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/",
"aspect");
eventWriter.add(startElement);
eventWriter.add(eventFactory.createNamespace("aodl", "http://pdr.bbaw.de/namespaces/aodl/"));
eventWriter.add(eventFactory.createAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"));
eventWriter.add(eventFactory.createAttribute("xsi:schemaLocation",
"http://pdr.bbaw.de/namespaces/aodl/ http://pdr.bbaw.de/schema/aodl.xsd"));
eventWriter.add(eventFactory.createAttribute("id", a.getPdrId().toString()));
// add the display name to the aspect node
// eventWriter.add(eventFactory.createAttribute("displayName",
// a.getDisplayName()));
//
// Write the different nodes
startElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "record");
eventWriter.add(startElement);
for (int i = 0; i < a.getRecord().getRevisions().size(); i++)
{
createNode(eventWriter, "revision", a.getRecord().getRevisions().get(i), "aodl",
"http://pdr.bbaw.de/namespaces/aodl/");
}
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "record"));
startElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "timeDim");
eventWriter.add(startElement);
if (a.getTimeDim() != null && a.getTimeDim().getTimeStms() != null)
{
for (int i = 0; i < a.getTimeDim().getTimeStms().size(); i++)
{
createNode(eventWriter, "timeStm", a.getTimeDim().getTimeStms().get(i));
}
}
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "timeDim"));
startElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "spatialDim");
eventWriter.add(startElement);
if (a.getSpatialDim() != null && a.getSpatialDim().getSpatialStms() != null)
{
for (int i = 0; i < a.getSpatialDim().getSpatialStms().size(); i++)
{
createNode(eventWriter, "spatialStm", a.getSpatialDim().getSpatialStms().get(i));
}
}
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "spatialDim"));
startElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "relationDim");
eventWriter.add(startElement);
if (a.getRelationDim() != null && a.getRelationDim().getRelationStms() != null)
{
for (int i = 0; i < a.getRelationDim().getRelationStms().size(); i++)
{
createNode(eventWriter, "relationStm", a.getRelationDim().getRelationStms().get(i));
}
}
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "relationDim"));
startElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "semanticDim");
eventWriter.add(startElement);
if (a.getSemanticDim() != null && a.getSemanticDim().getSemanticStms() != null)
{
for (int i = 0; i < a.getSemanticDim().getSemanticStms().size(); i++)
{
if (a.getSemanticDim().getSemanticStms().get(i) != null)
{
createNode(eventWriter, "semanticStm", a.getSemanticDim().getSemanticStms().get(i));
}
}
}
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "semanticDim"));
startElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "notification");
eventWriter.add(startElement);
int start = 0;
System.out.println(a.getNotification());
// System.out.println("notifi " + a.getNotification());
// FIXME!!!!!!!!!!!!!!!!
if (a.getNotification() != null && a.getRangeList() != null)
{
// System.out.println("RangeListe hat TaggingListen, Zahl: " +
// a.getRangeList().size());
for (int i = 0; i < a.getRangeList().size(); i++)
{
if (a.getNotification().length() > start
&& a.getNotification().length() >= a.getRangeList().get(i).getStart()
&& start <= a.getRangeList().get(i).getStart())
{
String subText = a.getNotification().substring(start, a.getRangeList().get(i).getStart());
processAppendTextWithLineBreaks(eventWriter, subText);
createNode(eventWriter, a.getRangeList().get(i), a.getNotification());
start = a.getRangeList().get(i).getStart() + a.getRangeList().get(i).getLength();
}
}
if (a.getNotification().length() > start)
{
String subText = a.getNotification().substring(start);
processAppendTextWithLineBreaks(eventWriter, subText);
}
}
else if (a.getNotification() != null)
{
processAppendTextWithLineBreaks(eventWriter, a.getNotification());
}
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "notification"));
startElement = eventFactory.createStartElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "validation");
eventWriter.add(startElement);
if (a.getValidation() != null && a.getValidation().getValidationStms() != null)
{
for (int i = 0; i < a.getValidation().getValidationStms().size(); i++)
{
createNode(eventWriter, "validationStm", a.getValidation().getValidationStms().get(i), "aodl",
"http://pdr.bbaw.de/namespaces/aodl/", a);
}
}
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "validation"));
eventWriter.add(eventFactory.createEndElement("aodl", "http://pdr.bbaw.de/namespaces/aodl/", "aspect"));
eventWriter.add(eventFactory.createEndDocument());
eventWriter.close();
String xml = bout.toString();
try {
xml = bout.toString("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
_log = new Status(IStatus.WARNING, Activator.PLUGIN_ID, "XMLProcessor output: " + xml);
iLogger.log(_log);
return xml;
}
/**
* Write to xml.
* @param object the object
* @return the string
* @throws XMLStreamException the xML stream exception
*/
public final String writeToXML(final PdrObject object) throws XMLStreamException
{
if (object instanceof Person)
{
return writeToXML((Person) object);
}
if (object instanceof Aspect)
{
return writeToXML((Aspect) object);
}
if (object instanceof ReferenceMods)
{
return writeToXML((ReferenceMods) object);
}
return null;
}
/**
* @param p person
* @return xml string
* @throws XMLStreamException xml Stream exc.
* @see org.bbaw.pdr.ae.control.core.XMLProcessorInterface#writeToXML(org.bbaw.pdr.ae.model.Person)
*/
@Override
public final String writeToXML(final Person p) throws XMLStreamException
{
// Create a XMLOutputFactory
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
// Create XMLEventWriter
ByteArrayOutputStream bout = new ByteArrayOutputStream();
XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(bout, "UTF-8");
// Create a EventFactory
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create and write Start Tag
StartDocument startDocument = eventFactory.createStartDocument();
eventWriter.add(startDocument);
// Create config open tag
StartElement startElement = eventFactory.createStartElement("podl", "http://pdr.bbaw.de/namespaces/podl/",
"person");
eventWriter.add(startElement);
eventWriter.add(eventFactory.createNamespace("podl", "http://pdr.bbaw.de/namespaces/podl/"));
eventWriter.add(eventFactory.createAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"));
eventWriter.add(eventFactory.createAttribute("xsi:schemaLocation",
"http://pdr.bbaw.de/namespaces/podl/ http://pdr.bbaw.de/schema/podl.xsd"));
eventWriter.add(eventFactory.createAttribute("id", p.getPdrId().toString()));
// add display name to the person node
// eventWriter.add(eventFactory.createAttribute("displayName",
// p.getDisplayName()));
// Write the different nodes
if (p.getRecord() != null && p.getRecord().getRevisions() != null)
{
startElement = eventFactory.createStartElement("podl", "http://pdr.bbaw.de/namespaces/podl/", "record");
eventWriter.add(startElement);
for (int i = 0; i < p.getRecord().getRevisions().size(); i++)
{
createNode(eventWriter, "revision", p.getRecord().getRevisions().get(i), "podl",
"http://pdr.bbaw.de/namespaces/podl/");
}
eventWriter.add(eventFactory.createEndElement("podl", "http://pdr.bbaw.de/namespaces/podl/", "record"));
}
if (p.getIdentifiers() != null)
{
startElement = eventFactory
.createStartElement("podl", "http://pdr.bbaw.de/namespaces/podl/", "identifiers");
eventWriter.add(startElement);
if (p.getIdentifiers() != null && p.getIdentifiers().getIdentifiers() != null)
{
for (int i = 0; i < p.getIdentifiers().getIdentifiers().size(); i++)
{
createNode(eventWriter, "identifier", p.getIdentifiers().getIdentifiers().get(i));
}
}
eventWriter
.add(eventFactory.createEndElement("podl", "http://pdr.bbaw.de/namespaces/podl/", "identifiers"));
}
if (p.getConcurrences() != null)
{
startElement = eventFactory.createStartElement("podl", "http://pdr.bbaw.de/namespaces/podl/",
"concurrences");
eventWriter.add(startElement);
if (p.getConcurrences() != null && p.getConcurrences().getConcurrences() != null)
{
for (int i = 0; i < p.getConcurrences().getConcurrences().size(); i++)
{
createNode(eventWriter, "concurrence", p.getConcurrences().getConcurrences().get(i), p);
}
}
eventWriter.add(eventFactory
.createEndElement("podl", "http://pdr.bbaw.de/namespaces/podl/", "concurrences"));
}
eventWriter.add(eventFactory.createEndElement("podl", "http://pdr.bbaw.de/namespaces/podl/", "person"));
eventWriter.add(eventFactory.createEndDocument());
eventWriter.close();
String xml = bout.toString();
try {
xml = bout.toString("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
_log = new Status(IStatus.WARNING, Activator.PLUGIN_ID, "XMLProcessor output: " + xml);
iLogger.log(_log);
return xml;
}
/**
* @param r Reference
* @return xml string
* @throws XMLStreamException exc
* @see org.bbaw.pdr.ae.control.core.XMLProcessorInterface#writeToXML(org.bbaw.pdr.ae.model.ReferenceMods)
*/
@Override
public final String writeToXML(final ReferenceMods r) throws XMLStreamException
{
// Create a XMLOutputFactory
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
// Create XMLEventWriter
ByteArrayOutputStream bout = new ByteArrayOutputStream();
XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(bout, "UTF-8");
// Create a EventFactory
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create and write Start Tag
StartDocument startDocument = eventFactory.createStartDocument();
eventWriter.add(startDocument);
createNode(eventWriter, "mods", r, "mods", _modsUri);
eventWriter.add(eventFactory.createEndDocument());
eventWriter.close();
String xml = bout.toString();
try {
xml = bout.toString("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
_log = new Status(IStatus.WARNING, Activator.PLUGIN_ID, "XMLProcessor output: " + xml);
iLogger.log(_log);
return xml;
}
/**
* Write to xml.
* @param template the template
* @return the string
* @throws XMLStreamException the xML stream exception
*/
public String writeToXML(final ReferenceModsTemplate template) throws XMLStreamException
{
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
// Create XMLEventWriter
ByteArrayOutputStream bout = new ByteArrayOutputStream();
XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(bout, "UTF-8");
// Create a EventFactory
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// Create and write Start Tag
StartDocument startDocument = eventFactory.createStartDocument();
eventWriter.add(startDocument);
// Create config open tag
StartElement startElement = eventFactory.createStartElement("", "", "refTemplate");
eventWriter.add(startElement);
eventWriter.add(eventFactory.createAttribute("label", template.getLabel()));
eventWriter.add(eventFactory.createAttribute("genre", template.getValue()));
eventWriter.add(eventFactory.createAttribute("ignore", new Boolean(template.isIgnore()).toString()));
startElement = eventFactory.createStartElement("", "", "usage");
eventWriter.add(startElement);
if (template.getImageString() != null)
{
startElement = eventFactory.createStartElement("", "", "image");
eventWriter.add(startElement);
Characters characters = eventFactory.createCharacters(template.getImageString());
eventWriter.add(characters);
eventWriter.add(eventFactory.createEndElement("", "", "image"));
}
if (template.getDocumentation() != null)
{
createNode(eventWriter, "documentation", template.getDocumentation());
}
if (template.getRefTemplate() != null)
{
createNode(eventWriter, "mods", template.getRefTemplate(), "", "");
}
// Write the different nodes
eventWriter.add(eventFactory.createEndElement("", "", "refTemplate"));
eventWriter.add(eventFactory.createEndDocument());
eventWriter.close();
String xml = bout.toString();
try {
xml = bout.toString("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
_log = new Status(IStatus.WARNING, Activator.PLUGIN_ID, "XMLProcessor output: " + xml);
iLogger.log(_log);
return xml;
}
}