1 /*
2  * $Id$
3  *
4  * Copyright 2001, 2002, 2003, 2004 by Mark Hall
5  *
6  * The contents of this file are subject to the Mozilla Public License Version 1.1
7  * (the "License"); you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at http://www.mozilla.org/MPL/
9  *
10  * Software distributed under the License is distributed on an "AS IS" basis,
11  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12  * for the specific language governing rights and limitations under the License.
13  *
14  * The Original Code is 'iText, a free JAVA-PDF library'.
15  *
16  * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
17  * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
18  * All Rights Reserved.
19  * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
20  * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
21  *
22  * Contributor(s): all the names of the contributors are added in the source code
23  * where applicable.
24  *
25  * Alternatively, the contents of this file may be used under the terms of the
26  * LGPL license (the ?GNU LIBRARY GENERAL PUBLIC LICENSE?), in which case the
27  * provisions of LGPL are applicable instead of those above.  If you wish to
28  * allow use of your version of this file only under the terms of the LGPL
29  * License and not to allow others to use your version of this file under
30  * the MPL, indicate your decision by deleting the provisions above and
31  * replace them with the notice and other provisions required by the LGPL.
32  * If you do not delete the provisions above, a recipient may use your version
33  * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
34  *
35  * This library is free software; you can redistribute it and/or modify it
36  * under the terms of the MPL as stated above or under the terms of the GNU
37  * Library General Public License as published by the Free Software Foundation;
38  * either version 2 of the License, or any later version.
39  *
40  * This library is distributed in the hope that it will be useful, but WITHOUT
41  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
42  * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
43  * details.
44  *
45  * If you didn't download this code from the following link, you should check if
46  * you aren't using an obsolete version:
47  * http://www.lowagie.com/iText/
48  */
49 
50 package com.lowagie.text.rtf.style;
51 
52 import java.io.IOException;
53 import java.io.OutputStream;
54 import java.util.HashMap;
55 import java.util.Iterator;
56 
57 import com.lowagie.text.DocWriter;
58 import com.lowagie.text.rtf.RtfBasicElement;
59 import com.lowagie.text.rtf.RtfElement;
60 import com.lowagie.text.rtf.RtfExtendedElement;
61 import com.lowagie.text.rtf.document.RtfDocument;
62 
63 /**
64  * The RtfStylesheetList stores the RtfParagraphStyles that are used in the document.
65  *
66  * @version $Id$
67  * @author Mark Hall (Mark.Hall@mail.room3b.eu)
68  * @author Thomas Bickel (tmb99@inode.at)
69  */
70 public class RtfStylesheetList extends RtfElement implements RtfExtendedElement {
71 
72     /**
73      * The HashMap containing the RtfParagraphStyles.
74      */
75     private HashMap styleMap = null;
76     /**
77      * Whether the default settings have been loaded.
78      */
79     private boolean defaultsLoaded = false;
80 
81     /**
82      * Constructs a new RtfStylesheetList for the RtfDocument.
83      *
84      * @param doc The RtfDocument this RtfStylesheetList belongs to.
85      */
RtfStylesheetList(RtfDocument doc)86     public RtfStylesheetList(RtfDocument doc) {
87         super(doc);
88         this.styleMap = new HashMap();
89     }
90 
91     /**
92      * unused
93      */
writeContent(OutputStream out)94     public void writeContent(OutputStream out) throws IOException
95     {
96     }
97 
98     /**
99      * Register a RtfParagraphStyle with this RtfStylesheetList.
100      *
101      * @param rtfParagraphStyle The RtfParagraphStyle to add.
102      */
registerParagraphStyle(RtfParagraphStyle rtfParagraphStyle)103     public void registerParagraphStyle(RtfParagraphStyle rtfParagraphStyle) {
104         RtfParagraphStyle tempStyle = new RtfParagraphStyle(this.document, rtfParagraphStyle);
105         tempStyle.handleInheritance();
106         tempStyle.setStyleNumber(this.styleMap.size());
107         this.styleMap.put(tempStyle.getStyleName(), tempStyle);
108     }
109 
110     /**
111      * Registers all default styles. If styles with the given name have already been registered,
112      * then they are NOT overwritten.
113      */
registerDefaultStyles()114     private void registerDefaultStyles() {
115         defaultsLoaded = true;
116         if(!this.styleMap.containsKey(RtfParagraphStyle.STYLE_NORMAL.getStyleName())) {
117             registerParagraphStyle(RtfParagraphStyle.STYLE_NORMAL);
118         }
119         if(!this.styleMap.containsKey(RtfParagraphStyle.STYLE_HEADING_1.getStyleName())) {
120             registerParagraphStyle(RtfParagraphStyle.STYLE_HEADING_1);
121         }
122         if(!this.styleMap.containsKey(RtfParagraphStyle.STYLE_HEADING_2.getStyleName())) {
123             registerParagraphStyle(RtfParagraphStyle.STYLE_HEADING_2);
124         }
125         if(!this.styleMap.containsKey(RtfParagraphStyle.STYLE_HEADING_3.getStyleName())) {
126             registerParagraphStyle(RtfParagraphStyle.STYLE_HEADING_3);
127         }
128     }
129 
130     /**
131      * Gets the RtfParagraphStyle with the given name. Makes sure that the defaults
132      * have been loaded.
133      *
134      * @param styleName The name of the RtfParagraphStyle to get.
135      * @return The RtfParagraphStyle with the given name or null.
136      */
getRtfParagraphStyle(String styleName)137     public RtfParagraphStyle getRtfParagraphStyle(String styleName) {
138         if(!defaultsLoaded) {
139             registerDefaultStyles();
140         }
141         if(this.styleMap.containsKey(styleName)) {
142             return (RtfParagraphStyle) this.styleMap.get(styleName);
143         } else {
144             return null;
145         }
146     }
147 
148     /**
149      * Writes the definition of the stylesheet list.
150      */
writeDefinition(final OutputStream result)151     public void writeDefinition(final OutputStream result) throws IOException
152     {
153         result.write(DocWriter.getISOBytes("{"));
154         result.write(DocWriter.getISOBytes("\\stylesheet"));
155         result.write(RtfBasicElement.DELIMITER);
156         this.document.outputDebugLinebreak(result);
157         Iterator it = this.styleMap.values().iterator();
158         while(it.hasNext()) {
159         	RtfParagraphStyle rps = (RtfParagraphStyle)it.next();
160         	rps.writeDefinition(result);
161         }
162         result.write(DocWriter.getISOBytes("}"));
163         this.document.outputDebugLinebreak(result);
164     }
165 }
166