KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > fop > fo > pagination > LayoutMasterSet


1 /*
2  * $Id: LayoutMasterSet.java,v 1.10.2.6 2003/04/11 00:24:41 pietsch Exp $
3  * ============================================================================
4  * The Apache Software License, Version 1.1
5  * ============================================================================
6  *
7  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without modifica-
10  * tion, are permitted provided that the following conditions are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright notice,
16  * this list of conditions and the following disclaimer in the documentation
17  * and/or other materials provided with the distribution.
18  *
19  * 3. The end-user documentation included with the redistribution, if any, must
20  * include the following acknowledgment: "This product includes software
21  * developed by the Apache Software Foundation (http://www.apache.org/)."
22  * Alternately, this acknowledgment may appear in the software itself, if
23  * and wherever such third-party acknowledgments normally appear.
24  *
25  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
26  * endorse or promote products derived from this software without prior
27  * written permission. For written permission, please contact
28  * apache@apache.org.
29  *
30  * 5. Products derived from this software may not be called "Apache", nor may
31  * "Apache" appear in their name, without prior written permission of the
32  * Apache Software Foundation.
33  *
34  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
35  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
36  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
37  * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
38  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
39  * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
40  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
41  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
42  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
43  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
44  * ============================================================================
45  *
46  * This software consists of voluntary contributions made by many individuals
47  * on behalf of the Apache Software Foundation and was originally created by
48  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
49  * Software Foundation, please see <http://www.apache.org/>.
50  */

51 package org.apache.fop.fo.pagination;
52
53 // FOP
54
import org.apache.fop.fo.*;
55 import org.apache.fop.apps.FOPException;
56
57 // Java
58
import java.util.HashMap JavaDoc;
59 import java.util.Iterator JavaDoc;
60
61 /**
62  * Class modeling the fo:layout-master-set object.
63  *
64  * @see <a HREF="@XSLFO-STD@#fo_layout-master-set"
65        target="_xslfostd">@XSLFO-STDID@
66  * &para;6.4.6</a>
67  */

68 public class LayoutMasterSet extends FObj {
69
70     public static class Maker extends FObj.Maker {
71         public FObj make(FObj parent, PropertyList propertyList,
72                         String JavaDoc systemId, int line, int column)
73             throws FOPException {
74             return new LayoutMasterSet(parent, propertyList,
75                                        systemId, line, column);
76         }
77     }
78
79     public static FObj.Maker maker() {
80         return new LayoutMasterSet.Maker();
81     }
82
83     private HashMap JavaDoc simplePageMasters;
84     private HashMap JavaDoc pageSequenceMasters;
85     private HashMap JavaDoc allRegions;
86
87     private Root root;
88
89     protected LayoutMasterSet(FObj parent, PropertyList propertyList,
90                         String JavaDoc systemId, int line, int column)
91         throws FOPException {
92         super(parent, propertyList, systemId, line, column);
93
94         this.simplePageMasters = new HashMap JavaDoc();
95         this.pageSequenceMasters = new HashMap JavaDoc();
96
97         if (parent.getName().equals("fo:root")) {
98             this.root = (Root)parent;
99             root.setLayoutMasterSet(this);
100         } else {
101             throw new FOPException("fo:layout-master-set must be child of fo:root, not "
102                                    + parent.getName(), systemId, line, column);
103         }
104         allRegions = new HashMap JavaDoc();
105
106     }
107
108     public String JavaDoc getName() {
109         return "fo:layout-master-set";
110     }
111
112     protected void addSimplePageMaster(SimplePageMaster simplePageMaster)
113             throws FOPException {
114         // check against duplication of master-name
115
if (existsName(simplePageMaster.getMasterName()))
116             throw new FOPException("'master-name' ("
117                                    + simplePageMaster.getMasterName()
118                                    + ") must be unique "
119                                    + "across page-masters and page-sequence-masters", systemId, line, column);
120         this.simplePageMasters.put(simplePageMaster.getMasterName(),
121                                    simplePageMaster);
122     }
123
124     protected SimplePageMaster getSimplePageMaster(String JavaDoc masterName) {
125         return (SimplePageMaster)this.simplePageMasters.get(masterName);
126     }
127
128     protected void addPageSequenceMaster(String JavaDoc masterName, PageSequenceMaster pageSequenceMaster)
129             throws FOPException {
130         // check against duplication of master-name
131
if (existsName(masterName))
132             throw new FOPException("'master-name' (" + masterName
133                                    + ") must be unique "
134                                    + "across page-masters and page-sequence-masters", systemId, line, column);
135         this.pageSequenceMasters.put(masterName, pageSequenceMaster);
136     }
137
138     protected PageSequenceMaster getPageSequenceMaster(String JavaDoc masterName) {
139         return (PageSequenceMaster)this.pageSequenceMasters.get(masterName);
140     }
141
142     private boolean existsName(String JavaDoc masterName) {
143         if (simplePageMasters.containsKey(masterName)
144                 || pageSequenceMasters.containsKey(masterName))
145             return true;
146         else
147             return false;
148     }
149
150     protected void checkRegionNames() throws FOPException {
151         // Section 7.33.15 check to see that if a region-name is a
152
// duplicate, that it maps to the same region-class.
153
for (Iterator JavaDoc spm = simplePageMasters.values().iterator();
154                 spm.hasNext(); ) {
155             SimplePageMaster simplePageMaster =
156                 (SimplePageMaster)spm.next();
157             HashMap JavaDoc spmRegions = simplePageMaster.getRegions();
158             for (Iterator JavaDoc e = spmRegions.values().iterator();
159                     e.hasNext(); ) {
160                 Region region = (Region)e.next();
161                 if (allRegions.containsKey(region.getRegionName())) {
162                     String JavaDoc localClass =
163                         (String JavaDoc)allRegions.get(region.getRegionName());
164                     if (!localClass.equals(region.getRegionClass())) {
165                         throw new FOPException("Duplicate region-names ("
166                                                + region.getRegionName()
167                                                + ") must map "
168                                                + "to the same region-class ("
169                                                + localClass + "!="
170                                                + region.getRegionClass()
171                                                + ")", systemId, line, column);
172                     }
173                 }
174                 allRegions.put(region.getRegionName(),
175                                region.getRegionClass());
176             }
177         }
178     }
179
180     /**
181      * Checks whether or not a region name exists in this master set
182      * @return true when the region name specified has a region in this LayoutMasterSet
183      */

184     protected boolean regionNameExists(String JavaDoc regionName) {
185         for (Iterator JavaDoc i = simplePageMasters.values().iterator(); i.hasNext(); ) {
186             if (((SimplePageMaster)i.next()).regionNameExists(regionName)) {
187                 return true;
188             }
189         }
190         return false;
191     }
192
193 }
194
Popular Tags