/[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/2.0-RC1/src/skrueger/geotools/AttributeMetadataMap.java revision 604 by alfonx, Wed Dec 9 14:15:53 2009 UTC trunk/src/skrueger/geotools/AttributeMetadataMap.java revision 1047 by mojays, Wed Sep 22 12:11:15 2010 UTC
# Line 10  import org.apache.log4j.Logger; Line 10  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    
13  import skrueger.AttributeMetadata;  import skrueger.AttributeMetadataInterface;
14    import skrueger.QualityQuantizable;
15  import skrueger.i8n.Translation;  import skrueger.i8n.Translation;
16    
17  /**  /**
18   * The {@link AttributeMetadataMap} is a {@link Map} holding   * The {@link AttributeMetadataMap} is a {@link Map} holding {@link AMD_IMPL}
19   * {@link AttributeMetadata} object for {@link Name} keys. It's an extension of   * object for {@link Name} keys. It's an extension of a {@link TreeMap}. It's
20   * a {@link TreeMap}. It's copyable in the sense of the {@link Copyable}   * copyable in the sense of the {@link Copyable} interface.<br>
  * interface.<br>  
21   * The {@link #get(Name)} and {@link #get(String)} methods will never return   * The {@link #get(Name)} and {@link #get(String)} methods will never return
22   * <code>null</code>, but rather create a default {@link AttributeMetadata}   * <code>null</code>, but rather create a default {@link AMD_IMPL} on-the-fly.
  * on-the-fly.  
23   */   */
24  public class AttributeMetadataMap extends TreeMap<Name, AttributeMetadata>  public abstract class AttributeMetadataMap<AMD_IMPL extends AttributeMetadataInterface>
25                  implements Copyable<AttributeMetadataMap> {                  extends TreeMap<Name, AMD_IMPL> implements
26          static private final Logger LOGGER = Logger                  Copyable<AttributeMetadataMap>, QualityQuantizable {
27    
28            private static final long serialVersionUID = 4936966916517396063L;
29    
30            protected static final Logger LOGGER = Logger
31                          .getLogger(AttributeMetadataMap.class);                          .getLogger(AttributeMetadataMap.class);
32    
33          /**          /**
34           * A list of default languages used when creating default           * A list of default languages used when creating default {@link AMD_IMPL}
35           * {@link AttributeMetadata} on-the-fly. If not initialized by a           * on-the-fly. If not initialized by a constructor, it will be
36           * constructor, it will be {@link Translation#getActiveLang()} only.           * {@link Translation#getActiveLang()} only.
37           **/           **/
38          private final List<String> langs;          protected final List<String> langs;
39    
40          @Deprecated          /**
41             * AttributeMetadataMap is based on {@link Translation} and would like to
42             * know how many languages are supported, so the needed defaults can be
43             * created.<br/>
44             * If you use this constructor, it will be initialized to only use one
45             * language, which is {@link Translation.getActiveLang()}.
46             */
47          public AttributeMetadataMap() {          public AttributeMetadataMap() {
48                  langs = new ArrayList<String>();                  langs = new ArrayList<String>();
49                  langs.add(Translation.getActiveLang());                  langs.add(Translation.getActiveLang());
# Line 52  public class AttributeMetadataMap extend Line 61  public class AttributeMetadataMap extend
61           * Creates an {@link AttributeMetadataMap} and sets the list of default           * Creates an {@link AttributeMetadataMap} and sets the list of default
62           * languages.           * languages.
63           */           */
64          public AttributeMetadataMap(final String[] strings) {          public AttributeMetadataMap(final String[] langs) {
65                  langs = new ArrayList<String>(java.util.Arrays.asList(strings));                  this.langs = new ArrayList<String>(java.util.Arrays.asList(langs));
         }  
   
         /**  
          * Returns a deep-copy. @see {@link Copyable} interface  
          */  
         @Override  
         public AttributeMetadataMap copy() {  
                 final AttributeMetadataMap copy = new AttributeMetadataMap(langs);  
                 return copyTo(copy);  
66          }          }
67    
68          /**          /**
# Line 70  public class AttributeMetadataMap extend Line 70  public class AttributeMetadataMap extend
70           * {@link Copyable} interface.           * {@link Copyable} interface.
71           */           */
72          @Override          @Override
73          public AttributeMetadataMap copyTo(final AttributeMetadataMap amdMap) {          public AttributeMetadataMap<? extends AttributeMetadataInterface> copyTo(AttributeMetadataMap amdMap) {
74    
75                  amdMap.clear();                  amdMap.clear();
76    
77                  for (final Name key : keySet()) {                  for (final Name key : keySet()) {
78                          final AttributeMetadata attributeMetaData = get(key);                          final AMD_IMPL AMD_IMPL = get(key);
79                          amdMap.put(key, attributeMetaData.copy());                          amdMap.put(key, AMD_IMPL.copy());
80                  }                  }
81                  return amdMap;                  return amdMap;
82          }          }
83    
84          /**          /**
85           * Returns the {@link AttributeMetadata} for a given {@link Name}. Never           * Returns the {@link AMD_IMPL} for a given {@link NameImpl}. May return
86           * returns <code>null</code>, but rather creates a default           * <code>null</code> or create a default {@link AttributeMetadataInterface} depending
87           * {@link AttributeMetadata} on the fly.           * on whether this method is overwritten. fly.
88           */           */
89          public AttributeMetadata get(final Name name) {          public AMD_IMPL get(final Name name) {
90                  final AttributeMetadata attributeMetadata = super.get(name);                  return super.get(name);
                 if (attributeMetadata == null && name != null  
                                 && !name.getLocalPart().trim().isEmpty()) {  
                         put(name, new AttributeMetadata(name, langs));  
                         return super.get(name);  
                 }  
                 return attributeMetadata;  
91          }          }
92    
93          /**          /**
94           * @Deprecated use get(Name name) or get(String localName)           * @Deprecated use get(Name name) or get(String localName)
95           */           */
96            @Deprecated
97          @Override          @Override
98          @Deprecated          public AMD_IMPL get(final Object key) {
99          public AttributeMetadata get(final Object key) {                  LOGGER.error("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!");  
                 LOGGER.warn("PLEASE DONT USE get(Object) any MORE!");  
100                  return super.get(key);                  return super.get(key);
101          }          }
102    
103          /**          /**
104           * Returns the {@link AttributeMetadata} for a given {@link Name}. Never           * Returns the {@link AMD_IMPL} for a given {@link Name}. Never returns
105           * returns <code>null</code>, but rather creates a default           * <code>null</code>, but rather creates a default {@link AMD_IMPL} on the
106           * {@link AttributeMetadata} on the fly.           * fly.
107           */           */
108          public AttributeMetadata get(final String localName) {          public AMD_IMPL get(final String localName) {
109                    if (localName == null)
110                            return null;
111                  return this.get(new NameImpl(localName));                  return this.get(new NameImpl(localName));
112          }          }
113    
# Line 125  public class AttributeMetadataMap extend Line 119  public class AttributeMetadataMap extend
119           * @return a number between 0. (bad) and 1. (good) that is calculated from           * @return a number between 0. (bad) and 1. (good) that is calculated from
120           *         the amount of translation available in the visible attributes           *         the amount of translation available in the visible attributes
121           */           */
122            @Override
123          public double getQuality(final List<String> languages) {          public double getQuality(final List<String> languages) {
124                  int allVisible = 0;                  int allVisible = 0;
125                  double colQmSum = 0.;                  double colQmSum = 0.;
126                  for (final AttributeMetadata oneCol : values()) {                  for (final AMD_IMPL oneCol : values()) {
127    
128                          if (oneCol.isVisible()) {                          if (oneCol.isVisible() && oneCol instanceof QualityQuantizable) {
129                                  allVisible++;                                  allVisible++;
130                                  colQmSum += oneCol.getQuality(languages);                                  colQmSum += ((QualityQuantizable) oneCol).getQuality(languages);
131                          }                          }
132                  }                  }
133    
# Line 143  public class AttributeMetadataMap extend Line 138  public class AttributeMetadataMap extend
138    
139          }          }
140    
   
141          /**          /**
142           * @return List of {@link AttributeMetadata} objects ordered by their           * @return List of {@link AMD_IMPL} objects ordered by their weight.
143           *         weight. (heavier => further down)           *         (heavier => further down)
144           */           */
145          public List<AttributeMetadata> sortedValues() {          public List<AMD_IMPL> sortedValues() {
146                  final ArrayList<AttributeMetadata> list = new ArrayList<AttributeMetadata>();                  final ArrayList<AMD_IMPL> list = new ArrayList<AMD_IMPL>();
147                  list.addAll(values());                  list.addAll(values());
148                  Collections.sort(list);                  Collections.sort(list);
149                  return list;                  return list;
150          }          }
151    
152          /**          /**
153           * @return List of only the visible {@link AttributeMetadata} objects           * @return List of only the visible {@link AMD_IMPL} objects ordered by
154           *         ordered by their weight. (heavier => further down)           *         their weight. (heavier => further down)
155           */           */
156          public List<AttributeMetadata> sortedValuesVisibleOnly() {          public List<AMD_IMPL> sortedValuesVisibleOnly() {
157                  final ArrayList<AttributeMetadata> list = new ArrayList<AttributeMetadata>();                  final ArrayList<AMD_IMPL> list = new ArrayList<AMD_IMPL>();
158                  for (final AttributeMetadata atm : sortedValues()) {                  for (final AMD_IMPL atm : sortedValues()) {
159                          if (atm.isVisible())                          if (atm.isVisible())
160                                  list.add(atm);                                  list.add(atm);
161                  }                  }
162                  return list;                  return list;
163          }          }
164            
165            /**
166             * Just for debuggung. Simply returns {@code super.put(.)}.
167             * TODO: remove this method.
168             */
169            @Override
170            public AMD_IMPL put(Name key, AMD_IMPL value) {
171              return super.put(key, value);
172            };
173    
174  }  }

Legend:
Removed from v.604  
changed lines
  Added in v.1047

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26