// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.core.container.v0_6;
import org.openstreetmap.osmosis.core.domain.v0_6.EntityBuilder;
import org.openstreetmap.osmosis.core.domain.v0_6.NodeBuilder;
import org.openstreetmap.osmosis.core.domain.v0_6.RelationBuilder;
import org.openstreetmap.osmosis.core.domain.v0_6.WayBuilder;
import org.openstreetmap.osmosis.core.task.v0_6.Sink;
import org.openstreetmap.osmosis.core.task.v0_6.Source;
/**
* Provides a mechanism to manipulate entities without directly manipulating and instantiating their
* containers. This class does nothing by default, sub-classes must override methods to add their
* own functionality
*
* @author Brett Henderson
*
* @deprecated The builder classes are not required because entities are now writeable.
*/
@Deprecated
public class EntityContainerBuilder implements EntityProcessor, Source {
private Sink sink;
private NodeBuilder nodeBuilder;
private WayBuilder wayBuilder;
private RelationBuilder relationBuilder;
/**
* Creates a new instance.
*/
public EntityContainerBuilder() {
nodeBuilder = new NodeBuilder();
wayBuilder = new WayBuilder();
relationBuilder = new RelationBuilder();
}
/**
* Performs generic entity processing. This should be overridden by
* implementations wishing to perform generic entity processing.
*
* @param builder
* The entity builder to be processed.
* @return True if modifications were made to the entity builder during
* processing.
*/
protected boolean processEntity(EntityBuilder<?> builder) {
return false;
}
/**
* Performs node specific processing. This should be overridden by
* implementations wishing to perform node processing.
*
* @param entityBuilder
* The entity builder to be processed.
* @return True if modifications were made to the entity builder during
* processing.
*/
protected boolean processNode(NodeBuilder entityBuilder) {
return false;
}
/**
* Performs way specific processing. This should be overridden by
* implementations wishing to perform way processing.
*
* @param entityBuilder
* The entity builder to be processed.
* @return True if modifications were made to the entity builder during
* processing.
*/
protected boolean processWay(WayBuilder entityBuilder) {
return false;
}
/**
* Performs relation specific processing. This should be overridden by
* implementations wishing to perform relation processing.
*
* @param entityBuilder
* The entity builder to be processed.
* @return True if modifications were made to the entity builder during
* processing.
*/
protected boolean processRelation(RelationBuilder entityBuilder) {
return false;
}
/**
* {@inheritDoc}
*/
@Override
public void process(BoundContainer boundContainer) {
sink.process(boundContainer);
}
/**
* {@inheritDoc}
*/
@Override
public void process(NodeContainer nodeContainer) {
boolean modified;
nodeBuilder.initialize(nodeContainer.getEntity());
modified = false;
modified = modified || processEntity(nodeBuilder);
modified = modified || processNode(nodeBuilder);
if (modified) {
sink.process(new NodeContainer(nodeBuilder.buildEntity()));
} else {
sink.process(nodeContainer);
}
}
/**
* {@inheritDoc}
*/
@Override
public void process(WayContainer wayContainer) {
boolean modified;
wayBuilder.initialize(wayContainer.getEntity());
modified = false;
modified = modified || processEntity(wayBuilder);
modified = modified || processWay(wayBuilder);
if (modified) {
sink.process(new WayContainer(wayBuilder.buildEntity()));
} else {
sink.process(wayContainer);
}
}
/**
* {@inheritDoc}
*/
@Override
public void process(RelationContainer relationContainer) {
boolean modified;
relationBuilder.initialize(relationContainer.getEntity());
modified = false;
modified = modified || processEntity(relationBuilder);
modified = modified || processRelation(relationBuilder);
if (modified) {
sink.process(new RelationContainer(relationBuilder.buildEntity()));
} else {
sink.process(relationContainer);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setSink(Sink sink) {
this.sink = sink;
}
}