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