mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-05-14 22:58:36 +00:00
108 lines
4.5 KiB
Java
108 lines
4.5 KiB
Java
/*
|
|
* This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under LGPL (see lgpl-3.0.txt).
|
|
*
|
|
* The MIT License
|
|
* Copyright © 2014-2022 Ilkka Seppälä
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
package com.iluwatar.slob.serializers;
|
|
|
|
import com.iluwatar.slob.lob.Forest;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.IOException;
|
|
import java.io.StringWriter;
|
|
import java.sql.SQLException;
|
|
import javax.xml.parsers.DocumentBuilder;
|
|
import javax.xml.parsers.DocumentBuilderFactory;
|
|
import javax.xml.parsers.ParserConfigurationException;
|
|
import javax.xml.transform.OutputKeys;
|
|
import javax.xml.transform.Transformer;
|
|
import javax.xml.transform.TransformerException;
|
|
import javax.xml.transform.TransformerFactory;
|
|
import javax.xml.transform.dom.DOMSource;
|
|
import javax.xml.transform.stream.StreamResult;
|
|
import org.w3c.dom.Document;
|
|
import org.w3c.dom.Element;
|
|
import org.xml.sax.SAXException;
|
|
|
|
/**
|
|
* Creates a Serializer that uses Character based serialization and deserialization of objects graph
|
|
* to and from XML Representation.
|
|
*/
|
|
public class ClobSerializer extends LobSerializer {
|
|
|
|
public static final String TYPE_OF_DATA_FOR_DB = "TEXT";
|
|
|
|
public ClobSerializer() throws SQLException {
|
|
super(TYPE_OF_DATA_FOR_DB);
|
|
}
|
|
|
|
/**
|
|
* Converts the input node to its XML String Representation.
|
|
*
|
|
* @param node XML Node that is to be converted to string
|
|
* @return String representation of XML parsed from the Node
|
|
* @throws TransformerException If any issues occur in Transformation from Node to XML
|
|
*/
|
|
private static String elementToXmlString(Element node) throws TransformerException {
|
|
StringWriter sw = new StringWriter();
|
|
Transformer t = TransformerFactory.newDefaultInstance().newTransformer();
|
|
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
|
|
t.setOutputProperty(OutputKeys.INDENT, "yes");
|
|
t.transform(new DOMSource(node), new StreamResult(sw));
|
|
return sw.toString();
|
|
}
|
|
|
|
/**
|
|
* Serializes the input object graph to its XML Representation using DOM Elements.
|
|
*
|
|
* @param forest Object which is to be serialized
|
|
* @return Serialized object
|
|
* @throws ParserConfigurationException If any issues occur in parsing input object
|
|
* @throws TransformerException If any issues occur in Transformation from Node to XML
|
|
*/
|
|
@Override
|
|
public Object serialize(Forest forest) throws ParserConfigurationException, TransformerException {
|
|
Element xmlElement = forest.toXmlElement();
|
|
return elementToXmlString(xmlElement);
|
|
}
|
|
|
|
/**
|
|
* Deserializes the input XML string using DOM Parser and return its Object Graph Representation.
|
|
*
|
|
* @param toDeserialize Input Object to De-serialize
|
|
* @return Deserialized Object
|
|
* @throws ParserConfigurationException If any issues occur in parsing input object
|
|
* @throws IOException if any issues occur during reading object
|
|
* @throws SAXException If any issues occur in Transformation from Node to XML
|
|
*/
|
|
@Override
|
|
public Forest deSerialize(Object toDeserialize)
|
|
throws ParserConfigurationException, IOException, SAXException {
|
|
DocumentBuilder documentBuilder = DocumentBuilderFactory.newDefaultInstance()
|
|
.newDocumentBuilder();
|
|
var stream = new ByteArrayInputStream(toDeserialize.toString().getBytes());
|
|
Document parsed = documentBuilder.parse(stream);
|
|
Forest forest = new Forest();
|
|
forest.createObjectFromXml(parsed);
|
|
return forest;
|
|
}
|
|
}
|