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 / DatabaseWorkspaceStoresRepository.java @ 44397

History | View | Annotate | Download (4.44 KB)

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

    
3
import java.io.File;
4
import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
5
import java.util.HashMap;
6
import java.util.Map;
7
import org.gvsig.expressionevaluator.ExpressionUtils;
8
import org.gvsig.fmap.dal.AbstractStoresRepository;
9
import org.gvsig.fmap.dal.DALLocator;
10
import org.gvsig.fmap.dal.DataManager;
11
import org.gvsig.fmap.dal.DataStoreParameters;
12
import org.gvsig.fmap.dal.DataTypes;
13
import org.gvsig.fmap.dal.StoresRepository;
14
import org.gvsig.fmap.dal.feature.Feature;
15
import org.gvsig.fmap.dal.feature.FeatureStore;
16
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_NAME;
17
import org.gvsig.tools.exception.BaseException;
18
import org.gvsig.tools.util.UnmodifiableBasicSet;
19
import org.gvsig.tools.util.UnmodifiableBasicSetAdapter;
20
import org.gvsig.tools.visitor.VisitCanceledException;
21
import org.gvsig.tools.visitor.Visitor;
22
import org.slf4j.Logger;
23
import org.slf4j.LoggerFactory;
24
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_PARAMETERS;
25
import org.gvsig.tools.dynobject.DynClass;
26
import org.gvsig.tools.dynobject.DynField;
27

    
28
/**
29
 *
30
 * @author jjdelcerro
31
 */
32
@SuppressWarnings("UseSpecificCatch")
33
public class DatabaseWorkspaceStoresRepository 
34
        extends AbstractStoresRepository
35
        implements StoresRepository 
36
    {
37
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultDatabaseWorkspaceManager.class);
38

    
39
    private final DatabaseWorkspaceManager workspace;
40
    private Map<String,DataStoreParameters> repository;
41

    
42
    public DatabaseWorkspaceStoresRepository(String name, String label, DatabaseWorkspaceManager workspace) {
43
        super(name, label);
44
        this.workspace = workspace;
45
        this.repository = null;
46
    }
47

    
48
    private void evaluateExpressionsInFiles(DataStoreParameters parameters) {
49
        DynClass dynClass = parameters.getDynClass();
50
        if( dynClass == null ) {
51
            return;
52
        }
53
        File theBaseFolder = this.workspace.getBaseFolder();
54
        if( theBaseFolder==null ) {
55
            return;
56
        }
57
        for (DynField dynField : dynClass.getDynFields()) {
58
            switch(dynField.getType()) {
59
                case DataTypes.FILE:
60
                case DataTypes.FOLDER:
61
                    File f = (File) parameters.getDynValue(dynField.getName());
62
                    if( ExpressionUtils.isDynamicFilename(f) ) {
63
                        parameters.setDynValue(dynField.getName(), ExpressionUtils.evaluateFilename(this.workspace, f));
64
                    }
65
                    break;
66
            }
67
        }
68
    }
69

    
70
    private void load() {
71
        try {
72
            this.repository = new HashMap<>();
73
            final DataManager dataManager = DALLocator.getDataManager();
74
            FeatureStore store = this.workspace.getTable(DatabaseWorkspaceManager.TABLE_REPOSITORY);
75
            store.accept(new Visitor() {
76
                @Override
77
                public void visit(Object obj) throws VisitCanceledException, BaseException {
78
                    Feature f = (Feature) obj;
79
                    String name = f.getString(FIELD_REPOSITORY_NAME);
80
                    byte[] data = f.getByteArray(FIELD_REPOSITORY_PARAMETERS);
81
                    DataStoreParameters params = dataManager.createStoreParameters(data);
82
                    if( params==null ) {
83
                        LOGGER.warn("Can't restore parameters from repository entry '"+name+"'.");
84
                        return;
85
                    }
86
                    evaluateExpressionsInFiles(params);
87
                    repository.put(name, params);
88
                }
89
            });
90
        } catch (Exception ex) {
91
            LOGGER.warn("Can't load repository information", ex);
92
        }
93
    }
94

    
95
    @Override
96
    protected DataStoreParameters getMyParameters(String name) {
97
        if( this.repository==null ) {
98
            this.load();
99
        }
100
        return this.repository.get(name);
101
    }
102

    
103
    @Override
104
    protected boolean isEmptyMyRepository() {
105
        if( this.repository==null ) {
106
            this.load();
107
        }
108
        return this.repository.isEmpty();
109
    }
110

    
111
    @Override
112
    protected int getMySize() {
113
        if( this.repository==null ) {
114
            this.load();
115
        }
116
        return this.repository.size();
117
    }
118

    
119
    @Override
120
    protected UnmodifiableBasicSet<String> getMyKeySet() {
121
        if( this.repository==null ) {
122
            this.load();
123
        }
124
        return new UnmodifiableBasicSetAdapter<>(this.repository.keySet());
125
    }
126
    
127
    
128
}