Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / main / java / org / gvsig / fmap / dal / impl / DefaultStoresRepository.java @ 44259

History | View | Annotate | Download (3.34 KB)

1
package org.gvsig.fmap.dal.impl;
2

    
3
import java.util.HashMap;
4
import java.util.Iterator;
5
import java.util.Map;
6
import org.gvsig.fmap.dal.DALLocator;
7
import org.gvsig.fmap.dal.DataStore;
8
import org.gvsig.fmap.dal.DataStoreParameters;
9
import org.gvsig.fmap.dal.StoresRepository;
10
import org.gvsig.tools.util.GetItemByKey;
11
import org.gvsig.tools.util.UnmodifiableBasicSet;
12
import org.gvsig.tools.util.UnmodifiableBasicSetAdapter;
13

    
14
/**
15
 *
16
 * @author jjdelcerro
17
 */
18
@SuppressWarnings("UseSpecificCatch")
19
public class DefaultStoresRepository implements StoresRepository {
20

    
21
    private final Map<String,DataStoreParameters> repository;
22
    private final Map<String,GetItemByKey<String,DataStoreParameters>> delegateds;
23
    
24
    public DefaultStoresRepository() {
25
        this.repository = new HashMap<>();
26
        this.delegateds = new HashMap<>();
27
    }
28
    
29
    public void add(String name, GetItemByKey<String,DataStoreParameters> repository) {
30
        this.delegateds.put(name, repository);
31
    }
32
    
33
    @Override
34
    public void add(String name, DataStoreParameters parameters) {
35
        this.repository.put(name, parameters);
36
    }
37

    
38
    @Override
39
    public void remove(String name) {
40
        this.repository.remove(name);
41
    }
42

    
43
    @Override
44
    public DataStore get(String name) {
45
        DataStoreParameters parameters = this.repository.get(name);
46
        if( parameters==null ) {
47
            for (GetItemByKey<String,DataStoreParameters> theRepository : this.delegateds.values()) {
48
                parameters = theRepository.get(name);
49
                if( parameters!=null ) {
50
                    break;
51
                }
52
            }
53
            if( parameters==null ) {
54
                throw new IllegalArgumentException("Can't exists store '"+name+"' in the repository.");
55
            }
56
        }
57
        DataStore store;
58
        try {
59
            store = DALLocator.getDataManager().openStore(parameters.getDataStoreName(), parameters);
60
        } catch (Exception ex) {
61
            throw new RuntimeException("Can't open store '"+name+"'.", ex);
62
        }
63
        return store;
64
    }
65

    
66
    @Override
67
    public boolean isEmpty() {
68
        return this.repository.isEmpty();
69
    }
70

    
71
    @Override
72
    public boolean containsKey(String name) {
73
        if( this.repository.containsKey(name) ) {
74
            return true;
75
        }
76
        for (GetItemByKey<String,DataStoreParameters> theRepository : this.delegateds.values()) {
77
            DataStoreParameters parameters = theRepository.get(name);
78
            if( parameters!=null ) {
79
                return true;
80
            }
81
        }
82
        return false;
83
    }
84

    
85
    @Override
86
    public Map<String, DataStore> toMap() {
87
        throw new UnsupportedOperationException();
88
    }
89

    
90
    @Override
91
    public int size() {
92
        return this.repository.size();
93
    }
94

    
95
    @Override
96
    public Iterator<DataStore> iterator() {
97
        final Iterator<String> it = this.keySet().iterator();
98
        return new Iterator<DataStore>() {
99
            @Override
100
            public boolean hasNext() {
101
                return it.hasNext();
102
            }
103

    
104
            @Override
105
            public DataStore next() {
106
                String name = it.next();
107
                return get(name);
108
            }
109
        };
110
    }
111
    
112
    @Override
113
    public UnmodifiableBasicSet<String> keySet() {
114
        return new UnmodifiableBasicSetAdapter(this.repository.keySet());
115
    }
116
    
117
}