2023-01-07 16:41:56 +01:00
|
|
|
package tpe.exceptions.roboter;
|
|
|
|
|
2023-01-07 18:48:00 +01:00
|
|
|
import java.util.HashMap;
|
|
|
|
|
2023-01-08 10:46:03 +01:00
|
|
|
import tpe.exceptions.RobotException;
|
|
|
|
|
2023-01-07 16:41:56 +01:00
|
|
|
public class RobotFactory {
|
2023-01-08 10:46:03 +01:00
|
|
|
private Robots nexus6=Nexus6.getInstance();
|
|
|
|
private String factoryName;
|
2023-01-07 18:48:00 +01:00
|
|
|
private HashMap<Integer,Robots> robotStock=new HashMap<>();
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
* <code>RobotFactory()</code> mit Namen <br />
|
|
|
|
* {@link Nexus6} in robotStock-HashMap als Standardmäßiger Roboter eingefügt
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public RobotFactory(String factoryName) {
|
|
|
|
this.factoryName=factoryName;
|
|
|
|
robotStock.put(nexus6.getId(), nexus6);
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
* <code>constructRobot()</code> konstruiert Roboter mit durch Kunden gewählten Namen und fügt diese in die HashMap ein <br>
|
|
|
|
* Unterscheidung durch {@link RobotType}
|
|
|
|
* @return Id des erstellten Roboters
|
|
|
|
*/
|
2023-01-07 18:48:00 +01:00
|
|
|
public int constructRobot(RobotType robotType, String name) {
|
|
|
|
Robots robot;
|
2023-01-08 16:28:46 +01:00
|
|
|
|
2023-01-07 18:48:00 +01:00
|
|
|
if(RobotType.R2D2==robotType) {
|
2023-01-09 11:34:00 +01:00
|
|
|
robot=new R2D2(name, createIDR2D2(10000));
|
2023-01-07 18:48:00 +01:00
|
|
|
robotStock.put(robot.getId(), robot);
|
|
|
|
return robot.getId();
|
2023-01-08 16:28:46 +01:00
|
|
|
}
|
2023-01-08 19:02:39 +01:00
|
|
|
else {
|
2023-01-09 11:34:00 +01:00
|
|
|
robot=new C3PO(name, createIDC3PO(10000));
|
2023-01-07 18:48:00 +01:00
|
|
|
robotStock.put(robot.getId(), robot);
|
|
|
|
return robot.getId();
|
|
|
|
}
|
2023-01-08 19:02:39 +01:00
|
|
|
|
2023-01-07 18:48:00 +01:00
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
* RoboterID wird über Math.random() erstellt entsprechend der Anforderung variiert der Zahlenbereich
|
|
|
|
* @param value
|
|
|
|
* @return ID für die in <code>constructRobot()</code> erstellten Roboter
|
|
|
|
*/
|
2023-01-09 11:34:00 +01:00
|
|
|
private int createIDR2D2(int value) {
|
2023-01-07 18:48:00 +01:00
|
|
|
|
2023-01-09 11:34:00 +01:00
|
|
|
int randomID = (int) (Math.random()*(value)) ;
|
2023-01-07 18:48:00 +01:00
|
|
|
if(robotStock.containsKey(randomID))
|
|
|
|
{
|
2023-01-09 11:34:00 +01:00
|
|
|
createIDR2D2(value);
|
2023-01-08 09:54:17 +01:00
|
|
|
}
|
|
|
|
return randomID;
|
|
|
|
}
|
2023-01-09 11:34:00 +01:00
|
|
|
private int createIDC3PO(int value) {
|
2023-01-08 09:54:17 +01:00
|
|
|
|
2023-01-09 11:34:00 +01:00
|
|
|
int randomID = (int) (Math.random()*(value))+value ;
|
2023-01-08 09:54:17 +01:00
|
|
|
if(robotStock.containsKey(randomID))
|
|
|
|
{
|
2023-01-09 11:34:00 +01:00
|
|
|
createIDC3PO(value);
|
2023-01-07 18:48:00 +01:00
|
|
|
}
|
|
|
|
return randomID;
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return Gibt den Namen der Fabrik zurück
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public String getFactoryName() {
|
|
|
|
return factoryName;
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
* Durchsucht die HashMap über Object Key in diesem Fall die Roboter ID
|
|
|
|
* @param id
|
|
|
|
* @return Gibt den zur entsprechenden ID gefunden Roboter zurück
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public Robots getRobot(int id) {
|
|
|
|
return robotStock.get(id);
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
* Schaltet den Roboter an bzw. aus und ruft Methode aus {@link Robots} auf
|
|
|
|
* @param id
|
|
|
|
* @return Rückgabe ob Roboter an ist true=an false=aus
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public boolean triggerPower(int id) {
|
|
|
|
Robots robot=getRobot(id);
|
|
|
|
robot.triggerPowerSwitch();
|
|
|
|
return robot.powerStatus;
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param id
|
|
|
|
* @return Rückgabe ob Roboter an ist true=an false=aus
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public boolean powerStatus(int id) {
|
|
|
|
Robots robot=getRobot(id);
|
|
|
|
return robot.powerStatus;
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
* Sucht die Informationen zum über die ID gesuchten Roboter aus der HashMap
|
|
|
|
* @param id
|
|
|
|
* @return Gibt die Informationen zum über die ID gesuchten Roboter aus
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public String robotInfo(int id) {
|
|
|
|
Robots robot=getRobot(id);
|
|
|
|
return robot.toString();
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
* Ermöglicht Roboter zur jeweiligen ID aus der HashMap zu löschen => Roboter Instanz löschen
|
|
|
|
* @param id
|
|
|
|
* @return Bei null wurde kein Roboter zur ID gefunden falls Roboter zurückgegeben wird ist dieser gelöscht
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public Robots dismantleRobot(int id) {
|
|
|
|
return robotStock.remove(id);
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
* Sucht den Roboter zur ID aus der HashMap und ermittelt über {@link Robots} Funktion die {@link RobotException}
|
|
|
|
* @param id
|
|
|
|
* @return Gibt {@link RobotException} zurück
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public RobotException robotBlackbox(int id) {
|
|
|
|
Robots robot=getRobot(id);
|
|
|
|
return robot.getLastException();
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
* Ruft die definierten Funktionalitäten aus {@link RobotInstructions} auf
|
|
|
|
* @param id
|
|
|
|
* @param zahlen
|
|
|
|
* @return Ergebnis der Instructions bei Fehler einer {@link RobotException}
|
|
|
|
* @throws RobotException
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public String robotInstructions(int id, int[]zahlen) throws RobotException {
|
|
|
|
Robots robot=getRobot(id);
|
|
|
|
return robot.speak(robot.think(zahlen));
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return Gibt die Größe der HashMap zurück
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public int robotStockSize() {
|
|
|
|
return robotStock.size();
|
|
|
|
}
|
2023-01-09 13:30:24 +01:00
|
|
|
/**
|
|
|
|
* Prüft ob Roboter mit übergebener ID existiert
|
|
|
|
* @param id
|
|
|
|
* @return True=Roboter existier; False=Roboter existiert nicht
|
|
|
|
*/
|
2023-01-08 10:46:03 +01:00
|
|
|
public boolean containsRobot(int id) {
|
|
|
|
return robotStock.containsKey(id);
|
|
|
|
}
|
2023-01-07 16:41:56 +01:00
|
|
|
}
|