/[schmitzm]/trunk/src/skrueger/geotools/AttributeMetadataMap.java
ViewVC logotype

Diff of /trunk/src/skrueger/geotools/AttributeMetadataMap.java

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

branches/1.0-gt2-2.6/src/skrueger/geotools/AttributeMetadataMap.java revision 533 by alfonx, Thu Nov 19 17:27:01 2009 UTC trunk/src/skrueger/geotools/AttributeMetadataMap.java revision 692 by alfonx, Thu Feb 11 19:00:00 2010 UTC
# Line 3  package skrueger.geotools; Line 3  package skrueger.geotools;
3  import java.util.ArrayList;  import java.util.ArrayList;
4  import java.util.Collections;  import java.util.Collections;
5  import java.util.List;  import java.util.List;
6    import java.util.Map;
7  import java.util.TreeMap;  import java.util.TreeMap;
8    
9  import org.apache.log4j.Logger;  import org.apache.log4j.Logger;
10  import org.geotools.feature.NameImpl;  import org.geotools.feature.NameImpl;
11  import org.opengis.feature.type.Name;  import org.opengis.feature.type.Name;
12    
 import cern.colt.Arrays;  
   
13  import skrueger.AttributeMetadata;  import skrueger.AttributeMetadata;
 import skrueger.i8n.I8NUtil;  
14  import skrueger.i8n.Translation;  import skrueger.i8n.Translation;
15    
16  /**  /**
17   * An extension of TreeMap, that is copyable in the sense of the {@link Copyable} interface   * The {@link AttributeMetadataMap} is a {@link Map} holding
18     * {@link AttributeMetadata} object for {@link Name} keys. It's an extension of
19     * a {@link TreeMap}. It's copyable in the sense of the {@link Copyable}
20     * interface.<br>
21     * The {@link #get(Name)} and {@link #get(String)} methods will never return
22     * <code>null</code>, but rather create a default {@link AttributeMetadata}
23     * on-the-fly.
24   */   */
25  public class AttributeMetadataMap extends TreeMap<Name, AttributeMetadata>  public class AttributeMetadataMap extends TreeMap<Name, AttributeMetadata>
26                  implements Copyable<AttributeMetadataMap> {                  implements Copyable<AttributeMetadataMap> {
27          static private final Logger LOGGER = Logger.getLogger(AttributeMetadataMap.class);          static private final Logger LOGGER = Logger
28          private List<String> langs;                          .getLogger(AttributeMetadataMap.class);
29            
30          public AttributeMetadataMap(List<String> defLanguages) {          /**
31                  langs = defLanguages;           * A list of default languages used when creating default
32          }           * {@link AttributeMetadata} on-the-fly. If not initialized by a
33                     * constructor, it will be {@link Translation#getActiveLang()} only.
34          @Deprecated           **/
35            private final List<String> langs;
36    
37            /**
38             @Deprecated Use another constructor. AttributeMetadataMap is based on {@link Translation} and
39             *             would like to know how many languages are supported, so the
40             *             needed defaults can be created.
41             */
42          public AttributeMetadataMap() {          public AttributeMetadataMap() {
43                  langs = new ArrayList<String>();                  langs = new ArrayList<String>();
44                  langs.add(Translation.getActiveLang());                  langs.add(Translation.getActiveLang());
45          }          }
           
           
         public AttributeMetadataMap(String[] strings) {  
                 langs = new ArrayList<String>(java.util.Arrays.asList(strings));  
         }  
46    
47          /**          /**
48           * @Deprecated use get(Name name) or get(String localName)           * Creates an {@link AttributeMetadataMap} and sets the list of default
49             * languages.
50           */           */
51          @Deprecated          public AttributeMetadataMap(final List<String> defLanguages) {
52          public AttributeMetadata get(Object key) {                  langs = defLanguages;
                 LOGGER.warn("PLEASE DONT USE get(Object) any MORE!");  
                 LOGGER.warn("PLEASE DONT USE get(Object) any MORE!");  
                 LOGGER.warn("PLEASE DONT USE get(Object) any MORE!");  
                 return super.get(key);  
53          }          }
54            
55          public AttributeMetadata get(Name name) {          /**
56                  final AttributeMetadata attributeMetadata = super.get(name);           * Creates an {@link AttributeMetadataMap} and sets the list of default
57                  if (attributeMetadata == null && name != null && !name.getLocalPart().trim().isEmpty()) {           * languages.
58                          put(name,new AttributeMetadata(name, langs));           */
59                          return super.get(name);          public AttributeMetadataMap(final String[] strings) {
60                  }                  langs = new ArrayList<String>(java.util.Arrays.asList(strings));
                 return attributeMetadata;  
61          }          }
62    
63          public AttributeMetadata get(String localName) {          /**
64                  return this.get(new NameImpl(localName));           * Returns a deep-copy. @see {@link Copyable} interface
65             */
66            @Override
67            public AttributeMetadataMap copy() {
68                    final AttributeMetadataMap copy = new AttributeMetadataMap(langs);
69                    return copyTo(copy);
70          }          }
71            
72            /**
73             * Copies all its values to another {@link AttributeMetadataMap}. @see
74             * {@link Copyable} interface.
75             */
76          @Override          @Override
77          public AttributeMetadataMap copyTo(AttributeMetadataMap amdMap) {          public AttributeMetadataMap copyTo(final AttributeMetadataMap amdMap) {
78                    
79                  amdMap.clear();                  amdMap.clear();
80                    
81                  for (Name key : keySet()) {                  for (final Name key : keySet()) {
82                          AttributeMetadata attributeMetaData = get(key);                          final AttributeMetadata attributeMetaData = get(key);
83                          amdMap.put(key, attributeMetaData.copy());                          amdMap.put(key, attributeMetaData.copy());
84                  }                  }
85                  return amdMap;                  return amdMap;
86          }          }
87    
88            /**
89             * Returns the {@link AttributeMetadata} for a given {@link Name}. Never
90             * returns <code>null</code>, but rather creates a default
91             * {@link AttributeMetadata} on the fly.
92             */
93            public AttributeMetadata get(final Name name) {
94                    final AttributeMetadata attributeMetadata = super.get(name);
95                    if (attributeMetadata == null && name != null
96                                    && !name.getLocalPart().trim().isEmpty()) {
97                            put(name, new AttributeMetadata(name, langs));
98                            return super.get(name);
99                    }
100                    return attributeMetadata;
101            }
102    
103            /**
104             * @Deprecated use get(Name name) or get(String localName)
105             */
106          @Override          @Override
107          public AttributeMetadataMap copy() {          @Deprecated
108                  AttributeMetadataMap copy = new AttributeMetadataMap(langs);          public AttributeMetadata get(final Object key) {
109                  return copyTo(copy);                  LOGGER.warn("PLEASE DONT USE get(Object) any MORE!");
110                    LOGGER.warn("PLEASE DONT USE get(Object) any MORE!");
111                    LOGGER.warn("PLEASE DONT USE get(Object) any MORE!");
112                    return super.get(key);
113          }          }
114    
115          public List<AttributeMetadata> sortedValues() {          /**
116                  ArrayList<AttributeMetadata> list = new ArrayList<AttributeMetadata>();           * Returns the {@link AttributeMetadata} for a given {@link Name}. Never
117                  list.addAll(values());           * returns <code>null</code>, but rather creates a default
118                  return list;           * {@link AttributeMetadata} on the fly.
119             */
120            public AttributeMetadata get(final String localName) {
121                    if (localName == null) return null;
122                    return this.get(new NameImpl(localName));
123            }
124    
125            public List<String> getLanguages() {
126                    return langs;
127          }          }
128    
129          /**          /**
130           * @return a number between 0 (bad) and 1 (good) that is calculated from the amount of translation available in the visible attributes           * @return a number between 0. (bad) and 1. (good) that is calculated from
131             *         the amount of translation available in the visible attributes
132           */           */
133          public double getQuality(List<String> languages) {          public double getQuality(final List<String> languages) {
134                  int allVisible = 0;                  int allVisible = 0;
135                  double colQmSum = 0.;                  double colQmSum = 0.;
136                  for (final AttributeMetadata oneCol : values()) {                  for (final AttributeMetadata oneCol : values()) {
137                            
138                          if (oneCol.isVisible()) {                          if (oneCol.isVisible()) {
139                                  allVisible++;                                  allVisible++;
140                                  colQmSum += oneCol.getQuality(languages);                                  colQmSum += oneCol.getQuality(languages);
# Line 107  public class AttributeMetadataMap extend Line 148  public class AttributeMetadataMap extend
148    
149          }          }
150    
151          public List<String> getLanguages() {  
152                  return langs;          /**
153             * @return List of {@link AttributeMetadata} objects ordered by their
154             *         weight. (heavier => further down)
155             */
156            public List<AttributeMetadata> sortedValues() {
157                    final ArrayList<AttributeMetadata> list = new ArrayList<AttributeMetadata>();
158                    list.addAll(values());
159                    Collections.sort(list);
160                    return list;
161            }
162    
163            /**
164             * @return List of only the visible {@link AttributeMetadata} objects
165             *         ordered by their weight. (heavier => further down)
166             */
167            public List<AttributeMetadata> sortedValuesVisibleOnly() {
168                    final ArrayList<AttributeMetadata> list = new ArrayList<AttributeMetadata>();
169                    for (final AttributeMetadata atm : sortedValues()) {
170                            if (atm.isVisible())
171                                    list.add(atm);
172                    }
173                    return list;
174          }          }
175  }  }

Legend:
Removed from v.533  
changed lines
  Added in v.692

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26