Statistics
| Revision:

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

History | View | Annotate | Download (1.88 KB)

1 24496 jmvivo
package org.gvsig.fmap.dal.feature.rule;
2 22961 vcaballero
3 24496 jmvivo
import org.gvsig.fmap.dal.exceptions.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 22961 vcaballero
import org.gvsig.fmap.geom.Geometry;
9
import org.gvsig.fmap.geom.GeometryFactory;
10
import org.gvsig.fmap.geom.GeometryManager;
11
import org.gvsig.fmap.geom.primitive.GeneralPathX;
12
import org.gvsig.fmap.geom.util.Converter;
13
14
public class FeatureRulePolygon extends AbstractFeatureRule {
15
16 23754 jjdelcerro
        public FeatureRulePolygon() {
17
                super("RulePolygon", "Ensure orientation of geometry");
18 22961 vcaballero
        }
19
20 23772 jjdelcerro
        public void validate(Feature feature, FeatureStore store)
21
                        throws DataException {
22 22961 vcaballero
23 23772 jjdelcerro
        try {
24
                        Geometry geom = feature.getDefaultGeometry();
25
                        GeneralPathX gp = new GeneralPathX();
26
                        gp.append(geom.getPathIterator(null, Converter.FLATNESS), true);
27 22961 vcaballero
28 23772 jjdelcerro
                        if (gp.isClosed()) {
29
                                if (gp.isCCW()) {
30
                                        gp.flip();
31
                                        GeometryFactory geomFactory = GeometryManager.getInstance()
32
                                                        .getGeometryFactory();
33
                                        geom = geomFactory.createPolygon2D(gp);
34
                                EditableFeature editable = feature.getEditable();
35
                                        editable.setDefaultGeometry(geom);
36
                                        store.update(editable);
37
                                }
38
                }
39
                } catch (Exception e) {
40
                        throw new FeatureRulePolygonException(e, store.getName());
41
                }
42
        }
43 22961 vcaballero
44 23772 jjdelcerro
        public class FeatureRulePolygonException extends DataException {
45 22961 vcaballero
46 23772 jjdelcerro
                /**
47
                 *
48
                 */
49
                private static final long serialVersionUID = -3014970171661713021L;
50
                private final static String MESSAGE_FORMAT = "Can't apply rule  in store %(store)s.";
51
                private final static String MESSAGE_KEY = "_FeatureRulePolygonException";
52 22961 vcaballero
53 23772 jjdelcerro
                public FeatureRulePolygonException(Throwable cause, String store) {
54
                        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
55
                        this.setValue("store", store);
56
                }
57 22961 vcaballero
        }
58
59
}