@Override public Object visit(Id filter, Object extraData) { Set<Identifier> identifiers = filter.getIdentifiers(); Set<Identifier> renamedIdentifiers = identifiers .stream() .map( id -> { String name = id.getID().toString(); if (name.startsWith(prefix)) { name = name.substring(prefix.length()); } return getFactory(extraData).featureId(name); }) .collect(Collectors.toSet()); return getFactory(extraData).id(renamedIdentifiers); } }
/** Constructor which takes {@link org.opengis.filter.identity.Identifier}, not String. */ protected FidFilterImpl(Set /* <Identifier> */ fids) { // check these are really identifiers for (Iterator it = fids.iterator(); it.hasNext(); ) { Object next = it.next(); if (!(next instanceof Identifier)) throw new ClassCastException( "Fids must implement Identifier, " + next.getClass() + " does not"); } this.fids = fids; for (Identifier identifier : this.fids) { ids.add(identifier.getID().toString()); } }
/** Used to update any FeatureId during a commit. */ public void replaceFid(String tempFid, String actualFid) { for (Identifier id : fids) { if (tempFid.equals(id.getID())) { // we have a match! if (id instanceof FeatureIdImpl) { FeatureIdImpl featureId = (FeatureIdImpl) id; // update internal structure! featureId.setID(actualFid); } } } }
/** * Removes a feature ID from the filter. * * @param fid A single feature ID. */ public final void removeFid(String fid) { if (fid == null) { return; } for (Iterator f = fids.iterator(); f.hasNext(); ) { Identifier featureId = (Identifier) f.next(); if (fid.equals(featureId.getID().toString())) { f.remove(); ids.remove(fid); } } }
@Override public Object evaluate(Object obj) { if (obj instanceof SimpleFeature) { SimpleFeature feature = (SimpleFeature) obj; return feature.getID(); } if (obj instanceof Attribute) { Attribute attribute = (Attribute) obj; return attribute.getIdentifier().getID(); } return ""; // no ID } }
map.put("fid", att.getIdentifier().getID()); } else { map.put("fid", "");
@SuppressWarnings("unchecked") public Object getImmediateNode() { // first try regular way if (feature instanceof ComplexAttribute) { ComplexAttribute ca = (ComplexAttribute) feature; Property p = ca.getProperty("@" + name.getLocalPart()); if (p != null) { return p; } } // FIXME - better id checking if (name.getLocalPart().equals("id")) { Identifier id = feature.getIdentifier(); if (id != null) { return id.getID(); } } Map<Name, Object> map = (Map<Name, Object>) feature.getUserData().get(Attributes.class); if (map != null) { return map.get(name); } else { return null; } }
@Override public Object getProperty(Object object, QName name) throws Exception { if (GML._Feature.equals(name)) { if (object instanceof SimpleFeature) { return object; } else if (object instanceof FeatureImpl) { ComplexAttribute complex = (ComplexAttribute) object; Identifier ident = complex.getIdentifier(); if (ident == null) { return object; } String id; if (ident instanceof FeatureId) { id = ((FeatureId) ident).getRid(); } else { id = Converters.convert(ident.getID(), String.class); } if (idSet.idExists(id)) { return null; } return object; } else if (object instanceof ComplexAttribute) { return ((ComplexAttribute) object).getProperties().iterator().next(); } } return null; }
if (fidValidator.isValid((String) id.getID())) { validFids.add(id);
id = ((FeatureId) ident).getRid(); } else { id = Converters.convert(ident.getID(), String.class);
return; String id = Converters.convert(ident.getID(), String.class); if (idSet.idExists(id)) {
StringBuffer idValues = new StringBuffer(); for (Iterator<Identifier> it = identifiers.iterator(); it.hasNext(); ) { Object id = it.next().getID(); if (id instanceof FeatureId) { idValues.append(((FeatureId) id).getRid());
/** * Used to update any FeatureId during a commit. */ public void replaceFid(String tempFid, String actualFid) { for (Identifier id : fids) { if (tempFid.equals(id.getID())) { // we have a match! if (id instanceof FeatureIdImpl) { FeatureIdImpl featureId = (FeatureIdImpl) id; // update internal structure! featureId.setID(actualFid); } } } }
/** * Removes a feature ID from the filter. * * @param fid * A single feature ID. */ public final void removeFid(String fid) { if (fid == null) { return; } for (Iterator f = fids.iterator(); f.hasNext();) { Identifier featureId = (Identifier) f.next(); if (fid.equals(featureId.getID().toString())) { f.remove(); ids.remove(fid); } } }
/** * Constructor which takes {@link org.opengis.filter.identity.Identifier}, * not String. * */ protected FidFilterImpl(Set/* <Identifier> */fids) { super(CommonFactoryFinder.getFilterFactory(null)); filterType = AbstractFilter.FID; // check these are really identifiers for (Iterator it = fids.iterator(); it.hasNext();) { Object next = it.next(); if (!(next instanceof Identifier)) throw new ClassCastException("Fids must implement Identifier, " + next.getClass() + " does not"); } this.fids = fids; for (Identifier identifier : this.fids) { ids.add(identifier.getID().toString()); } }
@Override public Object evaluate(Object obj) { if( obj instanceof SimpleFeature){ SimpleFeature feature = (SimpleFeature) obj; return feature.getID(); } if( obj instanceof Attribute){ Attribute attribute = (Attribute) obj; return attribute.getIdentifier().getID(); } return ""; // no ID }
@SuppressWarnings("unchecked") public Object getImmediateNode() { //FIXME - better id checking if (name.getLocalPart().equals("id")) { return feature.getIdentifier().getID(); } else { Map<Name, Object> map = (Map<Name, Object>) feature.getUserData().get(Attributes.class); if (map != null) { return map.get(name); } else { return null; } } }
@Override public Object visit(Id filter, Object extraData) { Set<FeatureId> fidSet = new HashSet<FeatureId>(); for( Identifier identifier : filter.getIdentifiers() ){ String target = (String) identifier.getID(); String fid = getFinalFid( target ); fidSet.add( ff.featureId( fid ) ); } return ff.id( fidSet ); }
@SuppressWarnings("unchecked") public Object getImmediateNode() { // first try regular way if (feature instanceof ComplexAttribute) { ComplexAttribute ca = (ComplexAttribute) feature; Property p = ca.getProperty("@" + name.getLocalPart()); if (p != null) { return p; } } // FIXME - better id checking if (name.getLocalPart().equals("id")) { Identifier id = feature.getIdentifier(); if (id != null) { return id.getID(); } } Map<Name, Object> map = (Map<Name, Object>) feature.getUserData().get(Attributes.class); if (map != null) { return map.get(name); } else { return null; } }
/** Encode a feature in GeoJSON. */ protected void encodeFeature(Feature feature) { // start the feature JSON object jsonWriter.object(); jsonWriter.key("type").value("Feature"); // encode the feature identifier if available Identifier identifier = feature.getIdentifier(); if (identifier != null) { jsonWriter.key("id").value(identifier.getID()); } // geometry attribute has some special handling Property geometryAttribute = encodeGeometry(feature); // start the JSON object that will contain all the others properties jsonWriter.key("properties"); jsonWriter.object(); // encode object properties, we pass the geometry attribute to avoid duplicate encodings encodeProperties(geometryAttribute, feature.getType(), feature.getProperties()); // close the feature JSON object jsonWriter.endObject(); // close the properties JSON object jsonWriter.endObject(); }