@Override protected void setProperty(EObject eObject, String property, Object value, boolean lax) { if ("typeName".equals(property)) { QueryType query = (QueryType) eObject; if (query.getTypeName() == null) { query.setTypeName(new ArrayList()); } } super.setProperty(eObject, property, value, lax); } }
@Override public Object getProperty(Object object, QName name) throws Exception { if ("typeName".equals(name.getLocalPart())) { QueryType query = (QueryType) object; if (!query.getTypeName().isEmpty()) { // bit of a hack but handle both string and qname Object obj = query.getTypeName().get(0); if (obj instanceof String) { obj = new XSQNameBinding(namespaceContext).parse(null, obj); } return obj; } return null; } else if ("PropertyName".equals(name.getLocalPart())) { List l = new ArrayList(); for (String s : (List<String>) super.getProperty(object, name)) { l.add(filterFactory.property(s)); } return l; } else { return super.getProperty(object, name); } }
if ("typeName".equals(name.getLocalPart())) { QueryType query = (QueryType) object; List typeName = query.getTypeName(); StringBuilder typeNameList = new StringBuilder(); if (typeName != null) {
@Override protected void setProperty(EObject eObject, String property, Object value, boolean lax) { if ("typeName".equals(property)) { QueryType query = (QueryType) eObject; if (query.getTypeName() == null) { query.setTypeName(new ArrayList()); } } super.setProperty(eObject, property, value, lax); } }
if ("typeName".equals(name.getLocalPart())) { QueryType query = (QueryType) object; List typeName = query.getTypeName(); StringBuilder typeNameList = new StringBuilder(); if (typeName != null) {
@Override public Object getProperty(Object object, QName name) throws Exception { if ("typeName".equals(name.getLocalPart())) { QueryType query = (QueryType) object; if (!query.getTypeName().isEmpty()) { //bit of a hack but handle both string and qname Object obj = query.getTypeName().get(0); if (obj instanceof String) { obj = new XSQNameBinding(namespaceContext).parse(null, obj); } return obj; } return null; } else if ("PropertyName".equals(name.getLocalPart())) { List l = new ArrayList(); for (String s : (List<String>)super.getProperty(object, name)) { l.add(filterFactory.property(s)); } return l; } else { return super.getProperty(object, name); } }
@Override public String getAttachmentFileName(Object value, Operation operation) { GetFeatureType request = (GetFeatureType) OwsUtils.parameter(operation.getParameters(), GetFeatureType.class); OgrFormat format = formats.get(request.getOutputFormat()); if (format == null) { throw new WFSException("Unknown output format " + request.getOutputFormat()); } else if (!format.singleFile || request.getQuery().size() > 1) { String outputFileName = ((QName) ((QueryType) request.getQuery().get(0)).getTypeName() .get(0)).getLocalPart(); return outputFileName + ".zip"; } else { return null; } }
final String typeName = (String) query.getTypeName().get(0); map.put("TYPENAME", typeName);
/** * @return a {@link GetFeatureParser} to stream the contents of the GML 3.1 response */ public Object parse(WFS_1_1_0_DataStore wfs, WFSResponse response) throws IOException { GetFeatureType request = (GetFeatureType) response.getOriginatingRequest(); QueryType queryType = (QueryType) request.getQuery().get(0); String prefixedTypeName = (String) queryType.getTypeName().get(0); SimpleFeatureType schema = wfs.getSchema(prefixedTypeName); List<String> propertyNames = queryType.getPropertyName(); if (propertyNames.size() > 0) { // the expected schema may contain less properties than the full schema. Let's say it to // the parser so it does not parse unnecessary attributes in case the WFS returns more // than requested String[] properties = propertyNames.toArray(new String[propertyNames.size()]); try { schema = DataUtilities.createSubType(schema, properties); } catch (SchemaException e) { throw (RuntimeException) new RuntimeException().initCause(e); } } QName featureName = wfs.getFeatureTypeName(prefixedTypeName); InputStream in = response.getInputStream(); GetFeatureParser featureReader = new XmlSimpleFeatureParser(in, schema, featureName, wfs.getAxisOrderForOutput()); return featureReader; } }
/** See https://osgeo-org.atlassian.net/browse/GEOS-1875 */ @SuppressWarnings("unchecked") @Test public void testUserProvidedDefaultNamespace() throws Exception { final QName qName = SystemTestData.STREAMS; final String typeName = qName.getLocalPart(); final String defaultNamespace = qName.getNamespaceURI(); Map<String, String> raw = new HashMap<String, String>(); raw.put("service", "WFS"); raw.put("version", "1.1.0"); raw.put("request", "GetFeature"); raw.put("typeName", typeName); raw.put("namespace", "xmlns(" + defaultNamespace + ")"); Map<String, Object> parsed = parseKvp(raw); GetFeatureType req = WfsFactory.eINSTANCE.createGetFeatureType(); Object read = reader.read(req, parsed, raw); GetFeatureType parsedReq = (GetFeatureType) read; QueryType query = (QueryType) parsedReq.getQuery().get(0); List<QName> typeNames = query.getTypeName(); assertEquals(1, typeNames.size()); assertEquals(qName, typeNames.get(0)); }
/** See https://osgeo-org.atlassian.net/browse/GEOS-1875 */ @SuppressWarnings("unchecked") @Test public void testUserProvidedNamespace() throws Exception { final String localPart = SystemTestData.MLINES.getLocalPart(); final String namespace = SystemTestData.MLINES.getNamespaceURI(); final String alternamePrefix = "ex"; final String alternameTypeName = alternamePrefix + ":" + localPart; Map<String, String> raw = new HashMap<String, String>(); raw.put("service", "WFS"); raw.put("version", "1.1.0"); raw.put("request", "GetFeature"); raw.put("typeName", alternameTypeName); raw.put("namespace", "xmlns(" + alternamePrefix + "=" + namespace + ")"); Map<String, Object> parsed = parseKvp(raw); GetFeatureType req = WfsFactory.eINSTANCE.createGetFeatureType(); Object read = reader.read(req, parsed, raw); GetFeatureType parsedReq = (GetFeatureType) read; QueryType query = (QueryType) parsedReq.getQuery().get(0); List<QName> typeNames = query.getTypeName(); assertEquals(1, typeNames.size()); assertEquals(SystemTestData.MLINES, typeNames.get(0)); }