Statistics
| Revision:

svn-gvsig-desktop / branches / v02_desarrollo / libraries / sld / temp / org.gvsig.sldsupport.lib.impl / src / main / java / org / gvsig / sldsupport / impl / sld1_0_0 / parsing / RuleElement.java @ 40799

History | View | Annotate | Download (3.74 KB)

1 40789 jldominguez
package org.gvsig.sldsupport.impl.sld1_0_0.parsing;
2
3
import java.io.IOException;
4
5 40799 jldominguez
import org.gvsig.fmap.dal.exception.ReadException;
6 40789 jldominguez
import org.gvsig.sldsupport.exception.SLDReadException;
7 40794 jldominguez
import org.gvsig.sldsupport.impl.sld1_0_0.parsing.symbol.SymbolElement;
8 40789 jldominguez
import org.gvsig.sldsupport.impl.util.SLDUtils;
9
import org.gvsig.sldsupport.sld.SLDTags;
10 40794 jldominguez
import org.gvsig.sldsupport.sld.filter.SLDFilter;
11 40789 jldominguez
import org.gvsig.sldsupport.sld.graphic.SLDLegendGraphic;
12
import org.gvsig.sldsupport.sld.rule.SLDRule;
13 40794 jldominguez
import org.gvsig.sldsupport.sld.symbol.SLDSymbol;
14 40789 jldominguez
import org.kxml2.io.KXmlParser;
15
import org.xmlpull.v1.XmlPullParser;
16
import org.xmlpull.v1.XmlPullParserException;
17
18
public class RuleElement {
19
20
        public static SLDRule parse(XmlPullParser parser , String version)
21
                        throws XmlPullParserException, IOException, SLDReadException {
22
23
                parser.require(KXmlParser.START_TAG, null, SLDTags.RULE);
24
                int tag = 0;
25
26
                SLDRule resp = new SLDRule();
27
28 40796 jldominguez
                tag = parser.nextTag();
29 40789 jldominguez
                String name = parser.getName();
30
                String txt = null;
31
                while (!(SLDUtils.isStr(name, SLDTags.RULE) && tag == KXmlParser.END_TAG)) {
32
33
                        switch (tag) {
34
                        case KXmlParser.START_TAG:
35
                                if (SLDUtils.isStr(name, SLDTags.NAME)) {
36
                                        txt = parser.nextText();
37
                                        resp.setName(txt);
38 40796 jldominguez
                                        parser.nextTag();
39 40789 jldominguez
                                        break;
40
                                }
41
                                if (SLDUtils.isStr(name, SLDTags.TITLE)) {
42
                                        txt = parser.nextText();
43
                                        resp.setTitle(txt);
44 40796 jldominguez
                                        parser.nextTag();
45 40789 jldominguez
                                        break;
46
                                }
47
                                if (SLDUtils.isStr(name, SLDTags.ABSTRACT)
48
                                                || SLDUtils.isStr(name, SLDTags.DESCRIPTION)) {
49
                                        txt = parser.nextText();
50
                                        resp.setDescription(txt);
51 40796 jldominguez
                                        parser.nextTag();
52 40789 jldominguez
                                        break;
53
                                }
54
                                if (SLDUtils.isStr(name, SLDTags.LEGENDGRAPHIC)) {
55 40794 jldominguez
                                        SLDLegendGraphic legr = LegendGraphicElement.parse(parser, version);
56
                                        resp.setLegendGraphic(legr);
57
                                        break;
58
                                }
59
60
                                if (SLDUtils.isStr(name, SLDTags.FILTER)
61
                                                || SLDUtils.isStr(name, SLDTags.ELSEFILTER)) {
62
                                        SLDFilter filt = FilterElement.parse(parser, version);
63
                                        resp.setFilter(filt);
64
                                        break;
65
                                }
66
67
                                if (SLDUtils.isStr(name, SLDTags.MINSCALEDENOMINATOR)) {
68 40789 jldominguez
                                        txt = parser.nextText();
69 40794 jldominguez
                                        resp.setMinScaleDenominator(SLDUtils.parseDouble(txt));
70 40796 jldominguez
                                        parser.nextTag();
71 40789 jldominguez
                                        break;
72
                                }
73 40794 jldominguez
                                if (SLDUtils.isStr(name, SLDTags.MAXSCALEDENOMINATOR)) {
74
                                        txt = parser.nextText();
75
                                        resp.setMaxScaleDenominator(SLDUtils.parseDouble(txt));
76 40796 jldominguez
                                        parser.nextTag();
77 40794 jldominguez
                                        break;
78
                                }
79
                                // ===================================
80
                                // ===================================
81
                                if (SLDUtils.isStr(name, SLDTags.POINTSYMBOL)
82
                                                || SLDUtils.isStr(name, SLDTags.POINTSYMBOLIZER)
83
                                                || SLDUtils.isStr(name, SLDTags.LINESYMBOL)
84
                                                || SLDUtils.isStr(name, SLDTags.LINESYMBOLIZER)
85
                                                || SLDUtils.isStr(name, SLDTags.POLYGONSYMBOL)
86
                                                || SLDUtils.isStr(name, SLDTags.POLYGONSYMBOLIZER)
87
                                                ) {
88
                                        SLDSymbol sym = SymbolElement.parse(parser, version);
89
                                        resp.getSymbols().add(sym);
90
                                        break;
91
                                }
92 40799 jldominguez
                                /*
93
                                 * Text, Raster, MappedColor symbols not supported
94
                                 */
95
                                if (SLDUtils.isStr(name, SLDTags.TEXTSYMBOL)
96
                                                || SLDUtils.isStr(name, SLDTags.TEXTSYMBOLIZER)
97
                                                || SLDUtils.isStr(name, SLDTags.RASTERSYMBOL)
98
                                                || SLDUtils.isStr(name, SLDTags.RASTERSYMBOLIZER)
99
                                                || SLDUtils.isStr(name, SLDTags.MAPPEDCOLORSYMBOL)
100
                                                ) {
101
                                        throw new SLDReadException("Unsupported symbol: " + name);
102
                                }
103
104
                                /*
105
                                 * Any other entity causes parsing error
106
                                 */
107
                                throw new SLDReadException("Bad SLD file. Unexpected entity in Rule: " + name);
108
109 40789 jldominguez
                        case KXmlParser.END_TAG:
110
                                break;
111
                        case KXmlParser.TEXT:
112
                                break;
113
                        }
114 40796 jldominguez
                        tag = parser.getEventType();
115
                        name = parser.getName();
116 40789 jldominguez
                }
117 40796 jldominguez
                parser.nextTag();
118 40789 jldominguez
                return resp;
119
        }
120
}