mirror of
https://gitlab.com/arnekeller/kit-programmieren-ws1920-final1.git
synced 2024-11-24 01:15:05 +00:00
Create logic exception and use that in logic objects
This commit is contained in:
parent
18d467e8ab
commit
ed615fcf6b
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static edu.kit.informatik.modelrailwaysimulator.ui.command.CommandFactory.NUMBER;
|
||||
@ -34,12 +32,12 @@ public abstract class Coach extends RollingStock {
|
||||
* @param length length of coach
|
||||
* @param couplingFront whether the coach should have a front coupling
|
||||
* @param couplingBack whether the coach should have a back coupling
|
||||
* @throws InvalidInputException on invalid user input (e.g. zero-sized coach)
|
||||
* @throws LogicException on invalid user input (e.g. zero-sized coach)
|
||||
*/
|
||||
public Coach(int identifier, int length, boolean couplingFront, boolean couplingBack) throws InvalidInputException {
|
||||
public Coach(int identifier, int length, boolean couplingFront, boolean couplingBack) throws LogicException {
|
||||
super(length, couplingFront, couplingBack);
|
||||
if (identifier < 1) {
|
||||
throw new InvalidInputException("coach id has to be positive!");
|
||||
throw new LogicException("coach id has to be positive!");
|
||||
}
|
||||
this.identifier = identifier;
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
/**
|
||||
* Diesel engine.
|
||||
*
|
||||
@ -29,10 +27,10 @@ public class DieselEngine extends Engine {
|
||||
* @param length length of engine
|
||||
* @param couplingFront whether the engine should have a front coupling
|
||||
* @param couplingBack whether the engine should have a back coupling
|
||||
* @throws InvalidInputException on invalid user input (e.g. zero-sized engine)
|
||||
* @throws LogicException on invalid user input (e.g. zero-sized engine)
|
||||
*/
|
||||
public DieselEngine(String series, String name, int length,
|
||||
boolean couplingFront, boolean couplingBack) throws InvalidInputException {
|
||||
boolean couplingFront, boolean couplingBack) throws LogicException {
|
||||
super(series, name, length, couplingFront, couplingBack);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
/**
|
||||
* Electrical engine.
|
||||
*
|
||||
@ -31,10 +29,10 @@ public class ElectricalEngine extends Engine {
|
||||
* @param length length of engine
|
||||
* @param couplingFront whether the engine should have a front coupling
|
||||
* @param couplingBack whether the engine should have a back coupling
|
||||
* @throws InvalidInputException on invalid user input (e.g. zero-sized engine)
|
||||
* @throws LogicException on invalid user input (e.g. zero-sized engine)
|
||||
*/
|
||||
public ElectricalEngine(String series, String name, int length, boolean couplingFront, boolean couplingBack)
|
||||
throws InvalidInputException {
|
||||
throws LogicException {
|
||||
super(series, name, length, couplingFront, couplingBack);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
/**
|
||||
* Generic engine, is usually either diesel, steam or electric.
|
||||
*
|
||||
@ -26,10 +24,10 @@ public abstract class Engine extends RollingStock {
|
||||
* @param length length of this engine
|
||||
* @param couplingFront whether this engine should have a front coupling
|
||||
* @param couplingBack whether this engine should have a back coupling
|
||||
* @throws InvalidInputException on invalid user input (zero-sized coach)
|
||||
* @throws LogicException on invalid user input (zero-sized coach)
|
||||
*/
|
||||
protected Engine(String series, String name, int length,
|
||||
boolean couplingFront, boolean couplingBack) throws InvalidInputException {
|
||||
boolean couplingFront, boolean couplingBack) throws LogicException {
|
||||
super(length, couplingFront, couplingBack);
|
||||
this.series = series;
|
||||
this.name = name;
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
/**
|
||||
* A freight coach.
|
||||
*
|
||||
@ -27,10 +25,10 @@ public class FreightCoach extends Coach {
|
||||
* @param length length of coach
|
||||
* @param couplingFront whether the coach should have a front coupling
|
||||
* @param couplingBack whether the coach should have a back coupling
|
||||
* @throws InvalidInputException on invalid user input (e.g. zero-sized coach)
|
||||
* @throws LogicException on invalid user input (e.g. zero-sized coach)
|
||||
*/
|
||||
public FreightCoach(int identifier, int length, boolean couplingFront, boolean couplingBack)
|
||||
throws InvalidInputException {
|
||||
throws LogicException {
|
||||
super(identifier, length, couplingFront, couplingBack);
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,18 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
/**
|
||||
* Thrown on illogical input or impossible to fulfill input.
|
||||
*
|
||||
* @author Arne Keller
|
||||
* @version 1.0
|
||||
*/
|
||||
public class LogicException extends Exception {
|
||||
/**
|
||||
* Construct a new logic exception with a specific message.
|
||||
*
|
||||
* @param message the error message
|
||||
*/
|
||||
public LogicException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.CoachType;
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -55,9 +54,9 @@ public class ModelRailwaySimulation {
|
||||
* @param start start position of the new track
|
||||
* @param end end position of the new track
|
||||
* @return the positive identifier of the new track if successful, -1 if none available
|
||||
* @throws InvalidInputException if user input is invalid (e.g. zero length track)
|
||||
* @throws LogicException if user input is invalid (e.g. zero length track)
|
||||
*/
|
||||
public int addTrack(Vector2D start, Vector2D end) throws InvalidInputException {
|
||||
public int addTrack(Vector2D start, Vector2D end) throws LogicException {
|
||||
return railNetwork.addTrack(start, end);
|
||||
}
|
||||
|
||||
@ -68,9 +67,9 @@ public class ModelRailwaySimulation {
|
||||
* @param end1 end position 1 of the switch
|
||||
* @param end2 end position 2 of the switch
|
||||
* @return the positive identifier of the switch if successful, -1 otherwise
|
||||
* @throws InvalidInputException if the new switch would be invalid
|
||||
* @throws LogicException if the new switch would be invalid
|
||||
*/
|
||||
public int addSwitch(Vector2D start, Vector2D end1, Vector2D end2) throws InvalidInputException {
|
||||
public int addSwitch(Vector2D start, Vector2D end1, Vector2D end2) throws LogicException {
|
||||
return railNetwork.addSwitch(start, end1, end2);
|
||||
}
|
||||
|
||||
@ -115,12 +114,12 @@ public class ModelRailwaySimulation {
|
||||
* Add a new engine to the simulation.
|
||||
*
|
||||
* @param newEngine the engine to add to the simulation
|
||||
* @throws InvalidInputException when the identifier is already in use
|
||||
* @throws LogicException when the identifier is already in use
|
||||
*/
|
||||
public void createEngine(Engine newEngine) throws InvalidInputException {
|
||||
public void createEngine(Engine newEngine) throws LogicException {
|
||||
final String id = newEngine.getIdentifier();
|
||||
if (engines.containsKey(id) || trainSets.containsKey(id)) {
|
||||
throw new InvalidInputException("engine identifier already used");
|
||||
throw new LogicException("engine identifier already used");
|
||||
}
|
||||
engines.put(id, newEngine);
|
||||
}
|
||||
@ -147,10 +146,10 @@ public class ModelRailwaySimulation {
|
||||
* @param couplingFront whether the coach should have a front coupling
|
||||
* @param couplingBack whether the coach should have a back coupling
|
||||
* @return the identifier of the coach if successfully added, -1 if none available
|
||||
* @throws InvalidInputException if user input is invalid (e.g. zero-sized coach)
|
||||
* @throws LogicException if user input is invalid (e.g. zero-sized coach)
|
||||
*/
|
||||
public int createCoach(CoachType coachType, int length,
|
||||
boolean couplingFront, boolean couplingBack) throws InvalidInputException {
|
||||
boolean couplingFront, boolean couplingBack) throws LogicException {
|
||||
final int id = getNextCoachIdentifier();
|
||||
if (id < 0) {
|
||||
return -1;
|
||||
@ -189,12 +188,12 @@ public class ModelRailwaySimulation {
|
||||
* Add a new train set to the simulation.
|
||||
*
|
||||
* @param newTrainSet the train set to add
|
||||
* @throws InvalidInputException if the identifier is already used
|
||||
* @throws LogicException if the identifier is already used
|
||||
*/
|
||||
public void createTrainSet(TrainSet newTrainSet) throws InvalidInputException {
|
||||
public void createTrainSet(TrainSet newTrainSet) throws LogicException {
|
||||
final String id = newTrainSet.getIdentifier();
|
||||
if (engines.containsKey(id) || trainSets.containsKey(id)) {
|
||||
throw new InvalidInputException("train set identifier already used");
|
||||
throw new LogicException("train set identifier already used");
|
||||
}
|
||||
trainSets.put(id, newTrainSet);
|
||||
}
|
||||
@ -258,13 +257,13 @@ public class ModelRailwaySimulation {
|
||||
* @param trainId identifier of the train
|
||||
* @param rollingStockId identifier of the rolling stock
|
||||
* @return the added rolling stock
|
||||
* @throws InvalidInputException if train not found and train identifier is not next identifier or rolling stock
|
||||
* @throws LogicException if train not found and train identifier is not next identifier or rolling stock
|
||||
* is not found
|
||||
*/
|
||||
public RollingStock addTrain(int trainId, String rollingStockId) throws InvalidInputException {
|
||||
public RollingStock addTrain(int trainId, String rollingStockId) throws LogicException {
|
||||
final Optional<RollingStock> rollingStock = getRollingStock(rollingStockId);
|
||||
if (!rollingStock.isPresent()) {
|
||||
throw new InvalidInputException("rolling stock not found");
|
||||
throw new LogicException("rolling stock not found");
|
||||
}
|
||||
trainManager.addTrain(trainId, rollingStock.get());
|
||||
return rollingStock.get();
|
||||
@ -304,9 +303,9 @@ public class ModelRailwaySimulation {
|
||||
*
|
||||
* @param id identifier of the train to show
|
||||
* @return rows of ASCII art representing this train
|
||||
* @throws InvalidInputException if train not found
|
||||
* @throws LogicException if train not found
|
||||
*/
|
||||
public List<String> showTrain(int id) throws InvalidInputException {
|
||||
public List<String> showTrain(int id) throws LogicException {
|
||||
return trainManager.showTrain(id);
|
||||
}
|
||||
|
||||
@ -317,10 +316,10 @@ public class ModelRailwaySimulation {
|
||||
* @param position where to place the train
|
||||
* @param direction direction in which the train should initially go
|
||||
* @return whether the train was successfully placed
|
||||
* @throws InvalidInputException if train could not be found, is already placed, is not valid, direction is invalid
|
||||
* @throws LogicException if train could not be found, is already placed, is not valid, direction is invalid
|
||||
* or railway network is not ready for trains
|
||||
*/
|
||||
public boolean putTrain(int trainId, Vector2D position, Vector2D direction) throws InvalidInputException {
|
||||
public boolean putTrain(int trainId, Vector2D position, Vector2D direction) throws LogicException {
|
||||
return trainManager.putTrain(trainId, position, direction);
|
||||
}
|
||||
|
||||
@ -329,9 +328,9 @@ public class ModelRailwaySimulation {
|
||||
*
|
||||
* @param speed amount of steps to move the trains
|
||||
* @return train collisions, no value if no trains are placed
|
||||
* @throws InvalidInputException if the simulation is not yet ready
|
||||
* @throws LogicException if the simulation is not yet ready
|
||||
*/
|
||||
public Optional<List<SortedSet<Integer>>> step(short speed) throws InvalidInputException {
|
||||
public Optional<List<SortedSet<Integer>>> step(short speed) throws LogicException {
|
||||
return trainManager.step(speed);
|
||||
}
|
||||
}
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
/**
|
||||
* A passenger coach.
|
||||
*
|
||||
@ -28,10 +26,10 @@ public class PassengerCoach extends Coach {
|
||||
* @param length length of coach
|
||||
* @param couplingFront whether the coach should have a front coupling
|
||||
* @param couplingBack whether the coach should have a back coupling
|
||||
* @throws InvalidInputException on invalid user input (e.g. zero-sized coach)
|
||||
* @throws LogicException on invalid user input (e.g. zero-sized coach)
|
||||
*/
|
||||
public PassengerCoach(int identifier, int length, boolean couplingFront, boolean couplingBack)
|
||||
throws InvalidInputException {
|
||||
throws LogicException {
|
||||
super(identifier, length, couplingFront, couplingBack);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
@ -31,13 +29,13 @@ public class RailwayNetwork {
|
||||
* @param start start position of the new track
|
||||
* @param end end position of the new track
|
||||
* @return the positive identifier of the new track if successful, -1 if none available
|
||||
* @throws InvalidInputException if the user provides incorrect input
|
||||
* @throws LogicException if the user provides incorrect input
|
||||
*/
|
||||
public int addTrack(Vector2D start, Vector2D end) throws InvalidInputException {
|
||||
public int addTrack(Vector2D start, Vector2D end) throws LogicException {
|
||||
final long startPossibleConnections = rails.values().stream().filter(rail -> rail.canConnectTo(start)).count();
|
||||
final long endPossibleConnections = rails.values().stream().filter(rail -> rail.canConnectTo(end)).count();
|
||||
if (startPossibleConnections == 2 || endPossibleConnections == 2) {
|
||||
throw new InvalidInputException("track would connect to two other rails");
|
||||
throw new LogicException("track would connect to two other rails");
|
||||
}
|
||||
if (rails.isEmpty()) {
|
||||
final Track newTrack = new Track(start, end, 1);
|
||||
@ -53,7 +51,7 @@ public class RailwayNetwork {
|
||||
rails.put(id, newTrack);
|
||||
return newTrack.getIdentifier();
|
||||
} else {
|
||||
throw new InvalidInputException("track is not connected to other tracks");
|
||||
throw new LogicException("track is not connected to other tracks");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -65,9 +63,9 @@ public class RailwayNetwork {
|
||||
* @param end1 end position 1 of the switch
|
||||
* @param end2 end position 2 of the switch
|
||||
* @return the positive identifier of the switch if successful, -1 otherwise
|
||||
* @throws InvalidInputException when the new switch would be invalid
|
||||
* @throws LogicException when the new switch would be invalid
|
||||
*/
|
||||
public int addSwitch(Vector2D start, Vector2D end1, Vector2D end2) throws InvalidInputException {
|
||||
public int addSwitch(Vector2D start, Vector2D end1, Vector2D end2) throws LogicException {
|
||||
if (rails.isEmpty()) {
|
||||
final Switch newSwitch = new Switch(start, end1, end2, 1);
|
||||
rails.put(1, newSwitch);
|
||||
@ -77,7 +75,7 @@ public class RailwayNetwork {
|
||||
final long end1Connections = rails.values().stream().filter(rail -> rail.canConnectTo(end1)).count();
|
||||
final long end2Connections = rails.values().stream().filter(rail -> rail.canConnectTo(end2)).count();
|
||||
if (startConnections == 2 || end1Connections == 2 || end2Connections == 2) {
|
||||
throw new InvalidInputException("switch endpoint would connect to two other rails");
|
||||
throw new LogicException("switch endpoint would connect to two other rails");
|
||||
}
|
||||
if (rails.values().stream()
|
||||
.anyMatch(rail -> rail.canConnectTo(start) || rail.canConnectTo(end1) || rail.canConnectTo(end2))) {
|
||||
@ -89,7 +87,7 @@ public class RailwayNetwork {
|
||||
rails.put(id, newSwitch);
|
||||
return newSwitch.getIdentifier();
|
||||
} else {
|
||||
throw new InvalidInputException("switch not connected to other rails");
|
||||
throw new LogicException("switch not connected to other rails");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
/**
|
||||
* A rolling stock with a specific integer length and couplings. Is usually an engine, train set or coach.
|
||||
*
|
||||
@ -28,14 +26,14 @@ public abstract class RollingStock {
|
||||
* @param length length of this rolling stock
|
||||
* @param couplingFront whether this rolling stock should have a front coupling
|
||||
* @param couplingBack whether this rolling stock should have a back coupling
|
||||
* @throws InvalidInputException on invalid user input (e.g. zero-sized coach)
|
||||
* @throws LogicException on invalid user input (e.g. zero-sized coach)
|
||||
*/
|
||||
protected RollingStock(int length, boolean couplingFront, boolean couplingBack) throws InvalidInputException {
|
||||
protected RollingStock(int length, boolean couplingFront, boolean couplingBack) throws LogicException {
|
||||
if (length < 1) {
|
||||
throw new InvalidInputException("rolling stock length has to be positive");
|
||||
throw new LogicException("rolling stock length has to be positive");
|
||||
}
|
||||
if (!couplingFront && !couplingBack) {
|
||||
throw new InvalidInputException("rolling stocks needs at least one coupling");
|
||||
throw new LogicException("rolling stocks needs at least one coupling");
|
||||
}
|
||||
this.length = length;
|
||||
this.couplingFront = couplingFront;
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
/**
|
||||
* A special coach, used for e.g. firefighting.
|
||||
*
|
||||
@ -29,10 +27,10 @@ public class SpecialCoach extends Coach {
|
||||
* @param length length of coach
|
||||
* @param couplingFront whether the coach should have a front coupling
|
||||
* @param couplingBack whether the coach should have a back coupling
|
||||
* @throws InvalidInputException on invalid user input (e.g. zero-sized coach)
|
||||
* @throws LogicException on invalid user input (e.g. zero-sized coach)
|
||||
*/
|
||||
public SpecialCoach(int identifier, int length, boolean couplingFront, boolean couplingBack)
|
||||
throws InvalidInputException {
|
||||
throws LogicException {
|
||||
super(identifier, length, couplingFront, couplingBack);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
/**
|
||||
* Steam engine.
|
||||
*
|
||||
@ -29,10 +27,10 @@ public class SteamEngine extends Engine {
|
||||
* @param length length of engine
|
||||
* @param couplingFront whether the engine should have a front coupling
|
||||
* @param couplingBack whether the engine should have a back coupling
|
||||
* @throws InvalidInputException on invalid user input (e.g. zero-sized engine)
|
||||
* @throws LogicException on invalid user input (e.g. zero-sized engine)
|
||||
*/
|
||||
public SteamEngine(String series, String name, int length, boolean couplingFront, boolean couplingBack)
|
||||
throws InvalidInputException {
|
||||
throws LogicException {
|
||||
super(series, name, length, couplingFront, couplingBack);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@ -31,12 +29,12 @@ public final class Switch extends Rail {
|
||||
* @param end1 first end position
|
||||
* @param end2 second end position
|
||||
* @param id identifier of this switch
|
||||
* @throws InvalidInputException if the switch is not composed of straight lines, or has zero-length parts
|
||||
* @throws LogicException if the switch is not composed of straight lines, or has zero-length parts
|
||||
*/
|
||||
public Switch(Vector2D start, Vector2D end1, Vector2D end2, int id) throws InvalidInputException {
|
||||
public Switch(Vector2D start, Vector2D end1, Vector2D end2, int id) throws LogicException {
|
||||
super(id);
|
||||
if (start.distanceTo(end1) == 0 || start.distanceTo(end2) == 0 || end1.distanceTo(end2) == 0) {
|
||||
throw new InvalidInputException("switch has length zero");
|
||||
throw new LogicException("switch has length zero");
|
||||
}
|
||||
this.positionOne = new Track(start, end1, 1);
|
||||
this.positionTwo = new Track(start, end2, 1);
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@ -26,14 +24,14 @@ public final class Track extends Rail {
|
||||
* @param start start position of the track
|
||||
* @param end end position of the track
|
||||
* @param id identifier to use
|
||||
* @throws InvalidInputException if the positions are not on a straight line
|
||||
* @throws LogicException if the positions are not on a straight line
|
||||
*/
|
||||
public Track(Vector2D start, Vector2D end, int id) throws InvalidInputException {
|
||||
public Track(Vector2D start, Vector2D end, int id) throws LogicException {
|
||||
super(id);
|
||||
if (start.distanceTo(end) == 0) {
|
||||
throw new InvalidInputException("track has length zero");
|
||||
throw new LogicException("track has length zero");
|
||||
} else if (start.getX() != end.getX() && start.getY() != end.getY()) {
|
||||
throw new InvalidInputException("invalid track segment: not a straight line");
|
||||
throw new LogicException("invalid track segment: not a straight line");
|
||||
}
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
@ -76,16 +74,16 @@ public final class Train implements Comparable<Train> {
|
||||
* Add a rolling stock to this train.
|
||||
*
|
||||
* @param rollingStock the rolling stack to add
|
||||
* @throws InvalidInputException if the rolling stock could not be added to the train
|
||||
* @throws LogicException if the rolling stock could not be added to the train
|
||||
*/
|
||||
public void add(RollingStock rollingStock) throws InvalidInputException {
|
||||
public void add(RollingStock rollingStock) throws LogicException {
|
||||
final RollingStock last = rollingStocks.get(rollingStocks.size() - 1);
|
||||
// make sure special coupling requirements are honored
|
||||
if (rollingStock.hasCouplingFront() && last.hasCouplingBack()
|
||||
&& rollingStock.canCoupleTo(last) && last.canCoupleTo(rollingStock)) {
|
||||
rollingStocks.add(rollingStock);
|
||||
} else {
|
||||
throw new InvalidInputException("could not add rolling stock to train");
|
||||
throw new LogicException("could not add rolling stock to train");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
@ -77,23 +75,23 @@ public final class TrainManager {
|
||||
*
|
||||
* @param trainId train identifier
|
||||
* @param rollingStock rolling stock to add
|
||||
* @throws InvalidInputException on invalid user input (e.g. rolling stock in use)
|
||||
* @throws LogicException on invalid user input (e.g. rolling stock in use)
|
||||
*/
|
||||
public void addTrain(int trainId, RollingStock rollingStock) throws InvalidInputException {
|
||||
public void addTrain(int trainId, RollingStock rollingStock) throws LogicException {
|
||||
if (getTrainContainingRollingStock(rollingStock).isPresent()) {
|
||||
throw new InvalidInputException("rolling stock already used");
|
||||
throw new LogicException("rolling stock already used");
|
||||
}
|
||||
final Train train = trains.get(trainId);
|
||||
if (train == null) { // create new train
|
||||
final int correctId = getNextTrainIdentifier();
|
||||
if (trainId != correctId) {
|
||||
throw new InvalidInputException("new train identifier must be next free identifier");
|
||||
throw new LogicException("new train identifier must be next free identifier");
|
||||
}
|
||||
final Train newTrain = new Train(trainId, rollingStock);
|
||||
trains.put(trainId, newTrain);
|
||||
} else {
|
||||
if (train.isPlaced()) {
|
||||
throw new InvalidInputException("can not add rolling stock to placed train");
|
||||
throw new LogicException("can not add rolling stock to placed train");
|
||||
}
|
||||
train.add(rollingStock);
|
||||
}
|
||||
@ -139,14 +137,14 @@ public final class TrainManager {
|
||||
*
|
||||
* @param trainId identifier of the train to show
|
||||
* @return ASCII art representation of said train
|
||||
* @throws InvalidInputException if train not found
|
||||
* @throws LogicException if train not found
|
||||
*/
|
||||
public List<String> showTrain(int trainId) throws InvalidInputException {
|
||||
public List<String> showTrain(int trainId) throws LogicException {
|
||||
final Train train = trains.get(trainId);
|
||||
if (train != null) {
|
||||
return train.show();
|
||||
} else {
|
||||
throw new InvalidInputException("no such train");
|
||||
throw new LogicException("no such train");
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,21 +156,21 @@ public final class TrainManager {
|
||||
* @param position where to place the train
|
||||
* @param direction direction in which the train should initially go
|
||||
* @return whether the train was successfully placed
|
||||
* @throws InvalidInputException if train could not be found, is already placed, is not valid, direction is invalid
|
||||
* @throws LogicException if train could not be found, is already placed, is not valid, direction is invalid
|
||||
* or railway network is not ready for trains
|
||||
*/
|
||||
public boolean putTrain(int trainId, Vector2D position, Vector2D direction) throws InvalidInputException {
|
||||
public boolean putTrain(int trainId, Vector2D position, Vector2D direction) throws LogicException {
|
||||
final Train train = trains.get(trainId);
|
||||
if (train == null) {
|
||||
throw new InvalidInputException("train not found");
|
||||
throw new LogicException("train not found");
|
||||
} else if (!train.isProperTrain()) {
|
||||
throw new InvalidInputException("train is not valid");
|
||||
throw new LogicException("train is not valid");
|
||||
} else if (train.isPlaced()) {
|
||||
throw new InvalidInputException("train is already placed");
|
||||
throw new LogicException("train is already placed");
|
||||
} else if (!direction.isDirection()) {
|
||||
throw new InvalidInputException("invalid train direction");
|
||||
throw new LogicException("invalid train direction");
|
||||
} else if (!railNetwork.isReadyForTrains()) {
|
||||
throw new InvalidInputException("switches not set up");
|
||||
throw new LogicException("switches not set up");
|
||||
}
|
||||
// attempt to place train
|
||||
final boolean placed = train.placeOn(railNetwork, position, direction);
|
||||
@ -305,11 +303,11 @@ public final class TrainManager {
|
||||
*
|
||||
* @param speed amount of steps to move the trains
|
||||
* @return train collisions, no value if no trains are placed
|
||||
* @throws InvalidInputException if simulation is not yet ready
|
||||
* @throws LogicException if simulation is not yet ready
|
||||
*/
|
||||
public Optional<List<SortedSet<Integer>>> step(short speed) throws InvalidInputException {
|
||||
public Optional<List<SortedSet<Integer>>> step(short speed) throws LogicException {
|
||||
if (!railNetwork.isReadyForTrains()) {
|
||||
throw new InvalidInputException("rail tracks/switches not set up");
|
||||
throw new LogicException("rail tracks/switches not set up");
|
||||
}
|
||||
if (trains.values().stream().noneMatch(Train::isPlaced)) {
|
||||
return Optional.empty();
|
||||
|
@ -1,7 +1,5 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.model;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
/**
|
||||
* Train set.
|
||||
*
|
||||
@ -40,10 +38,10 @@ public class TrainSet extends RollingStock {
|
||||
* @param length length of train set
|
||||
* @param couplingFront whether the train set should have a front coupling
|
||||
* @param couplingBack whether the train set should have a back coupling
|
||||
* @throws InvalidInputException on invalid user input (e.g. zero-sized train set)
|
||||
* @throws LogicException on invalid user input (e.g. zero-sized train set)
|
||||
*/
|
||||
public TrainSet(String series, String name, int length, boolean couplingFront, boolean couplingBack)
|
||||
throws InvalidInputException {
|
||||
throws LogicException {
|
||||
super(length, couplingFront, couplingBack);
|
||||
this.name = name;
|
||||
this.series = series;
|
||||
|
@ -2,6 +2,7 @@ package edu.kit.informatik.modelrailwaysimulator.ui;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.Coach;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.FreightCoach;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.PassengerCoach;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.SpecialCoach;
|
||||
|
||||
@ -38,10 +39,10 @@ public enum CoachType {
|
||||
* @param couplingFront whether the coach should have a front coupling
|
||||
* @param couplingBack whether the coach should have a back coupling
|
||||
* @return new coach
|
||||
* @throws InvalidInputException on invalid input (e.g. zero-sized coach)
|
||||
* @throws LogicException on invalid input (e.g. zero-sized coach)
|
||||
*/
|
||||
public Coach createCoach(int id, int length, boolean couplingFront, boolean couplingBack)
|
||||
throws InvalidInputException {
|
||||
throws LogicException {
|
||||
switch (this) {
|
||||
case PASSENGER:
|
||||
return new PassengerCoach(id, length, couplingFront, couplingBack);
|
||||
|
@ -1,7 +1,9 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.ui;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.Terminal;
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.command.Command;
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.command.CommandFactory;
|
||||
|
||||
/**
|
||||
@ -46,10 +48,17 @@ public final class CommandLine {
|
||||
}
|
||||
}
|
||||
|
||||
final Command command;
|
||||
try {
|
||||
CommandFactory.getCommand(input).apply(simulation);
|
||||
command = CommandFactory.getCommand(input);
|
||||
} catch (final NumberFormatException | InvalidInputException e) {
|
||||
Terminal.printError(e.getMessage());
|
||||
Terminal.printError("input error: " + e.getMessage());
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
command.apply(simulation);
|
||||
} catch (final NumberFormatException | LogicException e) {
|
||||
Terminal.printError("logic error: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package edu.kit.informatik.modelrailwaysimulator.ui;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.DieselEngine;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ElectricalEngine;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.Engine;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.SteamEngine;
|
||||
|
||||
/**
|
||||
@ -39,10 +40,10 @@ public enum EngineType {
|
||||
* @param couplingFront whether the engine should have a front coupling
|
||||
* @param couplingBack whether the engine should have a back coupling
|
||||
* @return new engine
|
||||
* @throws InvalidInputException on invalid input (e.g. zero-sized engine)
|
||||
* @throws LogicException on invalid input (e.g. zero-sized engine)
|
||||
*/
|
||||
public Engine createEngine(String series, String name, int length, boolean couplingFront, boolean couplingBack)
|
||||
throws InvalidInputException {
|
||||
throws LogicException {
|
||||
switch (this) {
|
||||
case ELECTRICAL:
|
||||
return new ElectricalEngine(series, name, length, couplingFront, couplingBack);
|
||||
|
@ -1,5 +1,6 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.ui.command;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.Vector2D;
|
||||
import edu.kit.informatik.Terminal;
|
||||
@ -38,7 +39,7 @@ public class AddSwitch extends Command {
|
||||
private Vector2D end2;
|
||||
|
||||
@Override
|
||||
public void apply(ModelRailwaySimulation simulation) throws InvalidInputException {
|
||||
public void apply(ModelRailwaySimulation simulation) throws LogicException {
|
||||
if (start == null) {
|
||||
throw new IllegalStateException("command not initialized");
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.ui.command;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.Vector2D;
|
||||
import edu.kit.informatik.Terminal;
|
||||
@ -34,7 +35,7 @@ public class AddTrack extends Command {
|
||||
private Vector2D end;
|
||||
|
||||
@Override
|
||||
public void apply(ModelRailwaySimulation simulation) throws InvalidInputException {
|
||||
public void apply(ModelRailwaySimulation simulation) throws LogicException {
|
||||
if (start == null) {
|
||||
throw new IllegalStateException("command not initialized");
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.ui.command;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.RollingStock;
|
||||
import edu.kit.informatik.Terminal;
|
||||
@ -35,7 +36,7 @@ public class AddTrain extends Command {
|
||||
private String rollingStockId;
|
||||
|
||||
@Override
|
||||
public void apply(ModelRailwaySimulation simulation) throws InvalidInputException {
|
||||
public void apply(ModelRailwaySimulation simulation) throws LogicException {
|
||||
if (rollingStockId == null) {
|
||||
throw new IllegalStateException("command not initialized");
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.ui.command;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
@ -15,9 +16,9 @@ public abstract class Command {
|
||||
* Apply this command to a model railway simulation.
|
||||
*
|
||||
* @param simulation simulation to use
|
||||
* @throws InvalidInputException on invalid user input
|
||||
* @throws LogicException on illogical user input
|
||||
*/
|
||||
public abstract void apply(ModelRailwaySimulation simulation) throws InvalidInputException;
|
||||
public abstract void apply(ModelRailwaySimulation simulation) throws LogicException;
|
||||
|
||||
/**
|
||||
* Parse user input into this command object.
|
||||
|
@ -1,5 +1,6 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.ui.command;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.CoachType;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.Terminal;
|
||||
@ -44,7 +45,7 @@ public class CreateCoach extends Command {
|
||||
private boolean couplingBack;
|
||||
|
||||
@Override
|
||||
public void apply(ModelRailwaySimulation simulation) throws InvalidInputException {
|
||||
public void apply(ModelRailwaySimulation simulation) throws LogicException {
|
||||
if (type == null) {
|
||||
throw new IllegalStateException("command not initialized");
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package edu.kit.informatik.modelrailwaysimulator.ui.command;
|
||||
import edu.kit.informatik.Terminal;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.Coach;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.Engine;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.EngineType;
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
@ -56,7 +57,7 @@ public class CreateEngine extends Command {
|
||||
private boolean couplingBack;
|
||||
|
||||
@Override
|
||||
public void apply(ModelRailwaySimulation simulation) throws InvalidInputException {
|
||||
public void apply(ModelRailwaySimulation simulation) throws LogicException {
|
||||
if (type == null) {
|
||||
throw new IllegalStateException("command not initialized");
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.ui.command;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.Coach;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.Terminal;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.TrainSet;
|
||||
@ -50,7 +51,7 @@ public class CreateTrainSet extends Command {
|
||||
private boolean couplingBack;
|
||||
|
||||
@Override
|
||||
public void apply(ModelRailwaySimulation simulation) throws InvalidInputException {
|
||||
public void apply(ModelRailwaySimulation simulation) throws LogicException {
|
||||
if (name == null) {
|
||||
throw new IllegalStateException("command not initialized");
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.ui.command;
|
||||
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.Vector2D;
|
||||
import edu.kit.informatik.Terminal;
|
||||
@ -40,7 +41,7 @@ public class PutTrain extends Command {
|
||||
private Vector2D direction;
|
||||
|
||||
@Override
|
||||
public void apply(ModelRailwaySimulation simulation) throws InvalidInputException {
|
||||
public void apply(ModelRailwaySimulation simulation) throws LogicException {
|
||||
if (point == null) {
|
||||
throw new IllegalStateException("command not initialized");
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.ui.command;
|
||||
|
||||
import edu.kit.informatik.Terminal;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.InvalidInputException;
|
||||
|
||||
@ -24,7 +25,7 @@ public class ShowTrain extends Command {
|
||||
private int id;
|
||||
|
||||
@Override
|
||||
public void apply(ModelRailwaySimulation simulation) throws InvalidInputException {
|
||||
public void apply(ModelRailwaySimulation simulation) throws LogicException {
|
||||
simulation.showTrain(id).forEach(Terminal::printLine);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package edu.kit.informatik.modelrailwaysimulator.ui.command;
|
||||
|
||||
import edu.kit.informatik.Terminal;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.LogicException;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.ModelRailwaySimulation;
|
||||
import edu.kit.informatik.modelrailwaysimulator.model.Vector2D;
|
||||
import edu.kit.informatik.modelrailwaysimulator.ui.CommandLine;
|
||||
@ -30,7 +31,7 @@ public class Step extends Command {
|
||||
private short speed;
|
||||
|
||||
@Override
|
||||
public void apply(ModelRailwaySimulation simulation) throws InvalidInputException {
|
||||
public void apply(ModelRailwaySimulation simulation) throws LogicException {
|
||||
final Optional<List<SortedSet<Integer>>> collisions = simulation.step(speed);
|
||||
if (!collisions.isPresent()) {
|
||||
// print OK if no there are trains placed
|
||||
|
Loading…
Reference in New Issue
Block a user