package com.constellio.model.services.search;
import java.io.Reader;
import java.io.Writer;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;
import com.constellio.data.io.concurrent.data.DataWrapper;
import com.constellio.data.io.concurrent.data.ReaderWriterDataWrapper;
public class ElevationsView extends ReaderWriterDataWrapper<Elevations> {
private Elevations elevations;
@Override
protected void init(Reader reader) {
this.elevations = makeElevations(reader);
}
private Elevations makeElevations(Reader reader) {
try {
JAXBContext jc = JAXBContext.newInstance( Elevations.class );
Unmarshaller unmarshaller = jc.createUnmarshaller();
Elevations elevations = unmarshaller.unmarshal( new StreamSource(reader), Elevations.class).getValue();
return elevations;
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}
@Override
protected void toBytes(Writer writer) {
JAXBContext jc;
try {
jc = JAXBContext.newInstance(Elevations.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
JAXBElement<Elevations> jaxbElement = new JAXBElement<Elevations>(new QName("elevate"), Elevations.class, elevations);
marshaller.marshal(jaxbElement, writer);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}
@Override
public Elevations getData() {
return makeElevations(getReader(toBytes()));
}
@Override
public DataWrapper<Elevations> setData(Elevations data) {
elevations = data;
return this;
}
}