/* *************************************************************************************** * 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.mxciffilterindex; 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.mxcif.MXCIFQuadTree; import com.espertech.esper.spatial.quadtree.mxcifrowindex.MXCIFQuadTreeRowIndexAdd; import java.util.*; import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertTrue; public class SupportMXCIFQuadTreeFilterIndexUtil { private static final QuadTreeCollector<String, Collection<Object>> COLLECTION_COLLECTOR = (event, s, target) -> target.add(s); 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); }; public final static SupportQuadTreeUtil.Querier<MXCIFQuadTree<Object>> MXCIF_FI_QUERIER = (tree, x, y, width, height) -> { List<Object> received = new ArrayList<>(); MXCIFQuadTreeFilterIndexCollect.collectRange(tree, x, y, width, height, null, received, COLLECTION_COLLECTOR); // Comment-me-in: System.out.println("// query(tree, " + x + ", " + y + ", " + width + ", " + height + "); --> " + received); return received.isEmpty() ? null : received; }; public final static SupportQuadTreeUtil.AdderUnique<MXCIFQuadTree<Object>> MXCIF_FI_ADDER = (tree, value) -> set(value.getX(), value.getY(), value.getW(), value.getH(), value.getId(), tree); public final static SupportQuadTreeUtil.Remover<MXCIFQuadTree<Object>> MXCIF_FI_REMOVER = (tree, value) -> MXCIFQuadTreeFilterIndexDelete.delete(value.getX(), value.getY(), value.getW(), value.getH(), tree); public static void set(double x, double y, double width, double height, String value, MXCIFQuadTree<Object> tree) { // Comment-me-in: System.out.println("set(" + x + ", " + y + ", " + width + ", " + height + ", \"" + value + "\", tree);"); MXCIFQuadTreeFilterIndexSet.set(x, y, width, height, value, tree); } static void assertCollectAll(MXCIFQuadTree<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, MXCIFQuadTreeFilterIndexCount.count(tree)); assertEquals(expected.length() == 0, MXCIFQuadTreeFilterIndexEmpty.isEmpty(tree)); } static void assertCollect(MXCIFQuadTree<Object> tree, double x, double y, double width, double height, String expected) { Map<Integer, String> received = new TreeMap<>(); MXCIFQuadTreeFilterIndexCollect.collectRange(tree, x, y, width, height, null, received, MAP_COLLECTOR); assertCompare(tree, expected, received); } private static void assertCompare(MXCIFQuadTree<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) <= MXCIFQuadTreeFilterIndexCount.count(tree)); } protected static void compare(double x, double y, double width, double height, String expected, XYWHRectangleWValue<String> rectangle) { assertEquals(x, rectangle.getX()); assertEquals(y, rectangle.getY()); assertEquals(width, rectangle.getW()); assertEquals(height, rectangle.getH()); assertEquals(expected, rectangle.getValue()); } }