Skip to content

Commit

Permalink
Revert "Fix error with nested ANDs"
Browse files Browse the repository at this point in the history
This reverts commit 6c4248b.
  • Loading branch information
jampukka committed Mar 21, 2022
1 parent 35b6985 commit d2e4bcd
Showing 1 changed file with 7 additions and 50 deletions.
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
package org.oskari.service.wfs.client;

import java.util.ArrayList;
import java.util.List;

import org.geotools.factory.CommonFactoryFinder;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.json.JSONObject;
import org.opengis.filter.And;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

import fi.nls.oskari.domain.map.OskariLayer;
import fi.nls.oskari.domain.map.wfs.WFSLayerCapabilities;
import fi.nls.oskari.service.ServiceRuntimeException;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.json.JSONObject;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory;

public class OskariWFSFilterFactory {
private static FilterFactory ff = CommonFactoryFinder.getFilterFactory();
Expand Down Expand Up @@ -56,44 +50,7 @@ protected static Filter appendFilter(final Filter main, final Filter toAppend) {
} else if (toAppend == null) {
return main;
} else {
if (main instanceof And) {
List<Filter> toAnd = new ArrayList<>(((And) main).getChildren());
toAnd.add(toAppend);
return ff.and(toAnd);
} else if (toAppend instanceof And) {
List<Filter> toAnd = new ArrayList<>(((And) toAppend).getChildren());
toAnd.add(main);
return ff.and(toAnd);
} else {
return smartAnd(main, toAppend);
}
}
}

// Avoid unncessary nesting of ANDs (x AND y) AND (z AND w)
// => x AND y AND z AND w
private static Filter smartAnd(final Filter a, final Filter b) {
if (a instanceof And && b instanceof And) {
List<Filter> _a = ((And) a).getChildren();
List<Filter> _b = ((And) b).getChildren();
List<Filter> and = new ArrayList<>(_a.size() + _b.size());
and.addAll(_a);
and.addAll(_b);
return ff.and(and);
} else if (a instanceof And) {
List<Filter> _a = ((And) a).getChildren();
List<Filter> and = new ArrayList<>(_a.size() + 1);
and.addAll(_a);
and.add(b);
return ff.and(and);
} else if (b instanceof And) {
List<Filter> _b = ((And) b).getChildren();
List<Filter> and = new ArrayList<>(_b.size() + 1);
and.add(a);
and.addAll(_b);
return ff.and(and);
} else {
return ff.and(a, b);
return ff.and(main, toAppend);
}
}
}

0 comments on commit d2e4bcd

Please sign in to comment.