Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / extension / geometriespalette / GeometriesPaletteExtension.java @ 47430

History | View | Annotate | Download (6.52 KB)

1
package org.gvsig.app.extension.geometriespalette;
2

    
3
import java.awt.Dimension;
4
import javax.swing.SwingUtilities;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.andami.PluginServices;
7
import org.gvsig.andami.plugins.Extension;
8
import org.gvsig.app.ApplicationLocator;
9
import org.gvsig.app.ApplicationManager;
10
import org.gvsig.app.addlayer.AddLayerDialog;
11
import static org.gvsig.app.extension.AddLayer.createAddLayerDialog;
12
import org.gvsig.app.gui.WizardPanel;
13
import org.gvsig.app.project.documents.Document;
14
import org.gvsig.app.project.documents.view.ViewDocument;
15
import org.gvsig.app.project.documents.view.ViewManager;
16
import org.gvsig.fmap.crs.CRSFactory;
17
import org.gvsig.fmap.dal.DALLocator;
18
import org.gvsig.fmap.dal.DataManager;
19
import org.gvsig.fmap.dal.DataStore;
20
import org.gvsig.fmap.dal.feature.FeatureStore;
21
import org.gvsig.fmap.mapcontext.MapContext;
22
import org.gvsig.fmap.mapcontext.MapContextLocator;
23
import org.gvsig.fmap.mapcontext.MapContextManager;
24
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
25
import org.gvsig.fmap.mapcontrol.MapControl;
26
import org.gvsig.fmap.mapcontrol.MapControlLocator;
27
import org.gvsig.fmap.mapcontrol.MapControlManager;
28
import org.gvsig.tools.arguments.Arguments;
29
import org.gvsig.tools.dispose.DisposeUtils;
30
import org.gvsig.tools.swing.api.ToolsSwingLocator;
31
import org.gvsig.tools.swing.api.ToolsSwingUtils;
32
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
33

    
34
/**
35
 *
36
 * @author gvSIG Team
37
 */
38
@SuppressWarnings("UseSpecificCatch")
39
public class GeometriesPaletteExtension extends Extension {
40
    
41
    @Override
42
    public void initialize() {
43
    }
44

    
45
    @Override
46
    public void execute(String actionCommand) {
47
        if (StringUtils.equalsIgnoreCase("tools-open-geometriespalette", actionCommand)) {
48
            doOpenGeometriesPalette();
49
        }
50
    }
51

    
52
    @Override
53
    public void execute(String command, Object[] args) {
54
        Arguments arguments = Arguments.create(args);
55
        
56
        if (StringUtils.equalsIgnoreCase("tools-open-geometriespalette", command)) {
57
            String labelattr = (String) arguments.get("label", String.class, null);
58
            String tableName = (String) arguments.get("tableName", String.class, null);
59
            String title = (String) arguments.get("title", String.class, null);
60
            String filter = (String) arguments.get("filter", String.class, null);
61
            if( StringUtils.isBlank(tableName) ) {
62
                doOpenGeometriesPalette();
63
                return;
64
            }
65
            doOpenGeometriesPalette(tableName, labelattr, title, filter);
66
        }
67
    }
68
    
69
    @SuppressWarnings("SleepWhileInLoop")
70
    private void doOpenGeometriesPalette() {
71
        AddLayerDialog addLayerDialog = null;
72

    
73
        final WindowManager windowManager = ToolsSwingLocator.getWindowManager();
74
        MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
75
        MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
76

    
77
        final MapContext mapContext = mapContextManager.createMapContext();
78
        MapControl mapControl = null;
79
        try {
80
            ApplicationManager application = ApplicationLocator.getApplicationManager();
81
            ViewDocument view = (ViewDocument) application.getCurrentProject().getFirstDocument(ViewDocument.class);
82
            if( view == null || view.getProjection()==null ) {
83
                mapContext.setProjection(CRSFactory.getCRS("EPSG:4326"));
84
            } else {
85
                mapContext.setProjection(view.getProjection());
86
            }
87
            mapControl = mapControlManager.createJMapControlPanel(mapContext);
88
            
89
            addLayerDialog = createAddLayerDialog(mapControl, mapContext, null);
90
            Dimension screensize = ToolsSwingUtils.getCurrentScreenSize();            
91
            ToolsSwingUtils.ensureHeightWitdh(
92
                    addLayerDialog, 
93
                    3*(screensize.height/4), 
94
                    2*(screensize.width/4), 
95
                    7*(screensize.height/8), 
96
                    3*(screensize.width/4)
97
            );
98
            windowManager.showWindow(
99
                    addLayerDialog,
100
                    "Select palette layer",
101
                    WindowManager.MODE.DIALOG
102
            );
103

    
104
            if (addLayerDialog.isAccepted()) {
105
                if (addLayerDialog.getSelectedTab() instanceof WizardPanel) {
106
                    WizardPanel panel = (WizardPanel) addLayerDialog.getSelectedTab();
107
                    panel.executeWizard();
108
                    // Las capas se cargan en segundo plano, asi que si tratamos de 
109
                    // acceder a ellas ya mismo aun no estan cargadas.
110
                    // No es muy ortodox pero nos esperaremos un poco.
111
                    Thread task = new Thread(() -> {
112
                        for (int i = 0; i < 30; i++) {
113
                            try { Thread.sleep(1000); } catch (Exception ex) { }
114
                            if (!mapContext.getLayers().isEmpty()) {
115
                                FLyrVect layer = (FLyrVect) mapContext.getLayers().getFirstActiveVectorLayer();
116
                                SwingUtilities.invokeLater(() -> {
117
                                    GeometriesPalettePanel.showPalette(layer.getFeatureStore(), null, layer.getName(), null);
118
                                });
119
                                return;
120
                            }
121
                        }
122
                        // TODO: Avisar que no se ha cargado ninguna capa ?
123
                    }, "GeometriesPaleteLoader");
124
                    task.start();
125
                }
126
            }
127
        } catch (Exception ex) {
128
            logger.warn("Can't open palete from layer",ex);
129
        } finally {
130
            DisposeUtils.disposeQuietly(addLayerDialog);
131
            DisposeUtils.disposeQuietly(mapControl);
132
            DisposeUtils.disposeQuietly(mapContext);
133
        }
134

    
135
    }
136

    
137
    private void doOpenGeometriesPalette(String tableName, String labelattr, String title, String filter) {
138
        DataManager dataManager = DALLocator.getDataManager();
139
        DataStore store = dataManager.getStoresRepository().getStore(tableName);
140
        if( !(store instanceof FeatureStore) ) {
141
            logger.warn("The table name '"+tableName+"' is not valid.");
142
            return;
143
        }
144
        FeatureStore featureStore = (FeatureStore) store;
145
        GeometriesPalettePanel.showPalette(featureStore, labelattr, title, filter);
146
    }
147

    
148
    @Override
149
    public boolean isEnabled() {
150
        return true;
151
    }
152

    
153
    @Override
154
    public boolean isVisible() {
155
        return true;
156
    }
157

    
158
}