Revision 44397 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

View differences:

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

  
3
import java.io.File;
3 4
import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
4 5
import java.util.HashMap;
5 6
import java.util.Map;
7
import org.gvsig.expressionevaluator.ExpressionUtils;
6 8
import org.gvsig.fmap.dal.AbstractStoresRepository;
7 9
import org.gvsig.fmap.dal.DALLocator;
8 10
import org.gvsig.fmap.dal.DataManager;
9
import org.gvsig.fmap.dal.DataServerExplorer;
10
import org.gvsig.fmap.dal.DataServerExplorerParameters;
11 11
import org.gvsig.fmap.dal.DataStoreParameters;
12
import org.gvsig.fmap.dal.DataTypes;
12 13
import org.gvsig.fmap.dal.StoresRepository;
13 14
import org.gvsig.fmap.dal.feature.Feature;
14 15
import org.gvsig.fmap.dal.feature.FeatureStore;
......
21 22
import org.slf4j.Logger;
22 23
import org.slf4j.LoggerFactory;
23 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;
24 27

  
25 28
/**
26 29
 *
......
33 36
    {
34 37
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultDatabaseWorkspaceManager.class);
35 38

  
36
    private final DataServerExplorerParameters connection;
39
    private final DatabaseWorkspaceManager workspace;
37 40
    private Map<String,DataStoreParameters> repository;
38 41

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

  
45
    private FeatureStore getTable() {
46
        String tableName = DatabaseWorkspaceManager.TABLE_REPOSITORY_NAME;
47
        try {
48
            DataManager dataManager = DALLocator.getDataManager();
49
            DataServerExplorer server = dataManager.openServerExplorer(
50
                    this.connection.getExplorerName(),
51
                    this.connection
52
            );
53
            DataStoreParameters params = server.get(tableName);
54
            if( params!=null ) {
55
                FeatureStore store = (FeatureStore) dataManager.openStore(
56
                        params.getDataStoreName(), 
57
                        params
58
                );
59
                return store;
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;
60 66
            }
61
        } catch (Exception ex) {
62
            LOGGER.warn("Can't open table '"+tableName+"'.",ex);
63 67
        }
64
        return null;
65 68
    }
66 69

  
67 70
    private void load() {
68 71
        try {
69 72
            this.repository = new HashMap<>();
70 73
            final DataManager dataManager = DALLocator.getDataManager();
71
            FeatureStore store = this.getTable();
74
            FeatureStore store = this.workspace.getTable(DatabaseWorkspaceManager.TABLE_REPOSITORY);
72 75
            store.accept(new Visitor() {
73 76
                @Override
74 77
                public void visit(Object obj) throws VisitCanceledException, BaseException {
......
80 83
                        LOGGER.warn("Can't restore parameters from repository entry '"+name+"'.");
81 84
                        return;
82 85
                    }
86
                    evaluateExpressionsInFiles(params);
83 87
                    repository.put(name, params);
84 88
                }
85 89
            });

Also available in: Unified diff