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 44304 jjdelcerro
package org.gvsig.geodb.databaseworkspace;
2
3 46336 jjdelcerro
import java.util.ArrayList;
4
import java.util.Collections;
5 47784 jjdelcerro
import java.util.Comparator;
6 44304 jjdelcerro
import java.util.List;
7
import javax.swing.DefaultListModel;
8
import javax.swing.JComponent;
9 46336 jjdelcerro
import javax.swing.ListModel;
10
import javax.swing.event.ChangeEvent;
11 44304 jjdelcerro
import javax.swing.event.ListSelectionEvent;
12
import javax.swing.event.TreeSelectionEvent;
13
import javax.swing.tree.TreeModel;
14
import javax.swing.tree.TreePath;
15 47784 jjdelcerro
import org.apache.commons.lang3.StringUtils;
16 44304 jjdelcerro
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 46336 jjdelcerro
import org.gvsig.fmap.dal.DALLocator;
23
import org.gvsig.fmap.dal.DataManager;
24
import org.gvsig.fmap.dal.DataStore;
25 44304 jjdelcerro
import org.gvsig.fmap.dal.DataStoreParameters;
26
import org.gvsig.fmap.dal.feature.FeatureStore;
27 46336 jjdelcerro
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 44304 jjdelcerro
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 46336 jjdelcerro
import org.gvsig.tools.swing.api.ToolsSwingUtils;
37
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
38 44304 jjdelcerro
import org.gvsig.tools.util.LabeledValue;
39
import org.gvsig.tools.util.LabeledValueImpl;
40 46336 jjdelcerro
import org.slf4j.Logger;
41
import org.slf4j.LoggerFactory;
42 44304 jjdelcerro
43
/**
44
 *
45
 * @author jjdelcerro
46
 */
47 46336 jjdelcerro
@SuppressWarnings("UseSpecificCatch")
48
public class RepositoryAddTablePanel
49
        extends RepositoryAddTablePanelView
50
        implements Component {
51 44304 jjdelcerro
52 46336 jjdelcerro
    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 44304 jjdelcerro
    public RepositoryAddTablePanel() {
61
        this.initComponents();
62
    }
63 46336 jjdelcerro
64 44304 jjdelcerro
    private void initComponents() {
65
        ApplicationManager application = ApplicationLocator.getManager();
66
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
67 46336 jjdelcerro
68 44304 jjdelcerro
        TreeModel layersModel = application.createProjectLayersTreeModel();
69
        this.treeLayers.setModel(layersModel);
70 46336 jjdelcerro
        this.treeLayers.getSelectionModel().addTreeSelectionListener((TreeSelectionEvent e) -> {
71
            doUpdateTableName();
72 44304 jjdelcerro
        });
73 46336 jjdelcerro
74 44304 jjdelcerro
        Project project = application.getCurrentProject();
75
        final List<Document> docs = project.getDocuments(TableManager.TYPENAME);
76 46336 jjdelcerro
        if (docs != null) {
77 44304 jjdelcerro
            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 46336 jjdelcerro
            this.lstTables.addListSelectionListener((ListSelectionEvent e) -> {
86
                if (e.getValueIsAdjusting()) {
87
                    return;
88 44304 jjdelcerro
                }
89 46336 jjdelcerro
                doUpdateTableName();
90 44304 jjdelcerro
            });
91 46336 jjdelcerro
92 44304 jjdelcerro
            toolsSwingManager.addClearButton(this.txtTableName);
93
            toolsSwingManager.setDefaultPopupMenu(this.txtTableName);
94
        }
95 46336 jjdelcerro
        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 44304 jjdelcerro
110
    }
111 46336 jjdelcerro
112 44304 jjdelcerro
    @Override
113
    public JComponent asJComponent() {
114
        return this;
115
    }
116 46336 jjdelcerro
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 47784 jjdelcerro
            List<LabeledValue<JDBCStoreParameters>> tables = new ArrayList<>();
123 46336 jjdelcerro
            for (DataStoreParameters dataStoreParameters : explorer.list()) {
124
                JDBCStoreParameters p = (JDBCStoreParameters) dataStoreParameters;
125 47784 jjdelcerro
                tables.add(new LabeledValueImpl<>(p.getTable(), p));
126 46336 jjdelcerro
            }
127 47784 jjdelcerro
            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 46336 jjdelcerro
            this.lstDatabaseTables.setModel(tablesModel);
138
        } catch (Exception ex) {
139
            LOGGER.warn("Can't update list of database tables.", ex);
140
        }
141
    }
142
143 44304 jjdelcerro
    private void doUpdateTableName() {
144 46336 jjdelcerro
        switch (this.tabStores.getSelectedIndex()) {
145
            case TAB_LAYERS:
146 44304 jjdelcerro
                TreePath selected = this.treeLayers.getSelectionPath();
147
                FLayer layer = (FLayer) selected.getLastPathComponent();
148 46336 jjdelcerro
                if (layer instanceof SingleLayer) {
149 44304 jjdelcerro
                    this.txtTableName.setText(layer.getName());
150
                }
151
                break;
152 46336 jjdelcerro
            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 44304 jjdelcerro
                }
164
                break;
165 46336 jjdelcerro
            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 44304 jjdelcerro
            default:
179
                break;
180
        }
181
    }
182 46336 jjdelcerro
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 44304 jjdelcerro
                }
193 46336 jjdelcerro
                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 44304 jjdelcerro
                }
202 46336 jjdelcerro
                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 44304 jjdelcerro
            default:
215 46336 jjdelcerro
                return Collections.EMPTY_LIST;
216 44304 jjdelcerro
        }
217
    }
218
}