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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 772 - (show annotations)
Sun Mar 21 14:05:26 2010 UTC (14 years, 11 months ago) by alfonx
File MIME type: text/plain
File size: 4717 byte(s)
The new Interface AttributeMetadata has been renamed to AttributeMetadataInterface. 

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

Properties

Name Value
svn:eol-style native
svn:keywords Id URL
svn:mime-type text/plain

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26