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