View Javadoc

1   /*
2    * Copyright 2011 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 1.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl1.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.core.api.criteria;
17  
18  import org.kuali.rice.core.api.CoreConstants;
19  import org.w3c.dom.Element;
20  
21  import javax.xml.bind.annotation.XmlAccessType;
22  import javax.xml.bind.annotation.XmlAccessorType;
23  import javax.xml.bind.annotation.XmlAnyElement;
24  import javax.xml.bind.annotation.XmlAttribute;
25  import javax.xml.bind.annotation.XmlElement;
26  import javax.xml.bind.annotation.XmlElements;
27  import javax.xml.bind.annotation.XmlRootElement;
28  import javax.xml.bind.annotation.XmlType;
29  import java.util.Collection;
30  
31  /**
32   * An immutable predicate which represents a "not equal" statement which is
33   * evaluated the {@link CriteriaValue} of this predicate.
34   * 
35   * @see PredicateFactory for a convenient way to construct this class.
36   * 
37   * @author Kuali Rice Team (rice.collab@kuali.org)
38   *
39   */
40  @XmlRootElement(name = NotEqualPredicate.Constants.ROOT_ELEMENT_NAME)
41  @XmlAccessorType(XmlAccessType.NONE)
42  @XmlType(name = NotEqualPredicate.Constants.TYPE_NAME, propOrder = {
43      CriteriaSupportUtils.PropertyConstants.VALUE,
44      CoreConstants.CommonElements.FUTURE_ELEMENTS
45  })
46  public final class NotEqualPredicate extends AbstractPredicate implements SingleValuedPredicate {
47  	
48  	private static final long serialVersionUID = 7159459561133496549L;
49  	
50  	@XmlAttribute(name = CriteriaSupportUtils.PropertyConstants.PROPERTY_PATH)
51  	private final String propertyPath;
52  
53  	@XmlElements(value = {
54      		@XmlElement(name = CriteriaStringValue.Constants.ROOT_ELEMENT_NAME, type = CriteriaStringValue.class, required = true),
55      		@XmlElement(name = CriteriaDateTimeValue.Constants.ROOT_ELEMENT_NAME, type = CriteriaDateTimeValue.class, required = true),
56      		@XmlElement(name = CriteriaDecimalValue.Constants.ROOT_ELEMENT_NAME, type = CriteriaDecimalValue.class, required = true),
57      		@XmlElement(name = CriteriaIntegerValue.Constants.ROOT_ELEMENT_NAME, type = CriteriaIntegerValue.class, required = true)
58      })
59  	private final CriteriaValue<?> value;
60  
61      @SuppressWarnings("unused")
62      @XmlAnyElement
63      private final Collection<Element> _futureElements = null;
64  
65      /**
66       * Should only be invoked by JAXB.
67       */
68      @SuppressWarnings("unused")
69      private NotEqualPredicate() {
70          this.propertyPath = null;
71          this.value = null;
72      }
73      
74      /**
75  	 * Constructs a NotEqualPredicate for the given path and value.  NotEqualPredicate supports the following {@link CriteriaValue}:
76  	 * 
77  	 * <ul>
78  	 *   <li>{@link CriteriaStringValue}</li>
79  	 *   <li>{@link CriteriaDateTimeValue}</li>
80  	 *   <li>{@link CriteriaDecimalValue}</li>
81  	 *   <li>{@link CriteriaIntegerValue}</li>
82  	 * </ul>
83  	 * 
84  	 * @param propertyPath the property path for the predicate, must not be null or blank
85  	 * @param value the value to evaluation the path against, must not be null.
86  	 * 
87  	 * @throws IllegalArgumentException if the propertyPath is null or blank
88  	 * @throws IllegalArgumentException if the value is null
89  	 * @throws IllegalArgumentException if this predicate does not support the given type of {@link CriteriaValue}
90  	 */
91      NotEqualPredicate(String propertyPath, CriteriaValue<?> value) {
92      	CriteriaSupportUtils.validateValuedConstruction(getClass(), propertyPath, value);
93  		this.propertyPath = propertyPath;
94  		this.value = value;
95      }
96          
97      @Override
98      public String getPropertyPath() {
99      	return propertyPath;
100     }
101     
102 	@Override
103 	public CriteriaValue<?> getValue() {
104 		return value;
105 	}
106     
107 	/**
108      * Defines some internal constants used on this class.
109      */
110     static class Constants {
111         final static String ROOT_ELEMENT_NAME = "notEqual";
112         final static String TYPE_NAME = "NotEqualType";
113     }
114 
115     @Override
116     public String toString() {
117         return CriteriaSupportUtils.toString(this);
118     }
119 }