Revision 45634 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/TableInfoController.java
TableInfoController.java | ||
---|---|---|
5 | 5 |
*/ |
6 | 6 |
package org.gvsig.geodb; |
7 | 7 |
|
8 |
import java.awt.Cursor; |
|
8 | 9 |
import java.awt.event.ActionEvent; |
9 | 10 |
import java.awt.event.ItemEvent; |
11 |
import javax.swing.DefaultComboBoxModel; |
|
12 |
import javax.swing.DefaultListModel; |
|
13 |
import javax.swing.DefaultListSelectionModel; |
|
10 | 14 |
import javax.swing.JButton; |
11 | 15 |
import javax.swing.JComboBox; |
12 | 16 |
import javax.swing.JLabel; |
13 | 17 |
import javax.swing.JList; |
14 | 18 |
import javax.swing.JTextField; |
19 |
import javax.swing.event.ChangeEvent; |
|
20 |
import javax.swing.event.ChangeListener; |
|
15 | 21 |
import org.apache.commons.lang3.StringUtils; |
16 | 22 |
import org.cresques.cts.IProjection; |
17 | 23 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator; |
18 | 24 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager; |
19 | 25 |
import org.gvsig.expressionevaluator.swing.ExpressionPickerController; |
20 | 26 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
27 |
import org.gvsig.fmap.dal.feature.FeatureType; |
|
21 | 28 |
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters; |
22 | 29 |
import org.gvsig.fmap.dal.swing.DALSwingLocator; |
23 | 30 |
import org.gvsig.fmap.dal.swing.DataSwingManager; |
24 | 31 |
import org.gvsig.fmap.dal.swing.ProjectionPickerController; |
25 | 32 |
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel; |
26 | 33 |
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager; |
34 |
import org.gvsig.fmap.geom.Geometry; |
|
27 | 35 |
import org.gvsig.tools.ToolsLocator; |
28 | 36 |
import org.gvsig.tools.i18n.I18nManager; |
37 |
import org.gvsig.tools.locator.LocatorException; |
|
29 | 38 |
import org.gvsig.tools.swing.api.JListWithCheckbox; |
30 | 39 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
31 | 40 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
... | ... | |
119 | 128 |
this.btnFilterBookmarks, |
120 | 129 |
this.btnFilterHistory |
121 | 130 |
); |
131 |
this.pickerProjection.addChangeListener(new ChangeListener() { |
|
132 |
@Override |
|
133 |
public void stateChanged(ChangeEvent e) { |
|
134 |
doChangeProjection(); |
|
135 |
} |
|
136 |
}); |
|
137 |
|
|
138 |
this.cboIdField.addItemListener((ItemEvent e) -> { |
|
139 |
if (e.getStateChange() == ItemEvent.SELECTED) { |
|
140 |
doChangeIdField(); |
|
141 |
} |
|
142 |
}); |
|
122 | 143 |
this.cboGeometryField.addItemListener((ItemEvent e) -> { |
123 | 144 |
if (e.getStateChange() == ItemEvent.SELECTED) { |
124 | 145 |
doChangeGeometryField(); |
146 |
updateLabel(); |
|
125 | 147 |
} |
126 | 148 |
}); |
127 | 149 |
this.btnDeselectAllColumns.addActionListener((ActionEvent e) -> { |
... | ... | |
133 | 155 |
this.btnAdvancedProperties.addActionListener((ActionEvent e) -> { |
134 | 156 |
doShowAdvancedProperties(); |
135 | 157 |
}); |
158 |
|
|
159 |
this.btnSelectAllColumns.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); |
|
160 |
this.btnDeselectAllColumns.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); |
|
161 |
this.btnProjection.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); |
|
162 |
this.btnFilter.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); |
|
163 |
this.btnFilterBookmarks.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); |
|
164 |
this.btnFilterHistory.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); |
|
165 |
this.btnAdvancedProperties.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); |
|
166 |
|
|
136 | 167 |
} |
168 |
|
|
169 |
private void doChangeIdField() { |
|
170 |
final TableInfo info = this.getCurrentTableInfo(); |
|
171 |
if (info == null) { |
|
172 |
return; |
|
173 |
} |
|
174 |
info.setIdFieldSelected(this.cboIdField.getSelectedIndex()); |
|
175 |
updateLabel(); |
|
176 |
} |
|
137 | 177 |
|
178 |
private void doChangeProjection() { |
|
179 |
final TableInfo info = this.getCurrentTableInfo(); |
|
180 |
if (info == null) { |
|
181 |
return; |
|
182 |
} |
|
183 |
info.setProjection(this.pickerProjection.get()); |
|
184 |
updateLabel(); |
|
185 |
} |
|
186 |
|
|
138 | 187 |
private void doChangeGeometryField() { |
139 | 188 |
TableInfo info = this.getCurrentTableInfo(); |
140 | 189 |
if (info == null) { |
141 | 190 |
return; |
142 | 191 |
} |
143 | 192 |
String attrName = (String) this.cboGeometryField.getSelectedItem(); |
193 |
|
|
194 |
info.setGeomFieldSelected(this.cboGeometryField.getSelectedIndex()); |
|
195 |
|
|
144 | 196 |
if (StringUtils.isBlank(attrName)) { |
197 |
this.pickerProjection.set(null); |
|
145 | 198 |
return; |
146 | 199 |
} |
200 |
|
|
147 | 201 |
FeatureAttributeDescriptor attr = info.getAttributeDescriptor(attrName); |
148 | 202 |
IProjection srs = attr.getSRS(); |
149 | 203 |
if (srs == null) { |
150 | 204 |
return; |
151 | 205 |
} |
152 | 206 |
this.pickerProjection.set(srs); |
207 |
tableInfo.setProjection(this.pickerProjection.get()); |
|
153 | 208 |
} |
154 | 209 |
|
155 | 210 |
private void doDeselectAllColumns() { |
... | ... | |
199 | 254 |
public void put(TableInfo tableInfo) { |
200 | 255 |
this.tableInfo = tableInfo; |
201 | 256 |
|
257 |
if(tableInfo == null) { |
|
258 |
this.lwcColumns.setModel(new DefaultListModel()); |
|
259 |
this.lwcColumns.setCheckedModel(new DefaultListSelectionModel()); |
|
260 |
this.txtName.setText(""); |
|
261 |
this.cboGeometryField.setModel(new DefaultComboBoxModel()); |
|
262 |
this.cboIdField.setModel(new DefaultComboBoxModel()); |
|
263 |
this.pickerProjection.set(null); |
|
264 |
this.pickerFilter.set(null); |
|
265 |
if(this.lblReadOnlyNotification != null){ |
|
266 |
this.lblReadOnlyNotification.setText(""); |
|
267 |
} |
|
268 |
return; |
|
269 |
} |
|
270 |
|
|
202 | 271 |
this.lwcColumns.setModel(tableInfo.getColumnsListModel()); |
203 | 272 |
this.lwcColumns.setCheckedModel(tableInfo.getColumnChecksModel()); |
273 |
|
|
274 |
this.txtName.setText(tableInfo.getDocumentName()); |
|
204 | 275 |
|
205 | 276 |
this.cboGeometryField.setModel(tableInfo.getGeomFieldComboModel()); |
206 | 277 |
this.cboGeometryField.setSelectedIndex(tableInfo.getGeomFieldSelected()); |
... | ... | |
210 | 281 |
|
211 | 282 |
this.pickerProjection.set(tableInfo.getProjection()); |
212 | 283 |
this.pickerFilter.set(tableInfo.getFilter()); |
213 |
this.txtName.setText(tableInfo.getDocumentName()); |
|
284 |
|
|
285 |
updateLabel(); |
|
286 |
} |
|
214 | 287 |
|
215 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
|
216 |
boolean readOnly = tableInfo.isReadOnly(); |
|
217 |
String readOnlyMessage = readOnly ? " <b>" + i18n.getTranslation("_Read_only") + "</b>" : ""; |
|
218 |
if (tableInfo.isView()) { |
|
219 |
this.lblReadOnlyNotification.setText("<html>" + i18n.getTranslation("_View") + readOnlyMessage + "</html>"); |
|
220 |
} else { |
|
221 |
this.lblReadOnlyNotification.setText("<html>" + i18n.getTranslation("_Table") + readOnlyMessage + "</html>"); |
|
288 |
private void updateLabel() throws LocatorException { |
|
289 |
if (this.lblReadOnlyNotification != null) { |
|
290 |
StringBuilder builder = new StringBuilder(); |
|
291 |
builder.append("<html>"); |
|
292 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
|
293 |
builder.append("<font color='#00008B'>"); |
|
294 |
if (tableInfo.isView()) { |
|
295 |
builder.append(i18n.getTranslation("_View")); |
|
296 |
} else { |
|
297 |
builder.append(i18n.getTranslation("_Table")); |
|
298 |
} |
|
299 |
boolean readOnly = tableInfo.isReadOnly(); |
|
300 |
if (readOnly) { |
|
301 |
builder.append(" - <b>"); |
|
302 |
builder.append(i18n.getTranslation("_Read_only")); |
|
303 |
builder.append("</b>"); |
|
304 |
} |
|
305 |
if (StringUtils.isBlank(this.tableInfo.getFieldId())) { |
|
306 |
builder.append(" - "); |
|
307 |
builder.append(i18n.getTranslation("_PrimaryKey_field_recommended")); |
|
308 |
} |
|
309 |
if (this.tableInfo.requireGeometry()) { |
|
310 |
FeatureType featType = this.tableInfo.getFeatureType(); |
|
311 |
if (StringUtils.isBlank(this.tableInfo.getGeomField())) { |
|
312 |
builder.append(" - <b>"); |
|
313 |
builder.append(i18n.getTranslation("_Geometry_field_required")); |
|
314 |
builder.append("</b>"); |
|
315 |
} |
|
316 |
JDBCStoreParameters params = this.tableInfo.getParameters(); |
|
317 |
if(params.getGeometryType() == Geometry.TYPES.NULL || params.getGeometryType() == Geometry.TYPES.UNKNOWN){ |
|
318 |
builder.append(" - <b>"); |
|
319 |
builder.append(i18n.getTranslation("_GeometryType_required")); |
|
320 |
builder.append("</b>"); |
|
321 |
} |
|
322 |
if(params.getGeometrySubtype() == Geometry.SUBTYPES.UNKNOWN){ |
|
323 |
builder.append(" - <b>"); |
|
324 |
builder.append(i18n.getTranslation("_GeometrySubType_required")); |
|
325 |
builder.append("</b>"); |
|
326 |
} |
|
327 |
if(this.tableInfo.getProjection()==null){ |
|
328 |
builder.append(" - "); |
|
329 |
builder.append(i18n.getTranslation("_Projection_recommended")); |
|
330 |
} |
|
331 |
} else { //Not require geometry |
|
332 |
FeatureType featType = this.tableInfo.getFeatureType(); |
|
333 |
if (StringUtils.isBlank(this.tableInfo.getGeomField())) { |
|
334 |
builder.append(" - "); |
|
335 |
builder.append(i18n.getTranslation("_Geometry_field_recommended")); |
|
336 |
} |
|
337 |
JDBCStoreParameters params = this.tableInfo.getParameters(); |
|
338 |
if(params.getGeometryType() == Geometry.TYPES.NULL || params.getGeometryType() == Geometry.TYPES.UNKNOWN){ |
|
339 |
builder.append(" - "); |
|
340 |
builder.append(i18n.getTranslation("_GeometryType_recommended")); |
|
341 |
} |
|
342 |
if(params.getGeometrySubtype() == Geometry.SUBTYPES.UNKNOWN){ |
|
343 |
builder.append(" - "); |
|
344 |
builder.append(i18n.getTranslation("_GeometrySubType_recommended")); |
|
345 |
} |
|
346 |
if(StringUtils.isNotBlank(this.tableInfo.getGeomField()) && this.tableInfo.getProjection()==null){ |
|
347 |
builder.append(" - "); |
|
348 |
builder.append(i18n.getTranslation("_Projection_recommended")); |
|
349 |
} |
|
350 |
|
|
351 |
} |
|
352 |
builder.append("</font>"); |
|
353 |
builder.append("</html>"); |
|
354 |
this.lblReadOnlyNotification.setText(builder.toString()); |
|
222 | 355 |
} |
223 | 356 |
} |
224 | 357 |
|
... | ... | |
233 | 366 |
private TableInfo getCurrentTableInfo() { |
234 | 367 |
return this.tableInfo; |
235 | 368 |
} |
369 |
|
|
370 |
public void setEditable(boolean enable) { |
|
371 |
this.lstColumns.setEnabled(enable); |
|
372 |
this.txtName.setEditable(enable); |
|
373 |
this.cboGeometryField.setEnabled(enable); |
|
374 |
this.cboIdField.setEnabled(enable); |
|
375 |
this.pickerProjection.setEditable(enable); |
|
376 |
this.pickerFilter.setEditable(enable); |
|
377 |
this.btnDeselectAllColumns.setEnabled(enable); |
|
378 |
this.btnSelectAllColumns.setEnabled(enable); |
|
379 |
this.btnAdvancedProperties.setEnabled(enable); |
|
380 |
} |
|
236 | 381 |
|
382 |
public void setEnabled(boolean enable) { |
|
383 |
this.lstColumns.setEnabled(enable); |
|
384 |
this.txtName.setEnabled(enable); |
|
385 |
this.cboGeometryField.setEnabled(enable); |
|
386 |
this.cboIdField.setEnabled(enable); |
|
387 |
this.pickerProjection.setEnabled(enable); |
|
388 |
this.pickerFilter.setEnabled(enable); |
|
389 |
this.btnDeselectAllColumns.setEnabled(enable); |
|
390 |
this.btnSelectAllColumns.setEnabled(enable); |
|
391 |
this.btnAdvancedProperties.setEnabled(enable); |
|
392 |
} |
|
393 |
|
|
394 |
public String getId(){ |
|
395 |
if(tableInfo == null) { |
|
396 |
return null; |
|
397 |
} |
|
398 |
return this.getCurrentTableInfo().getId(); |
|
399 |
} |
|
400 |
|
|
401 |
public void clear() { |
|
402 |
this.put(null); |
|
403 |
} |
|
404 |
|
|
405 |
|
|
237 | 406 |
} |
Also available in: Unified diff