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 / WorkspaceConfigurationPanel.java @ 46542
History | View | Annotate | Download (17.3 KB)
1 |
package org.gvsig.geodb.databaseworkspace; |
---|---|
2 |
|
3 |
import java.awt.BorderLayout; |
4 |
import java.awt.event.ActionEvent; |
5 |
import java.awt.event.ActionListener; |
6 |
import javax.swing.JButton; |
7 |
import javax.swing.JComponent; |
8 |
import javax.swing.JOptionPane; |
9 |
import javax.swing.event.ChangeEvent; |
10 |
import org.apache.commons.lang.StringUtils; |
11 |
import org.gvsig.featureform.swing.JFeaturesForm; |
12 |
import org.gvsig.fmap.dal.DALLocator; |
13 |
import org.gvsig.fmap.dal.DataManager; |
14 |
import org.gvsig.fmap.dal.DataStoreParameters; |
15 |
import org.gvsig.fmap.dal.DatabaseWorkspaceManager; |
16 |
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYID; |
17 |
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYLABEL; |
18 |
import org.gvsig.fmap.dal.StoresRepository; |
19 |
import org.gvsig.fmap.dal.feature.Feature; |
20 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
21 |
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters; |
22 |
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters; |
23 |
import org.gvsig.fmap.dal.swing.DALSwingLocator; |
24 |
import org.gvsig.fmap.dal.swing.DataSwingManager; |
25 |
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel; |
26 |
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager; |
27 |
import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel; |
28 |
import org.gvsig.tools.ToolsLocator; |
29 |
import org.gvsig.tools.i18n.I18nManager; |
30 |
import org.gvsig.tools.swing.api.Component; |
31 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
32 |
import org.gvsig.tools.swing.api.ToolsSwingUtils; |
33 |
import org.gvsig.tools.swing.api.pickercontroller.PickerController; |
34 |
import org.gvsig.tools.swing.api.windowmanager.Dialog; |
35 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager; |
36 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2; |
37 |
import org.gvsig.tools.util.LabeledValue; |
38 |
import org.slf4j.Logger; |
39 |
import org.slf4j.LoggerFactory; |
40 |
|
41 |
/**
|
42 |
*
|
43 |
* @author jjdelcerro
|
44 |
*/
|
45 |
@SuppressWarnings("UseSpecificCatch") |
46 |
public class WorkspaceConfigurationPanel |
47 |
extends WorkspaceConfigurationPanelView
|
48 |
implements Component { |
49 |
|
50 |
private static final Logger LOGGER = LoggerFactory.getLogger(WorkspaceConfigurationPanel.class); |
51 |
private FeatureStoreSearchPanel configurationSearch;
|
52 |
private FeatureStoreSearchPanel repositorySearch;
|
53 |
private FeatureStoreSearchPanel resourcesSearch;
|
54 |
|
55 |
private class TableController { |
56 |
|
57 |
private final JButton btnCreate; |
58 |
private final JButton btnDrop; |
59 |
// private final JButton btnSearch;
|
60 |
private final JButton btnShowForm; |
61 |
private final int tableid; |
62 |
|
63 |
public TableController(
|
64 |
int tableid,
|
65 |
JButton btnCreate,
|
66 |
JButton btnDrop // , JButton btnSearch |
67 |
, |
68 |
JButton btnShowForm
|
69 |
) { |
70 |
this.tableid = tableid;
|
71 |
this.btnCreate = btnCreate;
|
72 |
this.btnDrop = btnDrop;
|
73 |
// this.btnSearch = btnSearch;
|
74 |
this.btnShowForm = btnShowForm;
|
75 |
this.btnCreate.addActionListener(new ActionListener() { |
76 |
@Override
|
77 |
public void actionPerformed(ActionEvent e) { |
78 |
doCreate(); |
79 |
} |
80 |
}); |
81 |
this.btnDrop.addActionListener(new ActionListener() { |
82 |
@Override
|
83 |
public void actionPerformed(ActionEvent e) { |
84 |
doDrop(); |
85 |
} |
86 |
}); |
87 |
this.btnShowForm.addActionListener(new ActionListener() { |
88 |
@Override
|
89 |
public void actionPerformed(ActionEvent e) { |
90 |
doShowForm(); |
91 |
} |
92 |
}); |
93 |
// this.btnSearch.addActionListener(new ActionListener() {
|
94 |
// @Override
|
95 |
// public void actionPerformed(ActionEvent e) {
|
96 |
// doSearch();
|
97 |
// }
|
98 |
// });
|
99 |
} |
100 |
|
101 |
private void doCreate() { |
102 |
DataManager dataManager = DALLocator.getDataManager(); |
103 |
DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection()); |
104 |
if (workspace.existsTable(this.tableid)) { |
105 |
return;
|
106 |
} |
107 |
workspace.createTable(this.tableid);
|
108 |
} |
109 |
|
110 |
private void doShowForm() { |
111 |
try {
|
112 |
DataManager dataManager = DALLocator.getDataManager(); |
113 |
DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection()); |
114 |
if (!workspace.existsTable(this.tableid)) { |
115 |
return;
|
116 |
} |
117 |
FeatureStore store = workspace.getTable(this.tableid);
|
118 |
DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager(); |
119 |
JFeaturesForm form = dalSwingManager.createJFeaturesForm(store); |
120 |
WindowManager winManager = ToolsSwingLocator.getWindowManager(); |
121 |
winManager.showWindow( |
122 |
form.asJComponent(), |
123 |
"Resources",
|
124 |
WindowManager.MODE.WINDOW |
125 |
); |
126 |
} catch (Exception ex) { |
127 |
LOGGER.warn("Can't show form of resources table.", ex);
|
128 |
} |
129 |
} |
130 |
|
131 |
private void doDrop() { |
132 |
DataManager dataManager = DALLocator.getDataManager(); |
133 |
DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection()); |
134 |
if (!workspace.existsTable(this.tableid)) { |
135 |
return;
|
136 |
} |
137 |
workspace.dropTable(this.tableid);
|
138 |
} |
139 |
|
140 |
// private void doSearch() {
|
141 |
// try {
|
142 |
// DataManager dataManager = DALLocator.getDataManager();
|
143 |
// DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
|
144 |
// if (!workspace.existsTable(this.tableid)) {
|
145 |
// return;
|
146 |
// }
|
147 |
// FeatureStore store = workspace.getTable(this.tableid);
|
148 |
// DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
|
149 |
// FeatureStoreSearchPanel search = dalSwingManager.createFeatureStoreSearchPanel(store);
|
150 |
// WindowManager winManager = ToolsSwingLocator.getWindowManager();
|
151 |
// winManager.showWindow(
|
152 |
// search.asJComponent(),
|
153 |
// "Resources",
|
154 |
// WindowManager.MODE.WINDOW
|
155 |
// );
|
156 |
// } catch (Exception ex) {
|
157 |
// LOGGER.warn("Can't show search panel for resources table.", ex);
|
158 |
// }
|
159 |
// }
|
160 |
public void setEnabled(boolean enabled) { |
161 |
this.btnCreate.setEnabled(enabled);
|
162 |
this.btnDrop.setEnabled(enabled);
|
163 |
// this.btnSearch.setEnabled(enabled);
|
164 |
this.btnShowForm.setEnabled(enabled);
|
165 |
} |
166 |
} |
167 |
|
168 |
private TableController resourcesTableController;
|
169 |
private TableController repositoryTableController;
|
170 |
private TableController configurationTableController;
|
171 |
private PickerController<JDBCServerExplorerParameters> connectionPicker;
|
172 |
|
173 |
public WorkspaceConfigurationPanel() {
|
174 |
this.initComponents();
|
175 |
} |
176 |
|
177 |
private void initComponents() { |
178 |
this.connectionPicker = DALSwingLocator.getSwingManager().createJDBCConnectionPickerController(
|
179 |
this.cboConnections,
|
180 |
this.btnAddConnection
|
181 |
); |
182 |
this.connectionPicker.addChangeListener((ChangeEvent e) -> { |
183 |
doUpdateEnableComponents(); |
184 |
doUpdateStoresRepositoryInfo(); |
185 |
}); |
186 |
this.resourcesTableController = new TableController( |
187 |
DatabaseWorkspaceManager.TABLE_RESOURCES, |
188 |
btnCreateResourceTable, |
189 |
btnDropResourceTable, |
190 |
btnShowResourceTable |
191 |
); |
192 |
this.repositoryTableController = new TableController( |
193 |
DatabaseWorkspaceManager.TABLE_REPOSITORY, |
194 |
btnCreateRepositoryTable, |
195 |
btnDropRepositoryTable, |
196 |
btnShowRepositoryTable |
197 |
); |
198 |
this.configurationTableController = new TableController( |
199 |
DatabaseWorkspaceManager.TABLE_CONFIGURATION, |
200 |
btnCreateConfigurationTable, |
201 |
btnDropConfigurationTable, |
202 |
btnShowConfigurationTable |
203 |
); |
204 |
|
205 |
this.btnRepositoryAddTable.addActionListener((ActionEvent e) -> { |
206 |
doAddTableToRepository(); |
207 |
}); |
208 |
|
209 |
this.btnConnectToRepository.addActionListener((ActionEvent e) -> { |
210 |
doConnectToRepository(); |
211 |
}); |
212 |
this.btnShowRepositoryTableParameters.addActionListener((ActionEvent e) -> { |
213 |
doShowParametersOfRepositoryTable(); |
214 |
}); |
215 |
this.btnFixRepositoryEntries.addActionListener((ActionEvent e) -> { |
216 |
doFixRepositoryEntriesToSelectedConnection(); |
217 |
}); |
218 |
this.pnlConfiguration.setLayout(new BorderLayout()); |
219 |
this.pnlRepository.setLayout(new BorderLayout()); |
220 |
this.pnlResorces.setLayout(new BorderLayout()); |
221 |
|
222 |
|
223 |
ToolsSwingUtils.ensureRowsCols(this, 20, 150, 25, 200); |
224 |
doUpdateEnableComponents(); |
225 |
} |
226 |
|
227 |
@Override
|
228 |
public JComponent asJComponent() { |
229 |
return this; |
230 |
} |
231 |
|
232 |
public JDBCServerExplorerParameters getConnection() {
|
233 |
JDBCServerExplorerParameters conn = this.connectionPicker.get();
|
234 |
return conn;
|
235 |
} |
236 |
|
237 |
private void doUpdateEnableComponents() { |
238 |
boolean theEnabled = this.getConnection() != null; |
239 |
this.repositoryTableController.setEnabled(theEnabled);
|
240 |
this.resourcesTableController.setEnabled(theEnabled);
|
241 |
this.configurationTableController.setEnabled(theEnabled);
|
242 |
this.btnRepositoryAddTable.setEnabled(theEnabled);
|
243 |
this.btnConnectToRepository.setEnabled(theEnabled);
|
244 |
} |
245 |
|
246 |
private void doAddTableToRepository() { |
247 |
final RepositoryAddTablePanel panel = new RepositoryAddTablePanel(); |
248 |
WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager(); |
249 |
final Dialog dialog = winManager.createDialog( |
250 |
panel, |
251 |
"Add table to repository",
|
252 |
null,
|
253 |
WindowManager_v2.BUTTONS_OK_CANCEL |
254 |
); |
255 |
dialog.addActionListener(new ActionListener() { |
256 |
@Override
|
257 |
public void actionPerformed(ActionEvent e) { |
258 |
if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
|
259 |
DataManager dataManager = DALLocator.getDataManager(); |
260 |
DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection()); |
261 |
for (LabeledValue<DataStoreParameters> p : panel.getDataStoreParameters()) {
|
262 |
if (p == null) { |
263 |
continue;
|
264 |
} |
265 |
if (!workspace.writeStoresRepositoryEntry(p.getLabel(), p.getValue())) {
|
266 |
LOGGER.warn("Can't add table '" + p.getLabel() + "' to repository"); |
267 |
// TODO: mensaje al usuario,no se ha podido crear
|
268 |
} |
269 |
} |
270 |
} |
271 |
} |
272 |
}); |
273 |
dialog.show(WindowManager.MODE.DIALOG); |
274 |
} |
275 |
|
276 |
private void doUpdateStoresRepositoryInfo() { |
277 |
DataManager dataManager = DALLocator.getDataManager(); |
278 |
DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager(); |
279 |
|
280 |
DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection()); |
281 |
String id = workspace.get(CONFIG_NAME_STORESREPOSITORYID);
|
282 |
String label = workspace.get(CONFIG_NAME_STORESREPOSITORYLABEL);
|
283 |
this.txtStoresRepositoryId.setText(StringUtils.defaultIfBlank(id, "")); |
284 |
this.txtStoresRepositoryLabel.setText(StringUtils.defaultIfBlank(label, "")); |
285 |
|
286 |
this.btnConnectToRepository.setEnabled(!StringUtils.isBlank(id));
|
287 |
|
288 |
try {
|
289 |
this.pnlConfiguration.removeAll();
|
290 |
this.configurationSearch = dataSwingManager.createFeatureStoreSearchPanel(
|
291 |
workspace.getTable(DatabaseWorkspaceManager.TABLE_CONFIGURATION) |
292 |
); |
293 |
this.pnlConfiguration.add(this.configurationSearch.asJComponent(), BorderLayout.CENTER); |
294 |
this.configurationSearch.setFilterOnlyMode(true); |
295 |
this.configurationSearch.setShowActions(false); |
296 |
// this.configurationSearch.setAllowCollapseSearchCondition(true);
|
297 |
// this.configurationSearch.setCollapseSearchCondition(true);
|
298 |
} catch (Exception ex) { |
299 |
|
300 |
} |
301 |
try {
|
302 |
this.pnlRepository.removeAll();
|
303 |
this.repositorySearch = dataSwingManager.createFeatureStoreSearchPanel(
|
304 |
workspace.getTable(DatabaseWorkspaceManager.TABLE_REPOSITORY) |
305 |
); |
306 |
this.pnlRepository.add(this.repositorySearch.asJComponent(), BorderLayout.CENTER); |
307 |
this.repositorySearch.setFilterOnlyMode(true); |
308 |
this.repositorySearch.setShowActions(false); |
309 |
// this.repositorySearch.setAllowCollapseSearchCondition(true);
|
310 |
// this.repositorySearch.setCollapseSearchCondition(true);
|
311 |
} catch (Exception ex) { |
312 |
|
313 |
} |
314 |
try {
|
315 |
this.pnlResorces.removeAll();
|
316 |
this.resourcesSearch = dataSwingManager.createFeatureStoreSearchPanel(
|
317 |
workspace.getTable(DatabaseWorkspaceManager.TABLE_RESOURCES) |
318 |
); |
319 |
this.resourcesSearch.setFilterOnlyMode(true); |
320 |
this.resourcesSearch.setShowActions(false); |
321 |
// this.resourcesSearch.setAllowCollapseSearchCondition(true);
|
322 |
// this.resourcesSearch.setCollapseSearchCondition(true);
|
323 |
this.pnlResorces.add(this.resourcesSearch.asJComponent(), BorderLayout.CENTER); |
324 |
} catch (Exception ex) { |
325 |
|
326 |
} |
327 |
|
328 |
this.invalidate();
|
329 |
} |
330 |
|
331 |
private void doConnectToRepository() { |
332 |
DataManager dataManager = DALLocator.getDataManager(); |
333 |
DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection()); |
334 |
StoresRepository repo = workspace.getStoresRepository(); |
335 |
dataManager.getStoresRepository().addRepository(repo); |
336 |
} |
337 |
|
338 |
private void doShowParametersOfRepositoryTable() { |
339 |
try {
|
340 |
DataManager dataManager = DALLocator.getDataManager(); |
341 |
DataStoreParametersPanelManager manager = DALSwingLocator.getDataStoreParametersPanelManager(); |
342 |
FeatureStore store = this.repositorySearch.getStore();
|
343 |
Feature f = store.findFirst(this.repositorySearch.getFilterForSelectedFeature());
|
344 |
if (f == null) { |
345 |
return;
|
346 |
} |
347 |
String name = f.getString(DatabaseWorkspaceManager.FIELD_REPOSITORY_NAME);
|
348 |
DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection()); |
349 |
StoresRepository repository = workspace.getStoresRepository(); |
350 |
DataStoreParameters parameters = repository.get(name); |
351 |
DataStoreParametersPanel panel = manager.createDataStoreParametersPanel(parameters); |
352 |
Dialog dialog = manager.createPropertiesDialog(parameters, panel);
|
353 |
dialog.addActionListener((ActionEvent ae) -> {
|
354 |
switch(ae.getID() ) {
|
355 |
case WindowManager_v2.BUTTON_APPLY:
|
356 |
manager.showAdvancedPropertiesDialog(parameters); |
357 |
break;
|
358 |
case WindowManager_v2.BUTTON_OK:
|
359 |
panel.fetchParameters(parameters); |
360 |
workspace.writeStoresRepositoryEntry(name, parameters); |
361 |
break;
|
362 |
case WindowManager_v2.BUTTON_CANCEL:
|
363 |
break;
|
364 |
} |
365 |
}); |
366 |
dialog.show(WindowManager.MODE.WINDOW); |
367 |
} catch (Exception ex) { |
368 |
LOGGER.warn("Can't show parameters of repository table", ex);
|
369 |
} |
370 |
} |
371 |
|
372 |
private void doFixRepositoryEntriesToSelectedConnection() { |
373 |
DataManager dataManager = DALLocator.getDataManager(); |
374 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
375 |
|
376 |
JDBCServerExplorerParameters conn = getConnection(); |
377 |
DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(conn); |
378 |
StoresRepository repository = workspace.getStoresRepository(); |
379 |
|
380 |
int n = 0; |
381 |
for (String name : repository.keySet()) { |
382 |
DataStoreParameters params = repository.get(name); |
383 |
if( params instanceof JDBCStoreParameters ) { |
384 |
((JDBCStoreParameters) params).setHost(conn.getHost()); |
385 |
((JDBCStoreParameters) params).setPort(conn.getPort()); |
386 |
((JDBCStoreParameters) params).setSchema(conn.getSchema()); |
387 |
((JDBCStoreParameters) params).setDBName(conn.getDBName()); |
388 |
((JDBCStoreParameters) params).setCatalog(conn.getCatalog()); |
389 |
((JDBCStoreParameters) params).setUser(conn.getUser()); |
390 |
((JDBCStoreParameters) params).setPassword(conn.getPassword()); |
391 |
((JDBCStoreParameters) params).setUrl(null);
|
392 |
|
393 |
workspace.writeStoresRepositoryEntry(name, params); |
394 |
n++; |
395 |
} |
396 |
} |
397 |
ToolsSwingLocator.getThreadSafeDialogsManager().messageDialog( |
398 |
"Total updateds entries "+n,
|
399 |
i18n.getTranslation("_Manage_Dabatase_workspace"),
|
400 |
JOptionPane.INFORMATION_MESSAGE
|
401 |
); |
402 |
|
403 |
} |
404 |
} |