01: /*
02: * <copyright>
03: *
04: * Copyright 1997-2004 BBNT Solutions, LLC
05: * under sponsorship of the Defense Advanced Research Projects
06: * Agency (DARPA).
07: *
08: * You can redistribute this software and/or modify it under the
09: * terms of the Cougaar Open Source License as published on the
10: * Cougaar Open Source Website (www.cougaar.org).
11: *
12: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
13: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
14: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
15: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
16: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: *
24: * </copyright>
25: */
26:
27: package org.cougaar.lib.contract.lang.op.list;
28:
29: import java.lang.reflect.Array;
30: import java.util.*;
31:
32: import org.cougaar.lib.contract.lang.*;
33: import org.cougaar.lib.contract.lang.op.OpCodes;
34:
35: /**
36: * "empty" <code>Op</code> -- returns true if List is null or
37: * has size of zero.
38: **/
39: public final class EmptyOp extends OpImpl {
40:
41: public static final Op singleInstance = new EmptyOp();
42:
43: public int expected_id;
44:
45: private EmptyOp() {
46: }
47:
48: public final int getID() {
49: return OpCodes.EMPTY_ID;
50: }
51:
52: public final Op parse(final OpParser p) throws ParseException {
53: // get expected list type
54: expected_id = TypeHelper.getExpectedId(p, false);
55: if (expected_id == TypeHelper.EXPECT_UNKNOWN) {
56: throw new ParseException("\"" + OpCodes.EMPTY_NAME
57: + "\" unable to determine Array/Collection "
58: + "type from " + p.getTypeList());
59: }
60:
61: Op u1 = p.nextOp();
62: if (u1 != null) {
63: throw new ParseException("\"" + OpCodes.EMPTY_NAME
64: + "\" expecting zero arguments, but given "
65: + u1.getClass().toString());
66: }
67:
68: // (empty)
69: return this ;
70: }
71:
72: public final boolean execute(final Object o) {
73: if (o == null) {
74: return true;
75: } else {
76: switch (expected_id) {
77: case TypeHelper.EXPECT_ARRAY:
78: return (Array.getLength(o) <= 0);
79: case TypeHelper.EXPECT_LIST:
80: return (((List) o).size() <= 0);
81: case TypeHelper.EXPECT_COLLECTION:
82: return (((Collection) o).size() <= 0);
83: case TypeHelper.EXPECT_ITERATOR:
84: return (!(((Iterator) o).hasNext()));
85: case TypeHelper.EXPECT_ENUMERATION:
86: return (!(((Enumeration) o).hasMoreElements()));
87: default:
88: throw new InternalError("\"" + OpCodes.EMPTY_NAME
89: + "\" invalid expected_id: " + expected_id);
90: }
91: }
92: }
93:
94: public final void accept(TreeVisitor visitor) {
95: // (empty)
96: visitor.visitWord(OpCodes.EMPTY_NAME);
97: visitor.visitEnd();
98: }
99: }
|