Statistics
| Revision:

gvsig-geoprocess / org.gvsig.geoprocess / trunk / org.gvsig.geoprocess / org.gvsig.geoprocess.lib / org.gvsig.geoprocess.lib.sextante / src / main / java / org / gvsig / geoprocess / lib / sextante / dataObjects / TableDocumentITable.java @ 225

History | View | Annotate | Download (6.96 KB)

1
package org.gvsig.geoprocess.lib.sextante.dataObjects;
2

    
3
import java.io.File;
4
import java.util.Iterator;
5

    
6
import es.unex.sextante.core.Sextante;
7
import es.unex.sextante.dataObjects.AbstractTable;
8
import es.unex.sextante.dataObjects.IRecordsetIterator;
9
import es.unex.sextante.outputs.FileOutputChannel;
10
import es.unex.sextante.outputs.IOutputChannel;
11

    
12
import org.gvsig.app.project.ProjectManager;
13
import org.gvsig.app.project.documents.table.TableDocument;
14
import org.gvsig.app.project.documents.table.TableManager;
15
import org.gvsig.fmap.dal.DALLocator;
16
import org.gvsig.fmap.dal.DataManager;
17
import org.gvsig.fmap.dal.exception.DataException;
18
import org.gvsig.fmap.dal.feature.EditableFeature;
19
import org.gvsig.fmap.dal.feature.EditableFeatureType;
20
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
21
import org.gvsig.fmap.dal.feature.FeatureStore;
22
import org.gvsig.fmap.dal.feature.FeatureType;
23
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
24
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
25
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
26
import org.gvsig.tools.ToolsLocator;
27
import org.gvsig.tools.dataTypes.DataTypesManager;
28

    
29
public class TableDocumentITable extends AbstractTable {
30

    
31
    private final int PRECISION = 5;
32
    private TableDocument m_Table;
33
    private String m_sName;
34
    private String m_sFilename;
35
    private FeatureType featureType;
36
    private FeatureStore featureStore;
37

    
38
    public String getName() {
39

    
40
        if (m_Table != null) {
41
            return m_Table.getName();
42
        } else {
43
            return m_sName;
44
        }
45

    
46
    }
47

    
48
    public void create(final TableDocument table) {
49

    
50
        try {
51
            m_Table = table;
52
            featureStore = table.getStore();
53
            featureType = featureStore.getDefaultFeatureType();
54
        } catch (final DataException e) {
55
            Sextante.addErrorToLog(e);
56
        }
57

    
58
    }
59

    
60
    public void create(final String sName, final String sFilename,
61
        final Class<?>[] types, final String[] sFields) {
62

    
63
        try {
64
            m_sName = sName;
65

    
66
            final DataManager datamanager = DALLocator.getDataManager();
67
            final FilesystemServerExplorerParameters explorerParams =
68
                (FilesystemServerExplorerParameters) datamanager
69
                    .createServerExplorerParameters(FilesystemServerExplorer.NAME);
70
            explorerParams.setRoot(new File(sFilename).getParent());
71
            final FilesystemServerExplorer explorer =
72
                (FilesystemServerExplorer) datamanager.openServerExplorer(
73
                    FilesystemServerExplorer.NAME, explorerParams);
74
            final NewFeatureStoreParameters newParams =
75
                (NewFeatureStoreParameters) explorer.getAddParameters(new File(
76
                    sFilename));
77

    
78
            EditableFeatureType editableFeatureType =
79
                newParams.getDefaultFeatureType();
80
            featureType = editableFeatureType;
81
            loadFeatureType(sFields, types, editableFeatureType);
82

    
83
            newParams.setDefaultFeatureType(featureType);
84

    
85
            explorer.add(newParams.getDataStoreName(), newParams, true);
86
            final DataManager manager = DALLocator.getDataManager();
87
            featureStore =
88
                (FeatureStore) manager.openStore(newParams.getDataStoreName(),
89
                    newParams);
90
            featureStore.edit(FeatureStore.MODE_APPEND);
91
            featureType = featureStore.getDefaultFeatureType();
92
            m_sFilename = sFilename;
93

    
94
        } catch (final Exception e) {
95
            Sextante.addErrorToLog(e);
96
        }
97

    
98
    }
99

    
100
    private void loadFeatureType(final String[] fields, final Class<?>[] types,
101
        final EditableFeatureType featureType) {
102
        final int[] iTypes = getTypes(types);
103

    
104
        for (int i = 0; i < fields.length; i++) {
105
            featureType.add(fields[i], iTypes[i]).setPrecision(PRECISION);
106
        }
107
    }
108

    
109
    private int[] getTypes(Class<?>[] classes) {
110
        DataTypesManager typesManager = ToolsLocator.getDataTypesManager();
111
        int[] types = new int[classes.length];
112
        for (int i = 0; i < classes.length; i++) {
113
            types[i] = typesManager.getDataType(classes[i]).getType();
114
        }
115
        return types;
116
    }
117

    
118
    public void addRecord(final Object[] record) {
119
        try {
120
            final EditableFeature ef = featureStore.createNewFeature();
121
            @SuppressWarnings("unchecked")
122
            final Iterator<FeatureAttributeDescriptor> features =
123
                featureType.iterator();
124

    
125
            int i = 0;
126
            while (features.hasNext()) {
127
                final FeatureAttributeDescriptor featureAttributeDescriptor =
128
                    features.next();
129
                ef.set(featureAttributeDescriptor.getName(), record[i]);
130
                i++;
131
            }
132
            featureStore.insert(ef);
133
        } catch (final Exception e) {
134
            e.printStackTrace();
135
        }
136

    
137
    }
138

    
139
    public IRecordsetIterator iterator() {
140
        try {
141
            return new FeatureSetIRecordsetIterator(featureStore.getFeatureSet(m_Table
142
                .getQuery()));
143
        } catch (final DataException e) {
144
            throw new RuntimeException(e);
145
        }
146
    }
147

    
148
    public String getFieldName(final int i) {
149
        return ((FeatureAttributeDescriptor) featureType.get(i)).getName();
150
    }
151

    
152
    public Class<?> getFieldType(final int i) {
153
        return featureType.getAttributeDescriptor(i).getDataType()
154
            .getDefaultClass();
155
    }
156

    
157
    public int getFieldCount() {
158
        return featureType.size();
159
    }
160

    
161
    public long getRecordCount() {
162
        try {
163
            return featureStore.getFeatureSet(m_Table.getQuery()).getSize();
164
        } catch (final DataException e) {
165
            e.printStackTrace();
166
        }
167
        return 0;
168
    }
169

    
170
    public void postProcess() {
171
        try {
172
            final TableDocument table =
173
                (TableDocument) ProjectManager.getInstance().createDocument(
174
                    TableManager.TYPENAME, m_sName);
175
            table.setStore(featureStore);
176
        } catch (final Exception e) {
177
            return;
178
        }
179

    
180
        final TableDocument table = FileTools.openTable(m_sFilename, m_sName);
181
        create(table);
182
    }
183

    
184
    public void open() {
185

    
186
    }
187

    
188
    public void close() {
189
        // Nothing to do
190
    }
191

    
192
    public String getFilename() {
193

    
194
        return m_sFilename;
195

    
196
    }
197

    
198
    public void setName(final String name) {
199

    
200
        if (m_Table != null) {
201
            m_Table.setName(name);
202
        } else {
203
            m_sName = name;
204
        }
205

    
206
    }
207

    
208
    public Object getBaseDataObject() {
209

    
210
        return m_Table;
211

    
212
    }
213

    
214
    public void free() {
215

    
216
        m_Table = null;
217

    
218
    }
219

    
220
    public IOutputChannel getOutputChannel() {
221

    
222
        return new FileOutputChannel(m_sFilename);
223

    
224
    }
225
}