Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.geodb.app / org.gvsig.geodb.app.mainplugin / src / main / java / org / gvsig / geodb / WizardDBVectorial.java @ 44533

History | View | Annotate | Download (4.85 KB)

1
package org.gvsig.geodb;
2

    
3
import java.util.ArrayList;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.fmap.dal.DALLocator;
7
import org.gvsig.fmap.dal.DataManager;
8
import org.gvsig.fmap.dal.feature.FeatureStore;
9
import org.gvsig.fmap.dal.store.db.DBStoreParameters;
10
import org.gvsig.fmap.mapcontext.MapContext;
11
import org.gvsig.fmap.mapcontext.MapContextLocator;
12
import org.gvsig.fmap.mapcontext.MapContextManager;
13
import org.gvsig.fmap.mapcontext.layers.CancelationException;
14
import org.gvsig.fmap.mapcontext.layers.FLayer;
15
import org.gvsig.fmap.mapcontext.layers.FLayers;
16
import org.gvsig.fmap.mapcontrol.MapControl;
17
import static org.gvsig.geodb.AbstractWizardDB.LOGGER;
18

    
19
/**
20
 *
21
 * @author jjdelcerro
22
 */
23
public class WizardDBVectorial extends AbstractWizardDB {
24

    
25
    public WizardDBVectorial() {
26
        super();
27
    }
28

    
29
    @Override
30
    protected boolean requireGeometry() {
31
        return true;
32
    }
33

    
34
    @Override
35
    public Object executeWizard() {
36
        DataManager man = DALLocator.getDataManager();
37
        MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
38

    
39
        MapControl mapControl = this.getMapCtrl();
40
        MapContext mapContext = mapControl.getMapContext();
41

    
42
        String groupName = null;
43
        List<FLayer> all_layers = new ArrayList();
44

    
45
        try {
46
            FLayer layer = null;
47
            for (TableInfo tableInfo : this.getTablesInformation()) {
48
                if (!tableInfo.isSelected()) {
49
                    continue;
50
                }
51
                DBStoreParameters parameter = tableInfo.getParameters();
52
                if (groupName == null) {
53
                    String dbname = parameter.getDBName();
54
                    if (StringUtils.isEmpty(dbname)) {
55
                        dbname = "Group";
56
                    }
57
                    String host = parameter.getHost();
58
                    if (StringUtils.isEmpty(host)) {
59
                        groupName = dbname;
60
                    } else {
61
                        groupName = dbname + " (" + host + ")";
62
                    }
63
                }
64
                FeatureStore store;
65
                try {
66
                    store = (FeatureStore) man.openStore(
67
                            parameter.getDataStoreName(),
68
                            parameter);
69
                } catch (Exception e) {
70
                    LOGGER.warn("While opening DB store.", e);
71
                    return null;
72
                }
73
                try {
74

    
75
                    layer = mapContextManager.createLayer(
76
                            tableInfo.getDocumentName(),
77
                            store
78
                    );
79
                    all_layers.add(layer);
80
                } catch (Exception e) {
81
                    LOGGER.warn("Can't create layer '" + tableInfo.getDocumentName() + "'.", e);
82
                }
83
            }
84

    
85
            if (all_layers.size() > 1) {
86
                FLayers group = new FLayers();
87
                group.setMapContext(mapContext);
88
                group.setParentLayer(mapContext.getLayers());
89
                group.setName(groupName);
90

    
91
                for (FLayer aLayer : all_layers) {
92
                    group.addLayer(aLayer);
93
                }
94
                if ( group.isOk() ) {
95
                    group.setVisible(true);
96
                    mapContext.beginAtomicEvent();
97
                    try {
98
                        mapControl.addLayer(group);
99
                        group.dispose();
100
                    } catch (CancelationException e) {
101
                        LOGGER.warn("Can't add group to mapcontext layers.", e);
102
                    } finally {
103
                        mapContext.endAtomicEvent();
104
                    }
105
                } else {
106
                    fireLayerErrorEvent(layer, mapControl);
107
                }
108

    
109
            } else if (all_layers.size() == 1) {
110
                layer = (FLayer) all_layers.get(0);
111
                if ( layer.isOk() ) {
112
                    layer.setVisible(true);
113
                    mapContext.beginAtomicEvent();
114
                    try {
115
                        mapControl.addLayer(layer);
116
                    } catch (CancelationException e) {
117
                        LOGGER.warn("Can't add group to mapcontext layers.", e);
118
                    } finally {
119
                        mapContext.endAtomicEvent();
120
                    }
121
                } else {
122
                    fireLayerErrorEvent(layer, mapControl);
123
                }
124
            }
125

    
126
        } finally {
127
            // Dispose all created layers. If they have been included into
128
            // a FLayers object, they will have been binded there.
129
            for (FLayer layer : all_layers) {
130
                layer.dispose();
131
            }
132
        }
133
        return null;
134
    }
135

    
136
    private void fireLayerErrorEvent(FLayer lyr, MapControl mapControl) {
137
        mapControl.getMapContext().callNewErrorEvent(null);
138
    }
139

    
140
}