EqualPredicate.java
01 /*
02  *  Constraint Predicate implementation
03  *
04  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
05  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
06  *
07  *  This file is part of GATE (see http://gate.ac.uk/), and is free
08  *  software, licenced under the GNU Library General Public License,
09  *  Version 2, June 1991 (in the distribution as file licence.html,
10  *  and also available at http://gate.ac.uk/gate/licence.html).
11  *
12  *  Eric Sword, 03/09/08
13  *
14  *  $Id$
15  */
16 package gate.jape.constraint;
17 
18 import gate.AnnotationSet;
19 import gate.jape.JapeException;
20 
21 public class EqualPredicate extends AbstractConstraintPredicate {
22 
23   private static final long serialVersionUID = 3833632644179230280L;
24 
25   @Override
26   public String getOperator() {
27     return EQUAL;
28   }
29 
30   @Override
31   public boolean doMatch(Object annotValue, AnnotationSet context)
32           throws JapeException {
33 
34     if(value == null && annotValue != nullreturn false;
35 
36     if(value.equals(annotValue)) return true;
37 
38     /*
39      * The stored value can be String/Long/Double/Boolean. The passed
40      * value must be of the same type, otherwise equals will return
41      * false. In that case, let's suppose the annot's attrib. is a
42      * String and let's try to convert it to the same type as the
43      * constraint.
44      */
45     if(annotValue instanceof String && !(value instanceof String)) {
46       String annotValueString = (String)annotValue;
47 
48       try {
49         if(value instanceof Long)
50           return value.equals(Long.valueOf(annotValueString));
51 
52         if(value instanceof Double)
53           return value.equals(Double.valueOf(annotValueString));
54 
55         if(value instanceof Boolean)
56           return value.equals(Boolean.valueOf(annotValueString));
57 
58         // if we reach that point, it means constraint has an unexpected
59         // type!
60         throw new JapeException("Cannot compare values for attribute '"
61                 + getAccessor() "' because cannot compare '" + value
62                 "' to '" + annotValue + "'.");
63       }
64       catch(NumberFormatException otherType) {
65         // annotValue is a String and cannot be converted to
66         // Long/Double/Boolean, so the two cannot be equal
67         return false;
68       }
69     // if String
70 
71     return false;
72   }
73 
74 }