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 / ExportGeometryUtils.java @ 44069

History | View | Annotate | Download (4.87 KB)

1
package org.gvsig.export.impl;
2

    
3
import org.cresques.cts.ICoordTrans;
4
import org.gvsig.export.ExportParametersGeometry;
5
import org.gvsig.export.spi.ExportServiceManager.FixGeometryStatus;
6
import org.gvsig.fmap.geom.Geometry;
7

    
8

    
9
/**
10
 *
11
 * @author jjdelcerro
12
 */
13
public class ExportGeometryUtils {
14

    
15
    public static class DefaultFixGeometryStatus
16
            implements FixGeometryStatus 
17
        {
18

    
19
        private Geometry geometry;
20
        private final int state;
21
        private String message;
22

    
23
        public DefaultFixGeometryStatus(Geometry geometry, int state) {
24
            this.geometry = geometry;
25
            this.state = state;
26
        }
27

    
28
        public DefaultFixGeometryStatus(Geometry geometry) {
29
            this.geometry = geometry;
30
            this.state = STATE_OK;
31
        }
32

    
33
        public DefaultFixGeometryStatus(int state) {
34
            this.geometry = null;
35
            this.state = state;
36
        }
37

    
38
        public DefaultFixGeometryStatus(int state, String message) {
39
            this.geometry = null;
40
            this.state = state;
41
            this.message = message;
42
        }
43

    
44
        private void setGeometry(Geometry geometry) {
45
            this.geometry = geometry;
46
        }
47

    
48
        @Override
49
        public Geometry getGeometry() {
50
            return this.geometry;
51
        }
52

    
53
        @Override
54
        public int getState() {
55
            return state;
56
        }
57

    
58
        @Override
59
        public String getMessage() {
60
            return this.message;
61
        }
62

    
63
    }
64

    
65
    public static FixGeometryStatus fixGeometry(
66
            ExportParametersGeometry options,
67
            ICoordTrans coord_trans,
68
            Geometry geometry
69
    ) {
70
        Geometry.ValidationStatus geometryCheck;
71
        DefaultFixGeometryStatus status;
72

    
73
        if (geometry == null) {
74
            return new DefaultFixGeometryStatus(geometry);
75
        }
76
        switch (options.getGeometryChecks()) {
77
            case ExportParametersGeometry.CHECKGEOMETRY_CHECK_IF_CORRUPT:
78
                geometryCheck = geometry.getValidationStatus();
79
                if (geometryCheck.isValid()) {
80
                    status = new DefaultFixGeometryStatus(geometry);
81
                    break;
82
                }
83
                switch (options.getGeometryChecksAction()) {
84
                    case ExportParametersGeometry.CHECKGEOMETRYACTION_SET_GEOMETRY_TO_NULL:
85
                        status = new DefaultFixGeometryStatus(null);
86
                        break;
87
                    case ExportParametersGeometry.CHECKGEOMETRYACTION_SKIP_FEATURE:
88
                        status = new DefaultFixGeometryStatus(FixGeometryStatus.STATE_SKIP, geometryCheck.getMessage());
89
                        break;
90
                    case ExportParametersGeometry.CHECKGEOMETRYACTION_ABORT:
91
                    default:
92
                        status = new DefaultFixGeometryStatus(FixGeometryStatus.STATE_ABORT, geometryCheck.getMessage());
93
                        break;
94
                }
95
                break;
96

    
97
            case ExportParametersGeometry.CHECKGEOMETRY_CHECK_IF_VALID:
98
                geometryCheck = geometry.getValidationStatus();
99
                if (geometryCheck.isValid()) {
100
                    status = new DefaultFixGeometryStatus(geometry);
101
                    break;
102
                }
103
                Geometry g;
104
                if (options.getTryToFixGeometry()) {
105
                    g = geometry.makeValid();
106
                    if (g != null) {
107
                        status = new DefaultFixGeometryStatus(g);
108
                        break;
109
                    }
110
                }
111
                switch (options.getGeometryChecksAction()) {
112
                    case ExportParametersGeometry.CHECKGEOMETRYACTION_SET_GEOMETRY_TO_NULL:
113
                        status = new DefaultFixGeometryStatus(null);
114
                        break;
115
                    case ExportParametersGeometry.CHECKGEOMETRYACTION_SKIP_FEATURE:
116
                        status = new DefaultFixGeometryStatus(FixGeometryStatus.STATE_SKIP, geometryCheck.getMessage());
117
                        break;
118
                    case ExportParametersGeometry.CHECKGEOMETRYACTION_ABORT:
119
                    default:
120
                        status = new DefaultFixGeometryStatus(FixGeometryStatus.STATE_ABORT, geometryCheck.getMessage());
121
                        break;
122
                }
123
                break;
124

    
125
            case ExportParametersGeometry.CHECKGEOMETRY_NONE:
126
            default:
127
                status = new DefaultFixGeometryStatus(geometry);
128
                break;
129
        }
130
        if (coord_trans != null) {
131
            if (status.getState() == FixGeometryStatus.STATE_OK) {
132
                if (status.getGeometry() != null) {
133
                    Geometry reproj_geom = status.getGeometry().cloneGeometry();
134
                    reproj_geom.reProject(coord_trans);
135
                    status.setGeometry(reproj_geom);
136
                }
137
            }
138
        }
139
        return status;
140
    }
141
}