Package org.openstreetmap.osmosis.core.sort.v0_6

Source Code of org.openstreetmap.osmosis.core.sort.v0_6.EntitySorter

// This software is released into the Public Domain.  See copying.txt for details.
package org.openstreetmap.osmosis.core.sort.v0_6;

import java.util.Comparator;
import java.util.Map;

import org.openstreetmap.osmosis.core.container.v0_6.EntityContainer;
import org.openstreetmap.osmosis.core.lifecycle.ReleasableIterator;
import org.openstreetmap.osmosis.core.sort.common.FileBasedSort;
import org.openstreetmap.osmosis.core.store.GenericObjectSerializationFactory;
import org.openstreetmap.osmosis.core.task.v0_6.Sink;
import org.openstreetmap.osmosis.core.task.v0_6.SinkSource;


/**
* A data stream filter that sorts entities. The sort order is specified by
* comparator provided during instantiation.
*
* @author Brett Henderson
*/
public class EntitySorter implements SinkSource {
  private FileBasedSort<EntityContainer> fileBasedSort;
  private Sink sink;
 
 
  /**
   * Creates a new instance.
   *
   * @param comparator
   *            The comparator to use for sorting.
   */
  public EntitySorter(Comparator<EntityContainer> comparator) {
    fileBasedSort = new FileBasedSort<EntityContainer>(new GenericObjectSerializationFactory(), comparator, true);
  }


  /**
   * {@inheritDoc}
   */
  public void initialize(Map<String, Object> metaData) {
    sink.initialize(metaData);
  }
 
 
  /**
   * {@inheritDoc}
   */
  public void process(EntityContainer entityContainer) {
    fileBasedSort.add(entityContainer);
  }
 
 
  /**
   * {@inheritDoc}
   */
  public void setSink(Sink sink) {
    this.sink = sink;
  }
 
 
  /**
   * {@inheritDoc}
   */
  public void complete() {
    ReleasableIterator<EntityContainer> iterator = null;
   
    try {
      iterator = fileBasedSort.iterate();
     
      while (iterator.hasNext()) {
        sink.process(iterator.next());
      }
     
      sink.complete();
    } finally {
      if (iterator != null) {
        iterator.release();
      }
    }
  }
 
 
  /**
   * {@inheritDoc}
   */
  public void release() {
    fileBasedSort.release();
    sink.release();
  }
}
TOP

Related Classes of org.openstreetmap.osmosis.core.sort.v0_6.EntitySorter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.