package org.openiot.commons.osdspec.utils;
/**
* Copyright (c) 2011-2014, OpenIoT
*
* This file is part of OpenIoT.
*
* OpenIoT 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, version 3 of the License.
*
* OpenIoT 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 OpenIoT. If not, see <http://www.gnu.org/licenses/>.
*
* Contact: OpenIoT mailto: info@openiot.eu
*/
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import org.openiot.commons.osdspec.model.OSDSpec;
import org.openiot.commons.osdspec.model.ObjectFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A container utilities class
*
* @author Stavros Petris (spet) e-mail: spet@ait.edu.gr
*
*/
public class Utilities {
/**
* This class provides methods to deserialize OSDSpec Object
*
* @author Nikos Kefalakis (nkef) e-mail: nkef@ait.edu.gr *
*
*/
public static class Deserializer {
// logger
final static Logger logger = LoggerFactory.getLogger(Deserializer.class);
/**
* This method deserializes an OLCBProc specification from an input
* stream.
*
* @param inputStream
* to deserialize
* @return OLCBProc
* @throws Exception
* if deserialization fails
*/
public static OSDSpec deserializeOSDSpec(InputStream inputStream) throws Exception {
OSDSpec osdspec = null;
try {
String JAXB_CONTEXT = "org.openiot.commons.osdspec.model";
// initialize jaxb context and unmarshaller
JAXBContext context = JAXBContext.newInstance(OSDSpec.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
osdspec = (OSDSpec) unmarshaller.unmarshal(inputStream);
} catch (JAXBException e) {
logger.error("Error deserializing OSDSpec", e);
}
return osdspec;
}
/**
* This method deserializes an APDL Spec from a file.
*
* @param pathName
* of the file containing the APDL Spec
* @return OLCBProc object
* @throws FileNotFoundException
* if the file could not be found
* @throws Exception
* if deserialization fails
*/
public static OSDSpec deserializeOSDSpecFile(String pathName) throws FileNotFoundException, Exception {
FileInputStream inputStream = new FileInputStream(pathName);
return deserializeOSDSpec(inputStream);
}
}// class
/**
* @author Nikos Kefalakis (nkef) e-mail: nkef@ait.edu.gr
*
*/
public static class Serializer {
// logger
final static Logger logger = LoggerFactory.getLogger(Serializer.class);
/**
* This method serializes an OLCBProc Object to an xml and writes it
* into a file.
*
* @param spec
* the OLCBProc to be written into a file
* @param pathName
* the file where to store
* @throws IOException
* whenever an io problem occurs
*/
public static void serializeOLCBProc(OSDSpec osdSpec, Writer writer) throws IOException {
ObjectFactory objectFactory = new ObjectFactory();
JAXBContext context;
try {
context = JAXBContext.newInstance(OSDSpec.class);
// JAXBElement<OSDSpec> item =
// objectFactory.createOLCBProc(osdSpec);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
// marshaller.marshal(item, writer);
} catch (JAXBException e) {
logger.error("error serializing OSDSpec", e);
}
}
}// class
}// class