Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.api / src / main / java / org / gvsig / fmap / dal / AbstractStoresRepository.java @ 46301

History | View | Annotate | Download (9.57 KB)

1
package org.gvsig.fmap.dal;
2

    
3
import java.util.ArrayList;
4
import java.util.Collection;
5
import java.util.Collections;
6
import java.util.Iterator;
7
import java.util.List;
8
import java.util.Map;
9
import java.util.Objects;
10
import org.apache.commons.lang3.StringUtils;
11
import org.gvsig.fmap.dal.feature.FeatureStore;
12
import org.gvsig.tools.observer.Notification;
13
import org.gvsig.tools.observer.ObservableHelper;
14
import org.gvsig.tools.observer.Observer;
15
import org.gvsig.tools.util.PropertiesSupport;
16
import org.gvsig.tools.util.PropertiesSupportHelper;
17
import org.gvsig.tools.util.UnmodifiableBasicSet;
18
import org.gvsig.tools.util.UnmodifiableBasicSetChained;
19
import org.slf4j.Logger;
20
import org.slf4j.LoggerFactory;
21

    
22
/**
23
 *
24
 * @author jjdelcerro
25
 */
26
@SuppressWarnings("UseSpecificCatch")
27
public abstract class AbstractStoresRepository  implements StoresRepository {
28
    
29
    protected final Logger LOGGER = LoggerFactory.getLogger(AbstractStoresRepository.class);
30
    
31
    private final String name;
32
    private final String label;
33
    private final List<StoresRepository> subrepositories;
34
    private final ObservableHelper observableHelper;
35
    private final PropertiesSupportHelper propertiesHelper;
36

    
37
    public AbstractStoresRepository(String name) {
38
        this(name, null);
39
    }
40
    
41
    public AbstractStoresRepository(String name, String label) {
42
        this.name = name;
43
        this.label = label;
44
        this.subrepositories = new ArrayList<>();
45
        this.observableHelper = new ObservableHelper();
46
        this.propertiesHelper = new PropertiesSupportHelper();
47
    }
48
    
49
    protected abstract DataStoreParameters getMyParameters(String name);
50

    
51
    protected abstract boolean isEmptyMyRepository();
52
    
53
    protected abstract int getMySize();
54

    
55
    protected abstract UnmodifiableBasicSet<String> getMyKeySet();
56

    
57
    @Override
58
    public void addObserver(Observer o) {
59
        this.observableHelper.addObserver(o);
60
    }
61

    
62
    @Override
63
    public void deleteObserver(Observer o) {
64
        this.observableHelper.deleteObserver(o);
65
    }
66

    
67
    @Override
68
    public void deleteObservers() {
69
        this.observableHelper.deleteObservers();
70
    }
71
    
72
    protected Notification notifyObservers(String notificationType, Object value) {
73
        return this.observableHelper.notifyObservers(this, notificationType, value);
74
    }
75

    
76
    protected Notification notifyObservers(String notificationType, Object value1, Object value2) {
77
        return this.observableHelper.notifyObservers(this, notificationType, value1, value2);
78
    }
79

    
80
    @Override
81
    public void add(String name, DataStoreParameters parameters) {
82
        throw new UnsupportedOperationException();
83
    }
84

    
85
    @Override
86
    public void add(String name, FeatureStore store) {
87
        add(name, store.getParameters());
88
    }
89

    
90
    @Override
91
    public void remove(String name) {
92
        throw new UnsupportedOperationException();
93
    }
94
    
95
    @Override
96
    public boolean contains(DataStoreParameters parameters) {
97
        for (DataStoreParameters currentParameters : this) {
98
            if( parameters.equals(currentParameters) ) {
99
                return true;
100
            }
101
        }
102
        return false;
103
    }
104

    
105
    @Override
106
    public String getID() {
107
        return this.name;
108
    }
109

    
110
    @Override
111
    public String getLabel() {
112
        if( StringUtils.isBlank(this.label) ) {
113
            return this.getID();
114
        }
115
        return this.label;
116
    }
117
    
118
    @Override
119
    public Collection<StoresRepository> getSubrepositories() {
120
        return this.subrepositories;
121
    }
122

    
123
    @Override
124
    public StoresRepository getSubrepository(String Id) {
125
        for (StoresRepository repo : this.subrepositories) {
126
            if( repo!=null && StringUtils.equalsIgnoreCase(Id, repo.getID()) ) {
127
                return repo;
128
            }
129
        }
130
        return null;
131
    }
132
    
133
    @Override
134
    public boolean addRepository(StoresRepository repository) {
135
        if( this.notifyObservers(NOTIFICATION_ADDREPOSITORY, repository).isCanceled() ) {
136
            return false;
137
        }
138
        this.removeRepository(repository.getID());
139
        this.subrepositories.add(repository);
140
        return true;
141
    }
142

    
143
    @Override
144
    public boolean removeRepository(String name) {
145
        if( this.notifyObservers(NOTIFICATION_REMOVEREPOSITORY, name).isCanceled() ) {
146
            return false;
147
        }
148
        for (int i = 0; i < subrepositories.size(); i++) {
149
            StoresRepository repo = subrepositories.get(i);
150
            if( StringUtils.equalsIgnoreCase(name, repo.getID()) ) {
151
                this.subrepositories.remove(i);
152
                return true;
153
            }
154
        }
155
        return false;
156
    }
157

    
158
    @Override
159
    public DataStoreParameters get(String name) {
160
        DataStoreParameters parameters = this.getMyParameters(name);
161
        if( parameters!=null ) {
162
            return parameters;
163
        }
164
        for ( StoresRepository theRepository : this.subrepositories) {
165
            parameters = theRepository.get(name);
166
            if( parameters!=null ) {
167
                return parameters;
168
            }
169
        }
170
        return null;
171
    }
172
    
173
     public PropertiesSupport getProperties(String name) {
174
         return new PropertiesSupport() {
175
             @Override
176
             public Object getProperty(String name) {
177
                 return null;
178
             }
179

    
180
             @Override
181
             public void setProperty(String name, Object value) {
182
                 
183
             }
184

    
185
             @Override
186
             public Map<String, Object> getProperties() {
187
                 return Collections.EMPTY_MAP;
188
             }
189
         };
190
     }
191
    
192
    @Override
193
    public DataStore getStore(String name) {
194
        PropertiesSupport properties = this.getProperties(name);
195
        if(properties!=null && 
196
                StringUtils.equalsIgnoreCase(Objects.toString(properties.getProperty("ignoreDALResource")),"true")) {
197
            return this.getStore(name, true);
198
        }
199
        return this.getStore(name, false);
200
    }
201

    
202
    public DataStore getStore(String name, boolean ignoreDALResource) {
203
        DataStoreParameters parameters = this.getMyParameters(name);
204
        if( parameters!=null ) {
205
            try {
206
                DataStore store = DALLocator.getDataManager().openStore(
207
                        parameters.getDataStoreName(), 
208
                        parameters,
209
                        ignoreDALResource
210
                );
211
                return store;
212
            } catch (Exception ex) {
213
                throw new RuntimeException("Can't open store '"+name+"'.", ex);
214
            }
215
        }
216
        for ( StoresRepository theRepository : this.subrepositories) {
217
            DataStore store = theRepository.getStore(name);
218
            if( store!=null ) {
219
                return store;
220
            }
221
        }
222
        return null;
223
    }
224

    
225
    @Override
226
    public boolean containsKey(String key) {
227
        DataStoreParameters parameters = this.getMyParameters(name);
228
        if( parameters!=null ) {
229
            return true;
230
        }
231
        for ( StoresRepository theRepository : this.subrepositories) {
232
            if( theRepository.containsKey(key) ) {
233
                return true;
234
            }
235
        }
236
        return false;
237
    }
238

    
239
    @Override
240
    public UnmodifiableBasicSet<String> keySet() {
241
        List<UnmodifiableBasicSet<String>> sets = new ArrayList<>();
242
        UnmodifiableBasicSet<String> keyset = this.getMyKeySet();
243
        if( keyset!=null && !keyset.isEmpty() ) {
244
            sets.add(keyset);
245
        }
246
        for (StoresRepository theRepository : this.subrepositories) {
247
            if( theRepository!=null ) {
248
                keyset = theRepository.keySet();
249
                if( keyset!=null && !keyset.isEmpty() ) {
250
                    sets.add(keyset);
251
                }
252
            }
253
        }
254
        if( sets.isEmpty() ) {
255
            return UnmodifiableBasicSet.EMPTY_UNMODIFIABLEBASICSET;
256
        }
257
        if( sets.size()==1 ) {
258
            return sets.get(0);
259
        }
260
        return new UnmodifiableBasicSetChained(
261
            sets.toArray(
262
                new UnmodifiableBasicSet[sets.size()]
263
            )
264
        );
265
    }
266

    
267
    @Override
268
    public Map<String, DataStoreParameters> toMap() {
269
        throw new UnsupportedOperationException();
270
    }
271

    
272
    @Override
273
    public boolean isEmpty() {
274
        if( !this.isEmptyMyRepository() ) {
275
            return false;
276
        }
277
        for ( StoresRepository theRepository : this.subrepositories) {
278
            if( !theRepository.isEmpty() ) {
279
                return false;
280
            }
281
        }
282
        return true;
283
    }
284

    
285
    @Override
286
    public int size() {
287
        int sz = 0;
288
        if( !this.isEmptyMyRepository() ) {
289
            sz = this.getMySize();
290
        }
291
        for ( StoresRepository theRepository : this.subrepositories) {
292
            sz += theRepository.size();
293
        }
294
        return sz;
295
    }
296

    
297
    @Override
298
    public Iterator<DataStoreParameters> iterator() {
299
        final Iterator<String> it = this.keySet().iterator();
300
        return new Iterator<DataStoreParameters>() {
301
            @Override
302
            public boolean hasNext() {
303
                return it.hasNext();
304
            }
305

    
306
            @Override
307
            public DataStoreParameters next() {
308
                String name = it.next();
309
                return get(name);
310
            }
311
        };
312
    }
313

    
314
    @Override
315
    public Map<String, Object> getProperties() {
316
        return this.propertiesHelper.getProperties();
317
    }
318

    
319
    @Override
320
    public Object getProperty(String name) {
321
        return this.propertiesHelper.getProperty(name);
322
    }
323

    
324
    @Override
325
    public void setProperty(String name, Object value) {
326
        this.propertiesHelper.setProperty(name, value);
327
    }
328
    
329
}