예제 #1
0
 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;
  }