Statistics
| Revision:

root / org.gvsig.dxf / trunk / org.gvsig.dxf / org.gvsig.dxf.provider / src / main / java / org / gvsig / fmap / dal / store / dxf / DXFNewStoreParameters.java @ 936

History | View | Annotate | Download (4.51 KB)

1
package org.gvsig.fmap.dal.store.dxf;
2

    
3
import java.io.File;
4
import java.io.IOException;
5

    
6
import org.apache.commons.io.FileUtils;
7
import org.apache.commons.io.FilenameUtils;
8
import org.cresques.cts.ICRSFactory;
9
import org.cresques.cts.IProjection;
10

    
11
import org.gvsig.fmap.crs.CRSFactory;
12
import org.gvsig.fmap.dal.DALLocator;
13
import org.gvsig.fmap.dal.DataManager;
14
import org.gvsig.fmap.dal.FileHelper;
15
import org.gvsig.fmap.dal.feature.EditableFeatureType;
16
import org.gvsig.fmap.dal.feature.FeatureType;
17
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
18
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
19
import org.gvsig.fmap.dal.spi.AbstractDataStoreParameters;
20
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
21
import static org.gvsig.fmap.dal.store.dxf.DXFOpenStoreParameters.CRS_PARAMTER_NAME;
22
import static org.gvsig.fmap.dal.store.dxf.DXFOpenStoreParameters.FILE_PARAMTER_NAME;
23
import static org.gvsig.fmap.dal.store.dxf.DXFOpenStoreParameters.PARAMETERS_DEFINITION_NAME;
24
import org.gvsig.fmap.geom.Geometry;
25
import org.gvsig.tools.dynobject.DelegatedDynObject;
26

    
27
public class DXFNewStoreParameters
28
        extends AbstractDataStoreParameters implements
29
        FilesystemStoreParameters,
30
        NewFeatureStoreParameters {
31

    
32
    private DelegatedDynObject parameters;
33

    
34
    public DXFNewStoreParameters() {
35
        this(PARAMETERS_DEFINITION_NAME);
36
    }
37

    
38
    protected DXFNewStoreParameters(String parametersDefinitionName) {
39
        this(parametersDefinitionName, DXFStoreProvider.NAME);
40
    }
41

    
42
    public DXFNewStoreParameters(String parametersDefinitionName, String name) {
43
        super();
44
        this.parameters = (DelegatedDynObject) FileHelper.newParameters(parametersDefinitionName);
45
        this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, name);
46
    }
47

    
48
    @Override
49
    public String getDataStoreName() {
50
        return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
51
    }
52

    
53
    @Override
54
    public String getDescription() {
55
        return this.getDynClass().getDescription();
56
    }
57

    
58
    @Override
59
    protected DelegatedDynObject getDelegatedDynObject() {
60
        return parameters;
61
    }
62

    
63
    public void setCRS(String srs) {
64
        setDynValue(CRS_PARAMTER_NAME, srs);
65
    }
66

    
67
    public void setCRS(IProjection srs) {
68
        setDynValue(CRS_PARAMTER_NAME, srs);
69
    }
70

    
71
    public IProjection getCRS() {
72
        return (IProjection) getDynValue(CRS_PARAMTER_NAME);
73
    }
74

    
75
    public String getFileName() {
76
        if (this.getFile() == null) {
77
            return null;
78
        }
79
        return this.getFile().getPath();
80
    }
81

    
82
    @Override
83
    public boolean isValid() {
84
        if (getCRS() == null) {
85
            return false;
86
        }
87
        return getFileName() != null;
88
    }
89

    
90
    @Override
91
    public File getFile() {
92
        return (File) this.getDynValue(FILE_PARAMTER_NAME);
93
    }
94

    
95
    @Override
96
    public void setFile(File file) {
97
        this.setDynValue(FILE_PARAMTER_NAME, file);
98

    
99
        if (getCRS() == null) {
100
            String wktEsri = loadPrj(file);
101
            if (wktEsri != null) {
102
                IProjection proj = CRSFactory.getCRSFactory().get(ICRSFactory.FORMAT_WKT_ESRI, wktEsri);
103
                setCRS(proj);
104
            }
105
        }
106

    
107
    }
108

    
109
    public void setFile(String file) {
110
        this.setDynValue(FILE_PARAMTER_NAME, file);
111

    
112
        File dxfFile = (File) this.getDynValue(FILE_PARAMTER_NAME);
113
        if (getCRS() == null) {
114
            String wktEsri = loadPrj(dxfFile);
115
            if (wktEsri != null) {
116
                IProjection proj = CRSFactory.getCRSFactory().get(ICRSFactory.FORMAT_WKT_ESRI, wktEsri);
117
                setCRS(proj);
118
            }
119
        }
120

    
121
    }
122

    
123
    @Override
124
    public EditableFeatureType getDefaultFeatureType() {
125
        // FIXME: Esto no se si funciona.
126
        DataManager manager = DALLocator.getDataManager();
127
        EditableFeatureType featureType = manager.createFeatureType();
128
        DXFStoreProvider.initializeFeatureType(featureType, null, Geometry.SUBTYPES.GEOM3D);
129
        return featureType;
130
    }
131

    
132
    @Override
133
    public void setDefaultFeatureType(FeatureType defaultFeatureType) {
134
        throw new UnsupportedOperationException();
135
    }
136

    
137
    private String loadPrj(File dxfFile) {
138
        File prjFile = new File(FilenameUtils.removeExtension(dxfFile.getAbsolutePath()) + ".prj");
139
        if (prjFile.exists()) {
140
            try {
141
                return FileUtils.readFileToString(prjFile);
142
            } catch (IOException e) {
143
                return null;
144
            }
145
        }
146
        return null;
147
    }
148
}