Constraint.java |
1 /* 2 * Constraint.java - transducer class 3 * 4 * Copyright (c) 1998-2004, The University of Sheffield. 5 * 6 * This file is part of GATE (see http://gate.ac.uk/), and is free 7 * software, licenced under the GNU Library General Public License, 8 * Version 2, June 1991 (in the distribution as file licence.html, 9 * and also available at http://gate.ac.uk/gate/licence.html). 10 * 11 * Hamish Cunningham, 24/07/98 12 * 13 * $Id: Constraint.java,v 1.10 2004/07/21 17:10:07 akshay Exp $ 14 */ 15 16 17 package gate.jape; 18 19 import java.util.ArrayList; 20 import java.util.Iterator; 21 22 import gate.FeatureMap; 23 import gate.util.SimpleFeatureMapImpl; 24 import gate.util.Strings; 25 26 27 /** 28 * An individual annotation/attribute/value expression. It doesn't extend 29 * PatternElement, even though it has to "match", because a set of 30 * Constraint must be applied together in order to avoid doing separate 31 * selectAnnotations calls for each one. 32 */ 33 public class Constraint 34 implements JapeConstants, java.io.Serializable, Cloneable 35 { 36 /** Debug flag */ 37 private static final boolean DEBUG = false; 38 39 /** Construction from annot type string */ 40 public Constraint(String annotType) { 41 this.annotType = annotType; 42 attrs1 = new SimpleFeatureMapImpl(); 43 } // Construction from annot type 44 45 /** Construction from annot type and attribute sequence */ 46 public Constraint(String annotType, FeatureMap attrs) { 47 this.annotType = annotType; 48 this.attrs1 = attrs; 49 } // Construction from annot type and attribute sequence 50 51 /** Construction from annot type and array of attributes */ 52 public Constraint(String annotType, ArrayList attrsArray) { 53 this.annotType = annotType; 54 attrs1 = new SimpleFeatureMapImpl(); 55 for ( Iterator i = attrsArray.iterator(); i.hasNext(); ) 56 attrs1.put(((JdmAttribute) i.next()).getName(), 57 ((JdmAttribute) i.next()).getValue()); 58 } // Construction from annot type and array of attributes 59 60 /** The type of annnotation we're looking for. */ 61 private String annotType; 62 63 /** Are we negated? */ 64 private boolean negated = false; 65 66 /** Set negation. */ 67 public void negate() { negated = true; } 68 69 /** Access to negation flag. */ 70 public boolean isNegated() { return negated; } 71 72 /** Get the type of annnotation we're looking for. */ 73 public String getAnnotType() { return annotType; } 74 75 /** The attributes that must be present on the matched annotation. */ 76 private FeatureMap attrs1; 77 78 /** The attributes array that must be present on the matched annotation. */ 79 private JdmAttribute[] attrs2; 80 81 /** Get the attributes that must be present on the matched annotation. */ 82 public FeatureMap getAttributeSeq() { return attrs1; } 83 84 /** Get the attributes that must be present on the matched annotation. */ 85 public JdmAttribute[] getAttributeArray() { return attrs2; } 86 87 /** Add an attribute. */ 88 public void addAttribute(JdmAttribute attr) { 89 attrs1.put(attr.getName(), attr.getValue()); 90 } // addAttribute 91 92 /** Create and add an attribute. */ 93 public void addAttribute(String name, Object value) { 94 attrs1.put(name, value); 95 } // addAttribute 96 97 /** Need cloning for processing of macro references. See comments on 98 * <CODE>PatternElement.clone()</CODE> 99 */ 100 public Object clone() { 101 Constraint newC = null; 102 try { 103 newC = (Constraint) super.clone(); 104 } catch(CloneNotSupportedException e) { 105 throw(new InternalError(e.toString())); 106 } 107 newC.annotType = annotType; 108 newC.attrs1 = (FeatureMap) ((SimpleFeatureMapImpl) attrs1).clone(); 109 110 /* Enumeration e = attrs1.getElements(); 111 while(e.hasMoreElements()) 112 newC.attrs1.addAll(new JdmAttribute((JdmAttribute) e.nextElement())); 113 newC.negated = negated; 114 */ 115 return newC; 116 } // clone 117 118 119 /** Finish: replace dynamic data structures with Java arrays; called 120 * after parsing. 121 */ 122 public void finish() { 123 /* 124 if(attrs1 == null || attrs1.size() == 0) { 125 attrs2 = new JdmAttribute[0]; 126 attrs1 = null; 127 return; 128 } 129 int attrsLen = attrs1.size(); 130 attrs2 = new JdmAttribute[attrsLen]; 131 132 int i = 0; 133 //for(Enumeration e = attrs1.getElements(); e.hasMoreElements(); i++) { 134 // attrs2[i] = (JdmAttribute) e.nextElement(); 135 //} 136 Iterator iter = attrs1.keySet().iterator(); 137 while(iter.hasNext()) { 138 String name = (String) iter.next(); 139 Object value = attrs1.get(name); 140 attrs2[i++] = new JdmAttribute(name, value); 141 } 142 attrs1 = null; 143 */ 144 } // finish 145 146 /** Create a string representation of the object. */ 147 public String toString() { return toString(""); } 148 149 /** Create a string representation of the object. */ 150 public String toString(String pad) { 151 String newline = Strings.getNl(); 152 153 StringBuffer buf = new StringBuffer( 154 pad + "Constraint: annotType(" + annotType + "); attrs(" + newline + pad 155 ); 156 157 // constraints 158 /* 159 for(int i=0; i<attrs.length(); i++) 160 buf.append(" " + attrs.nth(i)); 161 for (Enumeration e = attrs.getElements(); e.hasMoreElements(); ) 162 buf.append(" " + ((JdmAttribute) e.nextElement() ).toString()); 163 buf.append(newline + pad + ") Constraint." + newline); 164 */ 165 // constraints 166 if(attrs1 == null) { 167 for(int i=0; i<attrs2.length; i++) 168 buf.append(" " + attrs2[i]); 169 } else { 170 //for (Enumeration e = attrs1.getElements(); e.hasMoreElements(); ) 171 // buf.append(" " + ((JdmAttribute) e.nextElement() ).toString()); 172 buf.append(attrs1.toString()); 173 } 174 buf.append(newline + pad + ") Constraint." + newline); 175 176 return buf.toString(); 177 } // toString 178 179 public String shortDesc() { 180 String res = annotType + "("; 181 if(attrs1 == null) { 182 for(int i=0; i<attrs2.length; i++) 183 res +=" " + attrs2[i]; 184 } else { 185 res += attrs1.toString(); 186 } 187 res += ")"; 188 return res; 189 } // shortDesc 190 191 } // class Constraint 192 193 194 // $Log: Constraint.java,v $ 195 // Revision 1.10 2004/07/21 17:10:07 akshay 196 // Changed copyright from 1998-2001 to 1998-2004 197 // 198 // Revision 1.9 2004/03/25 13:01:14 valyt 199 // Imports optimisation throughout the Java sources 200 // (to get rid of annoying warnings in Eclipse) 201 // 202 // Revision 1.8 2001/09/13 12:09:49 kalina 203 // Removed completely the use of jgl.objectspace.Array and such. 204 // Instead all sources now use the new Collections, typically ArrayList. 205 // I ran the tests and I ran some documents and compared with keys. 206 // JAPE seems to work well (that's where it all was). If there are problems 207 // maybe look at those new structures first. 208 // 209 // Revision 1.7 2000/11/08 16:35:02 hamish 210 // formatting 211 // 212 // Revision 1.6 2000/10/26 10:45:30 oana 213 // Modified in the code style 214 // 215 // Revision 1.5 2000/10/16 16:44:33 oana 216 // Changed the comment of DEBUG variable 217 // 218 // Revision 1.4 2000/10/10 15:36:35 oana 219 // Changed System.out in Out and System.err in Err; 220 // Added the DEBUG variable seted on false; 221 // Added in the header the licence; 222 // 223 // Revision 1.3 2000/05/25 16:10:41 valyt 224 // JapeGUI is working 225 // 226 // Revision 1.2 2000/04/20 13:26:41 valyt 227 // Added the graph_drawing library. 228 // Creating of the NFSM and DFSM now works. 229 // 230 // Revision 1.1 2000/02/23 13:46:05 hamish 231 // added 232 // 233 // Revision 1.1.1.1 1999/02/03 16:23:01 hamish 234 // added gate2 235 // 236 // Revision 1.8 1998/11/05 13:36:30 kalina 237 // moved to use array of JdmAttributes for selectNextAnnotation instead of a sequence 238 // 239 // Revision 1.7 1998/11/01 22:35:56 kalina 240 // attribute seq hashtable mod 241 // 242 // Revision 1.6 1998/09/23 12:48:02 hamish 243 // negation added; noncontiguous BPEs disallowed 244 // 245 // Revision 1.5 1998/08/12 15:39:34 hamish 246 // added padding toString methods 247 // 248 // Revision 1.4 1998/07/31 13:12:14 mks 249 // done RHS stuff, not tested 250 // 251 // Revision 1.3 1998/07/30 11:05:15 mks 252 // more jape 253 // 254 // Revision 1.2 1998/07/29 11:06:55 hamish 255 // first compiling version 256 // 257 // Revision 1.1.1.1 1998/07/28 16:37:46 hamish 258 // gate2 lives 259