You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.7 KiB
67 lines
2.7 KiB
package visualiser.Commands.VisualiserRaceCommands;
|
|
|
|
|
|
import mock.exceptions.CommandConstructionException;
|
|
import mock.model.commandFactory.Command;
|
|
import network.Messages.AC35Data;
|
|
import network.Messages.BoatLocation;
|
|
import network.Messages.RaceStatus;
|
|
import network.Messages.XMLMessage;
|
|
import shared.dataInput.*;
|
|
import shared.enums.XMLFileType;
|
|
import shared.exceptions.InvalidBoatDataException;
|
|
import shared.exceptions.InvalidRaceDataException;
|
|
import shared.exceptions.InvalidRegattaDataException;
|
|
import shared.exceptions.XMLReaderException;
|
|
import visualiser.model.VisualiserRaceState;
|
|
|
|
/**
|
|
* Factory to create VisualiserRace commands, from XMLMessages.
|
|
*/
|
|
public class XMLMessageCommandFactory {
|
|
|
|
/**
|
|
* Generates a command on an VisualiserRace.
|
|
* @param message The message to turn into a command.
|
|
* @param visualiserRace The context for the command to operate on.
|
|
* @return The command to execute the given action.
|
|
* @throws CommandConstructionException Thrown if the command cannot be constructed.
|
|
*/
|
|
public static Command create(XMLMessage message, VisualiserRaceState visualiserRace) throws CommandConstructionException {
|
|
|
|
try {
|
|
|
|
switch (message.getXmlMsgSubType()) {
|
|
|
|
case BOAT:
|
|
BoatXMLReader boatDataSource = new BoatXMLReader(message.getXmlMessage(), XMLFileType.Contents);
|
|
boatDataSource.setSequenceNumber(message.getSequenceNumber());
|
|
return new BoatsXMLMessageCommand(boatDataSource, visualiserRace);
|
|
|
|
|
|
case RACE:
|
|
RaceXMLReader raceDataSource = new RaceXMLReader(message.getXmlMessage(), XMLFileType.Contents);
|
|
raceDataSource.setSequenceNumber(message.getSequenceNumber());
|
|
return new RaceXMLMessageCommand(raceDataSource, visualiserRace);
|
|
|
|
|
|
case REGATTA:
|
|
RegattaXMLReader regattaDataSource = new RegattaXMLReader(message.getXmlMessage(), XMLFileType.Contents);
|
|
regattaDataSource.setSequenceNumber(message.getSequenceNumber());
|
|
return new RegattaXMLMessageCommand(regattaDataSource, visualiserRace);
|
|
|
|
|
|
default:
|
|
throw new CommandConstructionException("Could not create VisualiserRaceCommand/XMLCommand. Unrecognised or unsupported MessageType: " + message.getType());
|
|
|
|
}
|
|
|
|
} catch (XMLReaderException | InvalidBoatDataException | InvalidRegattaDataException | InvalidRaceDataException e) {
|
|
throw new CommandConstructionException("Could not create VisualiserRaceCommand/XMLCommand. Could not parse XML message payload.", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|