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 / AbstractWizardDB.java @ 45670
History | View | Annotate | Download (10.6 KB)
1 | 44533 | jjdelcerro | package org.gvsig.geodb; |
---|---|---|---|
2 | |||
3 | import java.awt.BorderLayout; |
||
4 | import java.awt.Dimension; |
||
5 | import java.util.ArrayList; |
||
6 | import java.util.Collection; |
||
7 | import java.util.HashMap; |
||
8 | import java.util.List; |
||
9 | import java.util.Map; |
||
10 | import javax.swing.DefaultListModel; |
||
11 | import javax.swing.ListSelectionModel; |
||
12 | import javax.swing.event.ChangeEvent; |
||
13 | 45670 | fdiaz | import javax.swing.event.ChangeListener; |
14 | 44533 | jjdelcerro | import javax.swing.event.ListSelectionEvent; |
15 | import org.gvsig.app.gui.WizardPanel; |
||
16 | import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator; |
||
17 | import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager; |
||
18 | import org.gvsig.fmap.dal.DALLocator; |
||
19 | import org.gvsig.fmap.dal.DataManager; |
||
20 | 45627 | fdiaz | import static org.gvsig.fmap.dal.DataServerExplorer.MODE_ALL; |
21 | 44533 | jjdelcerro | import org.gvsig.fmap.dal.DataStoreParameters; |
22 | import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters; |
||
23 | import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters; |
||
24 | 45627 | fdiaz | import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer; |
25 | import static org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer.SHOW_TABLES; |
||
26 | import static org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer.SHOW_VIEWS; |
||
27 | 44533 | jjdelcerro | import org.gvsig.fmap.dal.swing.DALSwingLocator; |
28 | import org.gvsig.fmap.dal.swing.DataSwingManager; |
||
29 | import org.gvsig.tools.ToolsLocator; |
||
30 | 45440 | fdiaz | import org.gvsig.tools.dispose.DisposeUtils; |
31 | 44533 | jjdelcerro | import org.gvsig.tools.i18n.I18nManager; |
32 | 45062 | jjdelcerro | import org.gvsig.tools.swing.api.FilteredListController; |
33 | 44533 | jjdelcerro | import org.gvsig.tools.swing.api.JListWithCheckbox; |
34 | import org.gvsig.tools.swing.api.ToolsSwingLocator; |
||
35 | import org.gvsig.tools.swing.api.ToolsSwingManager; |
||
36 | import org.gvsig.tools.swing.api.pickercontroller.PickerController; |
||
37 | import org.slf4j.Logger; |
||
38 | import org.slf4j.LoggerFactory; |
||
39 | |||
40 | /**
|
||
41 | *
|
||
42 | * @author jjdelcerro
|
||
43 | */
|
||
44 | 45062 | jjdelcerro | @SuppressWarnings("UseSpecificCatch") |
45 | 44533 | jjdelcerro | public abstract class AbstractWizardDB extends WizardPanel { |
46 | |||
47 | protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractWizardDB.class); |
||
48 | |||
49 | 45059 | jjdelcerro | |
50 | 45634 | fdiaz | protected AbstractWizardDBView view;
|
51 | 44533 | jjdelcerro | private PickerController<JDBCServerExplorerParameters> pickerConnection;
|
52 | 45634 | fdiaz | protected JListWithCheckbox lwcTables;
|
53 | protected Map<String, TableInfo> tablesInfo = null; |
||
54 | protected FilteredListController tablesFilterController;
|
||
55 | protected TableInfoController tableInfoController;
|
||
56 | 45062 | jjdelcerro | |
57 | 45634 | fdiaz | |
58 | 44533 | jjdelcerro | public AbstractWizardDB() {
|
59 | initComponents(); |
||
60 | } |
||
61 | |||
62 | private void initComponents() { |
||
63 | DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager(); |
||
64 | ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager(); |
||
65 | ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager(); |
||
66 | |||
67 | this.view = new AbstractWizardDBView(); |
||
68 | |||
69 | toolsSwingManager.translate(this.view.lblColumns);
|
||
70 | toolsSwingManager.translate(this.view.lblConnection);
|
||
71 | toolsSwingManager.translate(this.view.lblFilter);
|
||
72 | toolsSwingManager.translate(this.view.lblGeometryField);
|
||
73 | toolsSwingManager.translate(this.view.lblIdField);
|
||
74 | toolsSwingManager.translate(this.view.lblName);
|
||
75 | toolsSwingManager.translate(this.view.lblProjection);
|
||
76 | toolsSwingManager.translate(this.view.lblTable);
|
||
77 | |||
78 | toolsSwingManager.addClearButton(this.view.txtName);
|
||
79 | toolsSwingManager.setDefaultPopupMenu(this.view.txtName);
|
||
80 | |||
81 | this.lwcTables = toolsSwingManager.createJListWithCheckbox(
|
||
82 | this.view.lstTables
|
||
83 | ); |
||
84 | |||
85 | 45062 | jjdelcerro | this.lwcTables.addListSelectionListener((ListSelectionEvent e) -> { |
86 | doChangeTableSelected(); |
||
87 | 44533 | jjdelcerro | }); |
88 | 45634 | fdiaz | |
89 | this.initializePickerConnection();
|
||
90 | |||
91 | 45062 | jjdelcerro | this.lwcTables.addChecksListener((ListSelectionEvent e) -> { |
92 | 45634 | fdiaz | doChangeTableChecked(e.getFirstIndex(), e.getLastIndex()); |
93 | 44533 | jjdelcerro | }); |
94 | 45634 | fdiaz | |
95 | 45062 | jjdelcerro | this.tablesFilterController = toolsSwingManager.createFilteredListController(
|
96 | this.view.lstTables,
|
||
97 | this.view.txtTablesFilter,
|
||
98 | this.view.btnTablesFilter
|
||
99 | ); |
||
100 | 45634 | fdiaz | |
101 | this.tableInfoController = new TableInfoController( |
||
102 | this.view.btnDeselectAllColumns,
|
||
103 | this.view.btnSelectAllColumns,
|
||
104 | this.view.lstColumns,
|
||
105 | this.view.txtName,
|
||
106 | this.view.cboIdField,
|
||
107 | this.view.cboGeometryField,
|
||
108 | this.view.txtProjection,
|
||
109 | this.view.btnProjection,
|
||
110 | this.view.txtFilter,
|
||
111 | this.view.btnFilter,
|
||
112 | this.view.btnFilterBookmarks,
|
||
113 | this.view.btnFilterHistory,
|
||
114 | this.view.btnAdvancedProperties,
|
||
115 | 45650 | jjdelcerro | this.view.lblReadOnlyNotification,
|
116 | this.view.pnlCfgActions
|
||
117 | 45634 | fdiaz | ); |
118 | 45670 | fdiaz | |
119 | this.tableInfoController.addChangeListener(new ChangeListener() { |
||
120 | @Override
|
||
121 | public void stateChanged(ChangeEvent e) { |
||
122 | checkFinishable(); |
||
123 | } |
||
124 | }); |
||
125 | 44533 | jjdelcerro | |
126 | this.clearTables();
|
||
127 | this.setEditableTables(false); |
||
128 | |||
129 | this.setLayout(new BorderLayout()); |
||
130 | this.add(this.view, BorderLayout.CENTER); |
||
131 | this.setPreferredSize(new Dimension(500, 400)); |
||
132 | } |
||
133 | 45634 | fdiaz | |
134 | private void initializePickerConnection() { |
||
135 | DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager(); |
||
136 | this.pickerConnection = dataSwingManager.createJDBCConnectionPickerController(
|
||
137 | this.view.cboConnection,
|
||
138 | this.view.btnConnection
|
||
139 | ); |
||
140 | this.pickerConnection.addChangeListener((ChangeEvent e) -> { |
||
141 | doUpdateTables(); |
||
142 | setEditableTables(true);
|
||
143 | }); |
||
144 | } |
||
145 | 44533 | jjdelcerro | |
146 | protected abstract boolean requireGeometry(); |
||
147 | |||
148 | protected Collection<TableInfo> getTablesInformation() { |
||
149 | 45008 | omartinez | this.updateTableInfoFromUI();
|
150 | 44533 | jjdelcerro | if( this.tablesInfo == null ) { |
151 | this.tablesInfo = new HashMap<>(); |
||
152 | } |
||
153 | return this.tablesInfo.values(); |
||
154 | } |
||
155 | |||
156 | private void clearTables() { |
||
157 | this.lwcTables.setModel(new DefaultListModel()); |
||
158 | this.lwcTables.getCheckedModel().clearSelection();
|
||
159 | this.clearTableConfig();
|
||
160 | } |
||
161 | |||
162 | private void clearTableConfig() { |
||
163 | 45634 | fdiaz | this.tableInfoController.put(null); |
164 | 44533 | jjdelcerro | } |
165 | |||
166 | private void setEditableTables(boolean enable) { |
||
167 | this.view.lstTables.setEnabled(enable);
|
||
168 | 45634 | fdiaz | this.tableInfoController.setEditable(enable);
|
169 | 44533 | jjdelcerro | } |
170 | |||
171 | private void doUpdateTables() { |
||
172 | JDBCServerExplorerParameters connection = this.pickerConnection.get();
|
||
173 | if (connection == null) { |
||
174 | this.clearTables();
|
||
175 | return;
|
||
176 | } |
||
177 | DataManager dataManager = DALLocator.getDataManager(); |
||
178 | 45627 | fdiaz | JDBCServerExplorer explorer = null;
|
179 | 44533 | jjdelcerro | try {
|
180 | 45627 | fdiaz | explorer = (JDBCServerExplorer) dataManager.openServerExplorer( |
181 | 44533 | jjdelcerro | connection.getDataStoreName(), |
182 | connection |
||
183 | ); |
||
184 | List<TableInfo> parameters = new ArrayList<>(); |
||
185 | 45627 | fdiaz | for (DataStoreParameters params : explorer.list(MODE_ALL, SHOW_TABLES)) {
|
186 | 45634 | fdiaz | JDBCStoreParameters jdbcParams = (JDBCStoreParameters) params; |
187 | parameters.add(new TableInfo(jdbcParams.getTable(), jdbcParams, requireGeometry(), false)); |
||
188 | 44533 | jjdelcerro | } |
189 | 45627 | fdiaz | for (DataStoreParameters params : explorer.list(MODE_ALL, SHOW_VIEWS)) {
|
190 | 45634 | fdiaz | JDBCStoreParameters jdbcParams = (JDBCStoreParameters) params; |
191 | parameters.add(new TableInfo(jdbcParams.getTable(), jdbcParams, requireGeometry(), true)); |
||
192 | 45627 | fdiaz | } |
193 | 45062 | jjdelcerro | parameters.sort((TableInfo o1, TableInfo o2) -> |
194 | o1.getLabel().compareTo(o2.getLabel()) |
||
195 | ); |
||
196 | 44533 | jjdelcerro | this.tablesInfo = new HashMap<>(); |
197 | DefaultListModel<TableInfo> model = new DefaultListModel<>(); |
||
198 | for (TableInfo x : parameters) {
|
||
199 | model.addElement(x); |
||
200 | this.tablesInfo.put(x.getDocumentName(), x);
|
||
201 | } |
||
202 | this.lwcTables.setModel(model);
|
||
203 | this.lwcTables.getCheckedModel().clearSelection();
|
||
204 | } catch (Exception ex) { |
||
205 | 45440 | fdiaz | } finally {
|
206 | DisposeUtils.disposeQuietly(explorer); |
||
207 | 44533 | jjdelcerro | } |
208 | } |
||
209 | |||
210 | private void doChangeTableSelected() { |
||
211 | TableInfo tableInfo = (TableInfo) this.lwcTables.getSelectedValue();
|
||
212 | if (tableInfo == null) { |
||
213 | this.clearTableConfig();
|
||
214 | 45634 | fdiaz | this.tableInfoController.setEditable(false); |
215 | 44533 | jjdelcerro | return;
|
216 | } |
||
217 | 45008 | omartinez | this.updateTableInfoFromUI();
|
218 | 45634 | fdiaz | this.tableInfoController.put(tableInfo);
|
219 | } |
||
220 | |||
221 | private void doChangeTableChecked(int firstIndex, int lastIndex) { |
||
222 | ListSelectionModel checkedModel = this.lwcTables.getCheckedModel(); |
||
223 | for (int i = firstIndex; i <= lastIndex; i++) { |
||
224 | TableInfo tableInfo = (TableInfo) this.lwcTables.getModel().getElementAt(i);
|
||
225 | tableInfo.setSelected(checkedModel.isSelectedIndex(i)); |
||
226 | } |
||
227 | 44533 | jjdelcerro | this.checkFinishable();
|
228 | } |
||
229 | 45008 | omartinez | |
230 | private void updateTableInfoFromUI() { |
||
231 | 45634 | fdiaz | String previousId = this.tableInfoController.getId(); |
232 | if (previousId == null) { |
||
233 | return;
|
||
234 | 45008 | omartinez | } |
235 | 44533 | jjdelcerro | |
236 | 45634 | fdiaz | if (this.tablesInfo != null && !this.tablesInfo.isEmpty()) { |
237 | TableInfo previousInfo = this.tablesInfo.get(previousId);
|
||
238 | if (previousInfo != null) { |
||
239 | this.tableInfoController.fetch(previousInfo);
|
||
240 | } |
||
241 | 45627 | fdiaz | } |
242 | 44533 | jjdelcerro | } |
243 | |||
244 | |||
245 | @Override
|
||
246 | public void initWizard() { |
||
247 | I18nManager i18n = ToolsLocator.getI18nManager(); |
||
248 | setTabName(i18n.getTranslation("_Database"));
|
||
249 | } |
||
250 | |||
251 | @Override
|
||
252 | public boolean areSettingsValid() { |
||
253 | boolean hasInvalidValues = false; |
||
254 | boolean hasSelectedTables = false; |
||
255 | for (TableInfo tableInfo : this.getTablesInformation() ) { |
||
256 | if (tableInfo.isSelected()) {
|
||
257 | hasSelectedTables = true;
|
||
258 | if (!tableInfo.hasValidValues()) {
|
||
259 | hasInvalidValues = true;
|
||
260 | } |
||
261 | } |
||
262 | } |
||
263 | return hasSelectedTables && !hasInvalidValues;
|
||
264 | } |
||
265 | |||
266 | @Override
|
||
267 | public DataStoreParameters[] getParameters() { |
||
268 | int sz = 0; |
||
269 | for (TableInfo tableInfo : this.getTablesInformation() ) { |
||
270 | if( tableInfo.isSelected() ) {
|
||
271 | sz++; |
||
272 | } |
||
273 | } |
||
274 | if( sz == 0 ) { |
||
275 | return null; |
||
276 | } |
||
277 | DataStoreParameters[] dbParameters = new DataStoreParameters[sz]; |
||
278 | int n = 0; |
||
279 | for (TableInfo tableInfo : this.getTablesInformation() ) { |
||
280 | if( tableInfo.isSelected() ) {
|
||
281 | dbParameters[n++] = tableInfo.getParameters(); |
||
282 | } |
||
283 | } |
||
284 | return dbParameters;
|
||
285 | } |
||
286 | |||
287 | @Override
|
||
288 | public void execute() { |
||
289 | executeWizard(); |
||
290 | } |
||
291 | |||
292 | @Override
|
||
293 | public void close() { |
||
294 | |||
295 | } |
||
296 | |||
297 | protected void checkFinishable() { |
||
298 | boolean finishable = areSettingsValid();
|
||
299 | callStateChanged(finishable); |
||
300 | } |
||
301 | |||
302 | } |