Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.exportto / org.gvsig.exportto.lib / org.gvsig.exportto.lib.impl / src / main / java / org / gvsig / export / impl / DefaultExportProcess.java @ 44467

History | View | Annotate | Download (9.73 KB)

1
package org.gvsig.export.impl;
2

    
3
import java.util.List;
4
import java.util.Objects;
5
import javax.swing.JOptionPane;
6
import org.apache.commons.lang3.StringUtils;
7
import org.cresques.cts.ICoordTrans;
8
import org.cresques.cts.IProjection;
9
import org.gvsig.export.ExportException;
10
import org.gvsig.export.ExportLocator;
11
import org.gvsig.export.ExportParameters;
12
import org.gvsig.export.ExportParametersGeometry;
13
import org.gvsig.export.ExportProcess;
14
import org.gvsig.export.spi.ExportService;
15
import org.gvsig.export.spi.ExportServiceFactory;
16
import org.gvsig.export.spi.ExportServiceManager;
17
import org.gvsig.expressionevaluator.Expression;
18
import org.gvsig.fmap.dal.OpenDataStoreParameters;
19
import org.gvsig.fmap.dal.exception.DataException;
20
import org.gvsig.fmap.dal.feature.FeatureSet;
21
import org.gvsig.fmap.dal.feature.FeatureStore;
22
import org.gvsig.fmap.dal.feature.FeatureType;
23
import org.gvsig.tools.ToolsLocator;
24
import org.gvsig.tools.swing.api.ToolsSwingLocator;
25
import org.gvsig.tools.task.TaskStatus;
26

    
27
/**
28
 *
29
 * @author jjdelcerro
30
 */
31
public class DefaultExportProcess
32
        implements ExportProcess {
33

    
34
    private ExportServiceFactory factory;
35
    private ExportService service;
36
    private ExportParameters parameters;
37
    private FeatureStore sourceFeatureStore;
38

    
39
    private IProjection contextProjection;
40
    private ICoordTrans sourceTransformation;
41
    private IProjection sourceProjection;
42
    private Object context;
43
    private Expression filterExpression;
44
    private int featuresToUse;
45

    
46
    public DefaultExportProcess() {
47

    
48
    }
49

    
50
    @Override
51
    public void setOutputFormat(String serviceName) throws ExportException {
52

    
53
        ExportServiceManager serviceManager = ExportLocator.getServiceManager();
54
        this.factory = serviceManager.getServiceFactory(serviceName);
55
        this.parameters = this.factory.createParameters();
56
        this.service = this.factory.createService(this.parameters);
57
        this.parameters.setSourceFeatureStore(this.sourceFeatureStore);
58
        if (this.parameters instanceof ExportParametersGeometry) {
59
            ExportParametersGeometry params = (ExportParametersGeometry) this.parameters;
60
            params.setContextProjection(this.contextProjection);
61
            params.setSourceProjection(this.sourceProjection);
62
            params.setSourceTransformation(this.sourceTransformation);
63
            params.setTargetProjection(this.contextProjection);
64
            params.setTargetTransformation(this.sourceProjection.getCT(this.contextProjection));
65
            params.setContext(this.context);
66

    
67
            if (this.sourceFeatureStore != null) {
68
                try {
69
                    FeatureType ftype = this.sourceFeatureStore.getDefaultFeatureType();
70
                    if (ftype != null) {
71
                        params.setSourceGeometryFieldName(ftype.getDefaultGeometryAttributeName());
72
                    }
73
                } catch (DataException ex) {
74
                    //
75
                }
76
            }
77
        }
78
        this.parameters.setFilterExpresion(this.filterExpression);
79
        this.parameters.setFeaturesToUse(this.featuresToUse); //valor que use la expression si no es nula
80

    
81
    }
82

    
83
    @Override
84
    public void setParameters(ExportParameters params) {
85
        this.parameters = params;
86
        this.factory = this.parameters.getFactory();
87
        this.service = this.factory.createService(this.parameters);
88
        this.parameters.setSourceFeatureStore(this.sourceFeatureStore);
89
        this.parameters.setContext(this.context);
90

    
91
        this.featuresToUse = this.parameters.getFeaturesToUse();
92
        if (this.filterExpression == null) {
93
            this.filterExpression = this.parameters.getFilterExpresion();
94
        } else if (this.filterExpression.isEmpty()) {
95
            this.filterExpression = this.parameters.getFilterExpresion();
96
        } else if (!Objects.equals(this.filterExpression, this.parameters.getFilterExpresion())) {
97
            StringBuilder message = new StringBuilder();
98
            message.append(ToolsLocator.getI18nManager().getTranslation("_A_filter_is_already_applied_to_this_export_process"));
99
            message.append(":\n");
100
            message.append(StringUtils.abbreviate(this.filterExpression.getPhrase(), 30));
101
            message.append("\n");
102
            message.append(ToolsLocator.getI18nManager().getTranslation("_Its_going_to_be_replace_by_the_filter_in_the_parameters"));
103
            message.append(":\n");
104
            if (this.parameters.getFilterExpresion() != null) {
105
                message.append(StringUtils.abbreviate(this.parameters.getFilterExpresion().getPhrase(), 30));
106
            } else {
107
                message.append("empty filter");
108
            }
109
            message.append("\n");
110
            message.append(ToolsLocator.getI18nManager().getTranslation("_Do_you_want_to_keep_the_applied_filter"));
111
            int keepFilter = ToolsSwingLocator.getThreadSafeDialogsManager().confirmDialog(
112
                    message.toString(),//ToolsLocator.getI18nManager().getTranslation("_Do_you_want_to_keep_the_applied_filter_and_not_use_the_one_in_the_parameters"),
113
                    ToolsLocator.getI18nManager().getTranslation("_Filter_to_apply"),
114
                    JOptionPane.YES_NO_OPTION,
115
                    JOptionPane.WARNING_MESSAGE,
116
                    "exporto-overwrite-expression-parameters");
117
            if (keepFilter == JOptionPane.YES_OPTION) {
118
                this.parameters.setFilterExpresion(this.filterExpression);
119
            }
120
        }
121

    
122
        if (this.parameters instanceof ExportParametersGeometry) {
123
            ExportParametersGeometry pa = (ExportParametersGeometry) this.parameters;
124
            this.contextProjection = pa.getContextProjection();
125
            this.sourceProjection = pa.getSourceProjection();
126
            this.sourceTransformation = pa.getSourceTransformation();
127

    
128
        }
129
    }
130

    
131
    @Override
132
    public void setSourceFeatureStore(FeatureStore store
133
    ) {
134
        this.sourceFeatureStore = store;
135
        if (this.parameters != null) {
136
            this.parameters.setSourceFeatureStore(sourceFeatureStore);
137
        }
138
    }
139

    
140
    @Override
141
    public void setContextProjection(IProjection projection
142
    ) {
143
        this.contextProjection = projection;
144
        if (this.parameters instanceof ExportParametersGeometry) {
145
            ((ExportParametersGeometry) this.parameters).setContextProjection(projection);
146
        }
147
    }
148

    
149
    @Override
150
    public void setSourceTransformation(ICoordTrans transformation
151
    ) {
152
        this.sourceTransformation = transformation;
153
        if (this.parameters instanceof ExportParametersGeometry) {
154
            ((ExportParametersGeometry) this.parameters).setSourceTransformation(transformation);
155
        }
156
    }
157

    
158
    @Override
159
    public void setSourceProjection(IProjection projection
160
    ) {
161
        this.sourceProjection = projection;
162
        if (this.parameters instanceof ExportParametersGeometry) {
163
            ((ExportParametersGeometry) this.parameters).setSourceProjection(projection);
164
        }
165
    }
166

    
167
    @Override
168
    public Object getContext() {
169
        return context;
170
    }
171

    
172
    @Override
173
    public void setContext(Object context
174
    ) {
175
        this.context = context;
176
        if (this.parameters != null) {
177
            this.parameters.setContext(context);
178
        }
179
    }
180

    
181
    @Override
182
    public ExportParameters getParameters() {
183
        return this.parameters;
184
    }
185

    
186
    @Override
187
    public TaskStatus getTaskStatus() {
188
        if (this.service == null) {
189
            throw new IllegalStateException("Can't access task status at this moment, need setting output format.");
190
        }
191
        return this.service.getTaskStatus();
192
    }
193

    
194
    @Override
195
    public void run() {
196
        if (this.factory == null) {
197
            throw new IllegalStateException("Can't start export process, need setting output format.");
198
        }
199
        if (this.parameters == null) {
200
            throw new IllegalStateException("Can't start export process, need setting parameters.");
201
        }
202
        try {
203
            FeatureSet featureSet;
204
            switch (this.parameters.getFeaturesToUse()) {
205
                case ExportParameters.USE_ALL_FEATURES:
206
                default:
207
                    featureSet = this.parameters.getSourceFeatureStore().getFeatureSet();
208
                    break;
209
                case ExportParameters.USE_SELECTED_FEATURES:
210
                    featureSet = this.parameters.getSourceFeatureStore().getFeatureSelection();
211
                    break;
212
                case ExportParameters.USE_FILTERED_FEATURES:
213
                    featureSet = this.parameters.getSourceFeatureStore().getFeatureSet(this.parameters.getFilterExpresion());
214
                    break;
215
            }
216
            this.service.export(featureSet);
217
        } catch (Exception ex) {
218
            throw new RuntimeException(ex);
219
        }
220
    }
221

    
222
    @Override
223
    public List<OpenDataStoreParameters> getTargetOpenStoreParameters() {
224
        if (this.service == null) {
225
            return null;
226
        }
227
        try {
228
            return this.service.getTargetOpenStoreParameters();
229
        } catch (ExportException ex) {
230
            throw new RuntimeException("Can't create target open store parameters.", ex);
231
        }
232
    }
233

    
234
    @Override
235
    public void setFilterExpression(Expression expression
236
    ) {
237
        this.filterExpression = expression;
238
        if (this.parameters != null) {
239
            this.parameters.setFilterExpresion(expression);
240
        }
241
        if (expression == null) {
242
            this.setFeaturesToUse(ExportParameters.USE_ALL_FEATURES);
243
        } else {
244
            this.setFeaturesToUse(ExportParameters.USE_FILTERED_FEATURES);
245
        }
246
    }
247

    
248
    @Override
249
    public void setFeaturesToUse(int featuresToUse
250
    ) {
251
        this.featuresToUse = featuresToUse;
252
        if (this.parameters != null) {
253
            this.parameters.setFeaturesToUse(featuresToUse);
254
        }
255
    }
256

    
257
}