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 / FeatureStyleElement.java @ 40799

History | View | Annotate | Download (2.78 KB)

1
package org.gvsig.sldsupport.impl.sld1_0_0.parsing;
2

    
3
import java.io.IOException;
4

    
5
import org.gvsig.sldsupport.exception.SLDReadException;
6
import org.gvsig.sldsupport.impl.util.SLDUtils;
7
import org.gvsig.sldsupport.sld.SLDTags;
8
import org.gvsig.sldsupport.sld.rule.SLDRule;
9
import org.gvsig.sldsupport.sld.style.SLDFeatureStyle;
10
import org.kxml2.io.KXmlParser;
11
import org.xmlpull.v1.XmlPullParser;
12
import org.xmlpull.v1.XmlPullParserException;
13

    
14
public class FeatureStyleElement {
15
        
16
        public static SLDFeatureStyle parse(XmlPullParser parser, String version)
17
                        throws XmlPullParserException, IOException, SLDReadException {
18
                
19
                String ent_name = parser.getName();
20
                if (!(SLDUtils.isStr(ent_name, SLDTags.FEATURESTYLE)
21
                                || SLDUtils.isStr(ent_name, SLDTags.FEATURETYPESTYLE))) {
22
                        throw new SLDReadException("Bad opening tag: " + ent_name);
23
                }
24
                
25
                String txt = null;
26
                int tag = 0;
27
                SLDFeatureStyle resp = new SLDFeatureStyle();
28
                
29
                if (SLDUtils.isStr(ent_name, SLDTags.FEATURESTYLE)) {
30
                        txt = parser.getAttributeValue(null, SLDTags.VERSION_ATTR);
31
                        if (txt == null) {
32
                                throw new SLDReadException("The 'version' attribute is mandatory in "
33
                                                 + SLDTags.FEATURESTYLE);
34
                        } else {
35
                                resp.setVersion(txt);
36
                        }
37
                }
38

    
39
                tag = parser.nextTag();
40
                String name = parser.getName();
41
                while (!(SLDUtils.isStr(name, ent_name) && tag == KXmlParser.END_TAG)) {
42
                        
43
                        switch (tag) {
44
                        case KXmlParser.START_TAG:
45
                                if (SLDUtils.isStr(name, SLDTags.NAME)) {
46
                                        txt = parser.nextText();
47
                                        resp.setName(txt);
48
                                        parser.nextTag();
49
                                        break;
50
                                }
51
                                if (SLDUtils.isStr(name, SLDTags.TITLE)) {
52
                                        txt = parser.nextText();
53
                                        resp.setTitle(txt);
54
                                        parser.nextTag();
55
                                        break;
56
                                }
57
                                if (SLDUtils.isStr(name, SLDTags.DESCRIPTION)
58
                                                || SLDUtils.isStr(name, SLDTags.ABSTRACT)) {
59
                                        txt = parser.nextText();
60
                                        resp.setDescription(txt);
61
                                        parser.nextTag();
62
                                        break;
63
                                }
64
                                if (SLDUtils.isStr(name, SLDTags.FEATURETYPENAME)) {
65
                                        txt = parser.nextText();
66
                                        resp.setFeatureTypeName(txt);
67
                                        parser.nextTag();
68
                                        break;
69
                                }
70
                                if (SLDUtils.isStr(name, SLDTags.SEMANTICTYPEIDENTIFIER)) {
71
                                        txt = parser.nextText();
72
                                        resp.setSemanticTypeIdentifier(txt);
73
                                        parser.nextTag();
74
                                        break;
75
                                }
76
                                if (SLDUtils.isStr(name, SLDTags.RULE)) {
77
                                        SLDRule rule = RuleElement.parse(parser, version);
78
                                        resp.getRules().add(rule);
79
                                        break;
80
                                }                                
81
                                /*
82
                                 * Any other entity causes parsing error
83
                                 */
84
                                throw new SLDReadException(
85
                                                "Bad SLD file. Unexpected entity in feature[type] style: " + name);
86
                        case KXmlParser.END_TAG:
87
                                break;
88
                        case KXmlParser.TEXT:
89
                                break;
90
                        }
91
                        tag = parser.getEventType();
92
                        name = parser.getName();
93
                }
94

    
95
                parser.nextTag();
96
                return resp;
97
        }
98
}