Revision 39409

View differences:

branches/v2_0_0_prep/extensions/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/TableOperations.java
285 285
            renameAttribute(featureStore, selecteds[i].getName(), newName);
286 286
        }
287 287
        
288
        featureStore.finishEditing();
288
        // featureStore.finishEditing();
289 289
        // featureStore.edit(FeatureStore.MODE_FULLEDIT);
290 290
    }
291 291

  
......
303 303
     */
304 304
    private static boolean renameAttribute(FeatureStore fs, String name, String newName) {
305 305

  
306
        Component root_comp =
307
            ApplicationLocator.getManager().getRootComponent();
308

  
309 306
        EditableFeatureType eft = null;
310
        
307
        FeatureType dft = null;
311 308
        try {
309
            dft = fs.getDefaultFeatureType();
310
            
311
            if (dft instanceof EditableFeatureType) {
312
                eft = (EditableFeatureType) dft;
313
            } else {
314
                eft = dft.getEditable();
315
            }
316
            
317
            EditableFeatureAttributeDescriptor efad =
318
                (EditableFeatureAttributeDescriptor) eft.getAttributeDescriptor(name);
319
            efad.setName(newName);
320
            fs.update(eft);
321
            
322
        } catch (DataException de) {
323
            
324
            Component root_comp =
325
                ApplicationLocator.getManager().getRootComponent();
326

  
327
            JOptionPane.showMessageDialog(
328
                root_comp,
329
                Messages.getText("_Unable_to_rename_attribute") +
330
                ": " + de.getMessage(),
331
                Messages.getText("_Unable_to_rename_attribute"),
332
                JOptionPane.ERROR_MESSAGE);
333
            return false;
334
        }
335
        return true;
336

  
337
        /*
338
        try {
312 339
            // ========== add new field
313 340
            eft = fs.getDefaultFeatureType().getEditable();
314 341
            FeatureAttributeDescriptor fad = eft.getAttributeDescriptor(name);
......
319 346
            ApplicationLocator.getManager().message(
320 347
                Messages.getText("_Unable_to_rename_attribute"),
321 348
                JOptionPane.ERROR_MESSAGE);
322
            /*
323
             * did not even add new field
324
             */
349
            // did not even add new field
325 350
            return false;
326 351
        }
327 352
        
......
359 384
        
360 385
        if (error_when_inserting) {
361 386
            try {
362
                /*
363
                 * Trying to remove new field and leave
364
                 * table as it was
365
                 */
387
                // Trying to remove new field and leave table as it was
366 388
                eft.remove(newName);
367 389
                fs.update(eft);
368 390
            } catch (DataException ex) {
369
                /*
370
                 * Unable to remove added field but user was
371
                 * already notified that something went wrong
372
                 */
391
                // Unable to remove added field but user was
392
                // already notified that something went wrong
373 393
            }
374
            /*
375
             * not changed
376
             */
394
            // Not changed
377 395
            return false;
378 396
        }
379 397
            
......
393 411
            return false;
394 412
        }
395 413
        return true;
414
        */
396 415

  
397 416
    }
398 417
    
......
428 447
                fs.getName());
429 448
        }
430 449
        renameAttribute(fs, oldname, newname);
431
        fs.finishEditing();
450
        // fs.finishEditing();
432 451
    }
433 452

  
434 453
}
branches/v2_0_0_prep/extensions/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/FeatureTypeEditingPanel.java
519 519
                                        "field_already_exists"), null);
520 520
                                return;
521 521
                            }
522
                            
523 522

  
524 523
                            try {
525
                                TableOperations.renameColumn(
526
                                    featureStore, fieldName, newName);
527
                            } catch (DataException de) {
524
                                EditableFeatureAttributeDescriptor efad =
525
                                    (EditableFeatureAttributeDescriptor)
526
                                    editableType.getAttributeDescriptor(fieldName);
527
                                efad.setName(newName);
528
                            } catch (Exception de) {
528 529
                                JOptionPane.showMessageDialog(
529 530
                                    jTableFields,
530 531
                                    Messages.getText("_Unable_to_rename_field")
......
532 533
                                    Messages.getText("_Rename_column"),
533 534
                                    JOptionPane.ERROR_MESSAGE);
534 535
                            }
535
                            
536
                            /*
537
                             * We need to close the dialog
538
                             * to avoid another update of the
539
                             * feature type
540
                             */
541
                            PluginServices.getMDIManager().closeWindow(
542
                                FeatureTypeEditingPanel.this);
543

  
544
                            
545 536
                        }
546 537
                        jTableFields.repaint();
547 538
                    }
branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java
50 50
import org.gvsig.fmap.dal.DataStore;
51 51
import org.gvsig.fmap.dal.DataStoreNotification;
52 52
import org.gvsig.fmap.dal.DataStoreParameters;
53
import org.gvsig.fmap.dal.exception.CloneException;
53 54
import org.gvsig.fmap.dal.exception.CloseException;
54 55
import org.gvsig.fmap.dal.exception.CreateException;
55 56
import org.gvsig.fmap.dal.exception.DataException;
......
958 959
            newVersionOfUpdate();
959 960

  
960 961
            FeatureType oldt = type.getSource().getCopy();
961
            FeatureType newt = type.getNotEditableCopy();
962
            FeatureType newt = type.getCopy();
962 963
            commands.update(newt, oldt);
963 964

  
964 965
            if (((DefaultEditableFeatureType) type).hasStrongChanges()) {
......
1552 1553

  
1553 1554
    public FeatureType getDefaultFeatureType() throws DataException {
1554 1555
        try {
1556
            
1555 1557
            if (isEditing()) {
1556 1558
                FeatureType auxFeatureType =
1557 1559
                    featureTypeManager.getType(defaultFeatureType.getId());
1558 1560
                if (auxFeatureType != null) {
1559
                    return auxFeatureType;
1561
                    return avoidEditable(auxFeatureType);
1560 1562
                }
1561 1563
            }
1562 1564
            FeatureType type = this.transforms.getDefaultFeatureType();
1563 1565
            if (type != null) {
1564
                return type;
1566
                return avoidEditable(type);
1565 1567
            }
1566
            return defaultFeatureType;
1568
            
1569
            return avoidEditable(defaultFeatureType);
1570
            
1567 1571
        } catch (Exception e) {
1568 1572
            throw new GetFeatureTypeException(e, getName());
1569 1573
        }
1570 1574
    }
1575
    
1576
    private FeatureType avoidEditable(FeatureType ft) {
1577
        if (ft instanceof EditableFeatureType) {
1578
            return ((EditableFeatureType) ft).getNotEditableCopy();
1579
        } else {
1580
            return ft;
1581
        }
1582
    }
1571 1583

  
1572 1584
    public FeatureType getFeatureType(String featureTypeId)
1573 1585
        throws DataException {
......
2008 2020
    public Collection getTimes(Interval interval) {       
2009 2021
        return this.provider.getTimes(interval);
2010 2022
    }
2023
    
2024
    /* (non-Javadoc)
2025
     * @see java.lang.Object#clone()
2026
     */
2027
    public Object clone() throws CloneNotSupportedException {
2028
        
2029
        DataStoreParameters dsp = getParameters();
2030
        
2031
        DefaultFeatureStore cloned_store = null;
2032
        
2033
        try {
2034
            cloned_store = (DefaultFeatureStore) DALLocator.getDataManager().
2035
                openStore(this.getProviderName(), dsp);
2036
            if (transforms != null) {
2037
                cloned_store.transforms = (DefaultFeatureStoreTransforms) transforms.clone();
2038
                cloned_store.transforms.setStoreForClone(this);
2039
            }
2040
        } catch (Exception e) {
2041
            throw new CloneException(e);
2042
        }   
2043
        return cloned_store;
2044
        
2045
    }
2011 2046
}
branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureAttributeDescriptor.java
17 17

  
18 18
    private DefaultFeatureAttributeDescriptor source;
19 19
    private boolean hasStrongChanges;
20
    private String originalName = null;
20 21

  
21 22
    protected DefaultEditableFeatureAttributeDescriptor(
22 23
        DefaultFeatureAttributeDescriptor other) {
23 24
        super(other);
24
        this.source = other;
25
        if (other instanceof DefaultEditableFeatureAttributeDescriptor) {
26
            DefaultEditableFeatureAttributeDescriptor other_edi =
27
                (DefaultEditableFeatureAttributeDescriptor) other;
28
            originalName = other_edi.getOriginalName();
29
            this.source = other_edi.getSource();
30
        } else {
31
            this.source = other;
32
        }
25 33
        hasStrongChanges = false;
26 34
    }
27 35

  
28
    protected DefaultEditableFeatureAttributeDescriptor(
29
        DefaultEditableFeatureAttributeDescriptor other) {
30
        super(other);
31
        this.source = other.getSource();
32
        hasStrongChanges = false;
33
    }
34

  
35 36
    public DefaultEditableFeatureAttributeDescriptor() {
36 37
        super();
37 38
        this.source = null;
......
151 152
    }
152 153

  
153 154
    public EditableFeatureAttributeDescriptor setName(String name) {
155
        if (originalName == null) {
156
            originalName = this.name;
157
            hasStrongChanges = true;
158
        }
154 159
        this.name = name;
155 160
        if (this.evaluator != null) {
156 161
            hasStrongChanges = true;
157 162
        }
158 163
        return this;
159 164
    }
165
    
166
    public String getOriginalName() {
167
        return originalName;
168
    }
160 169

  
161 170
    public EditableFeatureAttributeDescriptor setObjectClass(Class theClass) {
162 171
        this.objectClass = theClass;
branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/impl/FeatureTypeManager.java
51 51
import org.gvsig.fmap.dal.exception.DataException;
52 52
import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
53 53
import org.gvsig.fmap.dal.feature.EditableFeature;
54
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
54 55
import org.gvsig.fmap.dal.feature.EditableFeatureType;
55 56
import org.gvsig.fmap.dal.feature.Feature;
56 57
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
......
147 148
			}
148 149
		}
149 150
		int num = intNum.intValue();
151
		
152
		if (num == -1) {
153
		    /*
154
		     * This happens for example when we are going back to the
155
		     * original feature type which is not managed by
156
		     * expansionAdapter
157
		     */
158
		    return null;
159
		}
150 160

  
151 161
		FeatureType type = (FeatureType) expansionAdapter.getObject(num);
152 162
		return type;
......
193 203

  
194 204
	private class UpdateFeatureTypeTransform extends AbstractFeatureStoreTransform {
195 205
		private FeatureType ftSource;
196
		private FeatureType ftTarget;
206
		
207
        private EditableFeatureType ftTarget_editable;
208
        private FeatureType ftTarget_non_editable;
209
		
197 210
		private WeakReference wkRefStore;
198 211
		private List ftypes = null;
199
		private List attrToUse;
212
		private List attrInSourceToUse;
200 213

  
201 214
		UpdateFeatureTypeTransform(FeatureStore featureStore,
202 215
				FeatureType ftSource, FeatureType ftTarget) {
203 216
			this.ftSource = ftSource;
204
			this.ftTarget = ftTarget;
217
			
218
			if (ftTarget instanceof EditableFeatureType) {
219
			    
220
			    ftTarget_editable = (EditableFeatureType) ftTarget;
221
			    ftTarget_non_editable = ftTarget_editable.getNotEditableCopy();
222
			} else {
223
			    ftTarget_non_editable = ftTarget;
224
			}
225

  
205 226
			this.wkRefStore = new WeakReference(featureStore);
206 227
			this.initializeAttributesToUse();
207 228
		}
208 229

  
209 230
		private void initializeAttributesToUse() {
210
			attrToUse = new ArrayList(ftTarget.size());
211
			Iterator iter = ftTarget.iterator();
231
		    attrInSourceToUse = new ArrayList();
232
		    
233
		    Iterator iter = null;
234
		    if (ftTarget_editable != null) {
235
		        iter = ftTarget_editable.iterator();
236
		    } else {
237
		        iter = ftTarget_non_editable.iterator();
238
		    }
239

  
212 240
			FeatureAttributeDescriptor tAttr, sAttr;
241
			EditableFeatureAttributeDescriptor ead = null;
213 242
			while (iter.hasNext()) {
214 243
				tAttr = (FeatureAttributeDescriptor) iter.next();
215 244
				sAttr = this.ftSource.getAttributeDescriptor(tAttr.getName());
216 245
				if (sAttr == null) {
217
					continue;
246
				    if (tAttr instanceof EditableFeatureAttributeDescriptor) {
247
				        ead = (EditableFeatureAttributeDescriptor) tAttr;
248
				        if (ead.getOriginalName() != null) {
249
				            sAttr = this.ftSource.getAttributeDescriptor(ead.getOriginalName());
250
	                        if (sAttr == null) {
251
	                            continue;
252
	                        }
253
				        } else {
254
				            continue;
255
				        }
256
				    } else {
257
				        continue;
258
				    }
218 259
				}
219 260
				if (tAttr.getDataType() != sAttr.getDataType()) {
220 261
					continue;
221 262
				}
222
				attrToUse.add(tAttr.getName());
223

  
263
				attrInSourceToUse.add(sAttr.getName());
224 264
			}
225

  
226 265
		}
227 266

  
228 267
		public void applyTransform(Feature source, EditableFeature target)
229 268
				throws DataException {
269
		    
230 270
			Iterator iter = target.getType().iterator();
231 271
			FeatureAttributeDescriptor tAttr;
232
			String name;
272
			FeatureAttributeDescriptor tAttr_edi;
273
			
274
			/*
275
			 * field name in source feature
276
			 */
277
            String s_name;
278
            
279
            /*
280
             * field name in target feature (the same as in source
281
             * except if renamed)
282
             */
283
            String t_name;
284
			
285
			EditableFeatureAttributeDescriptor eatd = null;
233 286
			while (iter.hasNext()) {
234 287
				tAttr = (FeatureAttributeDescriptor) iter.next();
235
				name = tAttr.getName();
236
				if (source.getType().get(name) != null) {
237
					target.set(name, source.get(name));
288
				
289
				if (ftTarget_editable != null) {
290
				    /*
291
				     * If target FT is editable, try to get original name
292
				     */
293
				    t_name = tAttr.getName();
294
				    s_name = t_name;
295
				    tAttr_edi = ftTarget_editable.getAttributeDescriptor(t_name);
296
				    if (tAttr_edi instanceof EditableFeatureAttributeDescriptor) {
297
				        eatd = (EditableFeatureAttributeDescriptor) tAttr_edi;
298
				        s_name = eatd.getOriginalName();
299
				    }
300
				    
301
				    /*
302
				     * If not found, use normal name
303
				     */
304
				    if (s_name == null) {
305
				        s_name = tAttr.getName();
306
				    }
238 307
				} else {
239
					target.set(name, tAttr.getDefaultValue());
308
				    /*
309
				     * If target FT is not editable, use normal name
310
				     */
311
				    t_name = tAttr.getName();
312
				    s_name = t_name;
240 313
				}
314
				
315
				if (source.getType().get(s_name) != null) {
316
					target.set(t_name, source.get(s_name));
317
				} else {
318
					target.set(t_name, tAttr.getDefaultValue());
319
				}
241 320
			}
242 321
		}
243 322

  
244 323
		public FeatureType getDefaultFeatureType() throws DataException {
245
			return this.ftTarget;
324
			return this.ftTarget_non_editable;
246 325
		}
247 326

  
248 327
		public FeatureStore getFeatureStore() {
......
252 331
		public List getFeatureTypes() throws DataException {
253 332
			if (this.ftypes == null) {
254 333
				this.ftypes = Arrays
255
						.asList(new FeatureType[] { this.ftTarget });
334
						.asList(new FeatureType[] { this.ftTarget_non_editable });
256 335
			}
257 336
			return this.ftypes;
258 337
		}
......
262 341
			EditableFeatureType orgType = ftSource.getEditable();
263 342
			Iterator iter = orgType.iterator();
264 343
			FeatureAttributeDescriptor attr;
344
			EditableFeatureAttributeDescriptor efad = null;
265 345

  
266 346
			while (iter.hasNext()) {
267 347
				attr = (FeatureAttributeDescriptor) iter.next();
268
				if (!attrToUse.contains(attr.getName())) {
269
					iter.remove();
348
				if (!attrInSourceToUse.contains(attr.getName())) {
349
				    if (attr instanceof EditableFeatureAttributeDescriptor) {
350
				        efad = (EditableFeatureAttributeDescriptor) attr;
351
				        if (efad.getOriginalName() != null &&
352
				            !attrInSourceToUse.contains(efad.getOriginalName())) {
353
				            iter.remove();
354
				        }
355
				    } else {
356
				        iter.remove();
357
				    }
270 358
				}
271 359
			}
272

  
273 360
			return orgType.getNotEditableCopy();
274 361
		}
275 362

  
branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/EditableFeatureAttributeDescriptor.java
203 203
	 *         this
204 204
	 */
205 205
	public EditableFeatureAttributeDescriptor setIsTime(boolean isTime);
206
	
207
	/**
208
	 * Returns the attribute descriptor's name before
209
	 * it was changed or null if never changed 
210
	 * @return
211
	 */
212
    public String getOriginalName();
206 213
}

Also available in: Unified diff