package nbtool.data.log; import java.util.Arrays; import nbtool.util.Utility.Pair; import nbtool.util.SharedConstants; public class LogSearching { public static interface Criteria { public boolean fits(String description); } public static class ContainsCriteria implements Criteria { String[] requires = new String[0]; String[] excludes = new String[0]; public boolean fits(String description) { for (String r : requires) { if (!description.contains(r)) return false; } for (String e : excludes) { if (description.contains(e)) return false; } return true; } public ContainsCriteria require(String ... reqs) { requires = reqs; return this; } public ContainsCriteria exclude(String ... exls) { excludes = exls; return this; } private ContainsCriteria() { } public static ContainsCriteria create() { return new ContainsCriteria(); } } @SuppressWarnings({ "unchecked" }) public static Pair<String, Criteria> retrieve(int i) { return ((Pair<String, Criteria>) CRITERIA[i]); } public static Pair<String, Criteria> checked(int i) { if (i < 0 || i >= CRITERIA.length) return null; else return retrieve(i); } public static Criteria criteriaAt(int i) { Pair<String, Criteria> found = checked(i); return found == null ? null : found.b; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static final Pair[] CRITERIA = { new Pair("all logs", new Criteria(){ @Override public boolean fits(String description) { return true; }}), new Pair("all YUVImages", ContainsCriteria.create().require("camera_", SharedConstants.LOG_BLOCK_IMAGE_WIDTH_PIXELS(), SharedConstants.LOG_BLOCK_IMAGE_HEIGHT_PIXELS())), new Pair("all tripoint", ContainsCriteria.create().require("tripoint")), new Pair("top images", ContainsCriteria.create().require( SharedConstants.LOG_BLOCK_IMAGE_WIDTH_PIXELS(), SharedConstants.LOG_BLOCK_IMAGE_HEIGHT_PIXELS(), "camera_TOP")), new Pair("bottom images", ContainsCriteria.create().require(SharedConstants.LOG_BLOCK_IMAGE_WIDTH_PIXELS(), SharedConstants.LOG_BLOCK_IMAGE_HEIGHT_PIXELS(), "camera_BOT")), new Pair("locswarm logs", ContainsCriteria.create().require("locswarm", "RobotLocation", "ParticleSwarm")) }; }