01: /*
02: * Copyright (c) 2004-2005, Hewlett-Packard Company and Massachusetts
03: * Institute of Technology. All rights reserved.
04: *
05: * Redistribution and use in source and binary forms, with or without
06: * modification, are permitted provided that the following conditions are
07: * met:
08: *
09: * - Redistributions of source code must retain the above copyright
10: * notice, this list of conditions and the following disclaimer.
11: *
12: * - Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: *
16: * - Neither the name of the Hewlett-Packard Company nor the name of the
17: * Massachusetts Institute of Technology nor the names of their
18: * contributors may be used to endorse or promote products derived from
19: * this software without specific prior written permission.
20: *
21: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25: * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27: * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28: * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
29: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
30: * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
31: * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
32: * DAMAGE.
33: */
34: package org.dspace.checker;
35:
36: import java.util.Date;
37:
38: /**
39: * <p>
40: * A delegating dispatcher that puts a time limit on the operation of another
41: * dispatcher.
42: * </p>
43: *
44: * <p>
45: * Unit testing this class would be possible by abstracting the system time into
46: * an abstract clock. We decided this was not worth the candle.
47: * </p>
48: *
49: * @author Jim Downing
50: * @author Grace Carpenter
51: * @author Nathan Sarr
52: *
53: */
54: public class LimitedDurationDispatcher implements BitstreamDispatcher {
55: /**
56: * The delegate dispatcher that will actually dispatch the jobs.
57: */
58: private BitstreamDispatcher delegate;
59:
60: /**
61: * Milliseconds since epoch after which this dispatcher will stop returning
62: * values.
63: */
64: private long end;
65:
66: /**
67: * Blanked off constructor - do not use.
68: */
69: private LimitedDurationDispatcher() {
70: end = 0L;
71: delegate = null;
72: }
73:
74: /**
75: * Main constructor.
76: *
77: * @param dispatcher
78: * Delegate dispatcher that will do the heavy lifting of the
79: * dispatching work.
80: * @param endTime
81: * when this dispatcher will stop returning valid bitstream ids.
82: */
83: public LimitedDurationDispatcher(BitstreamDispatcher dispatcher,
84: Date endTime) {
85: delegate = dispatcher;
86: end = endTime.getTime();
87: }
88:
89: /**
90: * @see org.dspace.checker.BitstreamDispatcher#next()
91: */
92: public int next() {
93: return (System.currentTimeMillis() > end) ? SENTINEL : delegate
94: .next();
95: }
96: }
|