Revision 44262 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/featuretype/DefaultFeatureTypeAttributePanel.java
DefaultFeatureTypeAttributePanel.java | ||
---|---|---|
12 | 12 |
import javax.swing.ComboBoxModel; |
13 | 13 |
import javax.swing.DefaultComboBoxModel; |
14 | 14 |
import javax.swing.JButton; |
15 |
import javax.swing.JCheckBox; |
|
15 | 16 |
import javax.swing.JComboBox; |
16 | 17 |
import javax.swing.JComponent; |
17 | 18 |
import javax.swing.JOptionPane; |
19 |
import javax.swing.JTextField; |
|
18 | 20 |
import javax.swing.SwingUtilities; |
19 | 21 |
import javax.swing.event.ChangeEvent; |
20 | 22 |
import javax.swing.event.ChangeListener; |
... | ... | |
22 | 24 |
import org.apache.commons.lang3.StringUtils; |
23 | 25 |
import org.cresques.cts.IProjection; |
24 | 26 |
import org.gvsig.expressionevaluator.Expression; |
27 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
|
25 | 28 |
import org.gvsig.expressionevaluator.swing.CalculatorController; |
26 | 29 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator; |
27 | 30 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager; |
28 | 31 |
import org.gvsig.expressionevaluator.swing.ExpressionPickerController; |
29 | 32 |
import org.gvsig.fmap.dal.DALLocator; |
30 | 33 |
import org.gvsig.fmap.dal.DataManager; |
34 |
import org.gvsig.fmap.dal.DataStore; |
|
31 | 35 |
import org.gvsig.fmap.dal.DataTypes; |
36 |
import org.gvsig.fmap.dal.StoresRepository; |
|
37 |
import org.gvsig.fmap.dal.complements.Search; |
|
32 | 38 |
import org.gvsig.fmap.dal.exception.DataException; |
33 | 39 |
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression; |
34 | 40 |
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable; |
35 | 41 |
import org.gvsig.fmap.dal.feature.DataProfile; |
36 | 42 |
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
43 |
import org.gvsig.fmap.dal.feature.EditableForeingKey; |
|
37 | 44 |
import org.gvsig.fmap.dal.feature.Feature; |
38 | 45 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
39 | 46 |
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator; |
40 | 47 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
41 | 48 |
import org.gvsig.fmap.dal.feature.FeatureType; |
49 |
import org.gvsig.fmap.dal.feature.ForeingKey; |
|
42 | 50 |
import org.gvsig.fmap.dal.swing.DALSwingLocator; |
43 | 51 |
import org.gvsig.fmap.dal.swing.DataSwingManager; |
44 | 52 |
import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement; |
... | ... | |
71 | 79 |
|
72 | 80 |
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureTypeAttributePanel.class); |
73 | 81 |
|
82 |
private static class ForeingKeyController { |
|
83 |
|
|
84 |
private final JCheckBox chkIsForeingKey; |
|
85 |
private final JCheckBox chkIsSelectable; |
|
86 |
private final JComboBox cboTable; |
|
87 |
private final JComboBox cboCode; |
|
88 |
private final JTextField txtFormula; |
|
89 |
private final JButton btnFormula; |
|
90 |
private ExpressionPickerController pickerFormula; |
|
91 |
private boolean editable; |
|
92 |
private FeatureStoreElement featureStoreElement; |
|
93 |
|
|
94 |
public ForeingKeyController( |
|
95 |
JCheckBox chkIsForeingKey, |
|
96 |
JCheckBox chkIsSelectable, |
|
97 |
JComboBox cboTable, |
|
98 |
JComboBox cboCode, |
|
99 |
JTextField txtFormula, |
|
100 |
JButton btnFormula |
|
101 |
) { |
|
102 |
this.chkIsForeingKey = chkIsForeingKey; |
|
103 |
this.chkIsSelectable = chkIsSelectable; |
|
104 |
this.cboTable = cboTable; |
|
105 |
this.cboCode = cboCode; |
|
106 |
this.txtFormula = txtFormula; |
|
107 |
this.btnFormula = btnFormula; |
|
108 |
this.initComponents(); |
|
109 |
} |
|
110 |
|
|
111 |
private void initComponents() { |
|
112 |
DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager(); |
|
113 |
|
|
114 |
this.editable = true; |
|
115 |
|
|
116 |
DefaultComboBoxModel<String> model = new DefaultComboBoxModel(); |
|
117 |
StoresRepository repository = DALLocator.getDataManager().getStoresRepository(); |
|
118 |
for (String tableName : repository.keySet()) { |
|
119 |
model.addElement(tableName); |
|
120 |
} |
|
121 |
this.cboTable.setModel(model); |
|
122 |
this.cboTable.addItemListener(new ItemListener() { |
|
123 |
@Override |
|
124 |
public void itemStateChanged(ItemEvent e) { |
|
125 |
if (e.getStateChange() != ItemEvent.SELECTED) { |
|
126 |
return; |
|
127 |
} |
|
128 |
Thread th = new Thread(new Runnable() { |
|
129 |
@Override |
|
130 |
public void run() { |
|
131 |
doPopulateComboCode(); |
|
132 |
} |
|
133 |
}, "FeatureTypePanelForeingKeyPopulateComboCode"); |
|
134 |
th.start(); |
|
135 |
} |
|
136 |
}); |
|
137 |
this.btnFormula.setText(""); |
|
138 |
this.featureStoreElement = dataSwingManager.createFeatureStoreElement(); |
|
139 |
this.pickerFormula = ExpressionEvaluatorSwingLocator.getManager() |
|
140 |
.createExpressionPickerController(txtFormula, btnFormula); |
|
141 |
this.pickerFormula.addElement(this.featureStoreElement); |
|
142 |
|
|
143 |
// this.chkIsForeingKey.addChangeListener(new ChangeListener() { |
|
144 |
// @Override |
|
145 |
// public void stateChanged(ChangeEvent e) { |
|
146 |
// if (chkIsForeingKey.isSelected()) { |
|
147 |
// setEnabled(editable); |
|
148 |
// } else { |
|
149 |
// setEnabled(false); |
|
150 |
// } |
|
151 |
// } |
|
152 |
// }); |
|
153 |
} |
|
154 |
|
|
155 |
private void doPopulateComboCode() { |
|
156 |
String tableName = (String) this.cboTable.getSelectedItem(); |
|
157 |
if( StringUtils.isBlank(tableName) ) { |
|
158 |
return; |
|
159 |
} |
|
160 |
StoresRepository repository = DALLocator.getDataManager().getStoresRepository(); |
|
161 |
DataStore store = repository.get(tableName); |
|
162 |
if( !(store instanceof FeatureStore) ) { |
|
163 |
return; |
|
164 |
} |
|
165 |
this.featureStoreElement.setFeatureStore((FeatureStore) store); |
|
166 |
FeatureType featureType; |
|
167 |
try { |
|
168 |
featureType = ((FeatureStore)store).getDefaultFeatureType(); |
|
169 |
} catch (DataException ex) { |
|
170 |
return; |
|
171 |
} |
|
172 |
Search search = (Search) ToolsLocator.getComplementsManager().get( |
|
173 |
Search.COMPLEMENT_MANE, featureType |
|
174 |
); |
|
175 |
List<FeatureAttributeDescriptor> attributes = search.getOrderedAttributes( |
|
176 |
Search.BASIC_TYPES_FILTER, |
|
177 |
Search.LABEL_ORDER, |
|
178 |
-1 |
|
179 |
); |
|
180 |
final DefaultComboBoxModel model = new DefaultComboBoxModel(); |
|
181 |
for (FeatureAttributeDescriptor attribute : attributes) { |
|
182 |
model.addElement(attribute.getName()); |
|
183 |
} |
|
184 |
SwingUtilities.invokeLater(new Runnable() { |
|
185 |
@Override |
|
186 |
public void run() { |
|
187 |
cboCode.setModel(model); |
|
188 |
} |
|
189 |
}); |
|
190 |
} |
|
191 |
|
|
192 |
public void setEditable(boolean editable) { |
|
193 |
this.chkIsForeingKey.setEnabled(editable); |
|
194 |
this.chkIsSelectable.setEnabled(editable); |
|
195 |
this.cboTable.setEnabled(editable); |
|
196 |
this.cboCode.setEnabled(editable); |
|
197 |
this.btnFormula.setEnabled(editable); |
|
198 |
this.txtFormula.setEditable(editable); |
|
199 |
this.editable = editable; |
|
200 |
} |
|
201 |
|
|
202 |
public void setEnabled(boolean enabled) { |
|
203 |
if( !editable ) { |
|
204 |
enabled = false; |
|
205 |
} |
|
206 |
this.chkIsForeingKey.setEnabled(enabled); |
|
207 |
this.chkIsSelectable.setEnabled(enabled); |
|
208 |
this.cboTable.setEnabled(enabled); |
|
209 |
this.cboCode.setEnabled(enabled); |
|
210 |
this.btnFormula.setEnabled(enabled); |
|
211 |
this.txtFormula.setEnabled(enabled); |
|
212 |
} |
|
213 |
|
|
214 |
public void clean() { |
|
215 |
this.chkIsForeingKey.setSelected(false); |
|
216 |
this.chkIsSelectable.setSelected(false); |
|
217 |
this.cboTable.setSelectedItem(""); |
|
218 |
this.cboCode.setSelectedItem(""); |
|
219 |
this.pickerFormula.set(null); |
|
220 |
} |
|
221 |
|
|
222 |
public void put(ForeingKey foreingKey) { |
|
223 |
if( foreingKey==null ) { |
|
224 |
this.clean(); |
|
225 |
return; |
|
226 |
} |
|
227 |
this.chkIsForeingKey.setSelected(foreingKey.isForeingKey()); |
|
228 |
this.chkIsSelectable.setSelected(foreingKey.isSelectable()); |
|
229 |
this.cboTable.setSelectedItem(foreingKey.getTableName()); |
|
230 |
this.cboCode.setSelectedItem(foreingKey.getCodeName()); |
|
231 |
this.pickerFormula.set(foreingKey.getLabelExpression(null)); |
|
232 |
} |
|
233 |
|
|
234 |
public void fetch(EditableForeingKey foreingKey) { |
|
235 |
if( foreingKey==null ) { |
|
236 |
return; |
|
237 |
} |
|
238 |
foreingKey.setForeingKey(this.chkIsForeingKey.isSelected()); |
|
239 |
foreingKey.setSelectable(this.chkIsSelectable.isSelected()); |
|
240 |
foreingKey.setTableName((String) this.cboTable.getSelectedItem()); |
|
241 |
foreingKey.setCodeName((String) this.cboCode.getSelectedItem()); |
|
242 |
Expression exp = this.pickerFormula.get(); |
|
243 |
if( ExpressionUtils.isPhraseEmpty(exp) ) { |
|
244 |
foreingKey.setLabelFormula(""); |
|
245 |
} else { |
|
246 |
foreingKey.setLabelFormula(exp.getPhrase()); |
|
247 |
} |
|
248 |
} |
|
249 |
} |
|
250 |
|
|
251 |
|
|
74 | 252 |
private static class AvailableValuesController { |
253 |
|
|
75 | 254 |
private final JComboBox cboValues; |
76 | 255 |
private final JTextComponent txtLabel; |
77 | 256 |
private final JTextComponent txtValue; |
78 | 257 |
private final JButton btnAdd; |
79 | 258 |
private final JButton btnUpdate; |
80 | 259 |
private final JButton btnRemove; |
81 |
|
|
82 |
public AvailableValuesController(
|
|
260 |
|
|
261 |
public AvailableValuesController( |
|
83 | 262 |
JComboBox cblValues, |
84 | 263 |
JTextComponent txtLabel, |
85 | 264 |
JTextComponent txtValue, |
86 | 265 |
JButton btnAdd, |
87 | 266 |
JButton btnUpdate, |
88 | 267 |
JButton btnRemove |
89 |
) {
|
|
268 |
) { |
|
90 | 269 |
this.cboValues = cblValues; |
91 | 270 |
this.txtLabel = txtLabel; |
92 | 271 |
this.txtValue = txtValue; |
93 | 272 |
this.btnAdd = btnAdd; |
94 | 273 |
this.btnUpdate = btnUpdate; |
95 | 274 |
this.btnRemove = btnRemove; |
96 |
|
|
275 |
|
|
97 | 276 |
this.cboValues.addItemListener(new ItemListener() { |
98 | 277 |
@Override |
99 | 278 |
public void itemStateChanged(ItemEvent e) { |
... | ... | |
133 | 312 |
for (int i = 0; i < model.getSize(); i++) { |
134 | 313 |
values[i] = model.getElementAt(i); |
135 | 314 |
} |
136 |
return values;
|
|
315 |
return values; |
|
137 | 316 |
} |
138 | 317 |
|
139 | 318 |
public void set(DynObjectValueItem[] availableValues) { |
140 | 319 |
DefaultComboBoxModel model = new DefaultComboBoxModel(); |
141 |
if( availableValues!=null ) {
|
|
320 |
if (availableValues != null) {
|
|
142 | 321 |
for (DynObjectValueItem availableValue : availableValues) { |
143 | 322 |
model.addElement(availableValue); |
144 | 323 |
} |
145 | 324 |
} |
146 | 325 |
this.cboValues.setModel(model); |
147 |
if(model.getSize()>0 ) {
|
|
326 |
if (model.getSize() > 0) {
|
|
148 | 327 |
this.cboValues.setSelectedIndex(0); |
149 | 328 |
} else { |
150 | 329 |
this.cboValues.setSelectedIndex(-1); |
151 | 330 |
} |
152 | 331 |
} |
153 |
|
|
332 |
|
|
154 | 333 |
public void setEditable(boolean editable) { |
155 | 334 |
this.cboValues.setEnabled(editable); |
156 | 335 |
this.txtLabel.setEditable(editable); |
... | ... | |
162 | 341 |
|
163 | 342 |
private void doValuesChanged() { |
164 | 343 |
DynObjectValueItem value = (DynObjectValueItem) this.cboValues.getSelectedItem(); |
165 |
if( value == null ) {
|
|
344 |
if (value == null) {
|
|
166 | 345 |
this.txtLabel.setText(""); |
167 | 346 |
this.txtValue.setText(""); |
168 | 347 |
this.btnAdd.setEnabled(true); |
... | ... | |
171 | 350 |
return; |
172 | 351 |
} |
173 | 352 |
this.txtLabel.setText(value.getLabel()); |
174 |
this.txtValue.setText(Objects.toString(value.getValue(),"")); |
|
353 |
this.txtValue.setText(Objects.toString(value.getValue(), ""));
|
|
175 | 354 |
this.btnAdd.setEnabled(true); |
176 | 355 |
this.btnUpdate.setEnabled(true); |
177 | 356 |
this.btnRemove.setEnabled(true); |
178 | 357 |
} |
179 |
|
|
358 |
|
|
180 | 359 |
private void doAdd() { |
181 | 360 |
DynObjectValueItem value = new DynObjectValueItem("Value", "Label"); |
182 | 361 |
DefaultComboBoxModel model = (DefaultComboBoxModel) this.cboValues.getModel(); |
183 | 362 |
model.addElement(value); |
184 |
this.cboValues.setSelectedIndex(model.getSize()-1);
|
|
363 |
this.cboValues.setSelectedIndex(model.getSize() - 1);
|
|
185 | 364 |
} |
186 |
|
|
365 |
|
|
187 | 366 |
private void doUpdate() { |
188 | 367 |
DynObjectValueItem value = (DynObjectValueItem) this.cboValues.getSelectedItem(); |
189 |
if( value == null ) {
|
|
368 |
if (value == null) {
|
|
190 | 369 |
return; // EEhh?? esto no deberia pasar |
191 | 370 |
} |
192 | 371 |
value.setLabel(this.txtLabel.getText()); |
193 | 372 |
value.setValue(this.txtValue.getText()); |
194 | 373 |
} |
195 |
|
|
374 |
|
|
196 | 375 |
private void doRemove() { |
197 | 376 |
int n = this.cboValues.getSelectedIndex(); |
198 |
if( n<0 ) {
|
|
377 |
if (n < 0) {
|
|
199 | 378 |
return; // EEhh?? esto no deberia pasar |
200 | 379 |
} |
201 | 380 |
DefaultComboBoxModel model = (DefaultComboBoxModel) this.cboValues.getModel(); |
202 | 381 |
model.removeElementAt(n); |
203 |
if( --n <0 ) {
|
|
382 |
if (--n < 0) {
|
|
204 | 383 |
n = 0; |
205 | 384 |
} |
206 | 385 |
this.cboValues.setSelectedIndex(n); |
... | ... | |
222 | 401 |
private CalculatorController<Integer> pickerOrder; |
223 | 402 |
private AvailableValuesController availableValuesController; |
224 | 403 |
private TagsController tagsController; |
404 |
private ForeingKeyController foreingKeyController; |
|
225 | 405 |
|
226 | 406 |
private boolean editable; |
227 | 407 |
private FeatureStoreElement featureStoreElement; |
... | ... | |
242 | 422 |
this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.STRING), DataTypes.STRING)); |
243 | 423 |
this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.GEOMETRY), DataTypes.GEOMETRY)); |
244 | 424 |
this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.BYTEARRAY), DataTypes.BYTEARRAY)); |
425 |
this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.OBJECT), DataTypes.OBJECT)); |
|
426 |
this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.LIST), DataTypes.LIST)); |
|
245 | 427 |
this.fieldTypes.sort(new Comparator<ListElement<Integer>>() { |
246 | 428 |
@Override |
247 | 429 |
public int compare(ListElement<Integer> o1, ListElement<Integer> o2) { |
... | ... | |
282 | 464 |
ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager(); |
283 | 465 |
ExpressionEvaluatorSwingManager evaluatorManager = ExpressionEvaluatorSwingLocator.getManager(); |
284 | 466 |
DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager(); |
285 |
|
|
467 |
|
|
286 | 468 |
DefaultComboBoxModel<ListElement<Integer>> modelTypes = new DefaultComboBoxModel<>(); |
287 | 469 |
for (ListElement<Integer> element : fieldTypes) { |
288 | 470 |
modelTypes.addElement(element); |
... | ... | |
337 | 519 |
swingManager.translate(this.lblTagsName); |
338 | 520 |
swingManager.translate(this.lblTagsValue); |
339 | 521 |
|
522 |
swingManager.translate(this.lblForeingKeyCodeName); |
|
523 |
swingManager.translate(this.lblForeingKeyLabelFormula); |
|
524 |
swingManager.translate(this.lblForeingKeyTableName); |
|
525 |
swingManager.translate(this.lblIsSelectable); |
|
526 |
swingManager.translate(this.chkIsForeingKey); |
|
527 |
|
|
340 | 528 |
swingManager.addClearButton(this.txtDefaultValue); |
341 | 529 |
swingManager.addClearButton(this.txtFieldName); |
342 | 530 |
swingManager.addClearButton(this.txtIntervalEnd); |
... | ... | |
349 | 537 |
swingManager.addClearButton(this.txtMaxValue); |
350 | 538 |
swingManager.addClearButton(this.txtMinValue); |
351 | 539 |
swingManager.addClearButton(this.txtAvailableValuesLabel); |
352 |
swingManager.addClearButton(this.txtAvailableValuesValue);
|
|
353 |
|
|
540 |
swingManager.addClearButton(this.txtAvailableValuesValue); |
|
541 |
|
|
354 | 542 |
swingManager.setDefaultPopupMenu(this.txtDefaultValue); |
355 | 543 |
swingManager.setDefaultPopupMenu(this.txtFieldName); |
356 | 544 |
swingManager.setDefaultPopupMenu(this.txtIntervalEnd); |
... | ... | |
363 | 551 |
swingManager.setDefaultPopupMenu(this.cboGeometryType); |
364 | 552 |
swingManager.setDefaultPopupMenu(this.cboDataProfile); |
365 | 553 |
|
554 |
swingManager.setDefaultPopupMenu(this.cboForeingKeyCodeName); |
|
555 |
swingManager.setDefaultPopupMenu(this.cboForeingKeyTableName); |
|
556 |
|
|
366 | 557 |
swingManager.setDefaultPopupMenu(this.cboGroup); |
367 | 558 |
swingManager.setDefaultPopupMenu(this.txtOrder); |
368 | 559 |
swingManager.setDefaultPopupMenu(this.txtLabel); |
... | ... | |
371 | 562 |
swingManager.setDefaultPopupMenu(this.txtMaxValue); |
372 | 563 |
swingManager.setDefaultPopupMenu(this.txtAvailableValuesLabel); |
373 | 564 |
swingManager.setDefaultPopupMenu(this.txtAvailableValuesValue); |
374 |
|
|
565 |
|
|
566 |
this.foreingKeyController = new ForeingKeyController( |
|
567 |
chkIsForeingKey, |
|
568 |
chkIsSelectable, |
|
569 |
cboForeingKeyTableName, |
|
570 |
cboForeingKeyCodeName, |
|
571 |
txtForeingKeyFormula, |
|
572 |
btnForeingKeyFormula |
|
573 |
); |
|
375 | 574 |
this.pickerIntervalEnd = swingManager.createDatePickerController( |
376 | 575 |
this.txtIntervalEnd, |
377 | 576 |
this.btnIntervalEnd |
... | ... | |
394 | 593 |
); |
395 | 594 |
|
396 | 595 |
this.availableValuesController = new AvailableValuesController( |
397 |
cboAvailableValues,
|
|
398 |
txtAvailableValuesLabel,
|
|
399 |
txtAvailableValuesValue,
|
|
400 |
btnAvailableValuesAdd,
|
|
401 |
btnAvailableValuesUpdate,
|
|
596 |
cboAvailableValues, |
|
597 |
txtAvailableValuesLabel, |
|
598 |
txtAvailableValuesValue, |
|
599 |
btnAvailableValuesAdd, |
|
600 |
btnAvailableValuesUpdate, |
|
402 | 601 |
btnAvailableValuesRemove |
403 | 602 |
); |
404 | 603 |
this.tagsController = new TagsController( |
405 |
tblTags,
|
|
406 |
cboTagsName,
|
|
407 |
txtTagsValue,
|
|
408 |
btnTagsAdd,
|
|
409 |
btnTagsUpdate,
|
|
604 |
tblTags, |
|
605 |
cboTagsName, |
|
606 |
txtTagsValue, |
|
607 |
btnTagsAdd, |
|
608 |
btnTagsUpdate, |
|
410 | 609 |
btnTagsRemove, |
411 | 610 |
lblTagsDescription |
412 | 611 |
); |
413 | 612 |
this.txtMinValue.setEnabled(false); |
414 | 613 |
this.txtMaxValue.setEnabled(false); |
415 |
|
|
614 |
|
|
416 | 615 |
this.btnVirtualField.setText(""); |
417 | 616 |
this.featureStoreElement = dataSwingManager.createFeatureStoreElement(); |
418 | 617 |
this.pickerVirtualField = ExpressionEvaluatorSwingLocator.getManager() |
... | ... | |
429 | 628 |
} |
430 | 629 |
}); |
431 | 630 |
|
432 |
|
|
433 | 631 |
this.pickerCRS = dataSwingManager.createProjectionPickerController( |
434 | 632 |
this.txtCRS, this.btnCRS |
435 | 633 |
); |
... | ... | |
459 | 657 |
doCheckSizeAndPrecision(); |
460 | 658 |
} |
461 | 659 |
}); |
462 |
|
|
660 |
|
|
463 | 661 |
DefaultComboBoxModel dataProfilesModel = new DefaultComboBoxModel<>(); |
464 |
dataProfilesModel.addElement(new ListElement<>("",null)); |
|
662 |
dataProfilesModel.addElement(new ListElement<>("", null));
|
|
465 | 663 |
for (DataProfile profile : DALLocator.getDataManager().getDataProfiles()) { |
466 | 664 |
dataProfilesModel.addElement(new ListElement<>(profile.getName(), profile.getID())); |
467 | 665 |
} |
... | ... | |
477 | 675 |
public EditableFeatureAttributeDescriptor fetch(EditableFeatureAttributeDescriptor descriptor) { |
478 | 676 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
479 | 677 |
try { |
480 |
if( !this.chkAllowNulls.isSelected() ) {
|
|
481 |
if( descriptor.allowNull() ) {
|
|
678 |
if (!this.chkAllowNulls.isSelected()) {
|
|
679 |
if (descriptor.allowNull()) {
|
|
482 | 680 |
ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager(); |
483 | 681 |
dialogs.messageDialog( |
484 |
i18n.getTranslation("_You_have_marked_not_allow_nulls")+ "\n" +
|
|
485 |
i18n.getTranslation("If_you_are_not_fully_aware_of_the_repercussions_of_this_it_is_advisable_to_allow_nulls"), |
|
682 |
i18n.getTranslation("_You_have_marked_not_allow_nulls") + "\n"
|
|
683 |
+ i18n.getTranslation("If_you_are_not_fully_aware_of_the_repercussions_of_this_it_is_advisable_to_allow_nulls"),
|
|
486 | 684 |
null, |
487 |
i18n.getTranslation("_Warning"),
|
|
685 |
i18n.getTranslation("_Warning"), |
|
488 | 686 |
JOptionPane.INFORMATION_MESSAGE, |
489 | 687 |
"AllowNullsInFeatureTypeEditing" |
490 | 688 |
); |
... | ... | |
520 | 718 |
break; |
521 | 719 |
} |
522 | 720 |
descriptor.setDataProfileName( |
523 |
StringUtils.defaultIfBlank((String) ListElement.getSelected(cboDataProfile),null)
|
|
721 |
StringUtils.defaultIfBlank((String) ListElement.getSelected(cboDataProfile), null)
|
|
524 | 722 |
); |
525 | 723 |
|
526 |
if( this.chkVirtualField.isSelected() && this.pickerVirtualField.isEnabled() ) {
|
|
724 |
if (this.chkVirtualField.isSelected() && this.pickerVirtualField.isEnabled()) {
|
|
527 | 725 |
Expression expression = this.pickerVirtualField.get(); |
528 |
if( expression==null ) {
|
|
529 |
descriptor.setFeatureAttributeEmulator((String)null); |
|
726 |
if (expression == null) {
|
|
727 |
descriptor.setFeatureAttributeEmulator((String) null);
|
|
530 | 728 |
} else { |
531 | 729 |
DataManager dataManager = DALLocator.getDataManager(); |
532 | 730 |
FeatureAttributeEmulatorExpression emulator = dataManager.createFeatureAttributeEmulatorExpression( |
533 | 731 |
descriptor.getFeatureType(), |
534 | 732 |
expression |
535 | 733 |
); |
536 |
if( !emulator.isValid() ) {
|
|
734 |
if (!emulator.isValid()) {
|
|
537 | 735 |
ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager(); |
538 | 736 |
dialogs.messageDialog( |
539 |
i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid")+
|
|
540 |
"\n"+
|
|
541 |
emulator.getErrorMessage(),
|
|
542 |
i18n.getTranslation("_Warning"),
|
|
737 |
i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid") |
|
738 |
+ "\n"
|
|
739 |
+ emulator.getErrorMessage(),
|
|
740 |
i18n.getTranslation("_Warning"), |
|
543 | 741 |
JOptionPane.WARNING_MESSAGE |
544 | 742 |
); |
545 | 743 |
return null; |
546 | 744 |
} |
547 | 745 |
for (String requiredFieldName : emulator.getRequiredFieldNames()) { |
548 |
if( StringUtils.equalsIgnoreCase(requiredFieldName, descriptor.getName()) ) {
|
|
746 |
if (StringUtils.equalsIgnoreCase(requiredFieldName, descriptor.getName())) {
|
|
549 | 747 |
ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager(); |
550 | 748 |
dialogs.messageDialog( |
551 |
i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid")+
|
|
552 |
"\n\n"+
|
|
553 |
i18n.getTranslation("_The_expression_contains_a_reference_to_itself"),
|
|
554 |
i18n.getTranslation("_Warning"),
|
|
749 |
i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid") |
|
750 |
+ "\n\n"
|
|
751 |
+ i18n.getTranslation("_The_expression_contains_a_reference_to_itself"),
|
|
752 |
i18n.getTranslation("_Warning"), |
|
555 | 753 |
JOptionPane.WARNING_MESSAGE |
556 | 754 |
); |
557 | 755 |
return null; |
... | ... | |
585 | 783 |
} |
586 | 784 |
} |
587 | 785 |
} catch (Exception ex) { |
588 |
LOGGER.warn("Can't retrieve information from user form.",ex); |
|
786 |
LOGGER.warn("Can't retrieve information from user form.", ex);
|
|
589 | 787 |
ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager(); |
590 | 788 |
dialogs.messageDialog( |
591 |
i18n.getTranslation("_Cant_retrieve_information_from_user_form")+
|
|
592 |
"\n"+
|
|
593 |
i18n.getTranslation("_See_log_for_details"),
|
|
594 |
i18n.getTranslation("_Warning"),
|
|
789 |
i18n.getTranslation("_Cant_retrieve_information_from_user_form") |
|
790 |
+ "\n"
|
|
791 |
+ i18n.getTranslation("_See_log_for_details"),
|
|
792 |
i18n.getTranslation("_Warning"), |
|
595 | 793 |
JOptionPane.WARNING_MESSAGE |
596 | 794 |
); |
597 | 795 |
return null; |
598 | 796 |
} |
599 |
|
|
797 |
|
|
600 | 798 |
descriptor.setGroup(StringUtils.defaultIfBlank((String) this.cboGroup.getSelectedItem(), null)); |
601 | 799 |
descriptor.setOrder(this.pickerOrder.get(0)); |
602 | 800 |
descriptor.setHidden(this.chkHidden.isSelected()); |
603 | 801 |
descriptor.setLabel(StringUtils.defaultIfBlank(this.txtLabel.getText(), null)); |
604 | 802 |
descriptor.setDescription(StringUtils.defaultIfBlank(this.txtDescription.getText(), null)); |
605 |
|
|
803 |
|
|
606 | 804 |
// this.txtMinValue.setText(Objects.toString(descriptor.getMinValue(), "")); |
607 | 805 |
// this.txtMinValue.setText(Objects.toString(descriptor.getMaxValue(), "")); |
806 |
descriptor.setAvailableValues(this.availableValuesController.get()); |
|
608 | 807 |
|
609 |
descriptor.setAvailableValues(this.availableValuesController.get()); |
|
610 | 808 |
this.tagsController.fetch(descriptor.getTags()); |
611 |
|
|
809 |
this.foreingKeyController.fetch(descriptor.getForeingKey()); |
|
612 | 810 |
return descriptor; |
613 | 811 |
} |
614 | 812 |
|
... | ... | |
635 | 833 |
ListElement.setSelected(cboGeometrySubtype, null); |
636 | 834 |
|
637 | 835 |
ListElement.setSelected(cboFieldType, DataTypes.STRING); |
638 |
|
|
836 |
|
|
639 | 837 |
this.cboDataProfile.setSelectedIndex(-1); |
640 |
|
|
838 |
|
|
641 | 839 |
this.cboGroup.setSelectedIndex(-1); |
642 | 840 |
this.pickerOrder.set(null); |
643 | 841 |
this.chkHidden.setSelected(false); |
... | ... | |
646 | 844 |
this.txtMinValue.setText(""); |
647 | 845 |
this.txtMaxValue.setText(""); |
648 | 846 |
this.availableValuesController.clean(); |
649 |
this.tagsController.clean(); |
|
847 |
this.tagsController.clean(); |
|
848 |
this.foreingKeyController.clean(); |
|
650 | 849 |
} |
651 | 850 |
|
652 | 851 |
@Override |
... | ... | |
657 | 856 |
} |
658 | 857 |
FeatureType featureType = descriptor.getFeatureType(); |
659 | 858 |
DefaultComboBoxModel groupModel = new DefaultComboBoxModel(); |
660 |
|
|
661 |
if( featureType!=null ) {
|
|
859 |
|
|
860 |
if (featureType != null) {
|
|
662 | 861 |
FeatureStore store = descriptor.getFeatureType().getStore(); |
663 | 862 |
this.featureStoreElement.setFeatureStore(store); |
664 |
if( store != null ) {
|
|
863 |
if (store != null) {
|
|
665 | 864 |
Feature sampleFeature = null; |
666 | 865 |
try { |
667 | 866 |
sampleFeature = store.getFeatureSelection().first(); |
668 |
if( sampleFeature == null ) {
|
|
867 |
if (sampleFeature == null) {
|
|
669 | 868 |
sampleFeature = store.first(); |
670 | 869 |
} |
671 | 870 |
} catch (DataException ex) { |
672 | 871 |
} |
673 |
if( sampleFeature!=null ) {
|
|
872 |
if (sampleFeature != null) {
|
|
674 | 873 |
FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager().createFeatureSymbolTable(); |
675 | 874 |
featureSymbolTable.setFeature(sampleFeature); |
676 | 875 |
this.pickerVirtualField.setPreviewSymbolTable(featureSymbolTable.createParent()); |
... | ... | |
679 | 878 |
List<String> groups = new ArrayList<>(); |
680 | 879 |
for (FeatureAttributeDescriptor otherdesc : featureType) { |
681 | 880 |
String group = otherdesc.getGroup(); |
682 |
if( !StringUtils.isBlank(group) && !groups.contains(group) ) {
|
|
881 |
if (!StringUtils.isBlank(group) && !groups.contains(group)) {
|
|
683 | 882 |
groups.add(group); |
684 | 883 |
} |
685 | 884 |
} |
... | ... | |
690 | 889 |
if (!(descriptor instanceof EditableFeatureAttributeDescriptor)) { |
691 | 890 |
this.setEditable(false); |
692 | 891 |
} |
693 |
|
|
892 |
|
|
694 | 893 |
this.pickerDefaultValue.set(descriptor.getDefaultValue()); |
695 | 894 |
this.txtFieldName.setText(descriptor.getName()); |
696 | 895 |
RelativeInterval interval = (RelativeInterval) descriptor.getInterval(); |
... | ... | |
736 | 935 |
ListElement.setSelected(cboFieldType, descriptor.getType()); |
737 | 936 |
|
738 | 937 |
String profile = descriptor.getDataProfileName(); |
739 |
if( StringUtils.isBlank(profile) ) {
|
|
740 |
this.cboDataProfile.setSelectedIndex(-1); |
|
938 |
if (StringUtils.isBlank(profile)) {
|
|
939 |
this.cboDataProfile.setSelectedIndex(-1);
|
|
741 | 940 |
} else { |
742 |
ListElement.setSelected(this.cboDataProfile,profile);
|
|
941 |
ListElement.setSelected(this.cboDataProfile, profile);
|
|
743 | 942 |
} |
744 | 943 |
|
745 | 944 |
this.cboGroup.setModel(groupModel); |
746 |
this.cboGroup.setSelectedItem(StringUtils.defaultIfBlank(descriptor.getGroup(),"")); |
|
945 |
this.cboGroup.setSelectedItem(StringUtils.defaultIfBlank(descriptor.getGroup(), ""));
|
|
747 | 946 |
this.pickerOrder.set(descriptor.getOder()); |
748 | 947 |
this.chkHidden.setSelected(descriptor.isHidden()); |
749 |
this.txtLabel.setText(StringUtils.defaultIfBlank(descriptor.getLabel(),"")); |
|
750 |
this.txtDescription.setText(StringUtils.defaultIfBlank(descriptor.getDescription(),"")); |
|
948 |
this.txtLabel.setText(StringUtils.defaultIfBlank(descriptor.getLabel(), ""));
|
|
949 |
this.txtDescription.setText(StringUtils.defaultIfBlank(descriptor.getDescription(), ""));
|
|
751 | 950 |
this.txtMinValue.setText(Objects.toString(descriptor.getMinValue(), "")); |
752 | 951 |
this.txtMinValue.setText(Objects.toString(descriptor.getMaxValue(), "")); |
753 | 952 |
this.availableValuesController.set(descriptor.getAvailableValues()); |
754 | 953 |
this.tagsController.set(descriptor.getTags()); |
755 | 954 |
|
955 |
this.foreingKeyController.put(descriptor.getForeingKey()); |
|
756 | 956 |
} |
757 | 957 |
|
758 | 958 |
private void doFieldTypeChanged() { |
... | ... | |
762 | 962 |
fieldType = DataTypes.UNKNOWN; |
763 | 963 |
} |
764 | 964 |
Integer size = this.pickerSize.get(); |
765 |
if( fieldType == DataTypes.STRING ) {
|
|
766 |
if( size == null ) {
|
|
965 |
if (fieldType == DataTypes.STRING) {
|
|
966 |
if (size == null) {
|
|
767 | 967 |
this.pickerSize.set(50); |
768 | 968 |
} |
769 | 969 |
} else { |
770 | 970 |
int maxsize = this.getMaxSizeOfType(fieldType); |
771 |
if( size==null || (maxsize>0 && size>maxsize) ) {
|
|
971 |
if (size == null || (maxsize > 0 && size > maxsize)) {
|
|
772 | 972 |
this.pickerSize.set(maxsize); |
773 | 973 |
} |
774 | 974 |
} |
775 | 975 |
Integer precision = this.pickerPrecision.get(); |
776 |
if( precision==null ) {
|
|
976 |
if (precision == null) {
|
|
777 | 977 |
int defaultPrecision = this.getDefaultPrecisionOfType(fieldType); |
778 |
if( defaultPrecision>0 ) {
|
|
978 |
if (defaultPrecision > 0) {
|
|
779 | 979 |
this.pickerPrecision.set(defaultPrecision); |
780 | 980 |
} |
781 | 981 |
} |
782 |
|
|
982 |
|
|
783 | 983 |
switch (fieldType) { |
784 | 984 |
case DataTypes.GEOMETRY: |
785 | 985 |
this.cboGeometryType.setEnabled(editable); |
... | ... | |
815 | 1015 |
break; |
816 | 1016 |
case DataTypes.BYTE: |
817 | 1017 |
case DataTypes.INT: |
818 |
case DataTypes.LONG:
|
|
819 |
case DataTypes.STRING:
|
|
1018 |
case DataTypes.LONG: |
|
1019 |
case DataTypes.STRING: |
|
820 | 1020 |
this.cboGeometryType.setEnabled(false); |
821 | 1021 |
this.cboGeometrySubtype.setEnabled(false); |
822 | 1022 |
this.pickerCRS.setEnabled(false); |
... | ... | |
859 | 1059 |
this.pickerPrecision.setEnabled(false); |
860 | 1060 |
} |
861 | 1061 |
} catch (Exception ex) { |
862 |
LOGGER.warn("Problems changing field type.",ex); |
|
1062 |
LOGGER.warn("Problems changing field type.", ex);
|
|
863 | 1063 |
} |
864 |
|
|
1064 |
|
|
865 | 1065 |
} |
866 | 1066 |
|
867 | 1067 |
@Override |
... | ... | |
898 | 1098 |
this.txtMaxValue.setEditable(false); |
899 | 1099 |
this.availableValuesController.setEditable(editable); |
900 | 1100 |
this.tagsController.setEditable(editable); |
1101 |
this.foreingKeyController.setEditable(editable); |
|
901 | 1102 |
} |
902 |
|
|
1103 |
|
|
903 | 1104 |
private int getMaxSizeOfType(int dataType) { |
904 |
switch(dataType) { |
|
1105 |
switch (dataType) {
|
|
905 | 1106 |
case DataTypes.BOOLEAN: |
906 | 1107 |
return 1; |
907 | 1108 |
case DataTypes.BYTE: |
... | ... | |
922 | 1123 |
} |
923 | 1124 |
|
924 | 1125 |
private int getDefaultPrecisionOfType(int dataType) { |
925 |
switch(dataType) { |
|
1126 |
switch (dataType) {
|
|
926 | 1127 |
case DataTypes.FLOAT: |
927 | 1128 |
return 6; |
928 | 1129 |
case DataTypes.DOUBLE: |
... | ... | |
934 | 1135 |
|
935 | 1136 |
private void doCheckSizeAndPrecision() { |
936 | 1137 |
Integer size = this.pickerSize.get(); |
937 |
if( size == null ) {
|
|
1138 |
if (size == null) {
|
|
938 | 1139 |
return; |
939 | 1140 |
} |
940 | 1141 |
int maxsize = this.getMaxSizeOfType((int) ListElement.getSelected(cboFieldType)); |
941 |
if( size<1 || (maxsize>0 && size>maxsize) ) {
|
|
1142 |
if (size < 1 || (maxsize > 0 && size > maxsize)) {
|
|
942 | 1143 |
this.pickerSize.setWarning(true, "The size is not valid for the selected type"); |
943 | 1144 |
} else { |
944 | 1145 |
this.pickerSize.setWarning(false); |
945 | 1146 |
} |
946 |
if( this.pickerPrecision.isEnabled() ) {
|
|
1147 |
if (this.pickerPrecision.isEnabled()) {
|
|
947 | 1148 |
Integer precision = this.pickerPrecision.get(); |
948 |
if( precision == null ) {
|
|
949 |
return ;
|
|
1149 |
if (precision == null) {
|
|
1150 |
return; |
|
950 | 1151 |
} |
951 |
if( precision < 0 ) {
|
|
1152 |
if (precision < 0) {
|
|
952 | 1153 |
this.pickerPrecision.setWarning(true, "the precision can not have a negative value"); |
953 |
} else if( precision>size ) {
|
|
1154 |
} else if (precision > size) {
|
|
954 | 1155 |
this.pickerPrecision.setWarning(true, "the precision can not have a value greater than the size"); |
955 | 1156 |
} else { |
956 | 1157 |
this.pickerPrecision.setWarning(false); |
... | ... | |
967 | 1168 |
public String getName() { |
968 | 1169 |
return StringUtils.defaultIfBlank(this.txtFieldName.getText(), null); |
969 | 1170 |
} |
970 |
|
|
971 |
|
|
1171 |
|
|
972 | 1172 |
} |
Also available in: Unified diff