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 | } |