/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * *************************************************************************************** */ package com.espertech.esper.spatial.quadtree.prqdfilterindex; import com.espertech.esper.spatial.quadtree.core.BoundingBox; import com.espertech.esper.spatial.quadtree.core.QuadTreeCollector; import com.espertech.esper.spatial.quadtree.core.SupportQuadTreeUtil; import com.espertech.esper.spatial.quadtree.pointregion.PointRegionQuadTree; import java.util.*; import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertTrue; public class SupportPointRegionQuadTreeFilterIndexUtil { private static final QuadTreeCollector<String, Map<Integer, String>> MAP_COLLECTOR = (event, s, target) -> { int num = Integer.parseInt(s.substring(1)); if (target.containsKey(num)) { throw new IllegalStateException(); } target.put(num, s); }; private static final QuadTreeCollector<String, Collection<Object>> COLLECTION_COLLECTOR = (event, s, target) -> target.add(s); public final static SupportQuadTreeUtil.Querier<PointRegionQuadTree<Object>> POINTREGION_FI_QUERIER = (tree, x, y, width, height) -> { List<Object> received = new ArrayList<>(); PointRegionQuadTreeFilterIndexCollect.collectRange(tree, x, y, width, height, null, received, COLLECTION_COLLECTOR); return received.isEmpty() ? null : received; }; public final static SupportQuadTreeUtil.AdderUnique<PointRegionQuadTree<Object>> POINTREGION_FI_ADDERUNIQUE = (tree, value) -> set(tree, value.getX(), value.getY(), value.getId()); public final static SupportQuadTreeUtil.Remover<PointRegionQuadTree<Object>> POINTREGION_FI_REMOVER = (tree, value) -> delete(tree, value.getX(), value.getY()); protected static void set(PointRegionQuadTree<Object> quadTree, double x, double y, String value) { PointRegionQuadTreeFilterIndexSet.set(x, y, value, quadTree); } protected static void delete(PointRegionQuadTree<Object> tree, double x, double y) { PointRegionQuadTreeFilterIndexDelete.delete(x, y, tree); } static void assertCollectAll(PointRegionQuadTree<Object> tree, String expected) { BoundingBox bb = tree.getRoot().getBb(); assertCollect(tree, bb.getMinX(), bb.getMinY(), bb.getMaxX() - bb.getMinX(), bb.getMaxY() - bb.getMinY(), expected); assertEquals(expected.length() == 0 ? 0 : expected.split(",").length, PointRegionQuadTreeFilterIndexCount.count(tree)); assertEquals(expected.length() == 0, PointRegionQuadTreeFilterIndexEmpty.isEmpty(tree)); } static void assertCollect(PointRegionQuadTree<Object> tree, double x, double y, double width, double height, String expected) { Map<Integer, String> received = new TreeMap<>(); PointRegionQuadTreeFilterIndexCollect.collectRange(tree, x, y, width, height, null, received, MAP_COLLECTOR); assertCompare(tree, expected, received); } private static void assertCompare(PointRegionQuadTree<Object> tree, String expected, Map<Integer, String> received) { StringJoiner joiner = new StringJoiner(","); for (String value : received.values()) { joiner.add(value); } assertEquals(expected, joiner.toString()); assertTrue((expected.length() == 0 ? 0 : expected.split(",").length) <= PointRegionQuadTreeFilterIndexCount.count(tree)); } protected static void compare(double x, double y, String expected, XYPointWValue<String> point) { assertEquals(x, point.getX()); assertEquals(y, point.getY()); assertEquals(expected, point.getValue()); } }