Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.api / src / main / java / org / gvsig / fmap / dal / feature / rule / FeatureRulePolygon.java @ 40435

History | View | Annotate | Download (2.14 KB)

1
package org.gvsig.fmap.dal.feature.rule;
2

    
3
import org.gvsig.fmap.dal.exception.DataException;
4
import org.gvsig.fmap.dal.feature.AbstractFeatureRule;
5
import org.gvsig.fmap.dal.feature.EditableFeature;
6
import org.gvsig.fmap.dal.feature.Feature;
7
import org.gvsig.fmap.dal.feature.FeatureStore;
8
import org.gvsig.fmap.geom.Geometry;
9
import org.gvsig.fmap.geom.GeometryLocator;
10
import org.gvsig.fmap.geom.GeometryManager;
11
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
12
import org.gvsig.fmap.geom.Geometry.TYPES;
13
import org.gvsig.fmap.geom.primitive.GeneralPathX;
14
import org.gvsig.fmap.geom.primitive.Surface;
15

    
16

    
17
public class FeatureRulePolygon extends AbstractFeatureRule {
18
        private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
19
        
20
        public FeatureRulePolygon() {
21
                super("RulePolygon", "Ensure orientation of geometry");
22
        }
23

    
24
        public void validate(Feature feature, FeatureStore store)
25
                        throws DataException {
26

    
27
        try {
28
                        Geometry geom = feature.getDefaultGeometry();
29
                        GeneralPathX gp = new GeneralPathX();
30
                        gp.append(geom.getPathIterator(null, geomManager.getFlatness()), true);
31

    
32
                        if (gp.isClosed()) {
33
                                if (gp.isCCW()) {
34
                                        gp.flip();
35
                                        GeometryManager geomManager = GeometryLocator.getGeometryManager();
36
                                        Surface surface = (Surface)geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
37
                                        surface.setGeneralPath(gp);
38
                                        geom = surface;
39
                                EditableFeature editable = feature.getEditable();
40
                                        editable.setDefaultGeometry(geom);
41
                                        store.update(editable);
42
                                }
43
                }
44
                } catch (Exception e) {
45
                        throw new FeatureRulePolygonException(e, store.getName());
46
                }
47
        }
48

    
49
        public class FeatureRulePolygonException extends DataException {
50

    
51
                /**
52
                 *
53
                 */
54
                private static final long serialVersionUID = -3014970171661713021L;
55
                private final static String MESSAGE_FORMAT = "Can't apply rule  in store %(store)s.";
56
                private final static String MESSAGE_KEY = "_FeatureRulePolygonException";
57

    
58
                public FeatureRulePolygonException(Throwable cause, String store) {
59
                        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
60
                        this.setValue("store", store);
61
                }
62
        }
63

    
64
}