// Path: apex/src/main/java/com/sixthsolution/apex/nlp/dict/Tag.java
// public enum Tag {
//     NONE(97),
//     NUMBER(98),
//     PREPOSITION(99),
//     RELATIVE_PREPOSITION(100),
//     RELATIVE_SUFFIX(101),
//     //LOCATION
//     LOCATION_PREFIX(102),
//     LOCATION_SUFFIX(103),
//     LOCATION_NAME(137),
//     //TIME
//     TIME_PREFIX(104),                //e.g. at, in ,the
//     TIME_START_RANGE(105),       //e.g. from
//     TIME_RANGE(106),
//     TIME_RELATIVE_PREFIX(107),   //e.g. for
//     TIME_RELATIVE(108),              //e.g. morning
//     TIME_RELATIVE_INDICATOR(109),   //e.g. before,after
//     TIME_HOUR(110),                 //e.g. hour
//     TIME_MIN(111),                   //e.g. minutes
//     TIME_SEC(112),                   //e.g. seconds
//     TIME_MERIDIEM(113),            //e.g am, pm
//     TIME_SEPARATOR(114),             //e.g :, .
//     //DATE
//     DATE_PREPOSITION(115),
//     DATE_SEEKBY(116),
//     DATE_START_RANGE(117),
//     DATE_SUFFIX(118),
//     DATE_DURATION_SUFFIX(119),
//     DATE_SEPARATOR(120),
//     WEEK_DAY(121),
//     MONTH_NAME(122),
//     SEASON(123),
//     DATE_PREFIX(124),
//     //RECURRENCE
//     REC_WEEK_DAYS(125),
//     NAMED_DATE(126),
//     GLOBAL_PREPOSITION(127),
//     DATE_RECURRENCE(128),
//     DATE_RANGE(129),
//     DATE_FOREVER_KEY(130),
//     THE_PREFIX(131),
//     DATE_BAND(132),
//     YEAR_SEEK(133),
//     MONTH_SEEK(134),
//     WEEK_SEEK(135),
//     DAY_SEEK(136),
//     CURRENT(138);
// 
//     public int id;
// 
//     Tag(int id) {
//         this.id = id;
//     }
// 
//     @Override
//     public String toString() {
//         return String.valueOf((char) id);
//     }
// }
// 
// Path: apex/src/main/java/com/sixthsolution/apex/nlp/ner/ChunkedPart.java
// public class ChunkedPart {
// 
//     private final Entity entity;
//     private final Label label;
//     private final List<TaggedWord> taggedWords;
// 
//     public ChunkedPart(Entity entity,Label label,
//                        List<TaggedWord> taggedWords) {
//         this.entity =entity;
//         this.label = label;
//         this.taggedWords = taggedWords;
//     }
// 
//     public Label getLabel() {
//         return label;
//     }
// 
//     public Entity getEntity() {
//         return entity;
//     }
// 
//     public List<TaggedWord> getTaggedWords(int start,int end) {
//         return taggedWords.subList(start,end);
//     }
//     public List<TaggedWord> getTaggedWords() {
//         return taggedWords;
//     }
//     public String toStringTaggedWords() {
//         StringBuilder sb = new StringBuilder();
//         for (TaggedWord taggedWord : taggedWords) {
//             sb.append(taggedWord.getWord()).append(" ");
//         }
//         return sb.toString().trim();
//     }
// 
//     @Override
//     public String toString() {
//         return label.name() + " -> " + toStringTaggedWords() ;
//     }
// }
// 
// Path: apex/src/main/java/com/sixthsolution/apex/nlp/tagger/TaggedWord.java
// public class TaggedWord {
// 
//     private Tags tags;
//     private final String word;
// 
//     public TaggedWord(String word) {
//         this.word = word;
//         this.tags = new Tags();
//     }
// 
//     public TaggedWord(String word, Tags tags) {
//         this.word = word;
//         this.tags = tags;
//     }
// 
//     public String getWord() {
//         return word;
//     }
// 
//     public Tags getTags() {
//         return tags;
//     }
// 
//     public boolean hasTag(Tag... tags) {
//         return getTags().containsTag(tags);
//     }
// 
//     @Override
//     public String toString() {
//         return "TaggedWord{" +
//                 "word='" + word + '\'' +
//                 ", tags=" + tags +
//                 '}';
//     }
// 
// }


import com.sixthsolution.apex.nlp.dict.Tag;
import com.sixthsolution.apex.nlp.ner.ChunkedPart;
import com.sixthsolution.apex.nlp.tagger.TaggedWord;
import org.threeten.bp.LocalDateTime;
import java.util.Iterator;
package com.sixthsolution.apex.nlp.event;




/**
 * @author Saeed Masoumi (s-masoumi@live.com)
 *
 */

public class StandardLocationExtractor implements Extractor {

    @Override
    public void extract(EventBuilder builder, LocalDateTime source, ChunkedPart chunkedPart) {
        switch (chunkedPart.getLabel()) {
            case LOCATION:
                String location = getLocation(chunkedPart);
                builder.setLocation(location);
                break;
        }
    }

// Path: apex/src/main/java/com/sixthsolution/apex/nlp/dict/Tag.java
// public enum Tag {
//     NONE(97),
//     NUMBER(98),
//     PREPOSITION(99),
//     RELATIVE_PREPOSITION(100),
//     RELATIVE_SUFFIX(101),
//     //LOCATION
//     LOCATION_PREFIX(102),
//     LOCATION_SUFFIX(103),
//     LOCATION_NAME(137),
//     //TIME
//     TIME_PREFIX(104),                //e.g. at, in ,the
//     TIME_START_RANGE(105),       //e.g. from
//     TIME_RANGE(106),
//     TIME_RELATIVE_PREFIX(107),   //e.g. for
//     TIME_RELATIVE(108),              //e.g. morning
//     TIME_RELATIVE_INDICATOR(109),   //e.g. before,after
//     TIME_HOUR(110),                 //e.g. hour
//     TIME_MIN(111),                   //e.g. minutes
//     TIME_SEC(112),                   //e.g. seconds
//     TIME_MERIDIEM(113),            //e.g am, pm
//     TIME_SEPARATOR(114),             //e.g :, .
//     //DATE
//     DATE_PREPOSITION(115),
//     DATE_SEEKBY(116),
//     DATE_START_RANGE(117),
//     DATE_SUFFIX(118),
//     DATE_DURATION_SUFFIX(119),
//     DATE_SEPARATOR(120),
//     WEEK_DAY(121),
//     MONTH_NAME(122),
//     SEASON(123),
//     DATE_PREFIX(124),
//     //RECURRENCE
//     REC_WEEK_DAYS(125),
//     NAMED_DATE(126),
//     GLOBAL_PREPOSITION(127),
//     DATE_RECURRENCE(128),
//     DATE_RANGE(129),
//     DATE_FOREVER_KEY(130),
//     THE_PREFIX(131),
//     DATE_BAND(132),
//     YEAR_SEEK(133),
//     MONTH_SEEK(134),
//     WEEK_SEEK(135),
//     DAY_SEEK(136),
//     CURRENT(138);
// 
//     public int id;
// 
//     Tag(int id) {
//         this.id = id;
//     }
// 
//     @Override
//     public String toString() {
//         return String.valueOf((char) id);
//     }
// }
// 
// Path: apex/src/main/java/com/sixthsolution/apex/nlp/ner/ChunkedPart.java
// public class ChunkedPart {
// 
//     private final Entity entity;
//     private final Label label;
//     private final List<TaggedWord> taggedWords;
// 
//     public ChunkedPart(Entity entity,Label label,
//                        List<TaggedWord> taggedWords) {
//         this.entity =entity;
//         this.label = label;
//         this.taggedWords = taggedWords;
//     }
// 
//     public Label getLabel() {
//         return label;
//     }
// 
//     public Entity getEntity() {
//         return entity;
//     }
// 
//     public List<TaggedWord> getTaggedWords(int start,int end) {
//         return taggedWords.subList(start,end);
//     }
//     public List<TaggedWord> getTaggedWords() {
//         return taggedWords;
//     }
//     public String toStringTaggedWords() {
//         StringBuilder sb = new StringBuilder();
//         for (TaggedWord taggedWord : taggedWords) {
//             sb.append(taggedWord.getWord()).append(" ");
//         }
//         return sb.toString().trim();
//     }
// 
//     @Override
//     public String toString() {
//         return label.name() + " -> " + toStringTaggedWords() ;
//     }
// }
// 
// Path: apex/src/main/java/com/sixthsolution/apex/nlp/tagger/TaggedWord.java
// public class TaggedWord {
// 
//     private Tags tags;
//     private final String word;
// 
//     public TaggedWord(String word) {
//         this.word = word;
//         this.tags = new Tags();
//     }
// 
//     public TaggedWord(String word, Tags tags) {
//         this.word = word;
//         this.tags = tags;
//     }
// 
//     public String getWord() {
//         return word;
//     }
// 
//     public Tags getTags() {
//         return tags;
//     }
// 
//     public boolean hasTag(Tag... tags) {
//         return getTags().containsTag(tags);
//     }
// 
//     @Override
//     public String toString() {
//         return "TaggedWord{" +
//                 "word='" + word + '\'' +
//                 ", tags=" + tags +
//                 '}';
//     }
// 
// }


// Path: apex/src/main/java/com/sixthsolution/apex/nlp/event/StandardLocationExtractor.java
import com.sixthsolution.apex.nlp.dict.Tag;
import com.sixthsolution.apex.nlp.ner.ChunkedPart;
import com.sixthsolution.apex.nlp.tagger.TaggedWord;
import org.threeten.bp.LocalDateTime;
import java.util.Iterator;

package com.sixthsolution.apex.nlp.event;




/**
 * @author Saeed Masoumi (s-masoumi@live.com)
 *
 */

public class StandardLocationExtractor implements Extractor {

    @Override
    public void extract(EventBuilder builder, LocalDateTime source, ChunkedPart chunkedPart) {
        switch (chunkedPart.getLabel()) {
            case LOCATION:
                String location = getLocation(chunkedPart);
                builder.setLocation(location);
                break;
        }
    }

    private String getLocation(ChunkedPart chunkedPart) {