Revision 8732 trunk/applications/appCatalogYNomenclatorClient/src/es/gva/cit/gazetteer/wfsg/parsers/WfsgFeatureParser.java

View differences:

WfsgFeatureParser.java
59 59
 * 
60 60
 */
61 61
    private String geomType = null;
62
    private String namespace = null;
62 63

  
63 64
/**
64 65
 * It parses the answer
......
71 72
 */
72 73
    public Feature[] parse(XMLNode node, ThesaurusName thesaurus, String attribute) {        
73 74
        XMLNode[] nodeFeatures = XMLTree.searchMultipleNode(node,"gml:featureMember");
75
        namespace = "";
76
        String geomField = "";
74 77
        
75
       String prefix = thesaurus.getName().split(":")[0];
76
          String geomField = getGeomField(prefix,thesaurus);
77
            
78
        if ((nodeFeatures != null) && (nodeFeatures.length > 0)){
79
        	if (nodeFeatures[0].getSubnodes().length > 0){
80
        		String nodeName = nodeFeatures[0].getSubnodes()[0].getName();
81
        		if (nodeName.split(":").length == 2){
82
        			namespace = nodeName.split(":")[0] + ":";
83
        		}
84
        		geomField = getGeomField(nodeFeatures[0].getSubNode(0),namespace,thesaurus);
85
        	}
86
        }       
87
                    
78 88
        if ((node.getName().equals("ResultCollection")) ||
79 89
        	(node.getName().equals("feature_collection"))){
90
        	geomField = "position->gml:Point->gml:coordinates";        
91
        	geomType = "Point";
80 92
            return parseWFS(nodeFeatures,thesaurus,"geographicIdentifier",geomField);
81 93
        }else{
82
            return parseWFS(nodeFeatures,thesaurus,prefix + ":" + attribute,geomField);
94
            return parseWFS(nodeFeatures,thesaurus,namespace + attribute,geomField);
83 95
        }  
84 96
    } 
85 97

  
......
95 107
 */
96 108
    public Feature[] parseWFS(XMLNode[] nodeFeatures, ThesaurusName thesaurusName, String attribute, String geomField) {        
97 109
        Feature[] features = new Feature[nodeFeatures.length];
98
                
110
               
99 111
        for (int i=0 ; i<nodeFeatures.length ; i++){
100
            String id = XMLTree.searchNodeAtribute(nodeFeatures[i],thesaurusName.getName(),"fid");
101
            
102 112
            XMLNode nodeName = XMLTree.searchNode(nodeFeatures[i],thesaurusName.getName() + "->" + attribute);
103 113
            String name = "";
104 114
            
115
            if (nodeName == null){
116
                if (thesaurusName.getName().split(":").length == 1){
117
                	thesaurusName.setName(namespace + thesaurusName.getName());
118
                	nodeName = XMLTree.searchNode(nodeFeatures[i],thesaurusName.getName() + "->" + attribute);
119
                }
120
            }
121
            
105 122
            if (nodeName != null){
106
                if ((nodeName.getText() != null) && (!(nodeName.getText().equals("")))){
107
                    name = nodeName.getText();
108
                } else if ((nodeName.getCdata() != null) && (!(nodeName.getCdata().equals("")))){
109
                    name = nodeName.getCdata();                   
110
                }
111
            }           
123
            	if ((nodeName.getText() != null) && (!(nodeName.getText().equals("")))){
124
            		name = nodeName.getText();
125
            	} else if ((nodeName.getCdata() != null) && (!(nodeName.getCdata().equals("")))){
126
            		name = nodeName.getCdata();                   
127
            	}       
128
            }
129
                     
130
            String id = XMLTree.searchNodeAtribute(nodeFeatures[i],thesaurusName.getName(),"fid");
112 131
            String description = name;
132
            System.out.println(thesaurusName.getName() + "->" + geomField);
113 133
            Point2D point = getCoordinates(XMLTree.searchNodeValue(nodeFeatures[i],
114
                    geomField));
134
            		thesaurusName.getName() + "->" + geomField));
115 135
              
116 136
            features[i] = new Feature(id,name,description,point);
117 137
        }
......
128 148
 * @param prefix Typename
129 149
 * @param thesaurus Feature selected in the thesaurus list
130 150
 */
131
    private String getGeomField(String prefix, ThesaurusName thesaurus) {        
132
        if ((thesaurus.getFields() == null) || (thesaurus.getFields().length == 0)){
133
            geomType = "Point";  
134
            return thesaurus.getName() + "->" + "position->gml:Point->gml:coordinates";
135
        }    
136
        
151
    private String getGeomField(XMLNode node, String prefix, ThesaurusName thesaurus) {        
152
        String geometryFieldName = "";
153
        XMLNode geometryNode = null;
154
    	if (node == null){
155
        	return null;
156
        }
137 157
        for (int i=0 ; i<thesaurus.getFields().length ; i++){
138
            if (thesaurus.getFields()[i].getType().equals("gml:MultiLineStringPropertyType")){
139
                prefix = thesaurus.getName() + "->" + prefix + ":" + thesaurus.getFields()[i].getName();
140
                geomType = "MultiLine";
141
                return prefix +
142
                "->gml:MultiLineString->gml:lineStringMember->gml:LineString->" +
143
                "gml:coordinates";
144
            }
145
            
146
            if (thesaurus.getFields()[i].getType().equals("gml:MultiPolygonPropertyType")){
147
                prefix = thesaurus.getName() + "->" + prefix + ":" + thesaurus.getFields()[i].getName();
148
                geomType = "MultiPolygon";
149
                return prefix +
150
                "->gml:MultiPolygon->gml:polygonMember->gml:Polygon->gml:outerBoundaryIs->" +
151
                "gml:LinearRing->gml:coordinates";
152
            }
153
            
154
            if (thesaurus.getFields()[i].getType().equals("gml:PointPropertyType")){
155
                prefix = thesaurus.getName() + "->" + prefix + ":" + thesaurus.getFields()[i].getName();
156
                geomType = "Point";
157
                return prefix +
158
                "->gml:Point->gml:coordinates";
159
            }           
160
        }        
161
      return "";
162
    } 
158
        	if (isGeometry(thesaurus.getFields()[i].getType())){
159
        		geometryFieldName = thesaurus.getFields()[i].getName();
160
        	}
161
        }
162
        for (int i=0 ; i<node.getNumSubNodes() ; i++){
163
        	if (node.getSubNode(i).getName().endsWith(geometryFieldName)){
164
        		geometryFieldName = node.getSubNode(i).getName();
165
        		geometryNode = node.getSubNode(i);
166
        	}
167
        }
168
        return getGeometryField(geometryNode,geometryNode.getName());
169
    }
170
    
171
    private String getGeometryField(XMLNode node,String parentNode){
172
    	if (node == null){
173
    		return "";
174
    	}    
175
    	for (int i=0 ; i<node.getNumSubNodes() ; i++){    		
176
    		if (node.getSubNode(i).getName().compareTo("gml:coordinates") == 0){
177
    			return parentNode + "->" + node.getSubNode(i).getName();
178
    		}else{
179
    			return parentNode + "->" + getGeometryField(node.getSubNode(i),node.getSubNode(i).getName()); 
180
    	    }
181
        }
182
    	return node.getName();
183
    }
163 184

  
185
    private boolean isGeometry(String tagName){
186
    	if (tagName.compareTo("gml:MultiLineStringPropertyType") == 0){
187
    		geomType = "MultiLine";
188
    		return true;
189
    	}else if(tagName.compareTo("gml:LineString") == 0){
190
    		geomType = "MultiLine";
191
    		return true;
192
    	}else if(tagName.compareTo("gml:MultiPolygonPropertyType") == 0){
193
    		geomType = "MultiPolygon";
194
    		return true;
195
    	}else if(tagName.compareTo("gml:PointPropertyType") == 0){
196
    		geomType = "Point";
197
    		return true;
198
    	}else if(tagName.compareTo("gml:GeometryPropertyType") == 0){
199
    		geomType = "Point";
200
    		return true;
201
    	}
202
    	return false;
203
    }
204

  
164 205
/**
165 206
 * It returns a pair of coordinates of the Feature
166 207
 * 

Also available in: Unified diff