001         package com.croftsoft.core.beans;
002         
003         import java.beans.*;
004         import java.io.*;
005    
006         import com.croftsoft.core.io.Encoder;
007         import com.croftsoft.core.io.Parser;
008    
009         /*********************************************************************
010         * Encodes and decodes objects using XMLEncoder and XMLDecoder.
011         *
012         * @see
013         *   java.beans.XMLEncoder
014         * @see
015         *   java.beans.XMLDecoder
016         *
017         * @version
018         *   $Id: XmlBeanCoder.java,v 1.2 2006/01/24 22:20:29 croft Exp $
019         * @since
020         *   2003-04-07
021         * @author
022         *   <a href="http://www.CroftSoft.com/">David Wallace Croft</a>
023         *********************************************************************/
024    
025         public final class  XmlBeanCoder
026           implements Encoder, Parser
027         //////////////////////////////////////////////////////////////////////
028         //////////////////////////////////////////////////////////////////////
029         {
030    
031         public static final XmlBeanCoder  INSTANCE = new XmlBeanCoder ( );
032    
033         //////////////////////////////////////////////////////////////////////
034         // static methods
035         //////////////////////////////////////////////////////////////////////
036    
037         public static Object  decodeFromXml ( byte [ ]  bytes )
038         //////////////////////////////////////////////////////////////////////
039         {
040           return decodeFromXml ( new ByteArrayInputStream ( bytes ) );
041         }
042    
043         public static Object  decodeFromXml ( InputStream  inputStream )
044         //////////////////////////////////////////////////////////////////////
045         {
046           XMLDecoder  xmlDecoder = new XMLDecoder ( inputStream );
047    
048           try
049           {
050             return xmlDecoder.readObject ( );
051           }
052           finally
053           {
054             xmlDecoder.close ( );
055           }
056         }
057    
058         public static void  encodeAsXml (
059           Object        o,
060           OutputStream  outputStream )
061         //////////////////////////////////////////////////////////////////////
062         {
063           XMLEncoder  xmlEncoder = new XMLEncoder ( outputStream );
064    
065           try
066           {
067             xmlEncoder.writeObject ( o );
068           }
069           finally
070           {
071             xmlEncoder.close ( );
072           }
073         }
074    
075         public static byte [ ]  encodeAsXml ( Object o )
076         //////////////////////////////////////////////////////////////////////
077         {
078           ByteArrayOutputStream  byteArrayOutputStream
079             = new ByteArrayOutputStream ( );
080    
081           encodeAsXml ( o, byteArrayOutputStream );
082    
083           return byteArrayOutputStream.toByteArray ( );
084         }
085    
086         public static Object  loadFromXmlFile ( File  file )
087           throws IOException
088         //////////////////////////////////////////////////////////////////////
089         {
090           return decodeFromXml (
091             new BufferedInputStream ( new FileInputStream ( file ) ) );
092         }
093    
094         public static Object  loadFromXmlFile ( String  filename )
095           throws IOException
096         //////////////////////////////////////////////////////////////////////
097         {
098           return decodeFromXml (
099             new BufferedInputStream ( new FileInputStream ( filename ) ) );
100         }
101    
102         public static void  saveToXmlFile (
103           Object  object,
104           File    file )
105           throws IOException
106         //////////////////////////////////////////////////////////////////////
107         {
108           encodeAsXml (
109             object,
110             new BufferedOutputStream ( new FileOutputStream ( file ) ) );
111         }
112    
113         public static void  saveToXmlFile (
114           Object  object,
115           String  filename )
116           throws IOException
117         //////////////////////////////////////////////////////////////////////
118         {
119           encodeAsXml (
120             object,
121             new BufferedOutputStream ( new FileOutputStream ( filename ) ) );
122         }
123    
124         //////////////////////////////////////////////////////////////////////
125         // interface Encoder and Parser methods
126         //////////////////////////////////////////////////////////////////////
127    
128         public byte [ ]  encode ( Object  object )
129           throws IOException
130         //////////////////////////////////////////////////////////////////////
131         {
132           return encodeAsXml ( object );
133         }
134    
135         public Object  parse (
136           InputStream  inputStream,
137           int          contentLength )
138           throws IOException
139         //////////////////////////////////////////////////////////////////////
140         {
141           return decodeFromXml ( inputStream );
142         }
143    
144         //////////////////////////////////////////////////////////////////////
145         // private constructor method
146         //////////////////////////////////////////////////////////////////////
147    
148         private  XmlBeanCoder ( ) { }
149    
150         //////////////////////////////////////////////////////////////////////
151         //////////////////////////////////////////////////////////////////////
152         }