001: /*
002: * $Id: RtfStylesheetList.java 2776 2007-05-23 20:01:40Z hallm $
003: * $Name$
004: *
005: * Copyright 2001, 2002, 2003, 2004 by Mark Hall
006: *
007: * The contents of this file are subject to the Mozilla Public License Version 1.1
008: * (the "License"); you may not use this file except in compliance with the License.
009: * You may obtain a copy of the License at http://www.mozilla.org/MPL/
010: *
011: * Software distributed under the License is distributed on an "AS IS" basis,
012: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
013: * for the specific language governing rights and limitations under the License.
014: *
015: * The Original Code is 'iText, a free JAVA-PDF library'.
016: *
017: * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
018: * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
019: * All Rights Reserved.
020: * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
021: * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
022: *
023: * Contributor(s): all the names of the contributors are added in the source code
024: * where applicable.
025: *
026: * Alternatively, the contents of this file may be used under the terms of the
027: * LGPL license (the ?GNU LIBRARY GENERAL PUBLIC LICENSE?), in which case the
028: * provisions of LGPL are applicable instead of those above. If you wish to
029: * allow use of your version of this file only under the terms of the LGPL
030: * License and not to allow others to use your version of this file under
031: * the MPL, indicate your decision by deleting the provisions above and
032: * replace them with the notice and other provisions required by the LGPL.
033: * If you do not delete the provisions above, a recipient may use your version
034: * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
035: *
036: * This library is free software; you can redistribute it and/or modify it
037: * under the terms of the MPL as stated above or under the terms of the GNU
038: * Library General Public License as published by the Free Software Foundation;
039: * either version 2 of the License, or any later version.
040: *
041: * This library is distributed in the hope that it will be useful, but WITHOUT
042: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
043: * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
044: * details.
045: *
046: * If you didn't download this code from the following link, you should check if
047: * you aren't using an obsolete version:
048: * http://www.lowagie.com/iText/
049: */
050:
051: package com.lowagie.text.rtf.style;
052:
053: import java.io.ByteArrayOutputStream;
054: import java.io.IOException;
055: import java.io.OutputStream;
056: import java.util.HashMap;
057: import java.util.Iterator;
058:
059: import com.lowagie.text.rtf.RtfBasicElement;
060: import com.lowagie.text.rtf.RtfElement;
061: import com.lowagie.text.rtf.RtfExtendedElement;
062: import com.lowagie.text.rtf.document.RtfDocument;
063:
064: /**
065: * The RtfStylesheetList stores the RtfParagraphStyles that are used in the document.
066: *
067: * @version $Id: RtfStylesheetList.java 2776 2007-05-23 20:01:40Z hallm $
068: * @author Mark Hall (mhall@edu.uni-klu.ac.at)
069: * @author Thomas Bickel (tmb99@inode.at)
070: */
071: public class RtfStylesheetList extends RtfElement implements
072: RtfExtendedElement {
073:
074: /**
075: * The HashMap containing the RtfParagraphStyles.
076: */
077: private HashMap styleMap = null;
078: /**
079: * Whether the default settings have been loaded.
080: */
081: private boolean defaultsLoaded = false;
082:
083: /**
084: * Constructs a new RtfStylesheetList for the RtfDocument.
085: *
086: * @param doc The RtfDocument this RtfStylesheetList belongs to.
087: */
088: public RtfStylesheetList(RtfDocument doc) {
089: super (doc);
090: this .styleMap = new HashMap();
091: }
092:
093: /**
094: * unused
095: * @deprecated replaced by {@link #writeContent(OutputStream)}
096: */
097: public byte[] write() {
098: return (new byte[0]);
099: }
100:
101: /**
102: * unused
103: */
104: public void writeContent(OutputStream out) throws IOException {
105: }
106:
107: /**
108: * Register a RtfParagraphStyle with this RtfStylesheetList.
109: *
110: * @param rtfParagraphStyle The RtfParagraphStyle to add.
111: */
112: public void registerParagraphStyle(
113: RtfParagraphStyle rtfParagraphStyle) {
114: RtfParagraphStyle tempStyle = new RtfParagraphStyle(
115: this .document, rtfParagraphStyle);
116: tempStyle.setStyleNumber(this .styleMap.size());
117: tempStyle.handleInheritance();
118: this .styleMap.put(tempStyle.getStyleName(), tempStyle);
119: }
120:
121: /**
122: * Registers all default styles. If styles with the given name have already been registered,
123: * then they are NOT overwritten.
124: */
125: private void registerDefaultStyles() {
126: defaultsLoaded = true;
127: if (!this .styleMap.containsKey(RtfParagraphStyle.STYLE_NORMAL
128: .getStyleName())) {
129: registerParagraphStyle(RtfParagraphStyle.STYLE_NORMAL);
130: }
131: if (!this .styleMap
132: .containsKey(RtfParagraphStyle.STYLE_HEADING_1
133: .getStyleName())) {
134: registerParagraphStyle(RtfParagraphStyle.STYLE_HEADING_1);
135: }
136: if (!this .styleMap
137: .containsKey(RtfParagraphStyle.STYLE_HEADING_2
138: .getStyleName())) {
139: registerParagraphStyle(RtfParagraphStyle.STYLE_HEADING_2);
140: }
141: if (!this .styleMap
142: .containsKey(RtfParagraphStyle.STYLE_HEADING_3
143: .getStyleName())) {
144: registerParagraphStyle(RtfParagraphStyle.STYLE_HEADING_3);
145: }
146: }
147:
148: /**
149: * Gets the RtfParagraphStyle with the given name. Makes sure that the defaults
150: * have been loaded.
151: *
152: * @param styleName The name of the RtfParagraphStyle to get.
153: * @return The RtfParagraphStyle with the given name or null.
154: */
155: public RtfParagraphStyle getRtfParagraphStyle(String styleName) {
156: if (!defaultsLoaded) {
157: registerDefaultStyles();
158: }
159: if (this .styleMap.containsKey(styleName)) {
160: return (RtfParagraphStyle) this .styleMap.get(styleName);
161: } else {
162: return null;
163: }
164: }
165:
166: /**
167: * Writes the definition of the stylesheet list.
168: * @deprecated replaced by {@link #writeDefinition(OutputStream)}
169: */
170: public byte[] writeDefinition() {
171: ByteArrayOutputStream result = new ByteArrayOutputStream();
172: try {
173: writeDefinition(result);
174: } catch (IOException ioe) {
175: ioe.printStackTrace();
176: }
177: return result.toByteArray();
178: }
179:
180: /**
181: * Writes the definition of the stylesheet list.
182: */
183: public void writeDefinition(final OutputStream result)
184: throws IOException {
185: result.write("{".getBytes());
186: result.write("\\stylesheet".getBytes());
187: result.write(RtfBasicElement.DELIMITER);
188: if (this .document.getDocumentSettings()
189: .isOutputDebugLineBreaks()) {
190: result.write("\n".getBytes());
191: }
192: Iterator it = this .styleMap.values().iterator();
193: while (it.hasNext()) {
194: RtfParagraphStyle rps = (RtfParagraphStyle) it.next();
195: //.result.write((rps).writeDefinition());
196: rps.writeDefinition(result);
197: }
198: result.write("}".getBytes());
199: if (this .document.getDocumentSettings()
200: .isOutputDebugLineBreaks()) {
201: result.write('\n');
202: }
203: }
204: }
|