KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > util > XMLEncoder


1 /* ====================================================================
2  *
3  * The ObjectStyle Group Software License, version 1.1
4  * ObjectStyle Group - http://objectstyle.org/
5  *
6  * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
7  * of the software. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if any,
22  * must include the following acknowlegement:
23  * "This product includes software developed by independent contributors
24  * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
29  * or promote products derived from this software without prior written
30  * permission. For written permission, email
31  * "andrus at objectstyle dot org".
32  *
33  * 5. Products derived from this software may not be called "ObjectStyle"
34  * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
35  * names without prior written permission.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals and hosted on ObjectStyle Group web site. For more
53  * information on the ObjectStyle Group, please see
54  * <http://objectstyle.org/>.
55  */

56 package org.objectstyle.cayenne.util;
57
58 import java.io.PrintWriter JavaDoc;
59 import java.util.Collection JavaDoc;
60 import java.util.Iterator JavaDoc;
61 import java.util.Map JavaDoc;
62
63 /**
64  * A helper class to encode objects to XML.
65  *
66  * @since 1.1
67  * @author Andrei Adamchik
68  */

69 public class XMLEncoder {
70     protected String JavaDoc indent;
71     protected PrintWriter JavaDoc out;
72
73     protected boolean indentLine;
74     protected int indentTimes;
75
76     public XMLEncoder(PrintWriter JavaDoc out) {
77         this.out = out;
78     }
79
80     public XMLEncoder(PrintWriter JavaDoc out, String JavaDoc indent) {
81         this.indent = indent;
82         this.out = out;
83     }
84
85     public PrintWriter JavaDoc getPrintWriter() {
86         return out;
87     }
88
89     public void indent(int i) {
90         indentTimes += i;
91         if (indentTimes < 0) {
92             indentTimes = 0;
93         }
94     }
95
96     /**
97      * Utility method that prints all map values,
98      * assuming they are XMLSerializable objects.
99      */

100     public void print(Map JavaDoc map) {
101         Iterator JavaDoc it = map.entrySet().iterator();
102         while (it.hasNext()) {
103             Map.Entry JavaDoc entry = (Map.Entry JavaDoc) it.next();
104             ((XMLSerializable) entry.getValue()).encodeAsXML(this);
105         }
106     }
107
108     /**
109      * Utility method that prints all map values,
110      * assuming they are XMLSerializable objects.
111      */

112     public void print(Collection JavaDoc c) {
113         Iterator JavaDoc it = c.iterator();
114         while (it.hasNext()) {
115             ((XMLSerializable) it.next()).encodeAsXML(this);
116         }
117     }
118
119     /**
120      * Prints a common XML element - property with name and value.
121      */

122     public void printProperty(String JavaDoc name, String JavaDoc value) {
123         printIndent();
124         out.print("<property name=\"");
125         out.print(name);
126         out.print("\" value=\"");
127         out.print(value);
128         out.println("\"/>");
129         indentLine = true;
130     }
131
132     /**
133      * Prints a common XML element - property with name and value.
134      */

135     public void printProperty(String JavaDoc name, boolean b) {
136         printProperty(name, String.valueOf(b));
137     }
138
139     /**
140      * Prints a common XML element - property with name and value.
141      */

142     public void printProperty(String JavaDoc name, int i) {
143         printProperty(name, String.valueOf(i));
144     }
145
146     public void print(String JavaDoc text) {
147         printIndent();
148         out.print(text);
149     }
150
151     public void print(char c) {
152         printIndent();
153         out.print(c);
154     }
155
156     public void print(boolean b) {
157         printIndent();
158         out.print(b);
159     }
160
161     public void print(int i) {
162         printIndent();
163         out.print(i);
164     }
165
166     public void println(String JavaDoc text) {
167         printIndent();
168         out.println(text);
169         indentLine = true;
170     }
171
172     public void println(char c) {
173         printIndent();
174         out.println(c);
175         indentLine = true;
176     }
177
178     private void printIndent() {
179         if (indentLine) {
180             indentLine = false;
181
182             if (indentTimes > 0 && indent != null) {
183                 for (int i = 0; i < indentTimes; i++) {
184                     out.print(indent);
185                 }
186             }
187         }
188     }
189 }
190
Popular Tags