/******************************************************************************* * Copyright 2016 * Ubiquitous Knowledge Processing (UKP) Lab * Technische Universität Darmstadt * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package de.tudarmstadt.ukp.integration.alignment.xml; import static org.apache.commons.io.IOUtils.closeQuietly; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; import de.tudarmstadt.ukp.integration.alignment.xml.model.Alignments; import de.tudarmstadt.ukp.integration.alignment.xml.model.XmlMeta; /** * Read relevant information sources from alignment.xml file */ public class AlignmentXmlReader implements Closeable { XMLEventReader xmlEventReader; Unmarshaller unmarshaller; InputStream fs; public AlignmentXmlReader(File inputLocation) throws IOException { fs = null; try { fs = new FileInputStream(inputLocation); XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); xmlEventReader = xmlInputFactory.createXMLEventReader(fs); JAXBContext context; context = JAXBContext.newInstance(XmlMeta.class, Alignments.class); unmarshaller = context.createUnmarshaller(); } catch (JAXBException | XMLStreamException e1) { throw new IOException(e1); } } public XmlMeta readMetaData() throws IOException { XmlMeta meta = null; try { XMLEvent e = xmlEventReader.peek(); while (e!=null && !isStartElement(e,"metadata")){ xmlEventReader.next(); e = xmlEventReader.peek(); } if (e!=null){ meta = unmarshaller.unmarshal(xmlEventReader, XmlMeta.class).getValue(); } } catch (XMLStreamException e1) { throw new IOException(e1); } catch (JAXBException e1) { throw new IOException(e1); } return meta; } public Alignments readAlignments() throws IOException { Alignments alignments = null; try { XMLEvent e = xmlEventReader.peek(); while (e!=null && !isStartElement(e,"alignments")){ xmlEventReader.next(); e = xmlEventReader.peek(); } if (e!=null){ alignments = unmarshaller.unmarshal(xmlEventReader, Alignments.class).getValue(); } } catch (XMLStreamException e1) { e1.printStackTrace(); throw new IOException(e1); } catch (JAXBException e1) { e1.printStackTrace(); throw new IOException(e1); } return alignments; } public static boolean isStartElement(XMLEvent aEvent, String aElement) { return aEvent.isStartElement() && ((StartElement) aEvent).getName().getLocalPart().equals(aElement); } @Override public void close() throws IOException { closeQuietly(fs); } }