// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.set.v0_6;
import java.util.Map;
import org.openstreetmap.osmosis.core.container.v0_6.ChangeContainer;
import org.openstreetmap.osmosis.core.container.v0_6.EntityContainer;
import org.openstreetmap.osmosis.core.task.common.ChangeAction;
import org.openstreetmap.osmosis.core.task.v0_6.ChangeSinkSource;
import org.openstreetmap.osmosis.core.task.v0_6.Sink;
/**
* Translates a change stream into a full history stream which is a normal
* entity stream with visible attributes.
*
* @author Brett Henderson
*/
public class ChangeToFullHistoryConvertor implements ChangeSinkSource {
private Sink sink;
/**
* {@inheritDoc}
*/
@Override
public void setSink(Sink sink) {
this.sink = sink;
}
/**
* {@inheritDoc}
*/
public void initialize(Map<String, Object> metaData) {
sink.initialize(metaData);
}
/**
* {@inheritDoc}
*/
@Override
public void process(ChangeContainer change) {
// Deleted entities are not visible, all others are.
boolean visible = (ChangeAction.Delete != change.getAction());
// Set a visible meta-tag on the entity because the Osmosis data model
// doesn't natively support visible.
EntityContainer entityContainer = change.getEntityContainer().getWriteableInstance();
entityContainer.getEntity().getMetaTags().put("visible", visible);
sink.process(entityContainer);
}
/**
* {@inheritDoc}
*/
@Override
public void complete() {
sink.complete();
}
/**
* {@inheritDoc}
*/
@Override
public void close() {
sink.close();
}
}