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

View differences:

WizardDBVectorial.java
1 1
package org.gvsig.geodb;
2 2

  
3 3
import java.util.ArrayList;
4
import java.util.Arrays;
4 5
import java.util.List;
6
import java.util.Map;
7
import javax.swing.JComponent;
8
import javax.swing.SwingUtilities;
9
import org.apache.commons.codec.binary.Hex;
5 10
import org.apache.commons.lang3.StringUtils;
11
import org.gvsig.andami.PluginServices;
12
import org.gvsig.andami.PluginsLocator;
13
import org.gvsig.andami.PluginsManager;
6 14
import org.gvsig.fmap.dal.DALLocator;
7 15
import org.gvsig.fmap.dal.DataManager;
16
import org.gvsig.fmap.dal.DataStore;
17
import org.gvsig.fmap.dal.DataStoreParameters;
18
import org.gvsig.fmap.dal.exception.DataException;
19
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
8 20
import org.gvsig.fmap.dal.feature.FeatureStore;
9 21
import org.gvsig.fmap.dal.store.db.DBStoreParameters;
22
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
23
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
10 24
import org.gvsig.fmap.mapcontext.MapContext;
11 25
import org.gvsig.fmap.mapcontext.MapContextLocator;
12 26
import org.gvsig.fmap.mapcontext.MapContextManager;
13 27
import org.gvsig.fmap.mapcontext.layers.CancelationException;
14 28
import org.gvsig.fmap.mapcontext.layers.FLayer;
15 29
import org.gvsig.fmap.mapcontext.layers.FLayers;
30
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
16 31
import org.gvsig.fmap.mapcontrol.MapControl;
17 32
import static org.gvsig.geodb.AbstractWizardDB.LOGGER;
33
import org.gvsig.geodb.vectorialdb.visibility.VisibilityScaleSelector;
34
import org.gvsig.geodb.vectorialdb.visibility.LayerScaleVisibility;
35
import org.gvsig.tools.ToolsLocator;
36
import org.gvsig.tools.dynobject.DynObject;
37
import org.gvsig.tools.i18n.I18nManager;
38
import org.gvsig.tools.swing.api.ToolsSwingLocator;
39
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
18 40

  
19 41
/**
20 42
 *
21 43
 * @author jjdelcerro
22 44
 */
23 45
public class WizardDBVectorial extends AbstractWizardDB {
46
    
47
    public static final int NUMBER_OF_FEATURES_TO_ASK_FOR_VISIBILITY_SCALE = 500;
48
    public static final String LAYERS_SCALE_VISIBILITY_PARAMETER="layersScaleVisibility";
24 49

  
25 50
    public WizardDBVectorial() {
26 51
        super();
......
76 101
                            tableInfo.getDocumentName(),
77 102
                            store
78 103
                    );
104
                    checkForVisibilityScale(layer);
79 105
                    all_layers.add(layer);
80 106
                } catch (Exception e) {
81 107
                    LOGGER.warn("Can't create layer '" + tableInfo.getDocumentName() + "'.", e);
......
136 162
    private void fireLayerErrorEvent(FLayer lyr, MapControl mapControl) {
137 163
        mapControl.getMapContext().callNewErrorEvent(null);
138 164
    }
165
    
166
    
167
        private void checkForVisibilityScale(FLayer layer) throws DataException, ValidateDataParametersException {
168
        
169
        PluginsManager pluginManager = PluginsLocator.getPluginsManager();
170
        PluginServices plugin = pluginManager.getPlugin(ExtDB_Spatial.class);
171
        DynObject pluginProperties = plugin.getPluginProperties();
172
        
173
        Map<String, LayerScaleVisibility> layersScaleVisibility = (Map) pluginProperties.getDynValue(LAYERS_SCALE_VISIBILITY_PARAMETER);
174
        String layerKey = buildLayerKey(layer);
175
        if(layerKey != null) {
176
            LayerScaleVisibility layerScaleVisibility = layersScaleVisibility.get(layerKey);
177
            if(layerScaleVisibility!=null){
178
                int scaleAboveDenominator = layerScaleVisibility.getScaleAboveDenominator();
179
                int scaleBelowDenominator = layerScaleVisibility.getScaleBelowDenominator();
139 180

  
181
                layer.setMaxScale(scaleAboveDenominator);
182
                layer.setMinScale(scaleBelowDenominator);
183
                return;
184
            }
185
        }
186
        
187
        if (layer instanceof FLyrVect) {
188
            FLyrVect lyrVect = (FLyrVect)layer;
189
            FeatureStore store = lyrVect.getFeatureStore();
190
            if((store.getExplorer() instanceof JDBCServerExplorer)
191
                    && (store.getFeatures().size()>NUMBER_OF_FEATURES_TO_ASK_FOR_VISIBILITY_SCALE) ){
192
                askUserForVisibilityScale(layer);
193
            }
194
        }
195
    }
196

  
197
    private void askUserForVisibilityScale(FLayer layer) {
198
        if (!SwingUtilities.isEventDispatchThread()) {
199
            SwingUtilities.invokeLater(new Runnable() {
200
                @Override
201
                public void run() {
202
                    askUserForVisibilityScale(layer);
203
                }
204
            });
205
            return;
206
        }
207
        
208
        
209
        VisibilityScaleSelector visibilityScaleSelector = new VisibilityScaleSelector();
210

  
211
        I18nManager i18nManager = ToolsLocator.getI18nManager();
212
        WindowManager winManager = ToolsSwingLocator.getWindowManager();
213
        
214
        winManager.showWindow(
215
                (JComponent) visibilityScaleSelector, 
216
                i18nManager.getTranslation("select_visibility_scale"), 
217
                WindowManager.MODE.DIALOG
218
        );
219
        
220
        
221
        if (visibilityScaleSelector.isOkPressed()) {
222
            layer.setMaxScale(visibilityScaleSelector.getScaleAboveDenominator());
223
            layer.setMinScale(visibilityScaleSelector.getScaleBelowDenominator());
224
            if(visibilityScaleSelector.getRememberAnswer()){
225
                PluginsManager pluginManager = PluginsLocator.getPluginsManager();
226
                PluginServices plugin = pluginManager.getPlugin(ExtDB_Spatial.class);
227
                DynObject pluginProperties = plugin.getPluginProperties();
228
                String layerKey = buildLayerKey(layer);
229
                String layerLabel = buildLayerLabel(layer);
230
                if(layerKey != null && layerLabel != null){
231
                    Map<String, LayerScaleVisibility> layersScaleVisibility = (Map) pluginProperties.getDynValue(LAYERS_SCALE_VISIBILITY_PARAMETER);
232
                    LayerScaleVisibility layerScaleVisibility = new LayerScaleVisibility();
233
                    layerScaleVisibility.setScaleAboveDenominator(visibilityScaleSelector.getScaleAboveDenominator());
234
                    layerScaleVisibility.setScaleBelowDenominator(visibilityScaleSelector.getScaleBelowDenominator());
235
                    layerScaleVisibility.setLabel(layerLabel);
236
                    layersScaleVisibility.put(layerKey, layerScaleVisibility);
237
                }
238
            }
239
        }
240
    }
241

  
242
    private String buildLayerKey(FLayer layer) {
243
        if(layer!=null){
244
            DataStore dataStore = ((FLyrVect)layer).getDataStore();
245
            if(dataStore != null){
246
                DataStoreParameters parameters = dataStore.getParameters();
247
                if(parameters != null){
248
                    return Arrays.toString(Hex.encodeHex(parameters.toByteArray()));
249
                }
250
            }
251
        }
252
        return null;
253
    }
254

  
255
    private String buildLayerLabel(FLayer layer) {
256
        
257
        if(layer!=null){
258
            DataStore dataStore = ((FLyrVect)layer).getDataStore();
259
            if(dataStore != null){
260
                    StringBuilder builder = new StringBuilder();
261
                    DataStoreParameters parameters = dataStore.getParameters();
262
                    if(parameters != null && parameters instanceof DBStoreParameters){
263
                        JDBCStoreParameters jdbcParameters = (JDBCStoreParameters)parameters;
264
                        builder.append(jdbcParameters.getDBName());
265
                        builder.append(".");
266
                        builder.append(jdbcParameters.getSchema());
267
                        builder.append(".");
268
                        builder.append(jdbcParameters.getTable());
269
                        return builder.toString();
270
                }
271
            }
272
        }
273
        return null;
274
    }
140 275
}

Also available in: Unified diff