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
package org.gvsig.sldsupport.impl.sld1_0_0.parsing;
2

    
3
import java.io.IOException;
4

    
5
import org.gvsig.fmap.dal.exception.ReadException;
6
import org.gvsig.sldsupport.exception.SLDReadException;
7
import org.gvsig.sldsupport.impl.sld1_0_0.parsing.symbol.SymbolElement;
8
import org.gvsig.sldsupport.impl.util.SLDUtils;
9
import org.gvsig.sldsupport.sld.SLDTags;
10
import org.gvsig.sldsupport.sld.filter.SLDFilter;
11
import org.gvsig.sldsupport.sld.graphic.SLDLegendGraphic;
12
import org.gvsig.sldsupport.sld.rule.SLDRule;
13
import org.gvsig.sldsupport.sld.symbol.SLDSymbol;
14
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
                tag = parser.nextTag();
29
                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
                                        parser.nextTag();
39
                                        break;
40
                                }
41
                                if (SLDUtils.isStr(name, SLDTags.TITLE)) {
42
                                        txt = parser.nextText();
43
                                        resp.setTitle(txt);
44
                                        parser.nextTag();
45
                                        break;
46
                                }
47
                                if (SLDUtils.isStr(name, SLDTags.ABSTRACT)
48
                                                || SLDUtils.isStr(name, SLDTags.DESCRIPTION)) {
49
                                        txt = parser.nextText();
50
                                        resp.setDescription(txt);
51
                                        parser.nextTag();
52
                                        break;
53
                                }
54
                                if (SLDUtils.isStr(name, SLDTags.LEGENDGRAPHIC)) {
55
                                        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
                                        txt = parser.nextText();
69
                                        resp.setMinScaleDenominator(SLDUtils.parseDouble(txt));
70
                                        parser.nextTag();
71
                                        break;
72
                                }
73
                                if (SLDUtils.isStr(name, SLDTags.MAXSCALEDENOMINATOR)) {
74
                                        txt = parser.nextText();
75
                                        resp.setMaxScaleDenominator(SLDUtils.parseDouble(txt));
76
                                        parser.nextTag();
77
                                        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
                                /*
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
                        case KXmlParser.END_TAG:
110
                                break;
111
                        case KXmlParser.TEXT:
112
                                break;
113
                        }
114
                        tag = parser.getEventType();
115
                        name = parser.getName();
116
                }
117
                parser.nextTag();
118
                return resp;
119
        }        
120
}