01: package it.unimi.dsi.mg4j.index.payload;
02:
03: /*
04: * MG4J: Managing Gigabytes for Java
05: *
06: * Copyright (C) 2007 Paolo Boldi and Sebastiano Vigna
07: *
08: * This library is free software; you can redistribute it and/or modify it
09: * under the terms of the GNU Lesser General Public License as published by the Free
10: * Software Foundation; either version 2.1 of the License, or (at your option)
11: * any later version.
12: *
13: * This library is distributed in the hope that it will be useful, but
14: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
16: * for more details.
17: *
18: * You should have received a copy of the GNU Lesser General Public License
19: * along with this program; if not, write to the Free Software
20: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21: *
22: */
23:
24: import org.apache.commons.collections.Predicate;
25:
26: /** An abstract payload.
27: *
28: * <p>The main responsibility of this class is that of implementing {@link #rangeFilter(Payload, Payload)}
29: * using the {@link Comparable} methods.
30: */
31:
32: public abstract class AbstractPayload implements Payload {
33:
34: protected final class ComparatorPayloadPredicate implements
35: Predicate {
36: private final Payload left;
37: private final Payload right;
38:
39: protected ComparatorPayloadPredicate(final Payload left,
40: final Payload right) {
41: this .left = left == null ? null : left.copy();
42: this .right = right == null ? null : right.copy();
43: }
44:
45: public boolean evaluate(final Object payload) {
46: return (left == null || left.compareTo((Payload) payload) <= 0)
47: && (right == null || right
48: .compareTo((Payload) payload) >= 0);
49: }
50:
51: public String toString() {
52: return "[" + (left != null ? left : "\u221e") + ".."
53: + (right != null ? right : "-\u221e") + "]";
54: }
55: }
56:
57: public ComparatorPayloadPredicate rangeFilter(Payload left,
58: Payload right) {
59: return new ComparatorPayloadPredicate(left, right);
60: }
61: }
|