Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libFMap_dal / src / org / gvsig / fmap / dal / feature / rule / FeatureRulePolygon.java @ 38192

History | View | Annotate | Download (2.18 KB)

1 24496 jmvivo
package org.gvsig.fmap.dal.feature.rule;
2 22961 vcaballero
3 24505 jmvivo
import org.gvsig.fmap.dal.exception.DataException;
4 24496 jmvivo
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 22961 vcaballero
import org.gvsig.fmap.geom.Geometry;
9 26331 jpiera
import org.gvsig.fmap.geom.GeometryLocator;
10 22961 vcaballero
import org.gvsig.fmap.geom.GeometryManager;
11 26904 jpiera
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
12
import org.gvsig.fmap.geom.Geometry.TYPES;
13 22961 vcaballero
import org.gvsig.fmap.geom.primitive.GeneralPathX;
14 26904 jpiera
import org.gvsig.fmap.geom.primitive.Surface;
15 22961 vcaballero
import org.gvsig.fmap.geom.util.Converter;
16
17
public class FeatureRulePolygon extends AbstractFeatureRule {
18 30341 jpiera
        private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
19
20 23754 jjdelcerro
        public FeatureRulePolygon() {
21
                super("RulePolygon", "Ensure orientation of geometry");
22 22961 vcaballero
        }
23
24 23772 jjdelcerro
        public void validate(Feature feature, FeatureStore store)
25
                        throws DataException {
26 22961 vcaballero
27 23772 jjdelcerro
        try {
28
                        Geometry geom = feature.getDefaultGeometry();
29
                        GeneralPathX gp = new GeneralPathX();
30 30341 jpiera
                        gp.append(geom.getPathIterator(null, geomManager.getFlatness()), true);
31 22961 vcaballero
32 23772 jjdelcerro
                        if (gp.isClosed()) {
33
                                if (gp.isCCW()) {
34
                                        gp.flip();
35 26904 jpiera
                                        GeometryManager geomManager = GeometryLocator.getGeometryManager();
36
                                        Surface surface = (Surface)geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
37
                                        surface.setGeneralPath(gp);
38
                                        geom = surface;
39 23772 jjdelcerro
                                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 22961 vcaballero
49 23772 jjdelcerro
        public class FeatureRulePolygonException extends DataException {
50 22961 vcaballero
51 23772 jjdelcerro
                /**
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 22961 vcaballero
58 23772 jjdelcerro
                public FeatureRulePolygonException(Throwable cause, String store) {
59
                        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
60
                        this.setValue("store", store);
61
                }
62 22961 vcaballero
        }
63
64
}