package util; public class PropertiesFileReader { public static Properties readPropertiesFile(Object recipient, String path) throws IOException } package controller.config; public class UserDefCmdSaver extends Saver { } package controller.config; public class FileLoader extends Config{ public FileLoader(File file) throws ParserConfigurationException, IOException, SAXException public void extractInfo(Element root) throws Exception public Element getRoot() public Map getTokenMap() public Map getNumParamMap() public Map getTypeMap() public Map getDescriptionMap() public Map getExampleMap() public Map getHelpMap() public String getLanguage() } package controller.config; public class CommandLoader extends Config{ public CommandLoader(File file) throws ParserConfigurationException, IOException, SAXException public void extractInfo(Element root) throws Exception public Element getRoot() public String getCommands() } package controller.config; public abstract class Saver { public Saver() public Document saveToXML(Map userMap) throws ParserConfigurationException public Document saveToXML(List listLog) throws ParserConfigurationException protected void addVarElements(Document doc, Map userMap) protected org.w3c.dom.Node addTagStr(Document doc, String tagName, String value) } package controller.config; public class SaveLoadWrapper { public SaveLoadWrapper() public Saver getHistorySaver() public Saver getVarSaver() public Saver getUserDefCmdSaver() public LogInterface getHistoryLog() public LogMaps getVarLogMap() public LogMaps getUserDefCmdMap() } package controller.config; public class HistorySaver extends Saver { public HistorySaver() } package controller.config; public class VariableSaver extends Saver { public VariableSaver() } package controller.config; public abstract class Config { public Config(File file) public void checkValidXML( public abstract void extractInfo(Element root) throws Exception; public abstract Element getRoot(); } package controller.config; public class StyleConfig extends Config{ public StyleConfig(File file) throws ParserConfigurationException, IOException, SAXException public void extractInfo(Element root) throws Exception public Element getRoot() public Map> getStyleMap() } package controller; public class Controller extends Application { public Controller() public void executeCommands(String commandString) public void execute(Command command) public void start(Stage primaryStage) throws Exception public SaveLoadWrapper getSaveLoadWrapper() public Engine getEngine() public FileLoader getFileLoader() public void setPenColor(Color color) public TurtlePen getPen() } package controller.parsing; public class SyntaxTreeEvaluator { public Command evaluateAST(SyntaxTreeNode ASTNode) throws EvaluateException } package controller.parsing; public class SyntaxTreeNode { public SyntaxTreeNode(Token token) public Token getToken() public void addChildNode(SyntaxTreeNode childNode) throws ParsingException public boolean hasEnoughChildNodes() public List getChildNodes() public String toString() } package controller.parsing; public class Parser { public Parser() public List parse(String commandString) } package controller.parsing; public class SyntaxTree { public SyntaxTree(Token rootToken) throws ParsingException public void add(Token token) throws ParsingException public boolean isTreeComplete() public List postOrderTraversal(SyntaxTreeNode root) public SyntaxTreeNode getRootNode() } package controller.parsing; public class Lexer { public Lexer(String language, Map numParamMap) public List tokenize(String input) throws WrongInputException, ParsingException public String getTokenType(String text) throws IllegalArgumentException public String getCanonicalName(String text) throws ParsingException public void setPatterns(String language) } package controller.parsing; public class Token { public Token(TokenType tokenType, String tokenValue, int numOfParams) public String getTokenValue() public TokenType getTokenType() public int getNumOfParams() public String toString() } public class Main extends Application { public void start (Stage primaryStage) } package model; public interface ImmutableTurtleLog extends Iterable { Set turtles(); public Integer getId(ImmutableTurtle turtle); public ImmutableTurtle getTurtle(int id); } package model.turtle; public class ModelTurtle implements ImmutableTurtle { public ModelTurtle(double width, double height) public Position getPosition() public Angle getAngle() public void move(double distance) throws InvalidLocationException public void setPosition(double x, double y) throws InvalidLocationException public void setPosition(Position position) public void setAngle(Angle angle) public void setAngle(double degrees) public void setPen(TurtlePen pen) public void setActive(boolean active) public boolean isActive() public void turn(double degrees) public TurtlePen getPen() public void setVisible(boolean visible) public boolean isVisible() } package model.turtle; public interface ImmutableTurtle { Position getPosition(); Angle getAngle(); TurtlePen getPen(); boolean isVisible(); } package model; public class ColorLog { public ColorLog() public void add(Color color, int index) public void remove(Color color, int index) public Color getColor(int index) public int getIndex(Color color) public boolean contains(Color color) public boolean contains(int index) } package model; public class Engine { public Engine() public void provideVariables(Command command) protected VariableLog getVariableLog() protected TurtleLog getTurtleLog() public void setPenColor(Color color) public TurtlePen getPen() } package model.LogStructures; public interface LogInterface { void addLog(String input); void clearLog(); List getLog(); } package model.LogStructures; public class LogMaps { public LogMaps() public String getValue(String key) public void setValue(String key, String value) public boolean checkKey(String key) public Map getLogMap() } package model.LogStructures; public class Log implements LogInterface { public Log() public void addLog(String input) public void clearLog() public List getLog() } package model.command; public abstract class ExecutableCommand extends Command { public ExecutableCommand(Command... arguments) public double evaluate(Consumer... providers) protected abstract double execute(double... arguments); } package model.command; public class ListCommand extends Command { public ListCommand(Command... arguments) public ListCommand(List arguments) public double evaluate(Consumer... providers) public String toString() } package model.command.turtle; public class XCorCommand extends AbstractTurtlesCommand { public XCorCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class ForwardCommand extends AbstractTurtlesCommand { public ForwardCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public abstract class AbstractTurtlesCommand extends ExecutableCommand implements TurtleLogCommand { public AbstractTurtlesCommand(Command... arguments) public void setTurtleLog(TurtleLog turtleLog) protected TurtleLog getTurtles() protected double execute(double... arguments) protected abstract double executeOne(ModelTurtle turtle, double... arguments); public void setUpdateView(Consumer updateView) protected Consumer getUpdateView() } package model.command.turtle; public class BackCommand extends AbstractTurtlesCommand { public BackCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class PenUpCommand extends AbstractTurtlesCommand { public PenUpCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class PenQueryCommand extends AbstractTurtlesCommand { public PenQueryCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class YCorCommand extends AbstractTurtlesCommand { public YCorCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class HomeCommand extends AbstractTurtlesCommand { public HomeCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class HeadingCommand extends AbstractTurtlesCommand { public HeadingCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class TowardsCommand extends AbstractTurtlesCommand { public TowardsCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class SetXYCommand extends AbstractTurtlesCommand { public SetXYCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class ShowingCommand extends AbstractTurtlesCommand { public ShowingCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class ShowTurtleCommand extends AbstractTurtlesCommand { public ShowTurtleCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class RightCommand extends AbstractTurtlesCommand { public RightCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class SetHeadingCommand extends AbstractTurtlesCommand { public SetHeadingCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class PenDownCommand extends AbstractTurtlesCommand { public PenDownCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class HideTurtleCommand extends AbstractTurtlesCommand { public HideTurtleCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.turtle; public class LeftCommand extends AbstractTurtlesCommand { public LeftCommand(Command... arguments) public String toString() protected double executeOne(ModelTurtle turtle, double... arguments) } package model.command.booleans; public class AndCommand extends ExecutableCommand { public AndCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.booleans; public class GreaterThanCommand extends ExecutableCommand { public GreaterThanCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.booleans; public class OrCommand extends ExecutableCommand { public OrCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.booleans; public class GreaterEqualCommand extends ExecutableCommand { public GreaterEqualCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.booleans; public class LessThanCommand extends ExecutableCommand { public LessThanCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.booleans; public class EqualCommand extends ExecutableCommand { public EqualCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.booleans; public class NotEqualCommand extends ExecutableCommand { public NotEqualCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.booleans; public class LessEqualCommand extends ExecutableCommand { public LessEqualCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.booleans; public class NotCommand extends ExecutableCommand { public NotCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command; public abstract class Command { public Command(Command... arguments) public abstract double evaluate(Consumer... providers); protected Command[] getArguments() public abstract String toString(); } package model.command.math; public class MinusCommand extends ExecutableCommand { public MinusCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class NaturalLogCommand extends ExecutableCommand { public NaturalLogCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class DifferenceCommand extends ExecutableCommand { public DifferenceCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class QuotientCommand extends ExecutableCommand { public String toString() public QuotientCommand(Command... arguments) protected double execute(double... arguments) } package model.command.math; public class RemainderCommand extends ExecutableCommand { public String toString() protected double execute(double... arguments) } package model.command.math; public class ArcTangentCommand extends ExecutableCommand { public ArcTangentCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class ProductCommand extends ExecutableCommand { public ProductCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class PowerCommand extends ExecutableCommand { public PowerCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class SineCommand extends ExecutableCommand { public SineCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class RandomRangeCommand extends ExecutableCommand { public RandomRangeCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class PiCommand extends ExecutableCommand { public PiCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class SquareRootCommand extends ExecutableCommand { public SquareRootCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class TangentCommand extends ExecutableCommand { public TangentCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class CosineCommand extends ExecutableCommand { public CosineCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class SumCommand extends ExecutableCommand { public SumCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command.math; public class RandomCommand extends ExecutableCommand { public RandomCommand(Command... arguments) public String toString() protected double execute(double... arguments) } package model.command; public class MakeCommand extends ExecutableCommand implements VariableLogCommand { public MakeCommand(Command... arguments) public double evaluate(Consumer... providers) protected double execute(double... arguments) public void setVariableLog(VariableLog variables) public void setUpdateVariableLog(Consumer updateVariables) public String toString() } package model.command; public class ConstantCommand extends Command { public ConstantCommand(double value) public String toString() public double evaluate(Consumer... providers) } package model.command.display; public class SetBackgroundCommand extends ExecutableCommand implements CanvasCommand, public SetBackgroundCommand(Command... arguments) public void setCanvas(TurtleCanvas canvas) public void setColorLog(ColorLog colors) public void setUpdateCanvas(Consumer canvas) public void setUpdateColorLog(Consumer updateColorLog) public String toString() protected double execute(double... arguments) } package model.command.display; public class ClearScreenCommand extends AbstractTurtlesCommand implements CanvasCommand { public ClearScreenCommand(Command... arguments) public String toString() protected double execute(double... arguments) protected double executeOne(ModelTurtle turtle, double... arguments) public void setCanvas(TurtleCanvas canvas) public void setUpdateCanvas(Consumer canvas) } package model.command.control; public class IfElseCommand extends Command { public IfElseCommand(Command... arguments) public double evaluate(Consumer... providers) public String toString() } package model.command.control; public class IfCommand extends Command { public IfCommand(Command... arguments) public double evaluate(Consumer... providers) public String toString() } package model.command.control; public class RepeatCommand extends Command implements VariableLogCommand { public RepeatCommand(Command... arguments) public double evaluate(Consumer... providers) public String toString() public void setVariableLog(VariableLog variables) public void setUpdateVariableLog(Consumer updateVariableLog) } package model.command; public class VariableCommand extends ExecutableCommand implements VariableLogCommand { public VariableCommand(String name) public String toString() public void setVariableLog(VariableLog variables) public void setUpdateVariableLog(Consumer updateVariables) protected double execute(double... arguments) } package model.command.interfaces; public interface VariableLogCommand { void setVariableLog(VariableLog variables); void setUpdateVariableLog(Consumer updateView); } package model.command.interfaces; public interface ColorsCommand { void setColorLog(ColorLog colorLog); void setUpdateColorLog(Consumer updateView); } package model.command.interfaces; public interface UDCCommand { void setUDCLog(UserDefCmdLog log); void setUpdateView(Consumer updateView); } package model.command.interfaces; public interface TurtleLogCommand { void setTurtleLog(TurtleLog turtleLog); void setUpdateView(Consumer updateView); } package model.command.interfaces; public interface CanvasCommand { void setCanvas(TurtleCanvas canvas); void setUpdateCanvas(Consumer updateView); } package model; public class VariableLog { public void put(String name, double value) public double get(String name) } package model; public class TurtleLog implements Iterable{ public TurtleLog() public void add() public ModelTurtle getTurtle(int id) public Integer getId(ModelTurtle turtle) public void add(Integer id) public boolean contains(int id) public Iterator iterator() } package model; public class UserDefCmdLog { public UserDefCmdLog() public void add(String name, List variables, List commands) public List getCommands(String name) public List getVariables(String name) } package view.interfacecontrols; public abstract class InterfaceControls { public InterfaceControls() public void setup(String key, List listLog, ListView log, public void updateLog(String input, ListView log, List listLog) } package view.interfacecontrols; public class ListSaveButton extends SaveButton { public ListSaveButton(Saver saver, LogInterface logInterface) throws IOException } package view.interfacecontrols; public class HistoryLog extends InterfaceControls { public HistoryLog() } package view.interfacecontrols; public class InterfaceControlsWrapper implements UIComponent { public InterfaceControlsWrapper(String language, SaveLoadWrapper saveLoadWrapper) public VBox getInterfaceControlLayout() public InterfaceControls getHistoryLog() public InterfaceControls getVariableLog() public InterfaceControls getUserDefCmdLog() public ListView getCmdLog() public ListView getVarLog() public ListView getUserCmdLog() public Node makeRoot() } package view.interfacecontrols; public class MapSaveButton extends SaveButton { public MapSaveButton(Saver saver, LogMaps logMap) throws IOException } package view.interfacecontrols; public abstract class SaveButton extends Button { public SaveButton(Saver saver, LogInterface logInterface) throws IOException public SaveButton(Saver saver, LogMaps logMap) throws IOException protected Button newSaveButton() protected DOMSource toDOM(Saver saver, LogInterface logInterface) throws ParserConfigurationException protected DOMSource toDOM(Saver saver, LogMaps logMap) throws ParserConfigurationException protected Transformer transformer() throws TransformerConfigurationException protected void applyChange(File file, Transformer transformer, DOMSource source) protected File chooseFile(Button btn) protected void setButtonText(String text) } package view.interfacecontrols; public class VariableLog extends InterfaceControls { public VariableLog() } package view; public interface UIComponent { Node makeRoot(); } package view.turtle; public class CircleTurtle extends ViewTurtle { public CircleTurtle(Position offset) public Position getLocalPosition() public Position getGlobalPosition() protected void setLocalPosition(Position position) protected void setGlobalPosition(Position position) public double getWidth() public double getHeight() protected void setAngle(Angle angle) protected Node getNode() } package view.turtle; public class TriangleTurtle extends ViewTurtle{ public TriangleTurtle(Position offset) public Position getLocalPosition() public Position getGlobalPosition() protected void setLocalPosition(Position position) protected void setGlobalPosition(Position position) public double getWidth() public double getHeight() protected void setAngle(Angle angle) protected Node getNode() } package view.turtle; public abstract class ViewTurtle implements UIComponent { public ViewTurtle(Position offset) public abstract Position getLocalPosition(); public abstract Position getGlobalPosition(); protected abstract void setLocalPosition(Position position); protected abstract void setGlobalPosition(Position position); public void update(ImmutableTurtle turtle) public abstract double getWidth(); public abstract double getHeight(); protected Position getOffset() protected abstract void setAngle(Angle angle); protected abstract Node getNode(); public Node makeRoot() } package view.turtle; public class RectangleTurtle extends ViewTurtle { public RectangleTurtle(Position offset) public Position getGlobalPosition() public Position getLocalPosition() protected void setLocalPosition(Position position) protected void setGlobalPosition(Position position) protected void setAngle(Angle angle) protected Node getNode() public double getWidth() public double getHeight() } package view.turtle; public class ImageTurtle extends ViewTurtle { public ImageTurtle(Position offset) public Node getNode() public Position getGlobalPosition() public Position getLocalPosition() protected void setLocalPosition(Position position) protected void setGlobalPosition(Position position) public void update(ImmutableTurtle turtle) public double getWidth() public double getHeight() protected void setAngle(Angle angle) } package view; public class Popup { public Popup() } package view; public class Hexagon extends Polygon { public Hexagon(double sideLength) public void setX(double x) public void setY(double y) } package view; public class Triangle extends Polygon { public Triangle(double sideLength) public void setX(double x) public void setY(double y) public double getX() public double getY() public double getSideLength() } package view; public class TurtleCanvas implements UIComponent { public TurtleCanvas(Position offset) public Node makeRoot() public void update(TurtleLog log) public void clear() public void drawLine(Position position1, Position position2) public void setFill(Color color) public Paint getFill() public Position getOffset() } package view; public class UI { public UI(Controller controller, String language, Consumer executor) public void provideVariables(Command command) public void errorPopUp(Exception e) public void changeLanguage(String language) protected TurtleCanvas getCanvas() public InterfaceControlsWrapper getMyControls() public Scene getScene() public void setInputBoxText(String text) } package view.inputmodule; public class InputBox extends TextArea implements UIComponent{ public InputBox(String language) throws IOException public Parent makeRoot() } package view.inputmodule; public abstract class InputModuleButton extends UIButton implements UIComponent { public InputModuleButton(InputBox inputBox, String language) public InputModuleButton(InputBox inputBox, Controller controller, String language) protected void setProperties() protected abstract void buttonHandler(); protected void executeCommand() protected void clearInputBox() } package view.inputmodule.inputmodulebuttons; public class ClearButton extends InputModuleButton { public ClearButton(InputBox inputBox, String language) throws IOException protected void buttonHandler() } package view.inputmodule.inputmodulebuttons; public class RunButton extends InputModuleButton { public RunButton(InputBox inputBox, Controller controller, String language) throws IOException protected void buttonHandler() } package view.inputmodule; public class InputModule implements UIComponent { public InputModule(Controller controller, String language) throws IOException public void setText(String text) public Parent makeRoot() } package view.taskbar; public class Taskbar extends MenuBar implements UIComponent { public Taskbar(String language, UI ui, Controller controller, TurtleCanvas turtleCanvas, Scene scene) public Node makeRoot() } package view.taskbar; public class LanguageDropdown extends MenuButton { public LanguageDropdown(String language, Controller controller) } package view.taskbar.submenu; public class FileMenu extends SubMenu{ public FileMenu(String language, UI ui) throws IOException, ParserConfigurationException, SAXException protected MenuItem[] setMenuItemArray(String language) } package view.taskbar.submenu; public abstract class SubMenu extends Menu { public SubMenu(String language) throws IOException protected void setProperties() protected abstract MenuItem[] setMenuItemArray(String language) } package view.taskbar.submenu; public class HelpMenu extends SubMenu{ public HelpMenu(String language, Controller controller) throws IOException protected MenuItem[] setMenuItemArray(String language) throws IOException } package view.taskbar.submenu.menuitem.file; public class LoadFileMenuItem extends SubMenuItem { public LoadFileMenuItem(String language, UI ui) } package view.taskbar.submenu.menuitem.file; public class SaveFileMenuItem extends SubMenuItem { public SaveFileMenuItem(String language) throws IOException } package view.taskbar.submenu.menuitem.preference.color; public class ColorMenuItem extends SubMenuItem { public ColorMenuItem(Controller controller, TurtleCanvas turtleCanvas, Scene scene, } package view.taskbar.submenu.menuitem.preference.color; public class ColorChanger { public ColorChanger(Controller controller, TurtleCanvas turtleCanvas, Scene importScene, } package view.taskbar.submenu.menuitem.preference.style; public class StyleMenuItem extends SubMenuItem { public StyleMenuItem(String language, Controller controller, TurtleCanvas turtleCanvas, String style) throws IOException protected void setProperties() } package view.taskbar.submenu.menuitem.preference.style; public class StyleToColor { public static Color getColor(String key) } package view.taskbar.submenu.menuitem.preference.style; public class StyleMenu extends SubMenu { public StyleMenu(String language, Controller controller, TurtleCanvas turtleCanvas, Scene scene) throws IOException protected MenuItem[] setMenuItemArray(String language) throws IOException } package view.taskbar.submenu.menuitem; public class HelpMenuItem extends SubMenuItem{ public HelpMenuItem(String language, Controller controller) throws IOException } package view.taskbar.submenu.menuitem; public abstract class SubMenuItem extends MenuItem { public SubMenuItem(String language) throws IOException protected void setProperties() protected Properties getMyLanguageFile() } package view.taskbar.submenu.menuitem; public class HelpPopUp { public HelpPopUp(String language, Controller controller) } package view.taskbar.submenu; public class PreferenceMenu extends SubMenu { public PreferenceMenu(String language, Controller controller, TurtleCanvas turtleCanvas, protected MenuItem[] setMenuItemArray(String language) throws IOException } package view; public abstract class UIButton extends Button implements UIComponent{ public UIButton() protected abstract void setProperties(); protected abstract void buttonHandler(); public Parent makeRoot() } package exception; public abstract class SLogoException extends Exception{ public SLogoException(String errorType, String errorMessage) } package exception; public class ParsingException extends SLogoException{ public ParsingException(String errorMessage) } package exception; public class InvalidLocationException extends RuntimeException { } package exception; public class EvaluateException extends SLogoException{ public EvaluateException(String errorMessage) } package exception; public class NoButtonTypeFoundException extends IllegalArgumentException{ public NoButtonTypeFoundException(String message) } package exception; public class WrongInputException extends SLogoException { public WrongInputException(String errorMessage) } package exception; public class InvalidDataInXMLException extends SLogoException{ public InvalidDataInXMLException(String errorType, String errorMessage) }