/*
* 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;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import uk.me.parabola.imgfmt.app.Coord;
import uk.me.parabola.util.EnhancedProperties;
/**
* A single class that holds several {@link OsmReadingHooks} and calls them in
* order.
*
* It implements {@link OsmReadingHooks} itself.
*
* @author Steve Ratcliffe
*/
public class OsmReadingHooksChain implements OsmReadingHooks {
private static final OsmReadingHooks[] NO_HOOKS = new OsmReadingHooks[0];
private OsmReadingHooks[] readingHooks = NO_HOOKS;
/**
* Add a new set of hooks.
* @param hooks The reading hooks.
*/
public void add(OsmReadingHooks hooks) {
List<OsmReadingHooks> readingHooksList = new ArrayList<OsmReadingHooks>(Arrays.asList(readingHooks));
readingHooksList.add(hooks);
readingHooks = readingHooksList.toArray(new OsmReadingHooks[readingHooksList.size()]);
}
public Set<String> getUsedTags() {
HashSet<String> usedTags = new HashSet<String>();
for (int i = 0; i < readingHooks.length; i++)
usedTags.addAll(readingHooks[i].getUsedTags());
return usedTags;
}
public boolean init(ElementSaver saver, EnhancedProperties props) {
for (int i = 0; i < readingHooks.length; i++)
readingHooks[i].init(saver, props);
return true;
}
public void onAddNode(Node node) {
for (int i = 0; i < readingHooks.length; i++)
readingHooks[i].onAddNode(node);
}
public void onCoordAddedToWay(Way way, long coordId, Coord co) {
for (int i = 0; i < readingHooks.length; i++)
readingHooks[i].onCoordAddedToWay(way, coordId, co);
}
public void onAddWay(Way way) {
for (int i = 0; i < readingHooks.length; i++)
readingHooks[i].onAddWay(way);
}
public void end() {
for (int i = 0; i < readingHooks.length; i++)
readingHooks[i].end();
}
}