Revision 44202 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/DefaultFeatureTypeDefinitionsManager.java

View differences:

DefaultFeatureTypeDefinitionsManager.java
19 19
import org.gvsig.andami.PluginsManager;
20 20
import org.gvsig.fmap.dal.DataServerExplorer;
21 21
import org.gvsig.fmap.dal.DataServerExplorer.DataResource;
22
import org.gvsig.fmap.dal.exception.DataException;
22 23
import org.gvsig.fmap.dal.feature.AbstractFeatureTypeDefinitionsManager;
23 24
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
24 25
import org.gvsig.fmap.dal.feature.FeatureStore;
25 26
import org.gvsig.fmap.dal.feature.FeatureType;
26 27
import org.gvsig.fmap.dal.feature.FeatureTypeDefinitionsManager;
27 28
import org.gvsig.tools.ToolsLocator;
29
import org.gvsig.tools.dataTypes.DataTypes;
28 30
import org.gvsig.tools.dispose.DisposeUtils;
29 31
import org.gvsig.tools.dynobject.DynClass;
32
import org.gvsig.tools.dynobject.DynClass_v2;
33
import org.gvsig.tools.dynobject.DynField_v2;
30 34
import org.gvsig.tools.dynobject.DynObjectManager;
35
import org.gvsig.tools.dynobject.Tags;
31 36
import org.slf4j.Logger;
32 37
import org.slf4j.LoggerFactory;
33 38

  
39
@SuppressWarnings("UseSpecificCatch")
34 40
public class DefaultFeatureTypeDefinitionsManager extends AbstractFeatureTypeDefinitionsManager implements FeatureTypeDefinitionsManager {
35 41

  
36 42
    private static final Logger logger = LoggerFactory.getLogger(DefaultFeatureTypeDefinitionsManager.class);
37 43

  
44
    private static final String FILE_EXTENSION = "form";
45
    
38 46
    private File definitionsFolder = null;
39 47
    private final Map<String, DynClass> dynClasses;
40 48

  
......
64 72
        StringBuilder buffer = new StringBuilder();
65 73
        for (int i = 0; i < type.size(); i++) {
66 74
            FeatureAttributeDescriptor x = type.getAttributeDescriptor(i);
67
            buffer.append(x.getName());
68
            buffer.append(x.getDataTypeName());
69
            buffer.append(x.getSize());
75
            if( !x.isComputed() ) {
76
                buffer.append(x.getName());
77
                buffer.append(x.getDataTypeName());
78
                buffer.append(x.getSize());
79
            }
70 80
        }
71 81
        CRC32 crc = new CRC32();
72 82
        byte[] data = buffer.toString().getBytes();
......
95 105
        } catch (IOException ex) {
96 106
            return null;
97 107
        }
98
        File f = new File(folder, key + ".ftd");
108
        File f = new File(folder, key + "."+FILE_EXTENSION);
99 109
        if (f.exists()) {
100 110
            return f;
101 111
        }
......
131 141
        if (dynClass != null) {
132 142
            return dynClass;
133 143
        }
144
        String xml = null;
134 145
        File definitionFile = getDefinitionFile(key);
135 146
        if (definitionFile == null) {
136 147
            DataServerExplorer explorer = null;
148
            DataResource resource = null;
137 149
            try {
138 150
                explorer = store.getExplorer();
139
                DataResource resource = explorer.getResource(store, key+".ftd");
140
                if( resource !=null && resource.getURL()!=null ) {
141
                    // FIXME; use resource.asInputStream() instead resource.getURL()
142
                    definitionFile = new File(resource.getURL().toURI());
151
                resource = explorer.getResource(store, FILE_EXTENSION);
152
                if( resource !=null && resource.exists() ) {
153
                    xml = IOUtils.toString(resource.asInputStream());
154
                } else {
155
                    return this.getDynClass(store, featureType);
143 156
                }
144 157
            } catch(Exception ex) {
145
                // Do nothing, leave definitionFile to null
158
                // Do nothing, leave xml to null
146 159
            } finally {
160
                IOUtils.closeQuietly(resource);
147 161
                DisposeUtils.disposeQuietly(explorer);
148 162
            }
149
            if( definitionFile == null || !definitionFile.exists()) {
150
                return this.getDynClass(featureType);
151
            }
152 163
        }
153 164
        DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
154 165
        try {
155
            String xml = FileUtils.readFileToString(definitionFile);
156
            xml = xml.replaceAll("[$][{]CWD[}]",definitionFile.getParentFile().getAbsolutePath());
157

  
166
            if( xml!=null ) {
167
                xml = FileUtils.readFileToString(definitionFile);
168
                xml = xml.replaceAll("[$][{]CWD[}]",definitionFile.getParentFile().getAbsolutePath());
169
            }
158 170
            InputStream is = IOUtils.toInputStream(xml, Charset.forName("UTF-8"));
159 171
            Map<String, DynClass> dynClasses = dynObjectManager.importDynClassDefinitions(is, this.getClass().getClassLoader());
160 172
            for (DynClass aDynClass : dynClasses.values()) {
......
169 181
        if (dynClass != null) {
170 182
            return dynClass;
171 183
        }
172
        return this.getDynClass(featureType);
184
        return this.getDynClass(store, featureType);
173 185
    }
174 186

  
175 187
    @Override
......
182 194
    public void add(FeatureStore store, FeatureType featureType, DynClass dynClass) {
183 195
        try {
184 196
            if( dynClass instanceof FeatureType ) {
185
                dynClass = this.getDynClass((FeatureType) dynClass);
197
                dynClass = this.getDynClass(store, (FeatureType) dynClass);
186 198
            }
187 199
            String key = this.getKey(store, featureType);
188
            File f = new File(getDefinitionsFolder(), key + ".ftd");
200
            File f = new File(getDefinitionsFolder(), key + "."+FILE_EXTENSION);
189 201
            DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
190 202
            String xml = dynObjectManager.exportSimpleDynClassDefinitions(dynClass);
191 203
            FileUtils.write(f, xml);
......
242 254
          }
243 255
    }
244 256

  
245
    private DynClass getDynClass(FeatureType featureType) {
246
        return featureType;
247
//        DynObjectManager manager = ToolsLocator.getDynObjectManager();
248
//        DynClass x = manager.createCopy(featureType);
249
//        // FIXME: Aqui falta a?adir el arreglo del subtype
250
//        return x;
257
    private DynClass getDynClass(FeatureStore store, FeatureType featureType) {
258
        DynObjectManager manager = ToolsLocator.getDynObjectManager();
259
        DynClass_v2 definition = (DynClass_v2) manager.createCopy(featureType);
260

  
261
        DataServerExplorer explorer=null;
262
        if( store!=null ) {
263
            try {
264
                if( store.getFeatureTypes().size()==1 ) {
265
                    definition.setLabel(store.getName());
266
                }
267
                explorer = store.getExplorer();
268
            } catch (Exception ex) {
269
            }
270
        }
271
        for (FeatureAttributeDescriptor descriptor : featureType) {
272
            DynField_v2 definitionField = (DynField_v2) definition.getDynField(descriptor.getName());
273
            String profileName = descriptor.getDataProfileName();
274
            if( !StringUtils.isBlank(profileName) ) {
275
                definitionField.setSubtype(profileName);
276
            }
277
            if( explorer!=null && definitionField.getType()==DataTypes.FILE ) {
278
                Tags tags = definitionField.getTags();
279
                if (!tags.has("path")) {    
280
                    try {
281
                        File f = explorer.getResourcePath(store, "dat");
282
                        if( f!=null ) {
283
                            tags.set("path", f.getParentFile());
284
                        }
285
                    } catch (DataException ex) {
286
                    }
287
                }
288
            }
289

  
290
        }
291
        return definition;
251 292
    }
252 293
}

Also available in: Unified diff