Revision 37333

View differences:

branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/FeatureStoreProviderFactory.java
16 16
	public List getSupportedGeometries();
17 17
	
18 18
	public int allowMultipleGeometryTypes();
19
	
20
	public int allowEditableFeatureType();
21
	
19 22
}
branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/spi/BaseFeatureStoreProviderFactory.java
1
package org.gvsig.fmap.dal.feature.spi;
2

  
3
import java.lang.reflect.Constructor;
4
import java.util.List;
5

  
6
import org.gvsig.fmap.dal.DataParameters;
7
import org.gvsig.fmap.dal.DataStoreProvider;
8
import org.gvsig.fmap.dal.exception.InitializeException;
9
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
10
import org.gvsig.fmap.dal.spi.AbstractDataStoreProviderFactory;
11
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
12
import org.gvsig.tools.dynobject.DynObject;
13

  
14
public class BaseFeatureStoreProviderFactory extends
15
		AbstractDataStoreProviderFactory implements FeatureStoreProviderFactory {
16

  
17
	private Class providerClass = null;
18
	private Class parametersClass = null;
19

  
20
	public BaseFeatureStoreProviderFactory(String name, String description,
21
			Class provider, Class parametersClass) {
22
		super(name, description);
23
		this.providerClass = provider;
24
		this.parametersClass = parametersClass;
25
	}
26

  
27
	public DataStoreProvider createProvider(DataParameters parameters,
28
			DataStoreProviderServices providerServices)
29
			throws InitializeException {
30
		try {
31
			Class[] argsTypes = new Class[] { DataParameters.class,
32
					DataStoreProviderServices.class };
33
			Object[] args = new Object[] { parameters, providerServices };
34

  
35
			Constructor contructor;
36
			contructor = findConstructor(providerClass, argsTypes);
37
			return (DataStoreProvider) contructor.newInstance(args);
38
		} catch (Throwable e) {
39
			throw new InitializeException(e);
40
		}
41
	}
42

  
43
	public final DynObject createParameters() {
44
		try {
45
			return (DynObject) parametersClass.newInstance();
46
		} catch (Exception e) {
47
			throw new RuntimeException(e);
48
		}
49
	}
50
	
51
	protected Constructor findConstructor(Class clazz, Class[] types)
52
			throws SecurityException, NoSuchMethodException {
53
		try {
54
			return clazz.getConstructor(types);
55
		} catch (NoSuchMethodException e) {
56
			// Nothing to do
57
		}
58

  
59
		// search for the required constructor
60
		Constructor[] constrs = clazz.getConstructors();
61
		boolean allMatch;
62
		for (int i = 0; i < constrs.length; i++) {
63
			Class[] paramTypes = constrs[i].getParameterTypes();
64
			if (paramTypes.length == types.length) { // a general candidate
65
				allMatch = true;
66
				for (int j = 0; j < paramTypes.length; j++) {
67
					if (!isParameterCompatible(types[j], paramTypes[j])) {
68
						allMatch = false;
69
						break;
70
					}
71
				}
72
				if (allMatch) {
73
					return constrs[i];
74
				}
75

  
76
			}
77
		}
78
		StringBuffer strb = new StringBuffer();
79
		strb.append(clazz.getName());
80
		strb.append('(');
81
		if (types.length > 0) {
82
			for (int i = 0; i < types.length - 1; i++) {
83
				strb.append(types[i].getName());
84
				strb.append(',');
85
			}
86
			strb.append(types[types.length - 1].getName());
87
		}
88
		strb.append(')');
89
		throw new NoSuchMethodException(strb.toString());
90
	}
91

  
92
	private boolean isParameterCompatible(Class current, Class defined) {
93
		if (current == null) {
94
			return !defined.isPrimitive();
95
		} else {
96
			return current.isAssignableFrom(defined);
97
		}
98
	}
99

  
100
	public List getSupportedGeometries() {
101
		return null;
102
	}
103

  
104
	public int allowMultipleGeometryTypes() {
105
		return UNKNOWN;
106
	}
107

  
108
}
branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProviderFactory.java
1
package org.gvsig.fmap.dal.feature.spi;
2

  
3
import java.util.List;
4

  
5
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
6
import org.gvsig.fmap.dal.spi.AbstractDataStoreProviderFactory;
7

  
8
public abstract class AbstractFeatureStoreProviderFactory extends
9
		AbstractDataStoreProviderFactory implements FeatureStoreProviderFactory {
10

  
11

  
12
	public AbstractFeatureStoreProviderFactory(String name, String description) {
13
		super(name, description);
14
	}
15

  
16
	public List getSupportedGeometries() {
17
		return null;
18
	}
19

  
20
	public int allowMultipleGeometryTypes() {
21
		return UNKNOWN;
22
	}
23
	
24
	public int allowEditableFeatureType() {
25
		return UNKNOWN;
26
	}
27

  
28
}
branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/spi/DataStoreProviderToFeatureStoreProviderFactoryWrapper.java
1
package org.gvsig.fmap.dal.feature.spi;
2

  
3
import java.lang.reflect.Constructor;
4

  
5
import org.gvsig.fmap.dal.DataParameters;
6
import org.gvsig.fmap.dal.DataStoreProvider;
7
import org.gvsig.fmap.dal.exception.InitializeException;
8
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
9
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
10
import org.gvsig.tools.dynobject.DynObject;
11

  
12
public class DataStoreProviderToFeatureStoreProviderFactoryWrapper extends
13
		AbstractFeatureStoreProviderFactory implements FeatureStoreProviderFactory {
14

  
15
	private Class providerClass = null;
16
	private Class parametersClass = null;
17

  
18
	public DataStoreProviderToFeatureStoreProviderFactoryWrapper(String name, String description,
19
			Class provider, Class parametersClass) {
20
		super(name, description);
21
		this.providerClass = provider;
22
		this.parametersClass = parametersClass;
23
	}
24

  
25
	public DataStoreProvider createProvider(DataParameters parameters,
26
			DataStoreProviderServices providerServices)
27
			throws InitializeException {
28
		try {
29
			Class[] argsTypes = new Class[] { DataParameters.class,
30
					DataStoreProviderServices.class };
31
			Object[] args = new Object[] { parameters, providerServices };
32

  
33
			Constructor contructor;
34
			contructor = findConstructor(providerClass, argsTypes);
35
			return (DataStoreProvider) contructor.newInstance(args);
36
		} catch (Throwable e) {
37
			throw new InitializeException(e);
38
		}
39
	}
40

  
41
	public final DynObject createParameters() {
42
		try {
43
			return (DynObject) parametersClass.newInstance();
44
		} catch (Exception e) {
45
			throw new RuntimeException(e);
46
		}
47
	}
48
	
49
	protected Constructor findConstructor(Class clazz, Class[] types)
50
			throws SecurityException, NoSuchMethodException {
51
		try {
52
			return clazz.getConstructor(types);
53
		} catch (NoSuchMethodException e) {
54
			// Nothing to do
55
		}
56

  
57
		// search for the required constructor
58
		Constructor[] constrs = clazz.getConstructors();
59
		boolean allMatch;
60
		for (int i = 0; i < constrs.length; i++) {
61
			Class[] paramTypes = constrs[i].getParameterTypes();
62
			if (paramTypes.length == types.length) { // a general candidate
63
				allMatch = true;
64
				for (int j = 0; j < paramTypes.length; j++) {
65
					if (!isParameterCompatible(types[j], paramTypes[j])) {
66
						allMatch = false;
67
						break;
68
					}
69
				}
70
				if (allMatch) {
71
					return constrs[i];
72
				}
73

  
74
			}
75
		}
76
		StringBuffer strb = new StringBuffer();
77
		strb.append(clazz.getName());
78
		strb.append('(');
79
		if (types.length > 0) {
80
			for (int i = 0; i < types.length - 1; i++) {
81
				strb.append(types[i].getName());
82
				strb.append(',');
83
			}
84
			strb.append(types[types.length - 1].getName());
85
		}
86
		strb.append(')');
87
		throw new NoSuchMethodException(strb.toString());
88
	}
89

  
90
	private boolean isParameterCompatible(Class current, Class defined) {
91
		if (current == null) {
92
			return !defined.isPrimitive();
93
		} else {
94
			return current.isAssignableFrom(defined);
95
		}
96
	}
97
}
0 98

  
branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/impl/DefaultDataManager.java
54 54
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
55 55
import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
56 56
import org.gvsig.fmap.dal.feature.paging.impl.FeaturePagingHelperImpl;
57
import org.gvsig.fmap.dal.feature.spi.BaseFeatureStoreProviderFactory;
57
import org.gvsig.fmap.dal.feature.spi.DataStoreProviderToFeatureStoreProviderFactoryWrapper;
58 58
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
59 59
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
60 60
import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProvider;
......
239 239

  
240 240
        if (FeatureStoreProvider.class.isAssignableFrom(storeProviderClass)) {
241 241
            // Envuelve al proveedor en una factoria por defecto.
242
            this.registerStoreProviderFactory(new BaseFeatureStoreProviderFactory(
242
            this.registerStoreProviderFactory(new DataStoreProviderToFeatureStoreProviderFactoryWrapper(
243 243
                name, "", storeProviderClass, parametersClass));
244 244
            return;
245 245
        }
branches/v2_0_0_prep/libraries/libFMap_dalfile/src/org/gvsig/fmap/dal/store/dxf/DXFStoreProviderFactory.java
1
package org.gvsig.fmap.dal.store.dxf;
2

  
3
import java.util.List;
4

  
5
import org.gvsig.fmap.dal.DataParameters;
6
import org.gvsig.fmap.dal.DataStoreProvider;
7
import org.gvsig.fmap.dal.exception.InitializeException;
8
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
9
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProviderFactory;
10
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
11
import org.gvsig.tools.dynobject.DynObject;
12

  
13
public class DXFStoreProviderFactory extends AbstractFeatureStoreProviderFactory implements FeatureStoreProviderFactory{
14

  
15
	protected DXFStoreProviderFactory(String name, String description) {
16
		super(name, description);
17
	}
18

  
19
	public DataStoreProvider createProvider(DataParameters parameters,
20
			DataStoreProviderServices providerServices)
21
			throws InitializeException {
22
		return new DXFStoreProvider((DXFStoreParameters) parameters, providerServices);
23
	}
24

  
25
	public DynObject createParameters() {
26
		return new DXFStoreParameters();
27
	}
28
	
29
	public int allowCreate() {
30
		return YES;
31
	}
32
	
33
	public int allowWrite() {
34
		return YES;
35
	}
36

  
37
	public int allowRead() {
38
		return YES;
39
	}
40
	
41
	public int hasRasterSupport() {
42
		return NO;
43
	}
44
	
45
	public int hasTabularSupport() {
46
		return YES;
47
	}
48
	
49
	public int hasVectorialSupport() {
50
		return YES;
51
	}
52

  
53
	public List getSupportedGeometries() {
54
		return null;
55
	}
56

  
57
	public int allowMultipleGeometryTypes() {
58
		return NO;
59
	}
60
	
61
	public int allowEditableFeatureType() {
62
		return NO;
63
	}
64

  
65
}
branches/v2_0_0_prep/libraries/libFMap_dalfile/src/org/gvsig/fmap/dal/store/dxf/DXFStoreParameters.java
11 11
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
12 12
import org.gvsig.fmap.dal.spi.AbstractDataParameters;
13 13
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
14
import org.gvsig.fmap.geom.Geometry;
14 15
import org.gvsig.tools.dynobject.DelegatedDynObject;
15 16

  
16 17
public class DXFStoreParameters extends AbstractDataParameters implements
......
93 94
	}
94 95

  
95 96
	public EditableFeatureType getDefaultFeatureType() {
96
		throw new UnsupportedOperationException();
97
		return DXFStoreProvider.createFeatureType(null, Geometry.SUBTYPES.GEOM3D);
97 98
	}
98 99

  
99 100
	public void setDefaultFeatureType(FeatureType defaultFeatureType) {
branches/v2_0_0_prep/libraries/libFMap_dalfile/src/org/gvsig/fmap/dal/store/dxf/DXFLibrary.java
36 36
import org.gvsig.fmap.dal.DALLocator;
37 37
import org.gvsig.fmap.dal.FileHelper;
38 38
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
39
import org.gvsig.fmap.dal.store.shp.SHPStoreProvider;
40
import org.gvsig.fmap.dal.store.shp.SHPStoreProviderFactory;
39 41
import org.gvsig.metadata.exceptions.MetadataException;
40 42
import org.gvsig.tools.library.AbstractLibrary;
41 43
import org.gvsig.tools.library.LibraryException;
......
72 74

  
73 75
		try {
74 76
			if (!dataman.getStoreProviders().contains(DXFStoreProvider.NAME)) {
75
				dataman.registerStoreProvider(DXFStoreProvider.NAME,
76
						DXFStoreProvider.class, DXFStoreParameters.class);
77
				dataman.registerStoreProviderFactory(new DXFStoreProviderFactory(DXFStoreProvider.NAME, DXFStoreProvider.DESCRIPTION));
78

  
77 79
			}
78 80
		} catch (RuntimeException e) {
79 81
			exs.add(e);
branches/v2_0_0_prep/libraries/libFMap_dalfile/src/org/gvsig/fmap/dal/store/dxf/DXFStoreProvider.java
107 107
    public static final String NAME_FIELD_HEIGHTTEXT = "HeightText";
108 108
    public static final String NAME_FIELD_ROTATIONTEXT = "Rotation";
109 109

  
110
    private int ID_FIELD_ID = 0;
111
    private int ID_FIELD_GEOMETRY = 1;
112
    private int ID_FIELD_ENTITY = 2;
113
    private int ID_FIELD_LAYER = 3;
114
    private int ID_FIELD_COLOR = 4;
115
    private int ID_FIELD_ELEVATION = 5;
116
    private int ID_FIELD_THICKNESS = 6;
117
    private int ID_FIELD_TEXT = 7;
118
    private int ID_FIELD_HEIGHTTEXT = 8;
119
    private int ID_FIELD_ROTATIONTEXT = 9;
110
    private static final int ID_FIELD_ID = 0;
111
    private static final int ID_FIELD_GEOMETRY = 1;
112
    private static final int ID_FIELD_ENTITY = 2;
113
    private static final int ID_FIELD_LAYER = 3;
114
    private static final int ID_FIELD_COLOR = 4;
115
    private static final int ID_FIELD_ELEVATION = 5;
116
    private static final int ID_FIELD_THICKNESS = 6;
117
    private static final int ID_FIELD_TEXT = 7;
118
    private static final int ID_FIELD_HEIGHTTEXT = 8;
119
    private static final int ID_FIELD_ROTATIONTEXT = 9;
120 120

  
121 121
    private IProjection projection;
122 122
    private ResourceProvider resource;
......
377 377
        }
378 378
    }
379 379

  
380
    public static EditableFeatureType createFeatureType(IProjection projection, int geometrySubtype){
381
    	DataManager manager = DALLocator.getDataManager();
382
    	EditableFeatureType featureType = manager.createFeatureType();
383

  
384
        featureType.setHasOID(true);
385

  
386
//        ID_FIELD_ID = 0;
387
        featureType.add(NAME_FIELD_ID, DataTypes.INT)
388
        .setDefaultValue(Integer.valueOf(0))
389
        .getIndex();
390

  
391
        EditableFeatureAttributeDescriptor attr = featureType.add(
392
            NAME_FIELD_GEOMETRY, DataTypes.GEOMETRY);
393
        attr.setSRS(projection);
394
        attr.setGeometryType(Geometry.TYPES.GEOMETRY);			
395
        //If is a 3D file, set the geometry subtype
396
        attr.setGeometrySubType(geometrySubtype);
397
        
398
//        ID_FIELD_GEOMETRY = 1; //attr.getIndex();
399

  
400
        featureType.setDefaultGeometryAttributeName(NAME_FIELD_GEOMETRY);
401

  
402
        // FIXME: Cual es el size y el valor por defecto para Entity ?
403
//        ID_FIELD_ENTITY = 2; 
404
        featureType.add(NAME_FIELD_ENTITY,
405
            DataTypes.STRING, 100)
406
            .setDefaultValue("")
407
            .getIndex();
408

  
409
        // FIXME: Cual es el size de Layer ?
410
//        ID_FIELD_LAYER = 3;
411
        featureType.add(NAME_FIELD_LAYER,
412
            DataTypes.STRING, 100)
413
            .setDefaultValue(
414
            "default").getIndex();
415

  
416
//        ID_FIELD_COLOR = 4;
417
        featureType.add(NAME_FIELD_COLOR,
418
            DataTypes.INT)
419
            .setDefaultValue(
420
                Integer.valueOf(0)).getIndex();
421

  
422
//        ID_FIELD_ELEVATION = 5;
423
        featureType.add(NAME_FIELD_ELEVATION,
424
            DataTypes.DOUBLE)
425
            .setDefaultValue(
426
                Double.valueOf(0)).getIndex();
427

  
428
//        ID_FIELD_THICKNESS = 6;
429
        featureType.add(NAME_FIELD_THICKNESS,
430
            DataTypes.DOUBLE)
431
            .setDefaultValue(
432
                Double.valueOf(0)).getIndex();
433

  
434
        // FIXME: Cual es el size de Text ?
435
//        ID_FIELD_TEXT = 7;
436
        featureType.add(NAME_FIELD_TEXT,
437
            DataTypes.STRING, 100)
438
            .setDefaultValue("")
439
            .getIndex();
440

  
441
//        ID_FIELD_HEIGHTTEXT = 8;
442
        featureType.add(NAME_FIELD_HEIGHTTEXT,
443
            DataTypes.DOUBLE).setDefaultValue(
444
                Double.valueOf(10)).getIndex();
445

  
446
//        ID_FIELD_ROTATIONTEXT = 9;
447
        featureType.add(NAME_FIELD_ROTATIONTEXT,
448
            DataTypes.DOUBLE).setDefaultValue(
449
                Double.valueOf(0)).getIndex();
450

  
451
        // FIXME: Parece que el DXF puede tener mas atributos opcionales.
452
        // Habria que ver de pillarlos ?
453

  
454
        return featureType;
455
    }
380 456
    public class Reader {
381 457
        private File file;
382 458
        private String fileName;
......
422 498
            }
423 499

  
424 500
            taskStatus.message("_preparing_featureType");
425
            EditableFeatureType featureType = store.createFeatureType();
426

  
427
            featureType.setHasOID(true);
428

  
429
            ID_FIELD_ID = featureType.add(NAME_FIELD_ID, DataTypes.INT)
430
            .setDefaultValue(Integer.valueOf(0))
431
            .getIndex();
432

  
433
            EditableFeatureAttributeDescriptor attr = featureType.add(
434
                NAME_FIELD_GEOMETRY, DataTypes.GEOMETRY);
435
            attr.setSRS(this.projection);
436
            attr.setGeometryType(Geometry.TYPES.GEOMETRY);			
437
            //If is a 3D file, set the geometry subtype
438
            if (featureMaker.isDxf3DFile() && headerManager.isWritedDxf3D()){
439
                attr.setGeometrySubType(Geometry.SUBTYPES.GEOM3D);
501
            int geometrySubtype;
502
			if (featureMaker.isDxf3DFile() && headerManager.isWritedDxf3D()){
503
                geometrySubtype = Geometry.SUBTYPES.GEOM3D;
440 504
            }else{
441
                attr.setGeometrySubType(Geometry.SUBTYPES.GEOM2D);
505
            	geometrySubtype = Geometry.SUBTYPES.GEOM2D;
442 506
            }			
443
            ID_FIELD_GEOMETRY = attr.getIndex();
507
            EditableFeatureType featureType = createFeatureType(this.projection, geometrySubtype);
444 508

  
445
            featureType.setDefaultGeometryAttributeName(NAME_FIELD_GEOMETRY);
446

  
447
            // FIXME: Cual es el size y el valor por defecto para Entity ?
448
            ID_FIELD_ENTITY = featureType.add(NAME_FIELD_ENTITY,
449
                DataTypes.STRING, 100)
450
                .setDefaultValue("")
451
                .getIndex();
452

  
453
            // FIXME: Cual es el size de Layer ?
454
            ID_FIELD_LAYER = featureType.add(NAME_FIELD_LAYER,
455
                DataTypes.STRING, 100)
456
                .setDefaultValue(
457
                "default").getIndex();
458

  
459
            ID_FIELD_COLOR = featureType.add(NAME_FIELD_COLOR,
460
                DataTypes.INT)
461
                .setDefaultValue(
462
                    Integer.valueOf(0)).getIndex();
463

  
464
            ID_FIELD_ELEVATION = featureType.add(NAME_FIELD_ELEVATION,
465
                DataTypes.DOUBLE)
466
                .setDefaultValue(
467
                    Double.valueOf(0)).getIndex();
468

  
469
            ID_FIELD_THICKNESS = featureType.add(NAME_FIELD_THICKNESS,
470
                DataTypes.DOUBLE)
471
                .setDefaultValue(
472
                    Double.valueOf(0)).getIndex();
473

  
474
            // FIXME: Cual es el size de Text ?
475
            ID_FIELD_TEXT = featureType.add(NAME_FIELD_TEXT,
476
                DataTypes.STRING, 100)
477
                .setDefaultValue("")
478
                .getIndex();
479

  
480
            ID_FIELD_HEIGHTTEXT = featureType.add(NAME_FIELD_HEIGHTTEXT,
481
                DataTypes.DOUBLE).setDefaultValue(
482
                    Double.valueOf(10)).getIndex();
483

  
484
            ID_FIELD_ROTATIONTEXT = featureType.add(NAME_FIELD_ROTATIONTEXT,
485
                DataTypes.DOUBLE).setDefaultValue(
486
                    Double.valueOf(0)).getIndex();
487

  
488

  
489

  
490
            // FIXME: Parece que el DXF puede tener mas atributos opcionales.
491
            // Habria que ver de pillarlos ?
492

  
493 509
            types = new ArrayList();
494 510
            types.add(featureType);
495 511

  
branches/v2_0_0_prep/libraries/libFMap_dalfile/src/org/gvsig/fmap/dal/store/dgn/DGNStoreProviderFactory.java
6 6
import org.gvsig.fmap.dal.DataStoreProvider;
7 7
import org.gvsig.fmap.dal.exception.InitializeException;
8 8
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
9
import org.gvsig.fmap.dal.spi.AbstractDataStoreProviderFactory;
9
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProviderFactory;
10 10
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
11 11
import org.gvsig.tools.dynobject.DynObject;
12 12

  
13
public class DGNStoreProviderFactory extends AbstractDataStoreProviderFactory implements FeatureStoreProviderFactory{
13
public class DGNStoreProviderFactory extends AbstractFeatureStoreProviderFactory implements FeatureStoreProviderFactory{
14 14

  
15 15
	protected DGNStoreProviderFactory(String name, String description) {
16 16
		super(name, description);
branches/v2_0_0_prep/libraries/libFMap_dalfile/src/org/gvsig/fmap/dal/store/shp/SHPStoreProviderFactory.java
6 6
import org.gvsig.fmap.dal.DataStoreProvider;
7 7
import org.gvsig.fmap.dal.exception.InitializeException;
8 8
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
9
import org.gvsig.fmap.dal.spi.AbstractDataStoreProviderFactory;
9
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProviderFactory;
10 10
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
11 11
import org.gvsig.tools.dynobject.DynObject;
12 12

  
13
public class SHPStoreProviderFactory extends AbstractDataStoreProviderFactory implements FeatureStoreProviderFactory{
13
public class SHPStoreProviderFactory extends AbstractFeatureStoreProviderFactory implements FeatureStoreProviderFactory{
14 14

  
15 15
	protected SHPStoreProviderFactory(String name, String description) {
16 16
		super(name, description);
branches/v2_0_0_prep/libraries/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/FeatureTypePanel.java
35 35
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
36 36
import org.gvsig.fmap.dal.feature.EditableFeatureType;
37 37
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
38
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
38 39
import org.gvsig.fmap.geom.DataTypes;
39 40
import org.gvsig.fmap.geom.Geometry;
40 41
import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
......
142 143
					.getFeatureType();
143 144
			if (featureType != null) {
144 145
				int row = 0;
146
				tm.setRowCount(featureType.size());
145 147
				Iterator it = featureType.iterator();
146 148
				while (it.hasNext()) {
147 149
					FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) it
......
154 156
					tm.setValueAt(descriptor.getSRS(), row, 5);
155 157
					tm.setValueAt(descriptor.isPrimaryKey(), row, 6);
156 158
					tm.setValueAt(descriptor.isMandatory(), row, 7);
159
					row++;
157 160
				}
158 161
			}
159 162

  
160 163
		}
164
		jTable.setEnabled(allowEditableFeatureType());
161 165
		return jTable;
162 166
	}
163 167

  
......
297 301
					});
298 302

  
299 303
		}
304
		jButtonAddField.setEnabled(allowEditableFeatureType());
300 305
		return jButtonAddField;
301 306
	}
307
	
308
	private boolean allowEditableFeatureType(){
309
		NewLayerService service = this.wizard.getService();
310
		DataManager dataManager = DALLocator.getDataManager();
311
		FeatureStoreProviderFactory factory = (FeatureStoreProviderFactory) dataManager.getStoreProviderFactory(service.getStoreName());
312
		if (factory.allowEditableFeatureType()==FeatureStoreProviderFactory.NO) {
313
			return false;
314
		}
315
		return true;
316
	}
302 317

  
303 318
	private class ComboItemDataType {
304 319
		private DataType dataType;
......
582 597
						}
583 598
					});
584 599
		}
600
		jButtonDeleteField.setEnabled(allowEditableFeatureType());
585 601
		return jButtonDeleteField;
586 602
	}
587 603

  
......
590 606
	}
591 607

  
592 608
	public void nextPanel() throws NotContinueWizardException {
593
		fillFeatureType();
609
		if (allowEditableFeatureType()){
610
			fillFeatureType();
611
		}
594 612
	}
595 613

  
596 614
	private void fillFeatureType() {

Also available in: Unified diff