/* * Copyright (C) 2010. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 or * version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. */ package uk.me.parabola.mkgmap.reader.osm; /** * At the top level we need to be able to watch to see if a result was found * to implement stop-on-first-match, continue and the like. * * @author Steve Ratcliffe */ public class WatchableTypeResult implements TypeResult { private boolean actionsOnly; private boolean found; private boolean continued; private int count; private final TypeResult result; public WatchableTypeResult(TypeResult result) { this.result = result; } public void add(Element el, GType type) { if (type == null) { actionsOnly = true; return; } if (type.isContinueSearch()) continued = true; count++; found = true; result.add(el, type); } /** * Was a result found. * @return True if one or more results were added since the last reset. */ public boolean isFound() { return found; } /** * Are we all done for this element? * @return True if we found a matching type and it did not have the continue * flag set. */ public boolean isResolved() { return found && !continued; } public boolean isActionsOnly() { return actionsOnly; } /** * Reset the watcher for the next element. */ public void reset() { count = 0; actionsOnly = false; continued = false; found = false; } }