package dasherJava.core.alphabets.xml; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import dasherJava.core.alphabets.actions.Action; import dasherJava.core.alphabets.actions.Action.AccessibilityAction; import dasherJava.core.alphabets.actions.Action.KeyboardAction; import dasherJava.core.alphabets.actions.Action.SocketOutputAction; import dasherJava.core.collections.NamedObject; import dasherJava.core.languageModeling.CharacterGroup; import dasherJava.core.languageModeling.LanguageAlphabet; import dasherJava.core.languageModeling.LanguageCharacter; public class Alphabet implements NamedObject { private final String name; private final String orientation; private final String trainingFilename; private final String colorsName; private final List groups = new ArrayList<>(); private final List nodes = new ArrayList<>(); Alphabet(String name, String orientation, String trainingFilename, String colorsName) { this.name=name; this.orientation=orientation; this.trainingFilename=trainingFilename; this.colorsName=colorsName; } @Override public String getName() { return name; } public String getOrientation() { return orientation; } public String getTrainingFilename() { return trainingFilename; } public String getColorsName() { return colorsName; } public LanguageAlphabet getLanguageAlphabet(Colors colors) { LanguageAlphabet languageAlphabet = new LanguageAlphabet(); Map groupColorInfos = new HashMap<>(); for (Group group : groups) { GroupColorInfo groupColorInfo = colors.getGroupColorInfo(group.getColorInfoName()); languageAlphabet.addCharacterGroup(new CharacterGroup(group.getStartIndex(), group.getEndIndex(), group.getLabel(), groupColorInfo.getColor(), groupColorInfo.getOutlineColor(), groupColorInfo.getLabelColor(), group.getSpeedFactor())); groupColorInfos.put(group, groupColorInfo); } for (Node node : nodes) { GroupColorInfo groupColorInfo = groupColorInfos.get(node.getGroup()); languageAlphabet.addCharacter(new LanguageCharacter(node.getTrainingUnicode(), node.getFixedProbability(), node.getLabel(), groupColorInfo.getNextNodeColor(), groupColorInfo.getNextNodeOutlineColor(colors.getDefaultOutlineColor()), groupColorInfo.getNextNodeLabelColor(colors.getDefaultLabelColor()), node.getActions())); } return languageAlphabet; } public boolean usesKeyboardOutput() { for (Node node : nodes) { for (Action action : node.getActions()) { if (action instanceof KeyboardAction) return true; } } return false; } public boolean usesAccessibilityInterface() { for (Node node : nodes) { for (Action action : node.getActions()) { if (action instanceof AccessibilityAction) return true; } } return false; } public boolean usesSocketOutput() { for (Node node : nodes) { for (Action action : node.getActions()) { if (action instanceof SocketOutputAction) return true; } } return false; } void addGroup(Group group) { groups.add(group); } void addNode(Node node) { nodes.add(node); } Node getLastNode() { if (nodes.isEmpty()) return null; return nodes.get(nodes.size()-1); } int getNumberOfNodes() { return nodes.size(); } }