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