1 package net.obsearch.pivots;
2
3 import net.obsearch.Index;
4 import net.obsearch.OB;
5 import net.obsearch.exception.OBException;
6 import net.obsearch.exception.OBStorageException;
7 import net.obsearch.exception.PivotsUnavailableException;
8
9 import cern.colt.list.IntArrayList;
10 import cern.colt.list.LongArrayList;
11
12 /*
13 OBSearch: a distributed similarity search engine This project is to
14 similarity search what 'bit-torrent' is to downloads.
15 Copyright (C) 2008 Arnoldo Jose Muller Molina
16
17 This program is free software: you can redistribute it and/or modify
18 it under the terms of the GNU General Public License as published by
19 the Free Software Foundation, either version 3 of the License, or
20 (at your option) any later version.
21
22 This program is distributed in the hope that it will be useful,
23 but WITHOUT ANY WARRANTY; without even the implied warranty of
24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 GNU General Public License for more details.
26
27 You should have received a copy of the GNU General Public License
28 along with this program. If not, see <http://www.gnu.org/licenses/>.
29 */
30
31 /**
32 * Objects that implement the IncrementalPivotSelector interface are expected to
33 * take objects from a) all the database, b) a subset of the database. The pivot
34 * selector should return a list with all the objects that will be pivots.
35 *
36 * @author Arnoldo Jose Muller Molina
37 */
38 // TODO unify IncrementalPivotSelector and PivotSelector, find common
39 // functionality and create a better interface.
40 public interface IncrementalPivotSelector<O extends OB> {
41
42 /**
43 * Generates pivots from all the elements found in the DB.
44 * @param pivotCount The # of pivots that will be generated.
45 * @return A list of the ids of the pivots.
46 * @throws OBStorageException
47 * If something goes wrong with the DB
48 * @throws OBException
49 * User generated exception
50 * @throws IllegalAccessException
51 * If there is a problem when instantiating objects O
52 * @throws InstantiationException
53 * If there is a problem when instantiating objects O
54 * @throws PivotsUnavailableException
55 * If not all the pivots requested were found.
56 */
57 PivotResult generatePivots(int pivotCount, Index<O> index) throws OBException,
58 IllegalAccessException, InstantiationException, OBStorageException,
59 PivotsUnavailableException;
60
61 /**
62 * Generates pivots from the elements (object ids) given in the array elements.
63 * Generates pivotsCount pivots.
64 * @param pivotCount
65 * @param elements
66 * @return A list of the ids of the pivots.
67 */
68 PivotResult generatePivots(int pivotCount, LongArrayList elements, Index<O> index) throws OBException,
69 IllegalAccessException, InstantiationException, OBStorageException,
70 PivotsUnavailableException;
71
72
73 }