Revision 44500

View differences:

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