/[schmitzm]/trunk/src/skrueger/AttributeMetadataImpl.java
ViewVC logotype

Diff of /trunk/src/skrueger/AttributeMetadataImpl.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/src/skrueger/AttributeMetaData.java revision 304 by alfonx, Wed Aug 19 12:03:12 2009 UTC trunk/src/skrueger/AttributeMetadataImpl.java revision 888 by alfonx, Thu Jun 3 10:48:43 2010 UTC
# Line 25  Line 25 
25   *   *
26   * Contributors:   * Contributors:
27   *     Martin O. J. Schmitz - initial API and implementation   *     Martin O. J. Schmitz - initial API and implementation
28   *     Stefan A. Krüger - additional utility classes   *     Stefan A. Tzeggai - additional utility classes
29   ******************************************************************************/   ******************************************************************************/
30  package skrueger;  package skrueger;
31    
32    import java.util.HashSet;
33    import java.util.List;
34    
35  import org.apache.log4j.Logger;  import org.apache.log4j.Logger;
36    import org.geotools.feature.NameImpl;
37    import org.opengis.feature.type.AttributeDescriptor;
38    import org.opengis.feature.type.Name;
39    
40    import skrueger.geotools.Copyable;
41  import skrueger.geotools.StyledLayerInterface;  import skrueger.geotools.StyledLayerInterface;
42    import skrueger.i8n.I8NUtil;
43  import skrueger.i8n.Translation;  import skrueger.i8n.Translation;
44    
45  /**  /**
46   * This class holds meta information about an attribute/column. This   * This class holds meta information about an attribute/column. This information
47   * information is used by {@link StyledLayerInterface}.   * is used by {@link StyledLayerInterface} and many others.<br/>
48   *   *
49   * @author <a href="mailto:[email protected]">Stefan Alfons Kr&uuml;ger</a>   * @author <a href="mailto:[email protected]">Stefan Alfons Tzeggai</a>
50   */   */
51  public class AttributeMetaData {  public class AttributeMetadataImpl extends AbstractAttributeMetadata implements
52                    QualityQuantizable {
53    
54          static private final Logger LOGGER = Logger          static private final Logger LOGGER = Logger
55                          .getLogger(AttributeMetaData.class);                          .getLogger(AttributeMetadataImpl.class);
56          protected Translation title = new Translation();  
57          protected Translation desc = new Translation();          /**
58          protected boolean visible = false;           * For numerical attributes the value can be transformed by VALUE*X+A when
59          protected String unit = "";           * presented on screen. TODO not implemented yet
60          protected int colIdx;           **/
61            protected Double functionA = 0.;
62          /**  
63           * Creates an {@link AttributeMetaData} object with the following information          /**
64           * @param colIdx The column index of this attribute in the underlying table/dbf/etc...           * For numerical attributes the value can be transformed by VALUE*X+A when
65           * @param visible Shall this attribute be displayed or hidden from the user?           * presented on screen. TODO not implemented yet
66           * @param title {@link Translation} for Name           **/
67           * @param desc {@link Translation} for an attribute description          protected Double functionX = 1.;
68           * @param unit {@link String} of the unit that the information is in  
69            /** Only used for {@link Copyable<AttributeMetaData>#copy()} **/
70            private AttributeMetadataImpl() {
71            }
72    
73            public AttributeMetadataImpl(final AttributeDescriptor attDesc,
74                            final int weight, final List<String> langs) {
75                    this( new NameImpl(attDesc.getName().getNamespaceURI(), attDesc.getName().getLocalPart()), langs);
76                    setWeight(weight);
77            }
78    
79            public AttributeMetadataImpl(final AttributeDescriptor attDesc,
80                            final List<String> langs) {
81                    this(new NameImpl(attDesc.getName().getNamespaceURI(), attDesc.getName().getLocalPart()), langs);
82            }
83    
84            /**
85             * Creates an {@link AttributeMetadataImpl} object with the following
86             * information
87             *
88             * @param colIdx
89             *            The column index of this attribute in the underlying
90             *            table/dbf/etc...
91             * @param visible
92             *            Shall this attribute be displayed or hidden from the user?
93             * @param title
94             *            {@link Translation} for Name
95             * @param desc
96             *            {@link Translation} for an attribute description
97             * @param unit
98             *            {@link String} of the unit that the information is in
99           */           */
100          public AttributeMetaData(final int colIdx, final Boolean visible,          public AttributeMetadataImpl(final Name name, final Boolean visible,
101                          final Translation title, final Translation desc, final String unit) {                          final Translation title, final Translation desc, final String unit) {
102            
103                  this.colIdx = colIdx;                  this.setName(name);
104                  this.title = title;                  this.title = title;
105                  this.desc = desc;                  this.desc = desc;
106                  if (colIdx == 0){                  this.visible = visible;
                         // The first attribute is THE_GEOM and shall never be visible!  
                         this.visible = false;  
                 }else  
                         this.visible = visible;  
107                  this.unit = unit;                  this.unit = unit;
108          }          }
109    
110          /**          /**
111           * Creates a new visible {@link AttributeMetaData} with default (no) values.             * Creates an {@link AttributeMetadataImpl} object with the following
112             * information
113             *
114             * @param colIdx
115             *            The column index of this attribute in the underlying
116             *            table/dbf/etc...
117             * @param visible
118             *            Shall this attribute be displayed or hidden from the user?
119             * @param unit
120             *            {@link String} of the unit that the information is in
121           */           */
122          public AttributeMetaData(final Integer col, final String defaultName) {          public AttributeMetadataImpl(final Name name, final Boolean visible,
123                  this(col, true, new Translation(defaultName), new Translation(), "");                          final String unit) {
124                    this.setName(name);
125                    this.visible = visible;
126                    this.unit = unit;
127          }          }
128    
129          public Boolean isVisible() {          /**
130                  return visible;           * Creates a new visible {@link AttributeMetadataImpl}
131             */
132            public AttributeMetadataImpl(final Name name, final List<String> langs) {
133                    this(name, true, new Translation(langs, name.getLocalPart()),
134                                    new Translation(), "");
135          }          }
136    
137          public void setVisible(final Boolean visible) {          /**
138                  this.visible = visible;           * Creates a new visible {@link AttributeMetadataImpl}
139             */
140            public AttributeMetadataImpl(final Name name, final String defaultTitle,
141                            final List<String> langs) {
142                    this(name, true, new Translation(langs, defaultTitle),
143                                    new Translation(), "");
144          }          }
145    
146          /** @return the index of this attribute in the underlying table/dbf **/          /**
147          public int getColIdx() {           * Creates an {@link AttributeMetadataImpl} object with the following
148                  return colIdx;           * information
149             *
150             * @param visible
151             *            Shall this attribute be displayed or hidden from the user?
152             * @param title
153             *            {@link Translation} for Name
154             * @param desc
155             *            {@link Translation} for an attribute description
156             * @param unit
157             *            {@link String} of the unit that the information is in
158             */
159            public AttributeMetadataImpl(final String localName, final Boolean visible,
160                            final Translation title, final Translation desc, final String unit) {
161                    this(new NameImpl(localName), true, title, desc, "");
162          }          }
163    
164          public Translation getTitle() {          /**
165                  return title;           * Creates a new visible {@link AttributeMetadataImpl} with default (no)
166             * values.
167             */
168            public AttributeMetadataImpl(final String localName,
169                            final List<String> langs) {
170                    this(localName, true, new Translation(langs, localName),
171                                    new Translation(), "");
172          }          }
173    
174          public void setTitle(final Translation title) {          /**
175                  this.title = title;           * Creates a new visible {@link AttributeMetadataImpl}
176             */
177            public AttributeMetadataImpl(final String localName,
178                            final String defaultTitle, final List<String> langs) {
179                    this(localName, true, new Translation(langs, defaultTitle),
180                                    new Translation(), "");
181          }          }
182    
183          public Translation getDesc() {          /**
184                  return desc;           * Orders the attributes according to their {@link #weight}. Heavier =>
185             * further down.
186             */
187            @Override
188            public int compareTo(final AttributeMetadataInterface atm2) {
189                    return new Integer(weight).compareTo(new Double(atm2.getWeight())
190                                    .intValue());
191          }          }
192    
193          public void setDesc(final Translation desc) {          /**
194                  this.desc = desc;           * @see Copyable inferface
195             */
196            @Override
197            public AttributeMetadataInterface copy() {
198                    return copyTo(new AttributeMetadataImpl());
199          }          }
200    
201          public String getUnit() {          /**
202                  return unit;           * @see Copyable inferface
203             */
204            @Override
205            public AttributeMetadataInterface copyTo(final AttributeMetadataInterface amd) {
206                    getTitle().copyTo(amd.getTitle());
207                    getDesc().copyTo(amd.getDesc());
208                    amd.setUnit(getUnit());
209                    amd.setVisible(isVisible());
210                    amd.setName(new NameImpl(getName().getNamespaceURI(), getName()
211                                    .getLocalPart()));
212    
213                    amd.setWeight(getWeight());
214    
215                    if (amd instanceof AttributeMetadataImpl) {
216                            AttributeMetadataImpl amd_ = (AttributeMetadataImpl) amd;
217    
218                            amd_.setFunctionX(getFunctionX());
219                            amd_.setFunctionA(getFunctionA());
220                            amd_.setNodataValues(getNodataValues());
221                    }
222    
223                    return amd;
224          }          }
225    
226          public void setUnit(final String unit) {          // only to be used by copyTo()
227                  this.unit = unit;          private void setNodataValues(HashSet<Object> nodataValues_) {
228                    nodataValues = nodataValues_;
229            }
230    
231            public Double getFunctionA() {
232                    return functionA;
233            }
234    
235            public Double getFunctionX() {
236                    return functionX;
237          }          }
238    
239            /**
240             * @return a number between 0 (bad) and 1 (good) that is calculated from the
241             *         amount of translation available. If this attribute is not
242             *         {@link #visible}, it will return 1.
243             */
244            @Override
245            public double getQuality(final List<String> languages) {
246    
247                    if (!isVisible())
248                            return 1.;
249    
250                    return (I8NUtil.qmTranslation(languages, getTitle()) * 2. + I8NUtil
251                                    .qmTranslation(languages, getDesc()) * 1.) / 3.;
252            }
253    
254            public void setFunctionA(final Double functionA) {
255                    this.functionA = functionA;
256            }
257    
258            public void setFunctionX(final Double functionX) {
259                    this.functionX = functionX;
260            }
261    
262    
263  }  }

Legend:
Removed from v.304  
changed lines
  Added in v.888

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26