package mil.nga.giat.geowave.analytic.clustering;
import java.io.IOException;
import java.util.List;
import mil.nga.giat.geowave.analytic.AnalyticItemWrapper;
import mil.nga.giat.geowave.analytic.clustering.exception.MatchingCentroidNotFoundException;
import mil.nga.giat.geowave.core.index.ByteArrayId;
import com.vividsolutions.jts.geom.Coordinate;
/**
* Manage centroids created per batch and per group of analytic processes. There
* can be multiple groups per batch. A group is loosely interpreted as a set of
* item geometries under analysis. The sets can be defined by shared
* characteristics.
*
* @param <T>
* The type of item that is used to represent a centroid.
*/
public interface CentroidManager<T>
{
/**
* Creates a new centroid based on the old centroid with new coordinates and
* dimension values
*
* @param feature
* @param coordinate
* @param extraNames
* @param extraValues
* @return
*/
public AnalyticItemWrapper<T> createNextCentroid(
final T feature,
final String groupID,
final Coordinate coordinate,
final String[] extraNames,
final double[] extraValues );
public AnalyticItemWrapper<T> getCentroidById(
final String id,
final String groupID )
throws IOException,
MatchingCentroidNotFoundException;
public void delete(
final String[] dataIds )
throws IOException;
public List<String> getAllCentroidGroups()
throws IOException;
public List<AnalyticItemWrapper<T>> getCentroidsForGroup(
final String groupID )
throws IOException;
public List<AnalyticItemWrapper<T>> getCentroidsForGroup(
final String batchID,
final String groupID )
throws IOException;
public int processForAllGroups(
CentroidProcessingFn<T> fn )
throws IOException;
public static interface CentroidProcessingFn<T>
{
public int processGroup(
final String groupID,
final List<AnalyticItemWrapper<T>> centroids );
}
public AnalyticItemWrapper<T> getCentroid(
final String id );
public void clear();
public ByteArrayId getDataTypeId();
public ByteArrayId getIndexId();
}