1 package eu.fbk.dkm.pikes.raid; 2 3 import javax.annotation.Nullable; 4 import java.util.Arrays; 5 import java.util.EnumSet; 6 import java.util.Set; 7 8 public enum Component { 9 10 POLARITY('p'), 11 12 EXPRESSION('e', "NN", "VB", "JJ", "R"), 13 14 HOLDER('h', "NN", "PRP", "JJP", "DTP", "WP"), 15 16 TARGET('t', "NN", "PRP", "JJP", "DTP", "WP", "VB"); 17 18 private char letter; 19 20 private String[] headPos; 21 22 private Component(final char letter, final String... headPos) { 23 this.letter = letter; 24 this.headPos = headPos; 25 } 26 27 public char getLetter() { 28 return this.letter; 29 } 30 31 public String[] getHeadPos() { 32 return this.headPos; 33 } 34 35 public static Component forLetter(final char letter) { 36 final char c = Character.toLowerCase(letter); 37 for (final Component component : values()) { 38 if (component.letter == c) { 39 return component; 40 } 41 } 42 throw new IllegalArgumentException("No component for letter '" + letter + "'"); 43 } 44 45 public static Set<Component> forLetters(final String letters) { 46 final EnumSet<Component> result = EnumSet.noneOf(Component.class); 47 for (int i = 0; i < letters.length(); ++i) { 48 result.add(forLetter(letters.charAt(i))); 49 } 50 return result; 51 } 52 53 static final EnumSet<Component> UNIVERSE = EnumSet.allOf(Component.class); 54 55 static EnumSet<Component> toSet(@Nullable final Component... components) { 56 return components == null || components.length == 0 ? UNIVERSE : EnumSet.copyOf(Arrays 57 .asList(components)); 58 } 59 60 }