Revision 41488 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.prov/org.gvsig.exportto.swing.prov.jdbc/src/main/java/org/gvsig/exportto/swing/prov/jdbc/ExporrtoJDBCService.java

View differences:

ExporrtoJDBCService.java
45 45
import org.gvsig.fmap.geom.Geometry;
46 46
import org.gvsig.tools.dispose.DisposableIterator;
47 47
import org.gvsig.tools.task.AbstractMonitorableTask;
48
import org.slf4j.Logger;
49
import org.slf4j.LoggerFactory;
48 50

  
49 51
/**
50 52
 * @author gvSIG Team
......
54 56
public class ExporrtoJDBCService extends AbstractMonitorableTask implements
55 57
        ExporttoService {
56 58

  
59
    private static final Logger logger = LoggerFactory.getLogger(ExporrtoJDBCService.class);
60

  
57 61
    public static final int CHECK_NONE = 0;
58 62
    public static final int CHECK_IF_CORRUPT = 1;
59 63
    public static final int CHECK_IF_VALID = 2;
......
70 74
    private final int geometryChecksAction;
71 75
    private final IProjection tarjetProjection;
72 76
    private final boolean canCreateTable;
77
    private final boolean tryToFixGeometries;
73 78

  
74 79
    private ExporttoServiceFinishAction exporttoServiceFinishAction = null;
75 80

  
......
80 85
            IProjection tarjetProjection,
81 86
            boolean canCreatetable,
82 87
            int geometryChecks,
83
            int geometryChecksAction) {
88
            int geometryChecksAction,
89
            boolean tryToFixGeometries) {
84 90
        this.source = source;
85 91
        this.explorerParameters = explorerParameters;
86 92
        this.tableName = tablename;
......
89 95
        this.canCreateTable = canCreatetable;
90 96
        this.geometryChecks = geometryChecks;
91 97
        this.geometryChecksAction = geometryChecksAction;
98
        this.tryToFixGeometries = tryToFixGeometries;
92 99
    }
93 100

  
94 101
    protected void createTable(JDBCServerExplorer explorer) throws Exception {
95 102

  
96
        FeatureType targetFeatureType ;
97
        EditableFeatureType targetEditableFeatureType ;
103
        FeatureType targetFeatureType;
104
        EditableFeatureType targetEditableFeatureType;
98 105

  
99 106
        targetFeatureType = source.getDefaultFeatureType().getCopy();
100 107
        targetEditableFeatureType = targetFeatureType.getEditable();
101 108

  
102 109
        if (this.pkname != null) {
103
            EditableFeatureAttributeDescriptor pk
104
                    = targetEditableFeatureType.add(this.pkname, DataTypes.LONG);
105
            pk.setIsPrimaryKey(true);
106
            pk.setIsAutomatic(true);
110
            EditableFeatureAttributeDescriptor pk = (EditableFeatureAttributeDescriptor) targetEditableFeatureType.get(pkname);
111
            if (pk == null) {
112
                pk = targetEditableFeatureType.add(this.pkname, DataTypes.LONG);
113
                pk.setIsPrimaryKey(true);
114
                pk.setIsAutomatic(true);
115
            } else {
116
                pk.setIsPrimaryKey(true);
117
            }
107 118
        }
108 119

  
109 120
        // ======================================================
......
118 129
        NewFeatureStoreParameters createTableParams = (NewFeatureStoreParameters) explorer.getAddParameters();
119 130

  
120 131
        createTableParams.setDefaultFeatureType(targetEditableFeatureType);
121

  
132
        //createTableParams.setTable(this.tableName); // ?????
122 133
        explorer.add(explorer.getStoreName(), createTableParams, true);
123 134
    }
124 135

  
......
136 147
        DisposableIterator it = null;
137 148
        EditableFeature targetFeature = null;
138 149
        FeatureStore target = null;
139
        
150

  
140 151
        try {
141
            
152

  
142 153
            // ======================================
143 154
            // Reprojection 
144 155
            FeatureAttributeDescriptor geo_att = source.getDefaultFeatureType().getDefaultGeometryAttribute();
......
156 167
            }
157 168
            // ============================================
158 169

  
159
            
160 170
            DataManager dataManager = DALLocator.getDataManager();
161 171

  
162 172
            JDBCServerExplorer explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
......
189 199
                targetFeature = target.createNewFeature(targetFeatureType, feature);
190 200

  
191 201
                Geometry geometry = targetFeature.getDefaultGeometry();
192
                switch (this.geometryChecks) {
193
                    case CHECK_IF_CORRUPT:
194
                        geometryCheck = geometry.getValidationStatus();
195
                        if (geometryCheck.getStatusCode() == Geometry.ValidationStatus.CURRUPTED) {
196
                            switch (this.geometryChecksAction) {
197
                                case ACTION_SET_GEOMETRY_TO_NULL:
198
                                    targetFeature.setDefaultGeometry(null);
199
                                    break;
200
                                case ACTION_SKIP_FEATURE:
201
                                    continue;
202
                                case ACTION_ABORT:
203
                                default:
204
                                    throw new InvalidGeometryException(targetFeature, geometryCheck.getMessage());
202
                if (geometry != null) {
203
                    switch (this.geometryChecks) {
204
                        case CHECK_IF_CORRUPT:
205
                            geometryCheck = geometry.getValidationStatus();
206
                            if (geometryCheck.getStatusCode() == Geometry.ValidationStatus.CURRUPTED) {
207
                                switch (this.geometryChecksAction) {
208
                                    case ACTION_SET_GEOMETRY_TO_NULL:
209
                                        targetFeature.setDefaultGeometry(null);
210
                                        break;
211
                                    case ACTION_SKIP_FEATURE:
212
                                        continue;
213
                                    case ACTION_ABORT:
214
                                    default:
215
                                        throw new InvalidGeometryException(targetFeature, geometryCheck.getMessage());
216
                                }
205 217
                            }
206
                        }
207 218

  
208
                        break;
219
                            break;
209 220

  
210
                    case CHECK_IF_VALID:
211
                        geometryCheck = geometry.getValidationStatus();
212
                        if (!geometryCheck.isValid()) {
213
                            switch (this.geometryChecksAction) {
214
                                case ACTION_SET_GEOMETRY_TO_NULL:
215
                                    targetFeature.setDefaultGeometry(null);
216
                                    break;
217
                                case ACTION_SKIP_FEATURE:
218
                                    continue;
219
                                case ACTION_ABORT:
220
                                default:
221
                                    throw new InvalidGeometryException(targetFeature, geometryCheck.getMessage());
221
                        case CHECK_IF_VALID:
222
                            geometryCheck = geometry.getValidationStatus();
223
                            if (!geometryCheck.isValid()) {
224
                                Geometry g = null;
225
                                if (this.tryToFixGeometries) {
226
                                    g = geometry.makeValid();
227
                                    if (g != null) {
228
                                        targetFeature.setDefaultGeometry(g);
229
                                    }
230
                                }
231
                                if (g == null) {
232
                                    switch (this.geometryChecksAction) {
233
                                        case ACTION_SET_GEOMETRY_TO_NULL:
234
                                            targetFeature.setDefaultGeometry(null);
235
                                            break;
236
                                        case ACTION_SKIP_FEATURE:
237
                                            continue;
238
                                        case ACTION_ABORT:
239
                                        default:
240
                                            throw new InvalidGeometryException(targetFeature, geometryCheck.getMessage());
241
                                    }
242
                                }
222 243
                            }
223
                        }
224 244

  
225
                        break;
226
                    case CHECK_NONE:
227
                    default:
228
                        break;
245
                            break;
246
                        case CHECK_NONE:
247
                        default:
248
                            break;
249
                    }
250
                    // ================================================
251
                    // Reprojection 
252
                    if (geo_att != null && coord_trans != null) {
253
                        reproj_geom = targetFeature.getDefaultGeometry();
254
                        reproj_geom = reproj_geom.cloneGeometry();
255
                        reproj_geom.reProject(coord_trans);
256
                        targetFeature.setDefaultGeometry(reproj_geom);
257
                    }
258
                    // ================================================
229 259
                }
230 260

  
231
                // ================================================
232
                // Reprojection 
233
                if (geo_att != null && coord_trans != null) {
234
                    reproj_geom = targetFeature.getDefaultGeometry();
235
                    reproj_geom = reproj_geom.cloneGeometry();
236
                    reproj_geom.reProject(coord_trans);
237
                    targetFeature.setDefaultGeometry(reproj_geom);
238
                }
239
                // ================================================
240 261
                target.insert(targetFeature);
241 262
                this.taskStatus.setCurValue(featureCount);
242 263

  
......
255 276
            }
256 277

  
257 278
        } catch (Exception e) {
279
            logger.warn("Can't export data.", e);
258 280
            taskStatus.message(e.getMessage());
259 281
            throw new ExporttoServiceException(e, targetFeature);
260 282

  

Also available in: Unified diff