Pattern.java
001 /*
002  *  Pattern.java
003  *
004  *  Niraj Aswani, 19/March/07
005  *
006  *  $Id: Pattern.html,v 1.0 2007/03/19 16:22:01 niraj Exp $
007  */
008 package gate.creole.annic;
009 
010 import java.util.ArrayList;
011 import java.util.List;
012 import java.util.Map;
013 
014 /**
015  * Pattern is an extension of the HIT class. This provides information
016  * about the underlying annotations as well as the information about its
017  * left and right context.
018  
019  @author niraj
020  
021  */
022 public class Pattern extends Hit {
023 
024   /**
025    * serial version id
026    */
027   private static final long serialVersionUID = 3258126955659604530L;
028 
029   /**
030    * Left context start offset
031    */
032   protected int leftContextStartOffset;
033 
034   /**
035    * right context end offset
036    */
037   protected int rightContextEndOffset;
038 
039   /**
040    * pattern text
041    */
042   protected String patternText;
043 
044   /**
045    * annotations
046    */
047   protected List<PatternAnnotation> annotations;
048 
049   /**
050    * Constructor
051    @param docID
052    @param patternText
053    @param startOffset
054    @param endOffset
055    @param leftContextStartOffset
056    @param rightContextEndOffset
057    @param annotations
058    @param queryString
059    */
060   public Pattern(String docID, String annotationSetName, String patternText, int startOffset,
061           int endOffset, int leftContextStartOffset, int rightContextEndOffset,
062           List<PatternAnnotation> annotations, String queryString) {
063     super(docID, annotationSetName, startOffset, endOffset, queryString);
064     this.patternText = patternText;
065     this.leftContextStartOffset = leftContextStartOffset;
066     this.rightContextEndOffset = rightContextEndOffset;
067     this.annotations = annotations;
068   }
069 
070   /**
071    * Returns the annotations lying between the start and the end offsets
072    */
073   public List<PatternAnnotation> getPatternAnnotations(int startOffset, int endOffset) {
074     ArrayList<PatternAnnotation> annots = new ArrayList<PatternAnnotation>();
075     for(int i = 0; i < annotations.size(); i++) {
076       PatternAnnotation ga1 = annotations.get(i);
077       if(ga1.getStartOffset() >= startOffset && ga1.getEndOffset() <= endOffset) {
078         annots.add(ga1);
079       }
080     }
081     return annots;
082   }
083 
084 
085   /**
086    * Returns all annotations underlying the pattern
087    */
088   public PatternAnnotation[] getPatternAnnotations() {
089     return annotations.toArray(new PatternAnnotation[0]);
090   }
091 
092   /**
093    * Returns the annotations with the given type
094    */
095   public PatternAnnotation[] getPatternAnnotations(String type) {
096     List<PatternAnnotation> annots = new ArrayList<PatternAnnotation>();
097     for(int i = 0; i < annotations.size(); i++) {
098       PatternAnnotation ga1 = annotations.get(i);
099       if(ga1.getType().equals(type)) {
100         annots.add(ga1);
101       }
102     }
103     return annots.toArray(new PatternAnnotation[0]);
104   }
105 
106   /**
107    * Returns the annotations with the given type and the feature
108    */
109   public PatternAnnotation[] getPatternAnnotations(String type, String feature) {
110     List<PatternAnnotation> annots = new ArrayList<PatternAnnotation>();
111     for(int i = 0; i < annotations.size(); i++) {
112       PatternAnnotation ga1 = annotations.get(i);
113       if(ga1.getType().equals(type)) {
114         // check if this has the following feature
115         Map<String, String> features = ga1.getFeatures();
116         if(features != null && features.keySet().contains(feature)) {
117           annots.add(ga1);
118         }
119       }
120     }
121     return annots.toArray(new PatternAnnotation[0]);
122   }
123 
124   /**
125    * Returns the text of the pattern
126    */
127   public String getPatternText() {
128     return patternText;
129   }
130 
131   /**
132    * Returns the text of the pattern between the given offsets
133    */
134   public String getPatternText(int startOffset, int endOffset) {
135     return patternText.substring(startOffset - leftContextStartOffset,
136             endOffset - leftContextStartOffset);
137   }
138 
139   /**
140    * Returns the start offset of the left context
141    */
142   public int getLeftContextStartOffset() {
143     return leftContextStartOffset;
144   }
145 
146   /**
147    * Returns the end offset of the right context
148    */
149   public int getRightContextEndOffset() {
150     return rightContextEndOffset;
151   }
152 }