Revision 44500
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/DefaultFeatureTypePanel.java | ||
---|---|---|
27 | 27 |
import org.gvsig.tools.swing.api.ChangeListenerHelper; |
28 | 28 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
29 | 29 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
30 |
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager; |
|
30 | 31 |
import org.slf4j.Logger; |
31 | 32 |
import org.slf4j.LoggerFactory; |
32 | 33 |
|
... | ... | |
40 | 41 |
{ |
41 | 42 |
|
42 | 43 |
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureTypePanel.class); |
43 |
|
|
44 |
private FeatureType originalFeatureType; |
|
45 |
|
|
44 | 46 |
private class FeatureTypeTableModel extends AbstractTableModel { |
45 | 47 |
|
46 | 48 |
private final FeatureType featureType; |
... | ... | |
243 | 245 |
return true; |
244 | 246 |
} |
245 | 247 |
FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(row); |
248 |
int previousType = descriptor.getType(); |
|
246 | 249 |
if( descriptor instanceof EditableFeatureAttributeDescriptor ) { |
247 | 250 |
if( this.descriptorPanel.fetch((EditableFeatureAttributeDescriptor) descriptor)==null ) { |
248 | 251 |
return false; |
249 | 252 |
} |
250 | 253 |
this.tableModel.fireUpdateEvent(); |
251 | 254 |
} |
255 |
|
|
256 |
FeatureAttributeDescriptor oldDescriptor = this.originalFeatureType.getAttributeDescriptor(descriptor.getName()); |
|
257 |
if (oldDescriptor !=null && |
|
258 |
oldDescriptor.getDataType()!=descriptor.getDataType() && |
|
259 |
previousType != descriptor.getType()) { |
|
260 |
ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager(); |
|
261 |
I18nManager i18manager = ToolsLocator.getI18nManager(); |
|
262 |
StringBuilder message = new StringBuilder(); |
|
263 |
|
|
264 |
String[] messageArgs = new String[]{oldDescriptor.getName()}; |
|
265 |
message.append(i18manager.getTranslation("_Already_existed_a_field_named_XfieldnameX_but_with_different_data_type", messageArgs)); |
|
266 |
message.append(".\n"); |
|
267 |
message.append(i18manager.getTranslation("_Values_of_data_will_try_to_coerce_to_this_type")); |
|
268 |
dialogs.messageDialog( |
|
269 |
message.toString(), |
|
270 |
null, |
|
271 |
i18manager.getTranslation("_Values_will_change"), |
|
272 |
JOptionPane.INFORMATION_MESSAGE, |
|
273 |
"feature-type-manager-field-already-exist-in-previous-schema"); |
|
274 |
} |
|
275 |
|
|
276 |
|
|
252 | 277 |
return true; |
253 | 278 |
} |
254 | 279 |
|
... | ... | |
377 | 402 |
|
378 | 403 |
@Override |
379 | 404 |
public void put(FeatureType type) { |
405 |
FeatureType ftypeToCompare = type.getOriginalFeatureType(); |
|
406 |
if (ftypeToCompare==null) { |
|
407 |
ftypeToCompare = type; |
|
408 |
} |
|
409 |
this.originalFeatureType = ftypeToCompare.getCopy(); |
|
380 | 410 |
this.featureType = type; |
381 | 411 |
if( type == null ) { |
382 | 412 |
this.store = null; |
... | ... | |
407 | 437 |
private void doNewField() { |
408 | 438 |
EditableFeatureType eft = (EditableFeatureType)this.featureType; |
409 | 439 |
EditableFeatureAttributeDescriptor descriptor = eft.add( |
410 |
getNewFieldName(this.featureType),
|
|
440 |
this.featureType.getNewFieldName(),
|
|
411 | 441 |
DataTypes.STRING, |
412 | 442 |
50 |
413 | 443 |
); |
... | ... | |
436 | 466 |
doFormFieldPut(); |
437 | 467 |
this.changeListenerHelper.fireEvent(); |
438 | 468 |
} |
439 |
|
|
440 |
public static String getNewFieldName(FeatureType featureType) { |
|
441 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
|
442 |
String prefix = i18n.getTranslation("_Field"); |
|
443 |
String fieldName; |
|
444 |
for (int i = 1; i < 1000; i++) { |
|
445 |
fieldName = prefix +"-"+i; |
|
446 |
if( featureType.get(fieldName)==null ) { |
|
447 |
return fieldName; |
|
448 |
} |
|
449 |
} |
|
450 |
fieldName = prefix + "-" + (new Date()).getTime(); |
|
451 |
return fieldName; |
|
452 |
} |
|
453 | 469 |
|
454 | 470 |
@Override |
455 | 471 |
public void addChangeListener(ChangeListener listener) { |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureType.java | ||
---|---|---|
332 | 332 |
FeatureStore getAsFeatureStore(); |
333 | 333 |
|
334 | 334 |
public String getNewFieldName(); |
335 |
/** |
|
336 |
* Return the store associated to this type. |
|
337 |
* It will return Null when it's in not editing mode |
|
338 |
* or the featureType has not been change |
|
339 |
* |
|
340 |
* @return the original FeatureStore of the type. |
|
341 |
*/ |
|
342 |
public FeatureType getOriginalFeatureType(); |
|
335 | 343 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFeatureType.java | ||
---|---|---|
466 | 466 |
return null; |
467 | 467 |
} |
468 | 468 |
|
469 |
@Override |
|
470 |
public FeatureType getOriginalFeatureType() { |
|
471 |
return null; |
|
472 |
} |
|
473 |
|
|
469 | 474 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureType.java | ||
---|---|---|
1115 | 1115 |
fieldName = prefix + "-" + (new Date()).getTime(); |
1116 | 1116 |
return fieldName; |
1117 | 1117 |
} |
1118 |
|
|
1118 |
|
|
1119 |
public FeatureType getOriginalFeatureType() { |
|
1120 |
DefaultFeatureStore store = (DefaultFeatureStore) this.getStore(); |
|
1121 |
if (store==null) { |
|
1122 |
return null; |
|
1123 |
} |
|
1124 |
return store.getOriginalFeatureType(this); |
|
1125 |
} |
|
1119 | 1126 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java | ||
---|---|---|
3116 | 3116 |
return this.provider.isTemporary(); |
3117 | 3117 |
} |
3118 | 3118 |
|
3119 |
public FeatureType getOriginalFeatureType(FeatureType featureType) { |
|
3120 |
// FIXME this don't work for Store.fType.size() > 1 |
|
3121 |
FeatureTypeManager manager = this.featureTypeManager; |
|
3122 |
if (manager==null) { |
|
3123 |
return null; |
|
3124 |
} |
|
3125 |
FeatureType originalFeatureType = manager.getOriginalFeatureType(); |
|
3126 |
if (originalFeatureType==null) { |
|
3127 |
return null; |
|
3128 |
} |
|
3129 |
return originalFeatureType.getCopy(); |
|
3130 |
} |
|
3119 | 3131 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text.properties | ||
---|---|---|
1384 | 1384 |
_Use_labels_and_names=Usar etiquetas y nombres |
1385 | 1385 |
_Documents=Documentos |
1386 | 1386 |
_Search_by_attributes=Busqueda por atributos |
1387 |
_Already_existed_a_field_named_XfieldnameX_but_with_different_data_type=Ya existe un campo llamado "{0}" pero con otro tipo de dato |
|
1388 |
_Values_of_data_will_try_to_coerce_to_this_type=Los valores intentar\u00e1n transformarse a este nuevo tipo de dato. |
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties | ||
---|---|---|
1304 | 1304 |
_Use_labels_and_names=Use labels and names |
1305 | 1305 |
_Documents=Documents |
1306 | 1306 |
_Search_by_attributes=Search by attributes |
1307 |
|
|
1307 |
_Already_existed_a_field_named_XfieldnameX_but_with_different_data_type=Already existed a field named "{0}" but with different data type |
|
1308 |
_Values_of_data_will_try_to_coerce_to_this_type=Values of data will try to coerce to this type |
Also available in: Unified diff