1 |
1 |
package org.gvsig.fmap.dal.swing.impl.featuretype;
|
2 |
2 |
|
3 |
3 |
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
|
4 |
|
import com.vividsolutions.jts.operation.distance.GeometryLocation;
|
5 |
4 |
import java.awt.event.ItemEvent;
|
6 |
5 |
import java.awt.event.ItemListener;
|
7 |
6 |
import java.util.ArrayList;
|
... | ... | |
15 |
14 |
import javax.swing.event.ChangeListener;
|
16 |
15 |
import org.cresques.cts.IProjection;
|
17 |
16 |
import org.gvsig.expressionevaluator.Expression;
|
|
17 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
|
|
18 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
|
|
19 |
import org.gvsig.expressionevaluator.MutableSymbolTable;
|
18 |
20 |
import org.gvsig.expressionevaluator.swing.CalculatorController;
|
19 |
21 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
|
20 |
22 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
|
... | ... | |
22 |
24 |
import org.gvsig.fmap.dal.DALLocator;
|
23 |
25 |
import org.gvsig.fmap.dal.DataManager;
|
24 |
26 |
import org.gvsig.fmap.dal.DataTypes;
|
|
27 |
import org.gvsig.fmap.dal.exception.DataException;
|
25 |
28 |
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
|
|
29 |
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
|
26 |
30 |
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
|
|
31 |
import org.gvsig.fmap.dal.feature.Feature;
|
27 |
32 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
|
28 |
33 |
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
|
|
34 |
import org.gvsig.fmap.dal.feature.FeatureStore;
|
29 |
35 |
import org.gvsig.fmap.dal.swing.DALSwingLocator;
|
30 |
36 |
import org.gvsig.fmap.dal.swing.DataSwingManager;
|
31 |
37 |
import org.gvsig.fmap.geom.Geometry;
|
... | ... | |
60 |
66 |
private CalculatorController<Integer> pickerSize;
|
61 |
67 |
private CalculatorController<Integer> pickerPrecision;
|
62 |
68 |
private CalculatorController<Object> pickerDefaultValue;
|
63 |
|
private CalculatorController<String> pickerFieldName;
|
|
69 |
// private CalculatorController<String> pickerFieldName;
|
64 |
70 |
private PickerController<IProjection> pickerCRS;
|
65 |
71 |
private ExpressionPickerController pickerVirtualField;
|
66 |
72 |
|
... | ... | |
172 |
178 |
this.pickerPrecision = evaluatorManager.createCalculatorController(
|
173 |
179 |
this.txtPrecision, DataTypes.INT
|
174 |
180 |
);
|
175 |
|
this.pickerFieldName = evaluatorManager.createCalculatorController(
|
176 |
|
this.txtFieldName, DataTypes.STRING
|
177 |
|
);
|
|
181 |
// this.pickerFieldName = evaluatorManager.createCalculatorController(
|
|
182 |
// this.txtFieldName, DataTypes.STRING
|
|
183 |
// );
|
178 |
184 |
this.pickerDefaultValue = evaluatorManager.createCalculatorController(
|
179 |
185 |
this.txtDefaultValue, DataTypes.OBJECT
|
180 |
186 |
);
|
... | ... | |
209 |
215 |
}
|
210 |
216 |
}
|
211 |
217 |
});
|
|
218 |
this.pickerPrecision.addChangeListener(new ChangeListener() {
|
|
219 |
@Override
|
|
220 |
public void stateChanged(ChangeEvent e) {
|
|
221 |
doCheckSizeAndPrecision();
|
|
222 |
}
|
|
223 |
});
|
|
224 |
this.pickerSize.addChangeListener(new ChangeListener() {
|
|
225 |
@Override
|
|
226 |
public void stateChanged(ChangeEvent e) {
|
|
227 |
doCheckSizeAndPrecision();
|
|
228 |
}
|
|
229 |
});
|
212 |
230 |
}
|
213 |
231 |
|
214 |
232 |
@Override
|
... | ... | |
273 |
291 |
|
274 |
292 |
public void clean() {
|
275 |
293 |
this.pickerDefaultValue.set(null);
|
276 |
|
this.pickerFieldName.set(null);
|
|
294 |
this.txtFieldName.setText("");
|
|
295 |
// this.pickerFieldName.set(null);
|
277 |
296 |
this.pickerIntervalEnd.set(null);
|
278 |
297 |
this.pickerIntervalStart.set(null);
|
279 |
298 |
this.pickerPrecision.set(null);
|
... | ... | |
306 |
325 |
}
|
307 |
326 |
this.pickerVirtualField = ExpressionEvaluatorSwingLocator.getManager()
|
308 |
327 |
.createExpressionPickerController(txtVirtualField, btnVirtualField);
|
309 |
|
if( descriptor.getFeatureType()!=null && descriptor.getFeatureType().getStore()!=null ) {
|
310 |
|
this.pickerVirtualField.addElement(
|
311 |
|
expressionSwingManager.createElement(
|
312 |
|
DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT,
|
313 |
|
this.pickerVirtualField,
|
314 |
|
descriptor.getFeatureType().getStore()
|
315 |
|
)
|
316 |
|
);
|
|
328 |
if( descriptor.getFeatureType()!=null ) {
|
|
329 |
FeatureStore store = descriptor.getFeatureType().getStore();
|
|
330 |
if( store!=null ) {
|
|
331 |
this.pickerVirtualField.addElement(
|
|
332 |
expressionSwingManager.createElement(
|
|
333 |
DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT,
|
|
334 |
this.pickerVirtualField,
|
|
335 |
store
|
|
336 |
)
|
|
337 |
);
|
|
338 |
Feature sampleFeature = null;
|
|
339 |
try {
|
|
340 |
sampleFeature = store.getFeatureSelection().first();
|
|
341 |
if( sampleFeature == null ) {
|
|
342 |
sampleFeature = store.first();
|
|
343 |
}
|
|
344 |
} catch (DataException ex) {
|
|
345 |
}
|
|
346 |
if( sampleFeature!=null ) {
|
|
347 |
FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager().createFeatureSymbolTable();
|
|
348 |
featureSymbolTable.setFeature(sampleFeature);
|
|
349 |
this.pickerVirtualField.setPreviewSymbolTable(featureSymbolTable.createParent());
|
|
350 |
}
|
|
351 |
}
|
317 |
352 |
}
|
318 |
353 |
if (!(descriptor instanceof EditableFeatureAttributeDescriptor)) {
|
319 |
354 |
this.setEditable(false);
|
320 |
355 |
}
|
321 |
356 |
|
322 |
357 |
this.pickerDefaultValue.set(descriptor.getDefaultValue());
|
323 |
|
this.pickerFieldName.set(descriptor.getName());
|
|
358 |
this.txtFieldName.setText(descriptor.getName());
|
|
359 |
// this.pickerFieldName.set(descriptor.getName());
|
324 |
360 |
RelativeInterval interval = (RelativeInterval) descriptor.getInterval();
|
325 |
361 |
if (interval == null) {
|
326 |
362 |
this.pickerIntervalEnd.set(null);
|
... | ... | |
371 |
407 |
if (fieldType == null) {
|
372 |
408 |
fieldType = DataTypes.UNKNOWN;
|
373 |
409 |
}
|
|
410 |
if( fieldType != DataTypes.STRING ) {
|
|
411 |
int maxsize = this.getMaxSizeOfType(fieldType);
|
|
412 |
Integer size = this.pickerSize.get();
|
|
413 |
if( maxsize>0 && size!=null && size>maxsize ) {
|
|
414 |
this.pickerSize.set(maxsize);
|
|
415 |
}
|
|
416 |
}
|
374 |
417 |
switch (fieldType) {
|
375 |
418 |
case DataTypes.GEOMETRY:
|
376 |
419 |
this.cboGeometryType.setEnabled(editable);
|
... | ... | |
381 |
424 |
this.pickerIntervalEnd.setEditable(false);
|
382 |
425 |
this.tabAditionalFields.setEnabledAt(1, true);
|
383 |
426 |
this.tabAditionalFields.setEnabledAt(2, false);
|
|
427 |
this.pickerSize.set(null);
|
|
428 |
this.pickerPrecision.set(null);
|
|
429 |
this.pickerSize.setEnabled(false);
|
|
430 |
this.pickerPrecision.setEnabled(false);
|
384 |
431 |
break;
|
385 |
432 |
case DataTypes.INSTANT:
|
386 |
433 |
case DataTypes.INTERVAL:
|
... | ... | |
392 |
439 |
this.pickerCRS.setEnabled(false);
|
393 |
440 |
this.cboDateFormat.setEnabled(editable);
|
394 |
441 |
this.pickerIntervalStart.setEnabled(editable);
|
395 |
|
this.pickerIntervalEnd.setEditable(editable);
|
|
442 |
this.pickerIntervalEnd.setEnabled(editable);
|
396 |
443 |
this.tabAditionalFields.setEnabledAt(1, false);
|
397 |
444 |
this.tabAditionalFields.setEnabledAt(2, true);
|
|
445 |
this.pickerSize.set(null);
|
|
446 |
this.pickerPrecision.set(null);
|
|
447 |
this.pickerSize.setEnabled(false);
|
|
448 |
this.pickerPrecision.setEnabled(false);
|
398 |
449 |
break;
|
|
450 |
case DataTypes.BYTE:
|
|
451 |
case DataTypes.INT:
|
|
452 |
case DataTypes.LONG:
|
|
453 |
case DataTypes.STRING:
|
|
454 |
this.cboGeometryType.setEnabled(false);
|
|
455 |
this.cboGeometrySubtype.setEnabled(false);
|
|
456 |
this.pickerCRS.setEnabled(false);
|
|
457 |
this.cboDateFormat.setEnabled(false);
|
|
458 |
this.pickerIntervalStart.setEnabled(false);
|
|
459 |
this.pickerIntervalEnd.setEditable(false);
|
|
460 |
this.tabAditionalFields.setEnabledAt(1, false);
|
|
461 |
this.tabAditionalFields.setEnabledAt(2, false);
|
|
462 |
|
|
463 |
this.pickerPrecision.set(null);
|
|
464 |
this.pickerSize.setEnabled(true);
|
|
465 |
this.pickerPrecision.setEnabled(false);
|
|
466 |
break;
|
|
467 |
case DataTypes.FLOAT:
|
|
468 |
case DataTypes.DOUBLE:
|
|
469 |
this.cboGeometryType.setEnabled(false);
|
|
470 |
this.cboGeometrySubtype.setEnabled(false);
|
|
471 |
this.pickerCRS.setEnabled(false);
|
|
472 |
this.cboDateFormat.setEnabled(false);
|
|
473 |
this.pickerIntervalStart.setEnabled(false);
|
|
474 |
this.pickerIntervalEnd.setEditable(false);
|
|
475 |
this.tabAditionalFields.setEnabledAt(1, false);
|
|
476 |
this.tabAditionalFields.setEnabledAt(2, false);
|
|
477 |
|
|
478 |
this.pickerSize.setEnabled(true);
|
|
479 |
this.pickerPrecision.setEnabled(true);
|
|
480 |
break;
|
399 |
481 |
default:
|
400 |
482 |
this.cboGeometryType.setEnabled(false);
|
401 |
483 |
this.cboGeometrySubtype.setEnabled(false);
|
... | ... | |
405 |
487 |
this.pickerIntervalEnd.setEditable(false);
|
406 |
488 |
this.tabAditionalFields.setEnabledAt(1, false);
|
407 |
489 |
this.tabAditionalFields.setEnabledAt(2, false);
|
|
490 |
this.pickerSize.set(null);
|
|
491 |
this.pickerPrecision.set(null);
|
|
492 |
this.pickerSize.setEnabled(false);
|
|
493 |
this.pickerPrecision.setEnabled(false);
|
408 |
494 |
}
|
409 |
495 |
} catch (Exception ex) {
|
410 |
|
|
|
496 |
ex.printStackTrace();
|
411 |
497 |
}
|
|
498 |
|
412 |
499 |
}
|
413 |
500 |
|
414 |
501 |
public void setEditable(boolean editable) {
|
415 |
502 |
this.editable = editable;
|
416 |
503 |
this.pickerDefaultValue.setEditable(editable);
|
417 |
|
this.pickerFieldName.setEditable(editable);
|
|
504 |
this.txtFieldName.setEditable(editable);
|
|
505 |
// this.pickerFieldName.setEditable(editable);
|
418 |
506 |
this.pickerIntervalEnd.setEditable(editable);
|
419 |
507 |
this.pickerIntervalStart.setEditable(editable);
|
420 |
508 |
this.pickerPrecision.setEditable(editable);
|
... | ... | |
433 |
521 |
this.cboGeometrySubtype.setEnabled(editable);
|
434 |
522 |
|
435 |
523 |
}
|
|
524 |
|
|
525 |
private int getMaxSizeOfType(int dataType) {
|
|
526 |
switch(dataType) {
|
|
527 |
case DataTypes.BOOLEAN:
|
|
528 |
return 1;
|
|
529 |
case DataTypes.BYTE:
|
|
530 |
return 3;
|
|
531 |
case DataTypes.INT:
|
|
532 |
return 9;
|
|
533 |
case DataTypes.LONG:
|
|
534 |
return 19;
|
|
535 |
case DataTypes.FLOAT:
|
|
536 |
return 20;
|
|
537 |
case DataTypes.DOUBLE:
|
|
538 |
return 20;
|
|
539 |
case DataTypes.DATE:
|
|
540 |
return 8;
|
|
541 |
default:
|
|
542 |
return -1;
|
|
543 |
}
|
|
544 |
}
|
|
545 |
|
|
546 |
private void doCheckSizeAndPrecision() {
|
|
547 |
Integer size = this.pickerSize.get();
|
|
548 |
if( size == null ) {
|
|
549 |
return;
|
|
550 |
}
|
|
551 |
int maxsize = this.getMaxSizeOfType((int) ListElement.getSelected(cboFieldType));
|
|
552 |
if( size<1 || (maxsize>0 && size>maxsize) ) {
|
|
553 |
this.pickerSize.setWarning(true, "The size is not valid for the selected type");
|
|
554 |
} else {
|
|
555 |
this.pickerSize.setWarning(false);
|
|
556 |
}
|
|
557 |
if( this.pickerPrecision.isEnabled() ) {
|
|
558 |
Integer precision = this.pickerPrecision.get();
|
|
559 |
if( precision == null ) {
|
|
560 |
return ;
|
|
561 |
}
|
|
562 |
if( precision < 0 ) {
|
|
563 |
this.pickerPrecision.setWarning(true, "the precision can not have a negative value");
|
|
564 |
} else if( precision>size ) {
|
|
565 |
this.pickerPrecision.setWarning(true, "the precision can not have a value greater than the size");
|
|
566 |
} else {
|
|
567 |
this.pickerPrecision.setWarning(false);
|
|
568 |
}
|
|
569 |
}
|
|
570 |
}
|
|
571 |
|
436 |
572 |
}
|