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 / databaseworkspace / RepositoryAddTablePanel.java @ 47784

History | View | Annotate | Download (9.43 KB)

1
package org.gvsig.geodb.databaseworkspace;
2

    
3
import java.util.ArrayList;
4
import java.util.Collections;
5
import java.util.Comparator;
6
import java.util.List;
7
import javax.swing.DefaultListModel;
8
import javax.swing.JComponent;
9
import javax.swing.ListModel;
10
import javax.swing.event.ChangeEvent;
11
import javax.swing.event.ListSelectionEvent;
12
import javax.swing.event.TreeSelectionEvent;
13
import javax.swing.tree.TreeModel;
14
import javax.swing.tree.TreePath;
15
import org.apache.commons.lang3.StringUtils;
16
import org.gvsig.app.ApplicationLocator;
17
import org.gvsig.app.ApplicationManager;
18
import org.gvsig.app.project.Project;
19
import org.gvsig.app.project.documents.Document;
20
import org.gvsig.app.project.documents.table.TableDocument;
21
import org.gvsig.app.project.documents.table.TableManager;
22
import org.gvsig.fmap.dal.DALLocator;
23
import org.gvsig.fmap.dal.DataManager;
24
import org.gvsig.fmap.dal.DataStore;
25
import org.gvsig.fmap.dal.DataStoreParameters;
26
import org.gvsig.fmap.dal.feature.FeatureStore;
27
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
28
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
29
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
30
import org.gvsig.fmap.dal.swing.DALSwingLocator;
31
import org.gvsig.fmap.mapcontext.layers.FLayer;
32
import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
33
import org.gvsig.tools.swing.api.Component;
34
import org.gvsig.tools.swing.api.ToolsSwingLocator;
35
import org.gvsig.tools.swing.api.ToolsSwingManager;
36
import org.gvsig.tools.swing.api.ToolsSwingUtils;
37
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
38
import org.gvsig.tools.util.LabeledValue;
39
import org.gvsig.tools.util.LabeledValueImpl;
40
import org.slf4j.Logger;
41
import org.slf4j.LoggerFactory;
42

    
43
/**
44
 *
45
 * @author jjdelcerro
46
 */
47
@SuppressWarnings("UseSpecificCatch")
48
public class RepositoryAddTablePanel
49
        extends RepositoryAddTablePanelView
50
        implements Component {
51

    
52
    private static final Logger LOGGER = LoggerFactory.getLogger(RepositoryAddTablePanel.class);
53

    
54
    private static final int TAB_LAYERS = 0;
55
    private static final int TAB_TABLES = 1;
56
    private static final int TAB_DATABASETABLES = 2;
57

    
58
    private PickerController<JDBCServerExplorerParameters> connectionPicker;
59

    
60
    public RepositoryAddTablePanel() {
61
        this.initComponents();
62
    }
63

    
64
    private void initComponents() {
65
        ApplicationManager application = ApplicationLocator.getManager();
66
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
67

    
68
        TreeModel layersModel = application.createProjectLayersTreeModel();
69
        this.treeLayers.setModel(layersModel);
70
        this.treeLayers.getSelectionModel().addTreeSelectionListener((TreeSelectionEvent e) -> {
71
            doUpdateTableName();
72
        });
73

    
74
        Project project = application.getCurrentProject();
75
        final List<Document> docs = project.getDocuments(TableManager.TYPENAME);
76
        if (docs != null) {
77
            DefaultListModel<LabeledValue<FeatureStore>> tablesModel = new DefaultListModel<>();
78
            for (Document doc : docs) {
79
                TableDocument table = (TableDocument) doc;
80
                tablesModel.addElement(
81
                        new LabeledValueImpl<>(table.getName(), table.getFeatureStore())
82
                );
83
            }
84
            this.lstTables.setModel(tablesModel);
85
            this.lstTables.addListSelectionListener((ListSelectionEvent e) -> {
86
                if (e.getValueIsAdjusting()) {
87
                    return;
88
                }
89
                doUpdateTableName();
90
            });
91

    
92
            toolsSwingManager.addClearButton(this.txtTableName);
93
            toolsSwingManager.setDefaultPopupMenu(this.txtTableName);
94
        }
95
        this.connectionPicker = DALSwingLocator.getSwingManager().createJDBCConnectionPickerController(
96
                this.cboConnections,
97
                this.btnAddConnection
98
        );
99
        this.connectionPicker.addChangeListener((ChangeEvent e) -> {
100
            doUpdateDatabaseTables();
101
        });
102
        this.lstDatabaseTables.addListSelectionListener((ListSelectionEvent e) -> {
103
            if (e.getValueIsAdjusting()) {
104
                return;
105
            }
106
            doUpdateTableName();
107
        });
108
        ToolsSwingUtils.ensureRowsCols(this, 20, 60, 25, 100);
109

    
110
    }
111

    
112
    @Override
113
    public JComponent asJComponent() {
114
        return this;
115
    }
116

    
117
    private void doUpdateDatabaseTables() {
118
        try {
119
            DataManager dataManager = DALLocator.getDataManager();
120
            JDBCServerExplorerParameters explorerParams = this.connectionPicker.get();
121
            JDBCServerExplorer explorer = (JDBCServerExplorer) dataManager.openServerExplorer(explorerParams.getProviderName(), explorerParams);
122
            List<LabeledValue<JDBCStoreParameters>> tables = new ArrayList<>();
123
            for (DataStoreParameters dataStoreParameters : explorer.list()) {
124
                JDBCStoreParameters p = (JDBCStoreParameters) dataStoreParameters;
125
                tables.add(new LabeledValueImpl<>(p.getTable(), p));
126
            }
127
            Collections.sort(tables, new Comparator<LabeledValue<JDBCStoreParameters>>() {
128
                @Override
129
                public int compare(LabeledValue<JDBCStoreParameters> o1, LabeledValue<JDBCStoreParameters> o2) {
130
                    return StringUtils.compare(o1.getLabel(), o2.getLabel());
131
                }
132
            });
133
            DefaultListModel<LabeledValue<JDBCStoreParameters>> tablesModel = new DefaultListModel<>();
134
            for (LabeledValue<JDBCStoreParameters> table : tables) {
135
                tablesModel.addElement(table);
136
            }
137
            this.lstDatabaseTables.setModel(tablesModel);
138
        } catch (Exception ex) {
139
            LOGGER.warn("Can't update list of database tables.", ex);
140
        }
141
    }
142

    
143
    private void doUpdateTableName() {
144
        switch (this.tabStores.getSelectedIndex()) {
145
            case TAB_LAYERS:
146
                TreePath selected = this.treeLayers.getSelectionPath();
147
                FLayer layer = (FLayer) selected.getLastPathComponent();
148
                if (layer instanceof SingleLayer) {
149
                    this.txtTableName.setText(layer.getName());
150
                }
151
                break;
152
            case TAB_TABLES:
153
                int[] selecteds = this.lstTables.getSelectedIndices();
154
                if (selecteds.length > 1) {
155
                    this.txtTableName.setText("");
156
                    this.txtTableName.setEnabled(false);
157
                } else {
158
                    this.txtTableName.setEnabled(true);
159
                    LabeledValue<FeatureStore> item = (LabeledValue<FeatureStore>) this.lstTables.getSelectedValue();
160
                    if (item != null) {
161
                        this.txtTableName.setText(item.getLabel());
162
                    }
163
                }
164
                break;
165
            case TAB_DATABASETABLES:
166
                int[] dbselecteds = this.lstTables.getSelectedIndices();
167
                if (dbselecteds.length > 1) {
168
                    this.txtTableName.setText("");
169
                    this.txtTableName.setEnabled(false);
170
                } else {
171
                    this.txtTableName.setEnabled(true);
172
                    LabeledValue<JDBCStoreParameters> item = (LabeledValue<JDBCStoreParameters>) this.lstDatabaseTables.getSelectedValue();
173
                    if (item != null) {
174
                        this.txtTableName.setText(item.getLabel());
175
                    }
176
                }
177
                break;
178
            default:
179
                break;
180
        }
181
    }
182

    
183
    public List<LabeledValue<DataStoreParameters>> getDataStoreParameters() {
184
        switch (this.tabStores.getSelectedIndex()) {
185
            case TAB_LAYERS:
186
                TreePath selectedPath = this.treeLayers.getSelectionPath();
187
                FLayer layer = (FLayer) selectedPath.getLastPathComponent();
188
                if (layer instanceof SingleLayer) {
189
                    DataStore store = ((SingleLayer) layer).getDataStore();
190
                    DataStoreParameters params = store.getParameters();
191
                    return Collections.singletonList(new LabeledValueImpl<>(store.getName(), params));
192
                }
193
                return Collections.EMPTY_LIST;
194
            case TAB_TABLES:
195
                List<LabeledValue<DataStoreParameters>> parameters = new ArrayList<>();
196
                ListModel<LabeledValue<FeatureStore>> tablesModel = this.lstTables.getModel();
197
                int[] selectedsTables = this.lstTables.getSelectedIndices();
198
                for (int selected : selectedsTables) {
199
                    LabeledValue<FeatureStore> selectedTable = tablesModel.getElementAt(selected);
200
                    parameters.add(new LabeledValueImpl<>(selectedTable.getLabel(), selectedTable.getValue().getParameters()));
201
                }
202
                return parameters;
203

    
204
            case TAB_DATABASETABLES:
205
                List<LabeledValue<DataStoreParameters>> dbparameters = new ArrayList<>();
206
                ListModel<LabeledValue<JDBCStoreParameters>> dbtablesModel = this.lstDatabaseTables.getModel();
207
                int[] dbselectedsTables = this.lstDatabaseTables.getSelectedIndices();
208
                for (int selected : dbselectedsTables) {
209
                    LabeledValue<JDBCStoreParameters> selectedTable = dbtablesModel.getElementAt(selected);
210
                    dbparameters.add(new LabeledValueImpl<>(selectedTable.getLabel(), selectedTable.getValue()));
211
                }
212
                return dbparameters;
213

    
214
            default:
215
                return Collections.EMPTY_LIST;
216
        }
217
    }
218
}