Revision 44673 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 | ||
---|---|---|
62 | 62 |
import org.gvsig.timesupport.RelativeInterval; |
63 | 63 |
import org.gvsig.tools.ToolsLocator; |
64 | 64 |
import org.gvsig.tools.dataTypes.DataType; |
65 |
import org.gvsig.tools.dataTypes.DataType.NumberPrecisionAndScale; |
|
65 | 66 |
import org.gvsig.tools.dataTypes.DataTypesManager; |
66 | 67 |
import org.gvsig.tools.dynobject.DynObjectValueItem; |
67 | 68 |
import org.gvsig.tools.i18n.I18nManager; |
... | ... | |
403 | 404 |
private DatePickerController pickerIntervalEnd; |
404 | 405 |
private DatePickerController pickerIntervalStart; |
405 | 406 |
private CalculatorController<Integer> pickerSize; |
407 |
private CalculatorController<Integer> pickerPrecision; |
|
406 | 408 |
private CalculatorController<Integer> pickerScale; |
407 | 409 |
private CalculatorController<Object> pickerDefaultValue; |
408 | 410 |
private PickerController<IProjection> pickerCRS; |
... | ... | |
496 | 498 |
swingManager.translate(this.lblIntervalStart); |
497 | 499 |
swingManager.translate(this.lblIsAutomatic); |
498 | 500 |
swingManager.translate(this.lblIsPrimaryKey); |
501 |
swingManager.translate(this.lblPrecision); |
|
499 | 502 |
swingManager.translate(this.lblScale); |
500 | 503 |
swingManager.translate(this.lblSize); |
501 | 504 |
swingManager.translate(this.chkVirtualField); |
... | ... | |
580 | 583 |
this.pickerSize = evaluatorManager.createCalculatorController( |
581 | 584 |
this.txtSize, DataTypes.INT |
582 | 585 |
); |
586 |
this.pickerPrecision = evaluatorManager.createCalculatorController( |
|
587 |
this.txtPrecision, DataTypes.INT |
|
588 |
); |
|
583 | 589 |
this.pickerScale = evaluatorManager.createCalculatorController( |
584 | 590 |
this.txtScale, DataTypes.INT |
585 | 591 |
); |
... | ... | |
643 | 649 |
} |
644 | 650 |
}); |
645 | 651 |
|
646 |
this.pickerScale.addChangeListener(new ChangeListener() {
|
|
652 |
this.pickerPrecision.addChangeListener(new ChangeListener() {
|
|
647 | 653 |
@Override |
648 | 654 |
public void stateChanged(ChangeEvent e) { |
649 | 655 |
doCheckPrecisionAndScale(); |
650 | 656 |
} |
651 | 657 |
}); |
652 |
this.pickerSize.addChangeListener(new ChangeListener() {
|
|
658 |
this.pickerScale.addChangeListener(new ChangeListener() {
|
|
653 | 659 |
@Override |
654 | 660 |
public void stateChanged(ChangeEvent e) { |
655 | 661 |
doCheckPrecisionAndScale(); |
... | ... | |
692 | 698 |
descriptor.setIsPrimaryKey(this.chkIsPrimaryKey.isSelected()); |
693 | 699 |
descriptor.setIsAutomatic(this.chkIsAutomatic.isSelected()); |
694 | 700 |
descriptor.setSize(this.pickerSize.get(0)); |
701 |
descriptor.setPrecision(this.pickerPrecision.get(0)); |
|
695 | 702 |
descriptor.setScale(this.pickerScale.get(0)); |
696 | 703 |
descriptor.setDefaultValue(this.pickerDefaultValue.get()); |
697 | 704 |
descriptor.setDataProfileName((String) ListElement.getSelected(this.cboDataProfile)); |
... | ... | |
895 | 902 |
this.pickerIntervalEnd.set(interval.getEnd().toDate()); |
896 | 903 |
this.pickerIntervalStart.set(interval.getStart().toDate()); |
897 | 904 |
} |
898 |
this.pickerScale.set(descriptor.getScale()); |
|
899 | 905 |
this.pickerSize.set(descriptor.getSize()); |
906 |
this.pickerPrecision.set(descriptor.getPrecision()); |
|
907 |
this.pickerScale.set(descriptor.getScale()); |
|
900 | 908 |
|
901 | 909 |
this.chkAllowNulls.setSelected(descriptor.allowNull()); |
902 | 910 |
this.chkIsAutomatic.setSelected(descriptor.isAutomatic()); |
... | ... | |
961 | 969 |
this.updateEditableStates(); |
962 | 970 |
} |
963 | 971 |
|
972 |
private DataType getDataType() { |
|
973 |
Integer fieldType = (Integer) ListElement.getSelected(this.cboFieldType); |
|
974 |
if (fieldType == null) { |
|
975 |
return null; |
|
976 |
} |
|
977 |
DataType dataType = ToolsLocator.getDataTypesManager().get(fieldType); |
|
978 |
return dataType; |
|
979 |
} |
|
980 |
|
|
964 | 981 |
private void doFieldTypeChanged() { |
965 |
try { |
|
966 |
Integer fieldType = (Integer) ListElement.getSelected(this.cboFieldType); |
|
967 |
if (fieldType == null) { |
|
968 |
fieldType = DataTypes.UNKNOWN; |
|
969 |
} |
|
970 |
Integer size = this.pickerSize.get(); |
|
971 |
if (fieldType == DataTypes.STRING) { |
|
972 |
if (size == null) { |
|
973 |
this.pickerSize.set(50); |
|
974 |
} |
|
975 |
} else { |
|
976 |
int maxsize = this.getMaxSizeOfType(fieldType); |
|
977 |
if (size == null || (maxsize > 0 && size > maxsize)) { |
|
978 |
this.pickerSize.set(maxsize); |
|
979 |
} |
|
980 |
} |
|
981 |
Integer scale = this.pickerScale.get(); |
|
982 |
if (scale == null) { |
|
983 |
int defaultScale = this.getDefaultScaleOfType(fieldType); |
|
984 |
if (defaultScale > 0) { |
|
985 |
this.pickerScale.set(defaultScale); |
|
986 |
} |
|
987 |
} |
|
982 |
try { |
|
983 |
DataType dataType = this.getDataType(); |
|
988 | 984 |
|
989 |
switch (fieldType) { |
|
990 |
case DataTypes.GEOMETRY: |
|
991 |
this.cboGeometryType.setEnabled(this.mode==MODE_EDIT_ALL); |
|
992 |
this.cboGeometrySubtype.setEnabled(this.mode==MODE_EDIT_ALL); |
|
993 |
this.pickerCRS.setEditable(this.mode==MODE_EDIT_ALL); |
|
994 |
this.cboDateFormat.setEnabled(false); |
|
995 |
this.pickerIntervalStart.setEditable(false); |
|
996 |
this.pickerIntervalEnd.setEditable(false); |
|
997 |
this.tabAditionalFields.setEnabledAt(1, true); |
|
998 |
this.tabAditionalFields.setEnabledAt(2, false); |
|
999 |
this.pickerSize.set(null); |
|
1000 |
this.pickerScale.set(null); |
|
1001 |
this.pickerSize.setEditable(false); |
|
1002 |
this.pickerScale.setEditable(false); |
|
1003 |
break; |
|
1004 |
case DataTypes.INSTANT: |
|
1005 |
case DataTypes.INTERVAL: |
|
1006 |
case DataTypes.DATE: |
|
1007 |
case DataTypes.TIME: |
|
1008 |
case DataTypes.TIMESTAMP: |
|
1009 |
this.cboGeometryType.setEnabled(false); |
|
1010 |
this.cboGeometrySubtype.setEnabled(false); |
|
1011 |
this.pickerCRS.setEditable(false); |
|
1012 |
this.cboDateFormat.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA); |
|
1013 |
this.pickerIntervalStart.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA); |
|
1014 |
this.pickerIntervalEnd.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA); |
|
1015 |
this.tabAditionalFields.setEnabledAt(1, false); |
|
1016 |
this.tabAditionalFields.setEnabledAt(2, true); |
|
1017 |
this.pickerSize.set(null); |
|
1018 |
this.pickerScale.set(null); |
|
1019 |
this.pickerSize.setEditable(false); |
|
1020 |
this.pickerScale.setEditable(false); |
|
1021 |
break; |
|
1022 |
case DataTypes.BYTE: |
|
1023 |
case DataTypes.INT: |
|
1024 |
case DataTypes.LONG: |
|
1025 |
case DataTypes.STRING: |
|
1026 |
case DataTypes.FILE: |
|
1027 |
case DataTypes.URL: |
|
1028 |
case DataTypes.URI: |
|
1029 |
this.cboGeometryType.setEnabled(false); |
|
1030 |
this.cboGeometrySubtype.setEnabled(false); |
|
1031 |
this.pickerCRS.setEditable(false); |
|
1032 |
this.cboDateFormat.setEnabled(false); |
|
1033 |
this.pickerIntervalStart.setEditable(false); |
|
1034 |
this.pickerIntervalEnd.setEditable(false); |
|
1035 |
this.tabAditionalFields.setEnabledAt(1, false); |
|
1036 |
this.tabAditionalFields.setEnabledAt(2, false); |
|
1037 |
|
|
1038 |
this.pickerScale.set(null); |
|
1039 |
this.pickerSize.setEditable(this.mode==MODE_EDIT_ALL); |
|
1040 |
this.pickerScale.setEditable(false); |
|
1041 |
break; |
|
1042 |
case DataTypes.FLOAT: |
|
1043 |
case DataTypes.DOUBLE: |
|
1044 |
this.cboGeometryType.setEnabled(false); |
|
1045 |
this.cboGeometrySubtype.setEnabled(false); |
|
1046 |
this.pickerCRS.setEditable(false); |
|
1047 |
this.cboDateFormat.setEnabled(false); |
|
1048 |
this.pickerIntervalStart.setEditable(false); |
|
1049 |
this.pickerIntervalEnd.setEditable(false); |
|
1050 |
this.tabAditionalFields.setEnabledAt(1, false); |
|
1051 |
this.tabAditionalFields.setEnabledAt(2, false); |
|
1052 |
|
|
1053 |
this.pickerSize.setEditable(this.mode==MODE_EDIT_ALL); |
|
1054 |
this.pickerScale.setEditable(this.mode==MODE_EDIT_ALL); |
|
1055 |
break; |
|
1056 |
default: |
|
1057 |
this.cboGeometryType.setEnabled(false); |
|
1058 |
this.cboGeometrySubtype.setEnabled(false); |
|
1059 |
this.pickerCRS.setEditable(false); |
|
1060 |
this.cboDateFormat.setEnabled(false); |
|
1061 |
this.pickerIntervalStart.setEditable(false); |
|
1062 |
this.pickerIntervalEnd.setEditable(false); |
|
1063 |
this.tabAditionalFields.setEnabledAt(1, false); |
|
1064 |
this.tabAditionalFields.setEnabledAt(2, false); |
|
1065 |
this.pickerSize.set(null); |
|
1066 |
this.pickerScale.set(null); |
|
1067 |
this.pickerSize.setEditable(false); |
|
1068 |
this.pickerScale.setEditable(false); |
|
1069 |
} |
|
1070 |
} catch (Exception ex) { |
|
1071 |
LOGGER.warn("Problems changing field type.", ex); |
|
985 |
if( dataType.supportSize() ) { |
|
986 |
this.pickerSize.setEditable(this.mode == MODE_EDIT_ALL); |
|
987 |
} else { |
|
988 |
this.pickerSize.setEditable(false); |
|
989 |
this.pickerSize.set(null); |
|
990 |
} |
|
991 |
if( dataType.supportPrecision()) { |
|
992 |
this.pickerPrecision.setEditable(this.mode == MODE_EDIT_ALL); |
|
993 |
} else { |
|
994 |
this.pickerPrecision.setEditable(false); |
|
995 |
this.pickerPrecision.set(null); |
|
996 |
} |
|
997 |
if( dataType.supportScale()) { |
|
998 |
this.pickerScale.setEditable(this.mode == MODE_EDIT_ALL); |
|
999 |
} else { |
|
1000 |
this.pickerScale.setEditable(false); |
|
1001 |
this.pickerScale.set(null); |
|
1002 |
} |
|
1003 |
switch (dataType.getType()) { |
|
1004 |
case DataTypes.GEOMETRY: |
|
1005 |
this.cboGeometryType.setEnabled(this.mode == MODE_EDIT_ALL); |
|
1006 |
this.cboGeometrySubtype.setEnabled(this.mode == MODE_EDIT_ALL); |
|
1007 |
this.pickerCRS.setEditable(this.mode == MODE_EDIT_ALL); |
|
1008 |
this.cboDateFormat.setEnabled(false); |
|
1009 |
this.pickerIntervalStart.setEditable(false); |
|
1010 |
this.pickerIntervalEnd.setEditable(false); |
|
1011 |
this.tabAditionalFields.setEnabledAt(1, true); |
|
1012 |
this.tabAditionalFields.setEnabledAt(2, false); |
|
1013 |
break; |
|
1014 |
case DataTypes.INSTANT: |
|
1015 |
case DataTypes.INTERVAL: |
|
1016 |
case DataTypes.DATE: |
|
1017 |
case DataTypes.TIME: |
|
1018 |
case DataTypes.TIMESTAMP: |
|
1019 |
this.cboGeometryType.setEnabled(false); |
|
1020 |
this.cboGeometrySubtype.setEnabled(false); |
|
1021 |
this.pickerCRS.setEditable(false); |
|
1022 |
this.cboDateFormat.setEnabled(this.mode == MODE_EDIT_ALL || this.mode == MODE_EDIT_ONLY_METADATA); |
|
1023 |
this.pickerIntervalStart.setEnabled(this.mode == MODE_EDIT_ALL || this.mode == MODE_EDIT_ONLY_METADATA); |
|
1024 |
this.pickerIntervalEnd.setEnabled(this.mode == MODE_EDIT_ALL || this.mode == MODE_EDIT_ONLY_METADATA); |
|
1025 |
this.tabAditionalFields.setEnabledAt(1, false); |
|
1026 |
this.tabAditionalFields.setEnabledAt(2, true); |
|
1027 |
break; |
|
1028 |
case DataTypes.BYTE: |
|
1029 |
case DataTypes.INT: |
|
1030 |
case DataTypes.LONG: |
|
1031 |
case DataTypes.STRING: |
|
1032 |
case DataTypes.FILE: |
|
1033 |
case DataTypes.URL: |
|
1034 |
case DataTypes.URI: |
|
1035 |
case DataTypes.FLOAT: |
|
1036 |
case DataTypes.DOUBLE: |
|
1037 |
case DataTypes.DECIMAL: |
|
1038 |
this.cboGeometryType.setEnabled(false); |
|
1039 |
this.cboGeometrySubtype.setEnabled(false); |
|
1040 |
this.pickerCRS.setEditable(false); |
|
1041 |
this.cboDateFormat.setEnabled(false); |
|
1042 |
this.pickerIntervalStart.setEditable(false); |
|
1043 |
this.pickerIntervalEnd.setEditable(false); |
|
1044 |
this.tabAditionalFields.setEnabledAt(1, false); |
|
1045 |
this.tabAditionalFields.setEnabledAt(2, false); |
|
1046 |
break; |
|
1047 |
default: |
|
1048 |
this.cboGeometryType.setEnabled(false); |
|
1049 |
this.cboGeometrySubtype.setEnabled(false); |
|
1050 |
this.pickerCRS.setEditable(false); |
|
1051 |
this.cboDateFormat.setEnabled(false); |
|
1052 |
this.pickerIntervalStart.setEditable(false); |
|
1053 |
this.pickerIntervalEnd.setEditable(false); |
|
1054 |
this.tabAditionalFields.setEnabledAt(1, false); |
|
1055 |
this.tabAditionalFields.setEnabledAt(2, false); |
|
1072 | 1056 |
} |
1057 |
} catch (Exception ex) { |
|
1058 |
LOGGER.warn("Problems changing field type.", ex); |
|
1059 |
} |
|
1073 | 1060 |
|
1074 | 1061 |
} |
1062 |
|
|
1075 | 1063 |
boolean isVirtualField() { |
1076 | 1064 |
return this.chkVirtualField.isSelected(); |
1077 | 1065 |
} |
... | ... | |
1088 | 1076 |
} |
1089 | 1077 |
|
1090 | 1078 |
private void updateEditableStates() { |
1079 |
DataType dataType = this.getDataType(); |
|
1091 | 1080 |
switch(this.mode) { |
1092 | 1081 |
case MODE_EDIT_ALL: |
1093 | 1082 |
this.pickerDefaultValue.setEditable(true); |
1094 | 1083 |
this.txtFieldName.setEditable(true); |
1095 | 1084 |
this.pickerIntervalEnd.setEditable(true); |
1096 | 1085 |
this.pickerIntervalStart.setEditable(true); |
1097 |
this.pickerScale.setEditable(true); |
|
1098 |
this.pickerSize.setEditable(true); |
|
1086 |
this.pickerSize.setEditable(dataType.supportSize()); |
|
1087 |
if( dataType.isFixedPrecision() ) { |
|
1088 |
this.pickerPrecision.setEditable(false); |
|
1089 |
this.pickerPrecision.set(dataType.getMaxPrecision()); |
|
1090 |
} else { |
|
1091 |
this.pickerPrecision.setEditable(dataType.supportPrecision()); |
|
1092 |
} |
|
1093 |
this.pickerScale.setEditable(dataType.supportScale()); |
|
1099 | 1094 |
this.cboDataProfile.setEnabled(true); |
1100 | 1095 |
|
1101 | 1096 |
this.chkAllowNulls.setEnabled(true); |
... | ... | |
1138 | 1133 |
this.pickerCRS.setEditable(true); |
1139 | 1134 |
} else { |
1140 | 1135 |
this.txtFieldName.setEditable(false); |
1136 |
this.pickerPrecision.setEditable(false); |
|
1141 | 1137 |
this.pickerScale.setEditable(false); |
1142 | 1138 |
this.pickerSize.setEditable(false); |
1143 | 1139 |
this.pickerVirtualField.setEditable(false); |
... | ... | |
1181 | 1177 |
this.txtFieldName.setEditable(false); |
1182 | 1178 |
this.pickerIntervalEnd.setEditable(false); |
1183 | 1179 |
this.pickerIntervalStart.setEditable(false); |
1180 |
this.pickerPrecision.setEditable(false); |
|
1184 | 1181 |
this.pickerScale.setEditable(false); |
1185 | 1182 |
this.pickerSize.setEditable(false); |
1186 | 1183 |
this.cboDataProfile.setEnabled(false); |
... | ... | |
1212 | 1209 |
} |
1213 | 1210 |
} |
1214 | 1211 |
|
1215 |
private int getMaxSizeOfType(int dataType) { |
|
1216 |
switch (dataType) { |
|
1217 |
case DataTypes.BOOLEAN: |
|
1218 |
return 1; |
|
1219 |
case DataTypes.BYTE: |
|
1220 |
return 3; |
|
1221 |
case DataTypes.INT: |
|
1222 |
return 9; |
|
1223 |
case DataTypes.LONG: |
|
1224 |
return 19; |
|
1225 |
case DataTypes.FLOAT: |
|
1226 |
return 20; |
|
1227 |
case DataTypes.DOUBLE: |
|
1228 |
return 20; |
|
1229 |
case DataTypes.DATE: |
|
1230 |
return 8; |
|
1231 |
default: |
|
1232 |
return -1; |
|
1233 |
} |
|
1234 |
} |
|
1235 |
|
|
1236 |
private int getDefaultScaleOfType(int dataType) { |
|
1237 |
switch (dataType) { |
|
1238 |
case DataTypes.FLOAT: |
|
1239 |
return 6; |
|
1240 |
case DataTypes.DOUBLE: |
|
1241 |
return 6; |
|
1242 |
case DataTypes.DECIMAL: |
|
1243 |
return 6; |
|
1244 |
default: |
|
1245 |
return -1; |
|
1246 |
} |
|
1247 |
} |
|
1248 |
|
|
1249 | 1212 |
private void doCheckPrecisionAndScale() { |
1250 |
Integer size = this.pickerSize.get(); |
|
1251 |
if (size == null) { |
|
1252 |
return; |
|
1253 |
} |
|
1254 |
int maxsize = this.getMaxSizeOfType((int) ListElement.getSelected(cboFieldType)); |
|
1255 |
if (size < 1 || (maxsize > 0 && size > maxsize)) { |
|
1256 |
this.pickerSize.setWarning(true, "The size is not valid for the selected type"); |
|
1257 |
} else { |
|
1258 |
this.pickerSize.setWarning(false); |
|
1259 |
} |
|
1260 |
if (this.pickerScale.isEnabled()) { |
|
1261 |
Integer precision = this.pickerScale.get(); |
|
1262 |
if (precision == null) { |
|
1263 |
return; |
|
1264 |
} |
|
1265 |
if (precision < 0) { |
|
1266 |
this.pickerScale.setWarning(true, "the precision can not have a negative value"); |
|
1267 |
} else if (precision > size) { |
|
1268 |
this.pickerScale.setWarning(true, "the precision can not have a value greater than the size"); |
|
1269 |
} else { |
|
1270 |
this.pickerScale.setWarning(false); |
|
1271 |
} |
|
1272 |
} |
|
1213 |
DataType dataType = this.getDataType(); |
|
1214 |
|
|
1215 |
Integer precision = this.pickerPrecision.get(); |
|
1216 |
if( precision==null ) { |
|
1217 |
precision = 0; |
|
1218 |
} |
|
1219 |
Integer scale = this.pickerScale.get(); |
|
1220 |
if( scale == null ) { |
|
1221 |
scale = 0; |
|
1222 |
} |
|
1223 |
NumberPrecisionAndScale r = dataType.fixPrecisionAndScale(precision, scale); |
|
1224 |
if( r.getPrecision()!=precision || r.getScale()!=scale ) { |
|
1225 |
this.pickerPrecision.setWarning(true, "The precision/scale are not valids"); |
|
1226 |
this.pickerScale.setWarning(true, "The precision/scale are not valids"); |
|
1227 |
} else { |
|
1228 |
this.pickerPrecision.setWarning(false); |
|
1229 |
this.pickerScale.setWarning(false); |
|
1230 |
} |
|
1273 | 1231 |
} |
1274 | 1232 |
|
1275 | 1233 |
@Override |
Also available in: Unified diff