001package com.hammurapi.convert;
002
003import java.io.ByteArrayInputStream;
004import java.io.ByteArrayOutputStream;
005import java.io.File;
006import java.io.FileInputStream;
007import java.io.IOException;
008import java.io.InputStream;
009import java.io.Reader;
010import java.io.StringReader;
011import java.io.StringWriter;
012
013import javax.xml.parsers.DocumentBuilder;
014import javax.xml.parsers.DocumentBuilderFactory;
015import javax.xml.stream.XMLEventReader;
016import javax.xml.stream.XMLInputFactory;
017import javax.xml.transform.OutputKeys;
018import javax.xml.transform.Transformer;
019import javax.xml.transform.TransformerFactory;
020import javax.xml.transform.dom.DOMSource;
021import javax.xml.transform.stream.StreamResult;
022
023import org.w3c.dom.Document;
024import org.w3c.dom.Node;
025
026import com.hammurapi.common.Pumper;
027
028/**
029 * Intuitive conversions.
030 * @author Pavel
031 *
032 */
033public class ReflectiveAtomicConvertersBundle extends AbstractReflectiveAtomicConvertersBundle {
034
035        @ConverterMethod
036        public InputStream byteArrayToInputStream(byte[] ba) {
037                return new ByteArrayInputStream(ba);
038        }
039        
040        @ConverterMethod
041        public byte[] inputStreamToByteArray(InputStream in) throws IOException {
042                ByteArrayOutputStream baos = new ByteArrayOutputStream();
043                Pumper.pump(in, baos, true);
044                return baos.toByteArray();
045        }
046        
047        @ConverterMethod
048        public byte[] fileToByteArray(File in) throws IOException {
049                ByteArrayOutputStream baos = new ByteArrayOutputStream();
050                Pumper.pump(new FileInputStream(in), baos, true);
051                return baos.toByteArray();
052        }
053        
054        @ConverterMethod
055        public Document parseXml(InputStream in) throws Exception {
056                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
057                DocumentBuilder builder = dbf.newDocumentBuilder();
058                return builder.parse(in);
059        }
060        
061        @ConverterMethod
062        public Document parseXml(File in) throws Exception {
063                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
064                DocumentBuilder builder = dbf.newDocumentBuilder();
065                return builder.parse(in);
066        }
067        
068        @ConverterMethod
069        public Document parseXml(byte[] in) throws Exception {
070                return parseXml(new ByteArrayInputStream(in));
071        }
072        
073        
074        @ConverterMethod
075        public Document parseXml(String str) throws Exception {
076                return parseXml(str.getBytes());
077        }
078        
079        @ConverterMethod
080        public String serialize(Node node) throws Exception {
081                DOMSource src = new DOMSource(node);
082                StringWriter sw = new StringWriter();
083                StreamResult result = new StreamResult(sw);
084                TransformerFactory tf = TransformerFactory.newInstance();
085                Transformer serializer = tf.newTransformer();
086                serializer.setOutputProperty(OutputKeys.INDENT,"yes");
087                serializer.transform(src, result);
088                sw.close();
089                return sw.toString();
090        }
091        
092        @ConverterMethod
093        public XMLEventReader inputStreamToXmlEventReader(InputStream in) throws Exception {
094                XMLInputFactory xif = XMLInputFactory.newInstance();
095                return xif.createXMLEventReader(in);
096        }
097
098        @ConverterMethod
099        public XMLEventReader readerToXmlEventReader(Reader in) throws Exception {
100                XMLInputFactory xif = XMLInputFactory.newInstance();
101                return xif.createXMLEventReader(in);
102        }
103        
104        @ConverterMethod
105        public XMLEventReader byteArrayToXmlEventReader(byte[] in) throws Exception {
106                XMLInputFactory xif = XMLInputFactory.newInstance();
107                return xif.createXMLEventReader(new ByteArrayInputStream(in));
108        }
109                
110        @ConverterMethod
111        public XMLEventReader fileToXmlEventReader(File in) throws Exception {
112                XMLInputFactory xif = XMLInputFactory.newInstance();
113                return xif.createXMLEventReader(new FileInputStream(in));
114        }
115        
116        @ConverterMethod
117        public XMLEventReader stringToXmlEventReader(String in) throws Exception {
118                XMLInputFactory xif = XMLInputFactory.newInstance();
119                return xif.createXMLEventReader(new StringReader(in));
120        }
121        
122}