Hi Brett, [I tried sending this yesterday with git-send-email but the list doesn't seem to accept, either way sorry if you get a duplicate]
On 30 August 2010 13:15, Brett Henderson <br...@bretth.com> wrote: > I finally got around to checking out your patch. I've just checked it > in. > I changed the name of the task to --flatten or --f for short because I > don't > believe any other tasks have filter in the name. Thanks. I seem to remember there were some but I may be talking about a terribly old version. (tagfilter?) > > I notice that it assumes that data is sorted. Ideally it should utilise > something like the SortedEntityPipeValidator class to ensure that data is > sorted and to throw an error if it isn't. Do you have time to add that > in? The attached diff makes it use SortedEntityPipeValidator, however SortedEntityPipeValidator bails out immediately on multiple objects with the same id so it doesn't work. Possibly I need a new validator, is my thinking correct? I'm sending the patch anyway to see if you're ok with using the validator this way. The reason I didn't add it in the first place was that I generally trust the data I throw at osmosis so don't want to use cycles for testing, I'm missing a way to globally turn off creation of the validators. Each of them adds at least a full function call per entity. Cheers
From d90c93fde4808625100ad18057fb07906ea03d28 Mon Sep 17 00:00:00 2001 From: Andrzej Zaborowski <balr...@gmail.com> Date: Wed, 1 Sep 2010 05:29:58 +0200 Subject: [PATCH] Validate input to --flatten. Hi Brett, On 30 August 2010 13:15, Brett Henderson <br...@bretth.com> wrote: > I finally got around to checking out your patch. I've just checked it > in. > I changed the name of the task to --flatten or --f for short because I > don't > believe any other tasks have filter in the name. Thanks. Is it possible there were "filter" tasks before? I seem to remember there were some but I may be talking about a terribly old version. (tagfilter?) > > I notice that it assumes that data is sorted. Ideally it should utilise > something like the SortedEntityPipeValidator class to ensure that data is > sorted and to throw an error if it isn't. Do you have time to add that > in? The following makes it use SortedEntityPipeValidator, however SortedEntityPipeValidator bails out immediately on multiple objects with the same id so it doesn't work. Possibly I need a new validator, do you want me to add that? I'm sending the patch anyway to see if you're ok with using the validator this way. The reason I didn't add it in the first place was that I generally trust the data I throw at osmosis so don't want to use cycles for testing, I'm missing a way to globally turn off creation of the validators. Each of them adds at least a full function call per entity. Cheers --- .../osmosis/set/v0_6/FlattenFilter.java | 95 ++++++++++---------- 1 files changed, 48 insertions(+), 47 deletions(-) diff --git a/set/src/org/openstreetmap/osmosis/set/v0_6/FlattenFilter.java b/set/src/org/openstreetmap/osmosis/set/v0_6/FlattenFilter.java index e96d6c2..064bff5 100644 --- a/set/src/org/openstreetmap/osmosis/set/v0_6/FlattenFilter.java +++ b/set/src/org/openstreetmap/osmosis/set/v0_6/FlattenFilter.java @@ -5,47 +5,69 @@ import org.openstreetmap.osmosis.core.container.v0_6.BoundContainer; import org.openstreetmap.osmosis.core.container.v0_6.EntityContainer; import org.openstreetmap.osmosis.core.domain.v0_6.Entity; import org.openstreetmap.osmosis.core.task.v0_6.Sink; -import org.openstreetmap.osmosis.core.task.v0_6.SinkSource; +import org.openstreetmap.osmosis.core.sort.v0_6.SortedEntityPipeValidator; /** * Flatten / simplify a sorted entity stream. * (similar to --simplify-change) */ -public class FlattenFilter implements SinkSource { +public class FlattenFilter extends SortedEntityPipeValidator { private Sink sink; private EntityContainer previousContainer; + private Sink flattener = new Sink() { + /** + * Process a node, way or relation. + * + * @param currentContainer + * The entity container to be processed. + */ + @Override + public void process(EntityContainer currentContainer) { + if (previousContainer == null) { + previousContainer = currentContainer; + return; + } - /** - * Creates a new instance. - */ - public FlattenFilter() { - } + Entity current = currentContainer.getEntity(); + Entity previous = previousContainer.getEntity(); - /** - * Process a node, way or relation. - * - * @param currentContainer - * The entity container to be processed. - */ - public void process(EntityContainer currentContainer) { - if (previousContainer == null) { - previousContainer = currentContainer; - return; + if (current.getId() != previous.getId() || + !current.getType().equals(previous.getType())) { + sink.process(previousContainer); + previousContainer = currentContainer; + return; + } + + if (current.getVersion() > previous.getVersion()) + previousContainer = currentContainer; } - Entity current = currentContainer.getEntity(); - Entity previous = previousContainer.getEntity(); + @Override + public void complete() { + /* + * If we've stored entities temporarily, we now need to + * forward the stored ones to the output. + */ + if (previousContainer != null) { + sink.process(previousContainer); + } - if (current.getId() != previous.getId() || !current.getType().equals(previous.getType())) { - sink.process(previousContainer); - previousContainer = currentContainer; - return; + sink.complete(); } - if (current.getVersion() > previous.getVersion()) { - previousContainer = currentContainer; + @Override + public void release() { + sink.release(); } + }; + + /** + * Creates a new instance. + */ + public FlattenFilter() { + super(); + super.setSink(flattener); } /** @@ -62,28 +84,7 @@ public class FlattenFilter implements SinkSource { /** * {...@inheritdoc} */ - public void complete() { - /* - * If we've stored entities temporarily, we now need to - * forward the stored ones to the output. - */ - if (previousContainer != null) { - sink.process(previousContainer); - } - - sink.complete(); - } - - /** - * {...@inheritdoc} - */ - public void release() { - sink.release(); - } - - /** - * {...@inheritdoc} - */ + @Override public void setSink(Sink sink) { this.sink = sink; } -- 1.5.3.4
_______________________________________________ osmosis-dev mailing list osmosis-dev@openstreetmap.org http://lists.openstreetmap.org/listinfo/osmosis-dev