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.layoutprocessor;
24cdf0e10cSrcweir 
25cdf0e10cSrcweir import com.sun.star.report.pentaho.model.FormattedTextElement;
26cdf0e10cSrcweir 
27cdf0e10cSrcweir import java.util.ArrayList;
28cdf0e10cSrcweir import java.util.List;
29cdf0e10cSrcweir 
30cdf0e10cSrcweir 
31cdf0e10cSrcweir /**
32cdf0e10cSrcweir  * A variables collection is used to collect all FormattedTextElement objects
33cdf0e10cSrcweir  * of a repeated header or footer. Later, for each of these elements a variable
34cdf0e10cSrcweir  * setter is inserted into a hidden (in fact just very small) paragraph. These
35cdf0e10cSrcweir  * variables can later be read using the 'variable-get' construct.
36cdf0e10cSrcweir  *
37cdf0e10cSrcweir  * From the idea, this is equal to the 'strings' declaration of CSS3, although
38cdf0e10cSrcweir  * this code is explicit instead of declarative.
39cdf0e10cSrcweir  *
40cdf0e10cSrcweir  * @author Thomas Morgner
41cdf0e10cSrcweir  * @since 22.03.2007
42cdf0e10cSrcweir  */
43cdf0e10cSrcweir public class VariablesCollection
44cdf0e10cSrcweir {
45cdf0e10cSrcweir 
46cdf0e10cSrcweir     private VariablesCollection parent;
47cdf0e10cSrcweir     private String namePrefix;
48cdf0e10cSrcweir     private List variables;
49cdf0e10cSrcweir 
VariablesCollection(final String namePrefix)50cdf0e10cSrcweir     public VariablesCollection(final String namePrefix)
51cdf0e10cSrcweir     {
52cdf0e10cSrcweir         this(namePrefix, null);
53cdf0e10cSrcweir     }
54cdf0e10cSrcweir 
VariablesCollection(final String namePrefix, final VariablesCollection parent)55cdf0e10cSrcweir     public VariablesCollection(final String namePrefix, final VariablesCollection parent)
56cdf0e10cSrcweir     {
57cdf0e10cSrcweir         if (namePrefix == null)
58cdf0e10cSrcweir         {
59cdf0e10cSrcweir             throw new NullPointerException("NamePrefix cannot be null");
60cdf0e10cSrcweir         }
61cdf0e10cSrcweir 
62cdf0e10cSrcweir         this.namePrefix = namePrefix;
63cdf0e10cSrcweir         this.parent = parent;
64cdf0e10cSrcweir         this.variables = new ArrayList();
65cdf0e10cSrcweir     }
66cdf0e10cSrcweir 
getParent()67cdf0e10cSrcweir     public VariablesCollection getParent()
68cdf0e10cSrcweir     {
69cdf0e10cSrcweir         return parent;
70cdf0e10cSrcweir     }
71cdf0e10cSrcweir 
getNamePrefix()72cdf0e10cSrcweir     public String getNamePrefix()
73cdf0e10cSrcweir     {
74cdf0e10cSrcweir         return namePrefix;
75cdf0e10cSrcweir     }
76cdf0e10cSrcweir 
addVariable(final FormattedTextElement element)77cdf0e10cSrcweir     public String addVariable(final FormattedTextElement element)
78cdf0e10cSrcweir     {
79cdf0e10cSrcweir         variables.add(element);
80cdf0e10cSrcweir         final int size = variables.size();
81cdf0e10cSrcweir         return namePrefix + size;
82cdf0e10cSrcweir     }
83cdf0e10cSrcweir 
getVariables()84cdf0e10cSrcweir     public FormattedTextElement[] getVariables()
85cdf0e10cSrcweir     {
86cdf0e10cSrcweir         return (FormattedTextElement[]) variables.toArray(new FormattedTextElement[variables.size()]);
87cdf0e10cSrcweir     }
88cdf0e10cSrcweir 
getVariablesCount()89cdf0e10cSrcweir     public int getVariablesCount()
90cdf0e10cSrcweir     {
91cdf0e10cSrcweir         return variables.size();
92cdf0e10cSrcweir     }
93cdf0e10cSrcweir }
94