package domain; import utility.robot_exceptions.ExceptionStorage; import utility.robot_exceptions.RobotException; import utility.robot_exceptions.robotExceptions; import java.io.Serializable; import java.util.Arrays; import java.util.stream.Collectors; public abstract class Robot implements utility.interfaces.Robot, Serializable { // ENUMS für Robot Type static enum RobotType { C3PO, R2D2, Nexus6; } protected ExceptionStorage exceptions; private int id; private final String name; private boolean power; private RobotType type; public Robot(int id, String name, RobotType type){ this.id = id; this.name = name; this.power = false; this.exceptions = null; this.type = type; } /** * @see utility.interfaces.RobotControl; */ @Override public int getId() { return id; } /** * @see utility.interfaces.RobotControl; */ @Override public String getName() { return name; } /** * @see utility.interfaces.RobotControl; */ @Override public void triggerPowerSwitch() { power = !power; } /** * @see utility.interfaces.RobotControl; */ @Override public boolean isPowerOn() { return power; } /** * @see utility.interfaces.RobotControl; */ @Override public RobotException getLastException() { return exceptions.getLastErrorMessage(); } /** * This method checks an array of integers and gives back a boolean value. * If the array contains the number 42 the method returns false. * Otherwise, always true. * * If the length of the Array = 0 it throws an EMPTYARRAY-Exception * @param input * @return boolean * @throws RobotException EMPTYARRAY Exception */ // Check lists for the forbidden Number 42 public boolean checkArray(int[] input) throws RobotException{ if(input.length != 0){ for(int x: input){ if(x == 42){ return false; } } return true; }else{ RobotException robotexception = new RobotException(robotExceptions.EMPTYARRAY, getName()); this.exceptions = new ExceptionStorage(robotexception); throw robotexception; } } /** * This method uses Streams to join any given array to a String. * @param input int [ ] * @param delemiter String * @return String (array as String) * @throws RobotException */ // Write an array with a delimiter to the command line public String output(int[] input, String delemiter)throws RobotException{ if(checkArray(input)) { return Arrays.stream(input) .mapToObj(Integer::toString) .collect(Collectors.joining(delemiter + " ")); }else{ RobotException robotexception = new RobotException(robotExceptions.MAGICVALUE, getName()); this.exceptions = new ExceptionStorage(robotexception); throw robotexception; } } public String getType(){ return this.type.toString(); } // Override the to String method to get a clean looking outcome @Override public String toString(){ return "Name: " + name + "; ID: " + id + "; Type: " + type; } }