private Filter createFilter(SimpleFeature feature, FeatureTypeRelation rel) { FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(); List<Filter> filters = new ArrayList<Filter>(); for (FeatureTypeRelationKey key : rel.getRelationKeys()) { AttributeDescriptor rightSide = key.getRightSide(); AttributeDescriptor leftSide = key.getLeftSide(); Object value = feature.getAttribute(leftSide.getName()); if (value == null) { continue; } if (AttributeDescriptor.GEOMETRY_TYPES.contains(rightSide.getType()) && AttributeDescriptor.GEOMETRY_TYPES.contains(leftSide.getType())) { filters.add(ff.not(ff.isNull(ff.property(rightSide.getName())))); filters.add(ff.intersects(ff.property(rightSide.getName()), ff.literal(value))); } else { filters.add(ff.equals(ff.property(rightSide.getName()), ff.literal(value))); } } if (filters.size() > 1) { return ff.and(filters); } else if (filters.size() == 1) { return filters.get(0); } else { return null; } }
private List<String> rebuildAttributes(SimpleFeatureType sft) { Layer layer = applicationLayer.getService().getSingleLayer(applicationLayer.getLayerName()); List<String> attributesToRetain = new ArrayList<String>(); for (AttributeDescriptor ad : sft.getAttributes()) { String name = ad.getName(); String fullName = sft.getId() + ":" + name; // if attribute already added return. if (attributesToRetain.contains(fullName)) { return attributesToRetain; } attributesToRetain.add(fullName); // Used for display in JSP if (StringUtils.isNotBlank(ad.getAlias())) { attributeAliases.put(fullName, ad.getAlias()); } if (applicationLayer.getAttribute(sft, name) == null) { ConfiguredAttribute ca = new ConfiguredAttribute(); // default visible if not geometry type // and not a attribute of a related featuretype boolean defaultVisible = true; if (layer.getFeatureType().getId() != sft.getId() || AttributeDescriptor.GEOMETRY_TYPES.contains(ad.getType())) { defaultVisible = false; } ca.setVisible(defaultVisible); ca.setAttributeName(name); ca.setFeatureType(sft); applicationLayer.getAttributes().add(ca); Stripersist.getEntityManager().persist(ca); if (!"save".equals(getContext().getEventName())) { String message = "Nieuw attribuut \"{0}\" gevonden in "; if (layer.getFeatureType().getId() != sft.getId()) { message += "gekoppelde "; } message += "attribuutbron"; if (layer.getFeatureType().getId() == sft.getId()) { message += ": wordt zichtbaar na opslaan"; } getContext().getMessages().add(new SimpleMessage(message, name)); } } } if (sft.getRelations() != null) { for (FeatureTypeRelation rel : sft.getRelations()) { attributesToRetain.addAll(rebuildAttributes(rel.getForeignFeatureType())); } } return attributesToRetain; }