1 /*
2 * ModeShape (http://www.modeshape.org)
3 * See the COPYRIGHT.txt file distributed with this work for information
4 * regarding copyright ownership. Some portions may be licensed
5 * to Red Hat, Inc. under one or more contributor license agreements.
6 * See the AUTHORS.txt file in the distribution for a full listing of
7 * individual contributors.
8 *
9 * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
10 * is licensed to you under the terms of the GNU Lesser General Public License as
11 * published by the Free Software Foundation; either version 2.1 of
12 * the License, or (at your option) any later version.
13 *
14 * ModeShape is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this software; if not, write to the Free
21 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
23 */
24 package org.modeshape.graph.query.model;
25
26 import java.util.Set;
27 import net.jcip.annotations.Immutable;
28
29 /**
30 * A dynamic operand used in a {@link Comparison} constraint.
31 */
32 @Immutable
33 public interface DynamicOperand extends LanguageObject {
34 // private static final long serialVersionUID = 1L;
35 //
36 // private final Set<SelectorName> selectorNames;
37 //
38 // /**
39 // * Create a arithmetic dynamic operand that operates upon the supplied selector name(s).
40 // *
41 // * @param selectorNames the selector names
42 // * @throws IllegalArgumentException if the selector names array is null or empty, or if any of the values are null
43 // */
44 // protected DynamicOperand( SelectorName... selectorNames ) {
45 // CheckArg.isNotNull(selectorNames, "selectorNames");
46 // if (selectorNames.length == 1) {
47 // CheckArg.isNotNull(selectorNames, "selectorNames[0]");
48 // this.selectorNames = Collections.singleton(selectorNames[0]);
49 // } else {
50 // CheckArg.isNotNull(selectorNames, "selectorNames[0]");
51 // this.selectorNames = Collections.unmodifiableSet(new LinkedHashSet<SelectorName>(Arrays.asList(selectorNames)));
52 // int i = 0;
53 // for (SelectorName name : this.selectorNames) {
54 // CheckArg.isNotNull(name, "selectorNames[" + i++ + "]");
55 // }
56 // }
57 // }
58 //
59 // /**
60 // * Create a arithmetic dynamic operand that operates upon the supplied selector name(s).
61 // *
62 // * @param selectorNames the selector names
63 // * @throws IllegalArgumentException if the name list is null or empty, or if any of the values are null
64 // */
65 // protected DynamicOperand( Collection<SelectorName> selectorNames ) {
66 // CheckArg.isNotNull(selectorNames, "selectorName");
67 // this.selectorNames = Collections.unmodifiableSet(new LinkedHashSet<SelectorName>(selectorNames));
68 // }
69 //
70 // /**
71 // * Create a arithmetic dynamic operand that operates upon the selector names given by the supplied dynamic operand(s).
72 // *
73 // * @param operand the operand defining the selector names
74 // * @throws IllegalArgumentException if the operand is null
75 // */
76 // protected DynamicOperand( DynamicOperand operand ) {
77 // CheckArg.isNotNull(operand, "operand");
78 // this.selectorNames = operand.selectorNames(); // immutable, so we can reference it directly
79 // }
80 //
81 // /**
82 // * Create a arithmetic dynamic operand that operates upon the selector names given by the supplied dynamic operand(s).
83 // *
84 // * @param operands the operands defining the selector names
85 // * @throws IllegalArgumentException if the operand is null
86 // */
87 // protected DynamicOperand( Iterable<? extends DynamicOperand> operands ) {
88 // CheckArg.isNotNull(operands, "operands");
89 // Set<SelectorName> names = new LinkedHashSet<SelectorName>();
90 // for (DynamicOperand operand : operands) {
91 // names.addAll(operand.selectorNames());
92 // }
93 // this.selectorNames = Collections.unmodifiableSet(names);
94 // }
95 //
96 // /**
97 // * Create a arithmetic dynamic operand that operates upon the selector names given by the supplied dynamic operand(s).
98 // *
99 // * @param operands the operands defining the selector names
100 // * @throws IllegalArgumentException if the operand is null
101 // */
102 // protected DynamicOperand( DynamicOperand... operands ) {
103 // CheckArg.isNotNull(operands, "operands");
104 // Set<SelectorName> names = new LinkedHashSet<SelectorName>();
105 // for (DynamicOperand operand : operands) {
106 // names.addAll(operand.selectorNames());
107 // }
108 // this.selectorNames = Collections.unmodifiableSet(names);
109 // }
110
111 /**
112 * Get the selector symbols to which this operand applies.
113 *
114 * @return the immutable ordered set of non-null selector names used by this operand; never null and never empty
115 */
116 public Set<SelectorName> selectorNames();
117 }