// Path: freya/freya-annotate/src/main/java/org/freya/model/Annotation.java
// public class Annotation implements Serializable {
// 
//     String text;
//     HashMap features;
//     Long startOffset;
//     Long endOffset;
// 
//     public HashMap getFeatures() {
//         return features;
//     }
// 
//     public void setFeatures(HashMap features) {
//         this.features = features;
//     }
// 
//     List<Tree> syntaxTree;
// 
//     public List<Tree> getSyntaxTree() {
//         return syntaxTree;
//     }
// 
//     public void setSyntaxTree(List<Tree> syntaxTree) {
//         this.syntaxTree = syntaxTree;
//     }
// 
//     public String getText() {
//         return text;
//     }
// 
//     public void setText(String text) {
//         this.text = text;
//     }
// 
//     public Long getStartOffset() {
//         return startOffset;
//     }
// 
//     public void setStartOffset(Long startOffset) {
//         this.startOffset = startOffset;
//     }
// 
//     public Long getEndOffset() {
//         return endOffset;
//     }
// 
//     public void setEndOffset(Long endOffSet) {
//         this.endOffset = endOffSet;
//     }
// 
//     public String toString() {
//         StringBuffer buffer = new StringBuffer("");
//         buffer.append(" Annotation: StartOffset:" + startOffset);
//         buffer.append(" End offset:" + endOffset);
//         buffer.append(" String:" + text);
//         buffer.append(" Syntax tree:" + syntaxTree);
//         if (features != null)
//             buffer.append(" Features:" + features.toString());
//         return buffer.toString();
//     }
// 
//     public boolean equals(Object anotherObject) {
//         if (this == anotherObject)
//             return true;
//         if (!(anotherObject instanceof Annotation))
//             return false;
//         if (this.startOffset == null && this.endOffset == null
//                         && ((Annotation) anotherObject).startOffset != null
//                         && ((Annotation) anotherObject).endOffset != null)
//             return true;
//         if ((anotherObject != null)
//                         && (this.startOffset.longValue() == ((Annotation) anotherObject)
//                                         .getStartOffset().longValue())
//                         && (this.endOffset.longValue() == ((Annotation) anotherObject)
//                                         .getEndOffset().longValue())
//                         && (this.features.equals(((Annotation) anotherObject).features)
//                         ))
// 
//             return true;
//         else
//             return false;
//     }
// 
//     /**
//      * 
//      * @param aAnnot
//      * @return
//      */
//     public boolean overlaps(Annotation aAnnot) {
//         if (aAnnot == null) return false;
//         if (aAnnot.getStartOffset() == null ||
//                         aAnnot.getEndOffset() == null) return false;
// 
//         if (aAnnot.getEndOffset().longValue() <= this.getStartOffset().longValue())
//             return false;
// 
//         if (aAnnot.getStartOffset().longValue() >= this.getEndOffset().longValue())
//             return false;
// 
//         return true;
//     }// overlaps
// 
// 
//     public Object clone() {
//         Object deepCopy = null;
//         ByteArrayOutputStream byteArrOs = new ByteArrayOutputStream();
//         ObjectOutputStream objOs;
//         try {
//             objOs = new ObjectOutputStream(byteArrOs);
//             objOs.writeObject(this);
//             ByteArrayInputStream byteArrIs =
//                             new ByteArrayInputStream(byteArrOs.toByteArray());
//             ObjectInputStream objIs = new ObjectInputStream(byteArrIs);
//             deepCopy = objIs.readObject();
//             return deepCopy;
//         } catch (IOException e) {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//         } catch (ClassNotFoundException e) {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//         }
//         return deepCopy;
//     }
// 
// }


import static org.junit.Assert.assertEquals;
import org.freya.model.Annotation;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
package org.freya.annotate.solr;





@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:META-INF/spring/freya-applicationContext.xml"})
@Configurable
public class SolrAnnotatorTest {

    private static final Logger log = LoggerFactory.getLogger(SolrAnnotator.class);

    @Autowired
    private SolrAnnotator solrAnnotator;
    
    @Test
    public void testExactMatch() throws Exception {
        Annotation annotation = new Annotation();
        annotation.setText("city");
        List<Annotation> result = solrAnnotator.searchExactContentFirst(annotation);
        assertEquals(1, result.size());
    }

    @Test
    public void testStemmer() throws Exception {
// Path: freya/freya-annotate/src/main/java/org/freya/model/Annotation.java
// public class Annotation implements Serializable {
// 
//     String text;
//     HashMap features;
//     Long startOffset;
//     Long endOffset;
// 
//     public HashMap getFeatures() {
//         return features;
//     }
// 
//     public void setFeatures(HashMap features) {
//         this.features = features;
//     }
// 
//     List<Tree> syntaxTree;
// 
//     public List<Tree> getSyntaxTree() {
//         return syntaxTree;
//     }
// 
//     public void setSyntaxTree(List<Tree> syntaxTree) {
//         this.syntaxTree = syntaxTree;
//     }
// 
//     public String getText() {
//         return text;
//     }
// 
//     public void setText(String text) {
//         this.text = text;
//     }
// 
//     public Long getStartOffset() {
//         return startOffset;
//     }
// 
//     public void setStartOffset(Long startOffset) {
//         this.startOffset = startOffset;
//     }
// 
//     public Long getEndOffset() {
//         return endOffset;
//     }
// 
//     public void setEndOffset(Long endOffSet) {
//         this.endOffset = endOffSet;
//     }
// 
//     public String toString() {
//         StringBuffer buffer = new StringBuffer("");
//         buffer.append(" Annotation: StartOffset:" + startOffset);
//         buffer.append(" End offset:" + endOffset);
//         buffer.append(" String:" + text);
//         buffer.append(" Syntax tree:" + syntaxTree);
//         if (features != null)
//             buffer.append(" Features:" + features.toString());
//         return buffer.toString();
//     }
// 
//     public boolean equals(Object anotherObject) {
//         if (this == anotherObject)
//             return true;
//         if (!(anotherObject instanceof Annotation))
//             return false;
//         if (this.startOffset == null && this.endOffset == null
//                         && ((Annotation) anotherObject).startOffset != null
//                         && ((Annotation) anotherObject).endOffset != null)
//             return true;
//         if ((anotherObject != null)
//                         && (this.startOffset.longValue() == ((Annotation) anotherObject)
//                                         .getStartOffset().longValue())
//                         && (this.endOffset.longValue() == ((Annotation) anotherObject)
//                                         .getEndOffset().longValue())
//                         && (this.features.equals(((Annotation) anotherObject).features)
//                         ))
// 
//             return true;
//         else
//             return false;
//     }
// 
//     /**
//      * 
//      * @param aAnnot
//      * @return
//      */
//     public boolean overlaps(Annotation aAnnot) {
//         if (aAnnot == null) return false;
//         if (aAnnot.getStartOffset() == null ||
//                         aAnnot.getEndOffset() == null) return false;
// 
//         if (aAnnot.getEndOffset().longValue() <= this.getStartOffset().longValue())
//             return false;
// 
//         if (aAnnot.getStartOffset().longValue() >= this.getEndOffset().longValue())
//             return false;
// 
//         return true;
//     }// overlaps
// 
// 
//     public Object clone() {
//         Object deepCopy = null;
//         ByteArrayOutputStream byteArrOs = new ByteArrayOutputStream();
//         ObjectOutputStream objOs;
//         try {
//             objOs = new ObjectOutputStream(byteArrOs);
//             objOs.writeObject(this);
//             ByteArrayInputStream byteArrIs =
//                             new ByteArrayInputStream(byteArrOs.toByteArray());
//             ObjectInputStream objIs = new ObjectInputStream(byteArrIs);
//             deepCopy = objIs.readObject();
//             return deepCopy;
//         } catch (IOException e) {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//         } catch (ClassNotFoundException e) {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//         }
//         return deepCopy;
//     }
// 
// }


// Path: freya/freya-annotate/src/test/java/org/freya/annotate/solr/SolrAnnotatorTest.java
import static org.junit.Assert.assertEquals;
import org.freya.model.Annotation;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;

package org.freya.annotate.solr;





@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:META-INF/spring/freya-applicationContext.xml"})
@Configurable
public class SolrAnnotatorTest {

    private static final Logger log = LoggerFactory.getLogger(SolrAnnotator.class);

    @Autowired
    private SolrAnnotator solrAnnotator;
    
    @Test
    public void testExactMatch() throws Exception {
        Annotation annotation = new Annotation();
        annotation.setText("city");
        List<Annotation> result = solrAnnotator.searchExactContentFirst(annotation);
        assertEquals(1, result.size());
    }

    @Test
    public void testStemmer() throws Exception {
        Annotation annotation = new Annotation();