/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. The ASF licenses this file to You * under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. For additional information regarding * copyright in this work, please see the NOTICE file in the top level * directory of this distribution. */ package org.apache.usergrid.persistence.index.query.tree; import org.antlr.runtime.Token; /** * A base class for any equality expression. Expressions must have a property and a value. Examples are >=, >, =, <, * <=, * * @author tnine */ public abstract class EqualityOperand extends Operand { /** * @param property * @param literal */ public EqualityOperand( Token t ) { super( t ); } public EqualityOperand( String propName, Literal<?> value ) { super( null ); } /** Set the property on this operand */ public void setProperty( String name ) { setAtIndex( 0, newProperty( name ) ); } /** Get the property to set into the equality. Allows subclasses to override the type */ protected Property newProperty( String name ) { return new Property( name ); } /** Set the literal on this operand from the given value */ public void setLiteral( Object value ) { setAtIndex( 1, LiteralFactory.getLiteral( value ) ); } /** Set the child at the specified index. If it doesn't exist, it's added until it does */ @SuppressWarnings("unchecked") private void setAtIndex( int index, Literal<?> value ) { if ( children == null ) { children = createChildrenList(); } while ( children.size() - 1 < index ) { children.add( null ); } setChild( index, value ); } /** @return the property */ public Property getProperty() { return ( Property ) this.children.get( 0 ); } /** @return the literal */ public Literal<?> getLiteral() { return ( Literal<?> ) this.children.get( 1 ); } }