Revision 2206 org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/namestranslator/AbstractNamesTranslator.java

View differences:

AbstractNamesTranslator.java
25 25

  
26 26
import java.util.ArrayList;
27 27
import java.util.Arrays;
28
import java.util.HashMap;
29
import java.util.HashSet;
30
import java.util.Iterator;
28 31
import java.util.List;
32
import java.util.Map;
29 33
import java.util.function.Function;
30 34
import org.apache.commons.lang3.StringUtils;
35
import org.gvsig.tools.ToolsLocator;
36
import org.gvsig.tools.dynobject.DynStruct;
37
import org.gvsig.tools.persistence.PersistenceManager;
38
import org.gvsig.tools.persistence.Persistent;
39
import org.gvsig.tools.persistence.PersistentState;
40
import org.gvsig.tools.persistence.exception.PersistenceException;
41
import org.gvsig.tools.lang.Cloneable;
31 42

  
32 43
/**
33 44
 *
34 45
 * @author jjdelcerro
35 46
 */
36
public abstract class AbstractNamesTranslator implements NamesTranslator {
37
  
38
  protected List<String>sourceNames;
39
  
40
  protected AbstractNamesTranslator() {
41
    
42
  }
43
  
44
  @Override
45
  public void setSourceNames(Iterable<String> names) {
46
    this.sourceNames = new ArrayList<>();
47
    for (String name : names) {
48
      this.sourceNames.add(name);
47
public abstract class AbstractNamesTranslator implements NamesTranslator, Persistent {
48

  
49
    protected class SimpleMap implements Cloneable {
50

  
51
        public Map<String, String> map;
52

  
53
        public SimpleMap() {
54
            this.map = new HashMap<>();
55
        }
56

  
57
        public String get(String name) {
58
            return this.map.get(name.toLowerCase());
59
        }
60

  
61
        public void put(String name, String element) {
62
            this.map.put(name.toLowerCase(), element);
63
        }
64

  
65
        public Map<String, String> toMap() {
66
            return this.map;
67
        }
68

  
69
        @Override
70
        public SimpleMap clone() throws CloneNotSupportedException {
71
            SimpleMap clone = new SimpleMap();
72
            HashMap<String, String> newMap = new HashMap<>();
73
            newMap.putAll(map);
74
            clone.map = newMap;
75
            return clone;
76
        }
77

  
49 78
    }
50
    this.build();
51
  }
52 79

  
53
  @Override
54
  public void setSourceNames(String[] names) {
55
    this.sourceNames = Arrays.asList(names);
56
    this.build();
57
  }
80
    protected class SimpleList implements Iterable<String>, Cloneable {
58 81

  
59
  @Override
60
  public void setSourceNames(Iterable objs, Function<Object, String> name_getter) {
61
    this.sourceNames = new ArrayList<>();
62
    for (Object obj : objs) {
63
      String name = name_getter.apply(obj);      
64
      this.sourceNames.add(name.toLowerCase());
82
        public List<String> list;
83

  
84
        public SimpleList() {
85
            this.list = new ArrayList<>();
86
        }
87

  
88
        @Override
89
        public SimpleList clone() throws CloneNotSupportedException {
90
            SimpleList clone = new SimpleList();
91
            clone.toList().addAll(list);
92
            return clone;
93
        }
94

  
95
        public void add(String s) {
96
            list.add(s);
97
        }
98

  
99
        public boolean contains(String s) {
100
            for (String listElement : list) {
101
                if (StringUtils.equalsIgnoreCase(s, listElement)) {
102
                    return true;
103
                }
104
            }
105
            return false;
106
        }
107

  
108
        public int indexOf(String s) {
109
            for (int i = 0; i < list.size(); i++) {
110
                String element = list.get(i);
111
                if (StringUtils.equalsIgnoreCase(s, element)) {
112
                    return i;
113
                }
114
            }
115
            return -1;
116

  
117
        }
118

  
119
        public int size() {
120
            return list.size();
121

  
122
        }
123

  
124
        public String get(int index) {
125
            return list.get(index);
126

  
127
        }
128

  
129
        public void set(int index, String s) {
130
            list.set(index, s);
131
        }
132

  
133
        @Override
134
        public Iterator<String> iterator() {
135
            return list.iterator();
136

  
137
        }
138

  
139
        public List<String> toList() {
140
            return list;
141
        }
142

  
143
        public boolean hasUniqueValues() {
144
            HashSet<String> sourceNamesSet = new HashSet<String>();
145
            for (String sourceName : this.list) {
146
                sourceNamesSet.add(sourceName.toLowerCase());
147
            }
148
            return sourceNamesSet.size() == this.list.size();
149
        }
65 150
    }
66
    this.build();
67
  }
68 151

  
69
  @Override
70
  public String[] getTranslatedNamesAsArray() {
71
    List<String> l = this.getTranslatedNames();
72
    return l.toArray(new String[l.size()]);
73
  }
152
    protected SimpleList sourceNames;
74 153

  
75
  @Override
76
  public String getSource(int index) {
77
    return this.sourceNames.get(index);
78
  }
154
    protected AbstractNamesTranslator() {
79 155

  
80
  @Override
81
  public boolean isValid(String name) {
82
    return StringUtils.equalsIgnoreCase(name, this.getSuggestion(name));
83
  }
84
  
85
  protected abstract void build();
86
  
87
  
156
    }
157

  
158
    @Override
159
    public NamesTranslator clone() throws CloneNotSupportedException {
160
        AbstractNamesTranslator clone = (AbstractNamesTranslator) super.clone();
161
        clone.sourceNames = this.sourceNames.clone();
162
        return clone;
163
    }
164

  
165
    @Override
166
    public List<String> getSourceNames() {
167
        return this.sourceNames.toList();
168
    }
169

  
170
    @Override
171
    public void setSourceNames(Iterable<String> names) {
172
        this.sourceNames = new SimpleList();
173
        for (String name : names) {
174
            this.sourceNames.add(name);
175
        }
176
        this.build();
177
    }
178

  
179
    @Override
180
    public void setSourceNames(String[] names) {
181
        List<String> asList = Arrays.asList(names);
182
        this.setSourceNames(asList);
183
    }
184

  
185
    @Override
186
    public void setSourceNames(Iterable objs, Function<Object, String> name_getter) {
187
        this.sourceNames = new SimpleList();
188
        for (Object obj : objs) {
189
            String name = name_getter.apply(obj);
190
            this.sourceNames.add(name);
191
        }
192
        this.build();
193
    }
194

  
195
    @Override
196
    public String[] getTranslatedNamesAsArray() {
197
        List<String> l = this.getTranslatedNames();
198
        return l.toArray(new String[l.size()]);
199
    }
200

  
201
    @Override
202
    public String getSource(int index) {
203
        return this.sourceNames.get(index);
204
    }
205

  
206
    @Override
207
    public boolean isValid(String name) {
208
        return StringUtils.equalsIgnoreCase(name, this.getSuggestion(name));
209
    }
210

  
211
    protected abstract void build();
212
    
213

  
214
    public static void registerPersistence() {
215

  
216
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
217
        if (manager.getDefinition("ClassName") == null) {
218
            DynStruct definition = manager.addDefinition(AbstractNamesTranslator.class,
219
                     "AbstractNamesTranslator", "AbstractNamesTranslator persistence definition", null, null);
220
            definition.addDynFieldList("sourceNames").setClassOfItems(String.class
221
            );
222
        }
223
    }
224

  
225
    @Override
226
    public void saveToState(PersistentState state) throws PersistenceException {
227
        state.set("sourceNames", this.sourceNames.toList());
228
    }
229

  
230
    @Override
231
    public void loadFromState(PersistentState state) throws PersistenceException {
232
        List sourceNamesState = state.getList("sourceNames");
233

  
234
        SimpleList sourceNamesList = new SimpleList();
235
        for (Object object : sourceNamesState) {
236
            sourceNamesList.add((String) object);
237
        }
238
        this.sourceNames = sourceNamesList;
239
    }
88 240
}

Also available in: Unified diff