1*1a37d047SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*1a37d047SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*1a37d047SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*1a37d047SAndrew Rist  * distributed with this work for additional information
6*1a37d047SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*1a37d047SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*1a37d047SAndrew Rist  * "License"); you may not use this file except in compliance
9*1a37d047SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*1a37d047SAndrew Rist  *
11*1a37d047SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*1a37d047SAndrew Rist  *
13*1a37d047SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*1a37d047SAndrew Rist  * software distributed under the License is distributed on an
15*1a37d047SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*1a37d047SAndrew Rist  * KIND, either express or implied.  See the License for the
17*1a37d047SAndrew Rist  * specific language governing permissions and limitations
18*1a37d047SAndrew Rist  * under the License.
19*1a37d047SAndrew Rist  *
20*1a37d047SAndrew Rist  *************************************************************/
21*1a37d047SAndrew Rist 
22*1a37d047SAndrew Rist 
23cdf0e10cSrcweir package com.sun.star.report.pentaho.model;
24cdf0e10cSrcweir 
25cdf0e10cSrcweir import java.io.Serializable;
26cdf0e10cSrcweir 
27cdf0e10cSrcweir import java.util.ArrayList;
28cdf0e10cSrcweir import java.util.HashMap;
29cdf0e10cSrcweir import java.util.List;
30cdf0e10cSrcweir import java.util.Map;
31cdf0e10cSrcweir 
32cdf0e10cSrcweir import org.jfree.report.structure.Element;
33cdf0e10cSrcweir 
34cdf0e10cSrcweir 
35cdf0e10cSrcweir /**
36cdf0e10cSrcweir  * Holds one style type, either an automatic, common or master style. This is a
37cdf0e10cSrcweir  * marker container that defines the nature of the styles contained within this
38cdf0e10cSrcweir  * container. (Yeah, it is awkward, but that's how the document model describes
39cdf0e10cSrcweir  * it.)
40cdf0e10cSrcweir  *
41cdf0e10cSrcweir  * The style family can be one of paragraph, text, section, table, table-column,
42cdf0e10cSrcweir  * table-row, table-cell, table-page, chart, default, drawing-page, graphic,
43cdf0e10cSrcweir  * presentation, control and ruby.
44cdf0e10cSrcweir  *
45cdf0e10cSrcweir  * @author Thomas Morgner
46cdf0e10cSrcweir  * @since 07.03.2007
47cdf0e10cSrcweir  */
48cdf0e10cSrcweir public class OfficeStyles extends Element
49cdf0e10cSrcweir {
50cdf0e10cSrcweir 
51cdf0e10cSrcweir     public static class StyleKey implements Serializable
52cdf0e10cSrcweir     {
53cdf0e10cSrcweir 
54cdf0e10cSrcweir         private static final long serialVersionUID = 4931878927362887477L;
55cdf0e10cSrcweir         private final String family;
56cdf0e10cSrcweir         private final String name;
57cdf0e10cSrcweir 
StyleKey(final String family, final String name)58cdf0e10cSrcweir         public StyleKey(final String family, final String name)
59cdf0e10cSrcweir         {
60cdf0e10cSrcweir             if (family == null)
61cdf0e10cSrcweir             {
62cdf0e10cSrcweir                 throw new NullPointerException();
63cdf0e10cSrcweir             }
64cdf0e10cSrcweir             this.family = family;
65cdf0e10cSrcweir             this.name = name;
66cdf0e10cSrcweir         }
67cdf0e10cSrcweir 
getFamily()68cdf0e10cSrcweir         public String getFamily()
69cdf0e10cSrcweir         {
70cdf0e10cSrcweir             return family;
71cdf0e10cSrcweir         }
72cdf0e10cSrcweir 
getName()73cdf0e10cSrcweir         public String getName()
74cdf0e10cSrcweir         {
75cdf0e10cSrcweir             return name;
76cdf0e10cSrcweir         }
77cdf0e10cSrcweir 
equals(final Object obj)78cdf0e10cSrcweir         public boolean equals(final Object obj)
79cdf0e10cSrcweir         {
80cdf0e10cSrcweir             if (this != obj)
81cdf0e10cSrcweir             {
82cdf0e10cSrcweir                 if (obj == null || getClass() != obj.getClass())
83cdf0e10cSrcweir                 {
84cdf0e10cSrcweir                     return false;
85cdf0e10cSrcweir                 }
86cdf0e10cSrcweir 
87cdf0e10cSrcweir                 final StyleKey styleKey = (StyleKey) obj;
88cdf0e10cSrcweir 
89cdf0e10cSrcweir                 if (!family.equals(styleKey.family) || (name != null ? !name.equals(styleKey.name) : styleKey.name != null))
90cdf0e10cSrcweir                 {
91cdf0e10cSrcweir                     return false;
92cdf0e10cSrcweir                 }
93cdf0e10cSrcweir             }
94cdf0e10cSrcweir             return true;
95cdf0e10cSrcweir         }
96cdf0e10cSrcweir 
hashCode()97cdf0e10cSrcweir         public int hashCode()
98cdf0e10cSrcweir         {
99cdf0e10cSrcweir             int result = family.hashCode();
100cdf0e10cSrcweir             result = 31 * result + (name != null ? name.hashCode() : 0);
101cdf0e10cSrcweir             return result;
102cdf0e10cSrcweir         }
103cdf0e10cSrcweir     }
104cdf0e10cSrcweir     private final Map pageStyles;
105cdf0e10cSrcweir     private final Map dataStyles;
106cdf0e10cSrcweir     private final Map styles;
107cdf0e10cSrcweir     private final List otherChilds;
108cdf0e10cSrcweir 
OfficeStyles()109cdf0e10cSrcweir     public OfficeStyles()
110cdf0e10cSrcweir     {
111cdf0e10cSrcweir         this.styles = new HashMap();
112cdf0e10cSrcweir         this.dataStyles = new HashMap();
113cdf0e10cSrcweir         this.pageStyles = new HashMap();
114cdf0e10cSrcweir         this.otherChilds = new ArrayList();
115cdf0e10cSrcweir     }
116cdf0e10cSrcweir 
getStyle(final String family, final String name)117cdf0e10cSrcweir     public OfficeStyle getStyle(final String family, final String name)
118cdf0e10cSrcweir     {
119cdf0e10cSrcweir         return (OfficeStyle) styles.get(new StyleKey(family, name));
120cdf0e10cSrcweir     }
121cdf0e10cSrcweir 
addStyle(final OfficeStyle style)122cdf0e10cSrcweir     public void addStyle(final OfficeStyle style)
123cdf0e10cSrcweir     {
124cdf0e10cSrcweir         if (style == null)
125cdf0e10cSrcweir         {
126cdf0e10cSrcweir             throw new NullPointerException();
127cdf0e10cSrcweir         }
128cdf0e10cSrcweir         final String styleFamily = style.getStyleFamily();
129cdf0e10cSrcweir         if (styleFamily == null)
130cdf0e10cSrcweir         {
131cdf0e10cSrcweir             throw new NullPointerException();
132cdf0e10cSrcweir         }
133cdf0e10cSrcweir         if (style.getStyleName() == null)
134cdf0e10cSrcweir         {
135cdf0e10cSrcweir             throw new NullPointerException();
136cdf0e10cSrcweir         }
137cdf0e10cSrcweir         styles.put(new StyleKey(styleFamily, style.getStyleName()), style);
138cdf0e10cSrcweir     }
139cdf0e10cSrcweir 
addPageStyle(final PageLayout style)140cdf0e10cSrcweir     public void addPageStyle(final PageLayout style)
141cdf0e10cSrcweir     {
142cdf0e10cSrcweir         pageStyles.put(style.getStyleName(), style);
143cdf0e10cSrcweir     }
144cdf0e10cSrcweir 
getPageStyle(final String name)145cdf0e10cSrcweir     public PageLayout getPageStyle(final String name)
146cdf0e10cSrcweir     {
147cdf0e10cSrcweir         return (PageLayout) pageStyles.get(name);
148cdf0e10cSrcweir     }
149cdf0e10cSrcweir 
addDataStyle(final DataStyle style)150cdf0e10cSrcweir     public void addDataStyle(final DataStyle style)
151cdf0e10cSrcweir     {
152cdf0e10cSrcweir         dataStyles.put(style.getStyleName(), style);
153cdf0e10cSrcweir     }
154cdf0e10cSrcweir 
getDataStyle(final String name)155cdf0e10cSrcweir     public DataStyle getDataStyle(final String name)
156cdf0e10cSrcweir     {
157cdf0e10cSrcweir         return (DataStyle) dataStyles.get(name);
158cdf0e10cSrcweir     }
159cdf0e10cSrcweir 
addOtherNode(final Element node)160cdf0e10cSrcweir     public void addOtherNode(final Element node)
161cdf0e10cSrcweir     {
162cdf0e10cSrcweir         otherChilds.add(node);
163cdf0e10cSrcweir     }
164cdf0e10cSrcweir 
getAllDataStyles()165cdf0e10cSrcweir     public DataStyle[] getAllDataStyles()
166cdf0e10cSrcweir     {
167cdf0e10cSrcweir         return (DataStyle[]) dataStyles.values().toArray(new DataStyle[dataStyles.size()]);
168cdf0e10cSrcweir     }
169cdf0e10cSrcweir 
getAllPageStyles()170cdf0e10cSrcweir     public PageLayout[] getAllPageStyles()
171cdf0e10cSrcweir     {
172cdf0e10cSrcweir         return (PageLayout[]) pageStyles.values().toArray(new PageLayout[pageStyles.size()]);
173cdf0e10cSrcweir     }
174cdf0e10cSrcweir 
getAllStyles()175cdf0e10cSrcweir     public OfficeStyle[] getAllStyles()
176cdf0e10cSrcweir     {
177cdf0e10cSrcweir         return (OfficeStyle[]) styles.values().toArray(new OfficeStyle[styles.size()]);
178cdf0e10cSrcweir     }
179cdf0e10cSrcweir 
getOtherStyles()180cdf0e10cSrcweir     public Element[] getOtherStyles()
181cdf0e10cSrcweir     {
182cdf0e10cSrcweir         return (Element[]) otherChilds.toArray(new Element[otherChilds.size()]);
183cdf0e10cSrcweir     }
184cdf0e10cSrcweir 
containsStyle(final String family, final String name)185cdf0e10cSrcweir     public boolean containsStyle(final String family, final String name)
186cdf0e10cSrcweir     {
187cdf0e10cSrcweir         return styles.containsKey(new StyleKey(family, name));
188cdf0e10cSrcweir     }
189cdf0e10cSrcweir 
containsDataStyle(final String styleName)190cdf0e10cSrcweir     public boolean containsDataStyle(final String styleName)
191cdf0e10cSrcweir     {
192cdf0e10cSrcweir         return dataStyles.containsKey(styleName);
193cdf0e10cSrcweir     }
194cdf0e10cSrcweir }
195