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 @ 45100

History | View | Annotate | Download (5.08 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 java.util.logging.Level;
8
import org.gvsig.expressionevaluator.ExpressionUtils;
9
import org.gvsig.fmap.dal.AbstractStoresRepository;
10
import org.gvsig.fmap.dal.DALLocator;
11
import org.gvsig.fmap.dal.DataManager;
12
import org.gvsig.fmap.dal.DataStoreParameters;
13
import org.gvsig.fmap.dal.DataTypes;
14
import org.gvsig.fmap.dal.StoresRepository;
15
import org.gvsig.fmap.dal.feature.Feature;
16
import org.gvsig.fmap.dal.feature.FeatureStore;
17
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_NAME;
18
import org.gvsig.tools.exception.BaseException;
19
import org.gvsig.tools.util.UnmodifiableBasicSet;
20
import org.gvsig.tools.util.UnmodifiableBasicSetAdapter;
21
import org.gvsig.tools.visitor.VisitCanceledException;
22
import org.gvsig.tools.visitor.Visitor;
23
import org.slf4j.Logger;
24
import org.slf4j.LoggerFactory;
25
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_PARAMETERS;
26
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
27
import org.gvsig.tools.dispose.DisposeUtils;
28
import org.gvsig.tools.dynobject.DynClass;
29
import org.gvsig.tools.dynobject.DynField;
30
import org.gvsig.tools.util.HasAFile;
31

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

    
43
    private final DatabaseWorkspaceManager workspace;
44
    private Map<String,DataStoreParameters> repository;
45

    
46
    public DatabaseWorkspaceStoresRepository(String name, String label, DatabaseWorkspaceManager workspace) {
47
        super(name, label);
48
        this.workspace = workspace;
49
        this.repository = null;
50
    }
51

    
52
    private void evaluateExpressionsInFiles(DataStoreParameters parameters) {
53
        DynClass dynClass = parameters.getDynClass();
54
        if( dynClass == null ) {
55
            return;
56
        }
57
        File theBaseFolder = this.workspace.getBaseFolder();
58
        if( theBaseFolder==null ) {
59
            return;
60
        }
61
        for (DynField dynField : dynClass.getDynFields()) {
62
            switch(dynField.getType()) {
63
                case DataTypes.FILE:
64
                case DataTypes.FOLDER:
65
                    File f = (File) parameters.getDynValue(dynField.getName());
66
                    if( ExpressionUtils.isDynamicFilename(f) ) {
67
                        parameters.setDynValue(dynField.getName(), ExpressionUtils.evaluateFilename(this.workspace, f));
68
                    }
69
                    break;
70
            }
71
        }
72
        try {
73
            if (parameters instanceof HasAFile) {
74
                HasAFile params = (HasAFile) parameters;
75
                params.setFile(ExpressionUtils.evaluateFilename(params.getFile()));
76
            }
77
            parameters.validate();
78
        } catch (ValidateDataParametersException ex) {
79
            LOGGER.warn("Not been able to validate parameters", ex);
80
        }
81
    }
82

    
83
    private void load() {
84
        FeatureStore store = null;
85
        try {
86
            this.repository = new HashMap<>();
87
            final DataManager dataManager = DALLocator.getDataManager();
88
            store = this.workspace.getTable(DatabaseWorkspaceManager.TABLE_REPOSITORY);
89
            store.accept(new Visitor() {
90
                @Override
91
                public void visit(Object obj) throws VisitCanceledException, BaseException {
92
                    Feature f = (Feature) obj;
93
                    String name = f.getString(FIELD_REPOSITORY_NAME);
94
                    byte[] data = f.getByteArray(FIELD_REPOSITORY_PARAMETERS);
95
                    DataStoreParameters params = dataManager.createStoreParameters(data);
96
                    if( params==null ) {
97
                        LOGGER.warn("Can't restore parameters from repository entry '"+name+"'.");
98
                        return;
99
                    }
100
                    evaluateExpressionsInFiles(params);
101
                    repository.put(name, params);
102
                }
103
            });
104
        } catch (Exception ex) {
105
            LOGGER.warn("Can't load repository information", ex);
106
        } finally {
107
            DisposeUtils.disposeQuietly(store);
108
        }
109
    }
110

    
111
    @Override
112
    protected DataStoreParameters getMyParameters(String name) {
113
        if( this.repository==null ) {
114
            this.load();
115
        }
116
        return this.repository.get(name);
117
    }
118

    
119
    @Override
120
    protected boolean isEmptyMyRepository() {
121
        if( this.repository==null ) {
122
            this.load();
123
        }
124
        return this.repository.isEmpty();
125
    }
126

    
127
    @Override
128
    protected int getMySize() {
129
        if( this.repository==null ) {
130
            this.load();
131
        }
132
        return this.repository.size();
133
    }
134

    
135
    @Override
136
    protected UnmodifiableBasicSet<String> getMyKeySet() {
137
        if( this.repository==null ) {
138
            this.load();
139
        }
140
        return new UnmodifiableBasicSetAdapter<>(this.repository.keySet());
141
    }
142
    
143
    
144
}