package com.dronecontrol.droneapi.commands.composed; import com.google.common.collect.Lists; import com.dronecontrol.droneapi.commands.Command; import com.dronecontrol.droneapi.commands.ComposedCommand; import com.dronecontrol.droneapi.data.Config; import com.dronecontrol.droneapi.data.DroneConfiguration; import com.dronecontrol.droneapi.data.LoginData; import com.dronecontrol.droneapi.data.NavData; import com.dronecontrol.droneapi.data.enums.ARDrone1VideoCodec; import com.dronecontrol.droneapi.data.enums.ARDrone2VideoCodec; import com.dronecontrol.droneapi.helpers.VersionHelper; import java.util.Collection; import java.util.Objects; import static com.google.common.base.Preconditions.checkState; public class InitializeConfigurationCommand implements ComposedCommand { private final LoginData loginData; private final String videoCodecCode; public InitializeConfigurationCommand(LoginData loginData, ARDrone1VideoCodec videoCodec) { this.loginData = loginData; this.videoCodecCode = String.valueOf(videoCodec.getCodecCode()); } public InitializeConfigurationCommand(LoginData loginData, ARDrone2VideoCodec videoCodec) { this.loginData = loginData; this.videoCodecCode = String.valueOf(videoCodec.getCodecCode()); } @Override public Collection<Command> getCommands() { Command loginCommand = new LoginCommand(loginData); Command enableNavDataCommand = new EnableNavDataCommand(loginData); Command setVideoCodecCommand = new SetConfigValueCommand(loginData, DroneConfiguration.VIDEO_CODEC_KEY, videoCodecCode); Command getDroneConfigurationCommand = new GetConfigurationDataCommand(); return Lists.newArrayList(loginCommand, enableNavDataCommand, setVideoCodecCommand, getDroneConfigurationCommand); } @Override public int getTimeoutMillis() { return NO_TIMEOUT; } @Override public void checkSuccess(NavData navData, DroneConfiguration droneConfiguration) { String firmwareVersion = droneConfiguration.getConfig().get(DroneConfiguration.FIRMWARE_VERSION_KEY); checkState(VersionHelper.compareVersions(firmwareVersion, Config.MIN_FIRMWARE_VERSION) >= 0, "The firmware version used is too old"); String sessionId = droneConfiguration.getConfig().get(DroneConfiguration.SESSION_ID_KEY); String profileId = droneConfiguration.getConfig().get(DroneConfiguration.PROFILE_ID_KEY); String applicationId = droneConfiguration.getConfig().get(DroneConfiguration.APPLICATION_ID_KEY); checkState(Objects.equals(loginData.getSessionChecksum(), sessionId), String.format("The session ID was not set to '%s', but was '%s'", loginData.getSessionChecksum(), sessionId)); checkState(Objects.equals(loginData.getProfileChecksum(), profileId), "The profile ID was not set"); checkState(Objects.equals(loginData.getApplicationChecksum(), applicationId), "The application ID was not set"); String videoCodecCode = droneConfiguration.getConfig().get(DroneConfiguration.VIDEO_CODEC_KEY); checkState(Objects.equals(this.videoCodecCode, videoCodecCode), "The video codec was not set"); } }