001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.rules.constraint; 017 018 import org.springframework.rules.closure.BinaryConstraint; 019 020 /** 021 * Type-safe enum class for supported binary operators. 022 * 023 * @author Keith Donald 024 */ 025 public abstract class RelationalOperator extends Operator { 026 027 /** 028 * The <code>EQUAL_TO (==)</code> operator 029 */ 030 public static final RelationalOperator EQUAL_TO = new RelationalOperator( 031 "eq", "=") { 032 public BinaryConstraint getConstraint() { 033 return EqualTo.instance(); 034 } 035 }; 036 037 /** 038 * The <code>LESS_THAN (<)</code> operator 039 */ 040 public static final RelationalOperator LESS_THAN = new RelationalOperator( 041 "lt", "<") { 042 public Operator negation() { 043 return GREATER_THAN; 044 } 045 046 public BinaryConstraint getConstraint() { 047 return LessThan.instance(); 048 } 049 }; 050 051 /** 052 * The <code>LESS_THAN_EQUAL_TO (<=)</code> operator 053 */ 054 public static final RelationalOperator LESS_THAN_EQUAL_TO = new RelationalOperator( 055 "lte", "<=") { 056 public Operator negation() { 057 return GREATER_THAN_EQUAL_TO; 058 } 059 060 public BinaryConstraint getConstraint() { 061 return LessThanEqualTo.instance(); 062 } 063 }; 064 065 /** 066 * The <code>GREATER_THAN (>)</code> operator 067 */ 068 public static final RelationalOperator GREATER_THAN = new RelationalOperator( 069 "gt", ">") { 070 public Operator negation() { 071 return LESS_THAN; 072 } 073 074 public BinaryConstraint getConstraint() { 075 return GreaterThan.instance(); 076 } 077 }; 078 079 /** 080 * The <code>GREATER_THAN_EQUAL_TO (>=)</code> operator 081 */ 082 public static final RelationalOperator GREATER_THAN_EQUAL_TO = new RelationalOperator( 083 "gte", ">=") { 084 public Operator negation() { 085 return LESS_THAN_EQUAL_TO; 086 } 087 088 public BinaryConstraint getConstraint() { 089 return GreaterThanEqualTo.instance(); 090 } 091 }; 092 093 private RelationalOperator(String code, String symbol) { 094 super(code, symbol); 095 } 096 097 /** 098 * Returns the predicate instance associated with this binary operator. 099 * 100 * @return the associated binary predicate 101 */ 102 public abstract BinaryConstraint getConstraint(); 103 104 }