package data; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.Objects; /* Created for when words are sorted by multiple keys, i.e. not just lemmas but lemmas and msd simultaneously. */ public interface Word { String getW1(); default String getW2(){ return null; } default String getW3(){ return null; } default String getW4(){ return null; } default String get(ArrayList wordParts, CalculateFor cf){ if (wordParts.size() > 0 && wordParts.get(0).equals(cf)) return getW1(); if (wordParts.size() > 1 && wordParts.get(1).equals(cf)) return getW2(); if (wordParts.size() > 2 && wordParts.get(2).equals(cf)) return getW3(); if (wordParts.size() > 3 && wordParts.get(3).equals(cf)) return getW4(); return null; } default String getWord(ArrayList wordParts){ String w = get(wordParts, CalculateFor.WORD); if (w == null){ return get(wordParts, CalculateFor.LOWERCASE_WORD); } return w; } default String getLemma(ArrayList wordParts){ return get(wordParts, CalculateFor.LEMMA); } default String getMsd(ArrayList wordParts){ return get(wordParts, CalculateFor.MORPHOSYNTACTIC_SPECS); } default String getNormalizedWord(ArrayList wordParts){ return get(wordParts, CalculateFor.NORMALIZED_WORD); } void setW1(String w); default void setW2(String w){} default void setW3(String w){} default void setW4(String w){} default void set(String w, ArrayList wordParts, CalculateFor cf){ switch(wordParts.indexOf(cf)){ case 0: setW1(w); break; case 1: setW2(w); break; case 2: setW3(w); break; case 3: setW4(w); break; } } default void setLemma(String w, ArrayList wordParts){ set(w, wordParts, CalculateFor.LEMMA); } default void setMsd(String w, ArrayList wordParts){ set(w, wordParts, CalculateFor.MORPHOSYNTACTIC_SPECS); } default void setNormalizedWord(String w, ArrayList wordParts){ set(w, wordParts, CalculateFor.NORMALIZED_WORD); } default String getCVVWord(ArrayList cf) { return covertToCvv(getWord(cf)); } default String getCVVLemma(ArrayList cf) { return covertToCvv(getLemma(cf)); } default String covertToCvv(String s) { final HashSet VOWELS = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u')); char[] StringCA = s.toCharArray(); for (int i = 0; i < StringCA.length; i++) { StringCA[i] = VOWELS.contains(StringCA[i]) ? 'V' : 'C'; } return new String(StringCA); } default String getForCf(CalculateFor calculateFor, boolean cvv, ArrayList cf) { String returnValue = ""; if (cvv) { returnValue = (calculateFor == CalculateFor.WORD || calculateFor == CalculateFor.LOWERCASE_WORD) ? getCVVWord(cf) : getCVVLemma(cf); } else { if (calculateFor == CalculateFor.WORD || calculateFor == CalculateFor.LOWERCASE_WORD){ returnValue = getWord(cf); } else if (calculateFor == CalculateFor.LEMMA) { returnValue = getLemma(cf); } else if (calculateFor == CalculateFor.NORMALIZED_WORD){ returnValue = getNormalizedWord(cf); } // returnValue = (calculateFor == CalculateFor.WORD || calculateFor == CalculateFor.LOWERCASE_WORD) ? getWord(cf) : getLemma(cf); } return returnValue; } }