From 1f4f11a4db68b8fe4fad34d4921bc24c1ff8db1f Mon Sep 17 00:00:00 2001 From: jariel Date: Fri, 2 Aug 2019 23:00:22 +0530 Subject: [PATCH] Added Rover GUI files --- .../gov/mission/control/CommandBuilder.java | 53 +++-- .../naasa/gov/mission/control/Driver.java | 3 +- .../gov/mission/control/FailedDialog.form | 74 ++++++ .../gov/mission/control/FailedDialog.java | 39 ++++ .../naasa/gov/mission/control/LogsDialog.form | 89 +++++++ .../naasa/gov/mission/control/LogsDialog.java | 88 +++++++ .../naasa/gov/mission/control/MoveDialog.form | 104 +++++++++ .../naasa/gov/mission/control/MoveDialog.java | 91 ++++++++ .../naasa/gov/mission/control/Producer.java | 5 +- .../gov/mission/control/ProducerGUI.form | 218 ++++++++++++++++++ .../gov/mission/control/ProducerGUI.java | 169 ++++++++++++++ .../gov/mission/control/ProducerManual.java | 8 +- .../naasa/gov/mission/control/Receiver.java | 52 +---- .../naasa/gov/mission/control/SAMDialog.form | 65 ++++++ .../naasa/gov/mission/control/SAMDialog.java | 89 +++++++ .../naasa/gov/mission/control/SentDialog.form | 107 +++++++++ .../naasa/gov/mission/control/SentDialog.java | 60 +++++ .../gov/mission/control/SpaceclockDialog.form | 100 ++++++++ .../gov/mission/control/SpaceclockDialog.java | 90 ++++++++ .../gov/mission/control/Transmitter.java | 14 +- 20 files changed, 1429 insertions(+), 89 deletions(-) create mode 100644 src/main/java/naasa/gov/mission/control/FailedDialog.form create mode 100644 src/main/java/naasa/gov/mission/control/FailedDialog.java create mode 100644 src/main/java/naasa/gov/mission/control/LogsDialog.form create mode 100644 src/main/java/naasa/gov/mission/control/LogsDialog.java create mode 100644 src/main/java/naasa/gov/mission/control/MoveDialog.form create mode 100644 src/main/java/naasa/gov/mission/control/MoveDialog.java create mode 100644 src/main/java/naasa/gov/mission/control/ProducerGUI.form create mode 100644 src/main/java/naasa/gov/mission/control/ProducerGUI.java create mode 100644 src/main/java/naasa/gov/mission/control/SAMDialog.form create mode 100644 src/main/java/naasa/gov/mission/control/SAMDialog.java create mode 100644 src/main/java/naasa/gov/mission/control/SentDialog.form create mode 100644 src/main/java/naasa/gov/mission/control/SentDialog.java create mode 100644 src/main/java/naasa/gov/mission/control/SpaceclockDialog.form create mode 100644 src/main/java/naasa/gov/mission/control/SpaceclockDialog.java diff --git a/src/main/java/naasa/gov/mission/control/CommandBuilder.java b/src/main/java/naasa/gov/mission/control/CommandBuilder.java index 79bd43b..751ca8a 100644 --- a/src/main/java/naasa/gov/mission/control/CommandBuilder.java +++ b/src/main/java/naasa/gov/mission/control/CommandBuilder.java @@ -8,6 +8,8 @@ import space.exploration.communications.protocol.security.SecureMessage; import space.exploration.communications.protocol.service.SamQueryOuterClass; import space.exploration.communications.protocol.service.WeatherQueryOuterClass; + + import space.exploration.communications.protocol.softwareUpdate.SwUpdatePackageOuterClass; import space.exploration.kernel.diagnostics.LogRequest; @@ -22,51 +24,46 @@ public class CommandBuilder { //public static final String CERT_FILE = "src/main/resources/certificates/client.ser"; public static final String CERT_FILE = "src/main/resources/certificates/clientOriginal.ser"; - private static byte[] signAndEncryptMessage(InstructionPayloadOuterClass.InstructionPayload instructionPayload) { byte[] message = null; try { message = EncryptionUtil.encryptData("mission.control@Houston", new File(CERT_FILE), instructionPayload - .toByteArray(), 3l).toByteArray(); + .toByteArray(),3l,true).toByteArray(); } catch (Exception e) { e.printStackTrace(); } return message; } - public static byte[] buildSoftwareUpdateCommand() { - String jarFile = "https://storage.googleapis.com/rover_artifacts/softwareUpdates/mars" + - ".rover-1.8-SOLSHOT-shaded.jar"; + public static byte[] buildSampleAnalysis(int sol) { InstructionPayloadOuterClass.InstructionPayload.Builder iBuilder = InstructionPayloadOuterClass .InstructionPayload.newBuilder(); iBuilder.setTimeStamp(System.currentTimeMillis()); - iBuilder.setSOS(false); InstructionPayloadOuterClass.InstructionPayload.TargetPackage.Builder tBuilder = InstructionPayloadOuterClass .InstructionPayload.TargetPackage.newBuilder(); - SwUpdatePackageOuterClass.SwUpdatePackage.Builder sBuilder = SwUpdatePackageOuterClass.SwUpdatePackage - .newBuilder(); - sBuilder.setJarFileLocation(jarFile); - sBuilder.setLaunchScriptLocation("https://storage.googleapis" + - ".com/rover_artifacts/softwareUpdates/softwareLaunch.sh"); - sBuilder.setJarFileName("mars.rover-1.8-SOLSHOT-shaded.jar"); - sBuilder.setVersion(1.9d); - sBuilder.setScriptFileName("softwareLaunch.sh"); - tBuilder.setAuxiliaryData(sBuilder.build().toByteString()); + SamQueryOuterClass.SamQuery.Builder sBuilder = SamQueryOuterClass.SamQuery.newBuilder(); + sBuilder.setSol(sol); + sBuilder.setGetNearest(true); - tBuilder.setAction("Update Software"); - tBuilder.setRoverModule(ModuleDirectory.Module.KERNEL.getValue()); + tBuilder.setAuxiliaryData(sBuilder.build().toByteString()); + tBuilder.setAction("Perform Sample Analysis"); + tBuilder.setRoverModule(ModuleDirectory.Module.SAM_SPECTROMETER.getValue()); + iBuilder.addTargets(tBuilder.build()); iBuilder.addTargets(tBuilder.build()); InstructionPayloadOuterClass.InstructionPayload instructionPayload = iBuilder.build(); - //System.out.println(instructionPayload.toString()); return signAndEncryptMessage(instructionPayload); } - public static byte[] buildSampleAnayslisCommand(int sol) { + + + public static byte[] buildSoftwareUpdateCommand() { + String jarFile = "https://storage.googleapis.com/rover_artifacts/softwareUpdates/mars" + + ".rover-1.8-SOLSHOT-shaded.jar"; InstructionPayloadOuterClass.InstructionPayload.Builder iBuilder = InstructionPayloadOuterClass .InstructionPayload.newBuilder(); iBuilder.setTimeStamp(System.currentTimeMillis()); @@ -75,16 +72,22 @@ public static byte[] buildSampleAnayslisCommand(int sol) { InstructionPayloadOuterClass.InstructionPayload.TargetPackage.Builder tBuilder = InstructionPayloadOuterClass .InstructionPayload.TargetPackage.newBuilder(); - SamQueryOuterClass.SamQuery.Builder sBuilder = SamQueryOuterClass.SamQuery.newBuilder(); - sBuilder.setSol(sol); - sBuilder.setGetNearest(true); - + SwUpdatePackageOuterClass.SwUpdatePackage.Builder sBuilder = SwUpdatePackageOuterClass.SwUpdatePackage + .newBuilder(); + sBuilder.setJarFileLocation(jarFile); + sBuilder.setLaunchScriptLocation("https://storage.googleapis" + + ".com/rover_artifacts/softwareUpdates/softwareLaunch.sh"); + sBuilder.setJarFileName("mars.rover-1.8-SOLSHOT-shaded.jar"); + sBuilder.setVersion(1.9d); + sBuilder.setScriptFileName("softwareLaunch.sh"); tBuilder.setAuxiliaryData(sBuilder.build().toByteString()); - tBuilder.setAction("Perform Sample Analysis"); - tBuilder.setRoverModule(ModuleDirectory.Module.SAM_SPECTROMETER.getValue()); + + tBuilder.setAction("Update Software"); + tBuilder.setRoverModule(ModuleDirectory.Module.KERNEL.getValue()); iBuilder.addTargets(tBuilder.build()); InstructionPayloadOuterClass.InstructionPayload instructionPayload = iBuilder.build(); + //System.out.println(instructionPayload.toString()); return signAndEncryptMessage(instructionPayload); } diff --git a/src/main/java/naasa/gov/mission/control/Driver.java b/src/main/java/naasa/gov/mission/control/Driver.java index 15ff0ae..0a19444 100644 --- a/src/main/java/naasa/gov/mission/control/Driver.java +++ b/src/main/java/naasa/gov/mission/control/Driver.java @@ -1,6 +1,5 @@ package naasa.gov.mission.control; - import communications.protocol.KafkaConfig; import org.apache.log4j.FileAppender; import org.apache.log4j.Level; @@ -34,7 +33,7 @@ public static void configureLogging(boolean debug) { public static void main(String[] args) throws Exception { configureLogging(Boolean.parseBoolean(args[1])); - Receiver receiver = new Receiver(KafkaConfig.getKafkaConfig("Mission.Control", args[2]), args[0]); + Receiver receiver = new Receiver(KafkaConfig.getKafkaConfig("Mission.Control"), args[0]); receiver.start(); } } diff --git a/src/main/java/naasa/gov/mission/control/FailedDialog.form b/src/main/java/naasa/gov/mission/control/FailedDialog.form new file mode 100644 index 0000000..feb51c9 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/FailedDialog.form @@ -0,0 +1,74 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/naasa/gov/mission/control/FailedDialog.java b/src/main/java/naasa/gov/mission/control/FailedDialog.java new file mode 100644 index 0000000..454a587 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/FailedDialog.java @@ -0,0 +1,39 @@ +package naasa.gov.mission.control; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class FailedDialog extends JDialog { + private JPanel failedContentPane; + private JButton buttonOK; + private JButton buttonCancel; + + public FailedDialog() { + setContentPane(failedContentPane); + setModal(true); + getRootPane().setDefaultButton(buttonOK); + + buttonOK.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onOK(); + } + }); + } + + private void onOK() { + // add your code here + dispose(); + } + + public static void main(String[] args) { + FailedDialog dialog = new FailedDialog(); + dialog.pack(); + dialog.setVisible(true); + //System.exit(0); + } + + private void createUIComponents() { + // TODO: place custom component creation code here + } +} diff --git a/src/main/java/naasa/gov/mission/control/LogsDialog.form b/src/main/java/naasa/gov/mission/control/LogsDialog.form new file mode 100644 index 0000000..0c5fbe0 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/LogsDialog.form @@ -0,0 +1,89 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/naasa/gov/mission/control/LogsDialog.java b/src/main/java/naasa/gov/mission/control/LogsDialog.java new file mode 100644 index 0000000..e1b0cb5 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/LogsDialog.java @@ -0,0 +1,88 @@ +package naasa.gov.mission.control; + +import communications.protocol.KafkaConfig; + +import javax.swing.*; +import java.awt.event.*; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +public class LogsDialog extends JDialog { + private JPanel LogsDialogPane; + private JButton buttonOK; + private JButton buttonCancel; + private JTextField startdate; + private JTextField enddate; + + //JFrame frame =new JFrame(); + public LogsDialog() { + setContentPane(LogsDialogPane); + setModal(true); + getRootPane().setDefaultButton(buttonOK); + + buttonOK.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + onOK(); + } catch (IOException err) { + err.printStackTrace(); + } + } + }); + + buttonCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }); + + // call onCancel() when cross is clicked + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + onCancel(); + } + }); + + // call onCancel() on ESCAPE + LogsDialogPane.registerKeyboardAction(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + } + + private void onOK() throws IOException { + // add your code here + InputStream fis = Producer.class.getResourceAsStream("/kafka1.properties"); + Properties kafkaProperties = new Properties(); + kafkaProperties.load(fis); + + Transmitter transmitter = new Transmitter(KafkaConfig.getKafkaConfig("Mission.Control")); + + String x = (startdate.getText().toString()); + String y = (enddate.getText().toString()); + + try { + if(x !="" && y !="") + {byte[] msg = CommandBuilder.buildLogRequestCommand(x,y); + transmitter.transmitMessage(msg);} + } catch (InterruptedException err) { + err.printStackTrace(); + } + dispose(); + } + + private void onCancel() { + // add your code here if necessary + dispose(); + } + + public static void main(String[] args) { + LogsDialog dialog = new LogsDialog(); + dialog.pack(); + dialog.setVisible(true); + //System.exit(0); + } +} diff --git a/src/main/java/naasa/gov/mission/control/MoveDialog.form b/src/main/java/naasa/gov/mission/control/MoveDialog.form new file mode 100644 index 0000000..a34b06d --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/MoveDialog.form @@ -0,0 +1,104 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/naasa/gov/mission/control/MoveDialog.java b/src/main/java/naasa/gov/mission/control/MoveDialog.java new file mode 100644 index 0000000..987ee02 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/MoveDialog.java @@ -0,0 +1,91 @@ +package naasa.gov.mission.control; + +import communications.protocol.KafkaConfig; + +import javax.swing.*; +import javax.swing.text.AttributeSet; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.DocumentFilter; +import java.awt.event.*; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +public class MoveDialog extends JDialog { + private JPanel moveDialogPane; + private JButton buttonOK; + private JButton buttonCancel; + private JTextField xcord; + private JTextField ycord; + + //JFrame frame =new JFrame(); + public MoveDialog() { + setContentPane(moveDialogPane); + setModal(true); + getRootPane().setDefaultButton(buttonOK); + + buttonOK.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + onOK(); + } catch (IOException err) { + err.printStackTrace(); + } + } + }); + + buttonCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }); + + // call onCancel() when cross is clicked + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + onCancel(); + } + }); + + // call onCancel() on ESCAPE + moveDialogPane.registerKeyboardAction(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + } + + private void onOK() throws IOException { + // add your code here + InputStream fis = Producer.class.getResourceAsStream("/kafka1.properties"); + Properties kafkaProperties = new Properties(); + kafkaProperties.load(fis); + + Transmitter transmitter = new Transmitter(KafkaConfig.getKafkaConfig("Mission.Control")); + System.out.println(xcord.getText()); + System.out.println(ycord.getText()); + int x = Integer.parseInt(xcord.getText()); + int y = Integer.parseInt(ycord.getText()); + try { + if(x > 0 && y > 0) + transmitter.transmitMessage(CommandBuilder.buildMoveCommand(x, y)); + } catch (InterruptedException err) { + err.printStackTrace(); + } + dispose(); + } + + private void onCancel() { + // add your code here if necessary + dispose(); + } + + public static void main(String[] args) { + MoveDialog dialog = new MoveDialog(); + dialog.pack(); + dialog.setVisible(true); + //System.exit(0); + } +} diff --git a/src/main/java/naasa/gov/mission/control/Producer.java b/src/main/java/naasa/gov/mission/control/Producer.java index 8da87b0..27b7ca3 100644 --- a/src/main/java/naasa/gov/mission/control/Producer.java +++ b/src/main/java/naasa/gov/mission/control/Producer.java @@ -10,12 +10,12 @@ public class Producer { public static void main(String[] args) throws Exception { Driver.configureLogging(false); - Transmitter transmitter = new Transmitter(KafkaConfig.getKafkaConfig("Mission.Control", args[0])); + Transmitter transmitter = new Transmitter(KafkaConfig.getKafkaConfig("Mission.Control")); long stTime = System.currentTimeMillis(); while (TimeUnit.MILLISECONDS.toHours(System.currentTimeMillis() - stTime) < 5) { int choice = ThreadLocalRandom.current().nextInt(0, 12); - while (choice == 10) { + while(choice == 10){ choice = ThreadLocalRandom.current().nextInt(0, 12); } //int choice = 3; @@ -90,6 +90,7 @@ public static void main(String[] args) throws Exception { } } Thread.sleep(1 * 45000); + //Thread.sleep(1 * 25000); //Thread.sleep(45); } transmitter.transmitMessage(CommandBuilder.buildGracefulShutdownCommand()); diff --git a/src/main/java/naasa/gov/mission/control/ProducerGUI.form b/src/main/java/naasa/gov/mission/control/ProducerGUI.form new file mode 100644 index 0000000..d64ebf0 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/ProducerGUI.form @@ -0,0 +1,218 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/naasa/gov/mission/control/ProducerGUI.java b/src/main/java/naasa/gov/mission/control/ProducerGUI.java new file mode 100644 index 0000000..8d70c75 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/ProducerGUI.java @@ -0,0 +1,169 @@ +package naasa.gov.mission.control; + +import com.google.protobuf.InvalidProtocolBufferException; +import communications.protocol.KafkaConfig; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.concurrent.ThreadLocalRandom; + +public class ProducerGUI { + private JButton moveRoverButton; + private JButton lidarButton; + private JButton specrometerButton; + private JButton cameraButton; + private JButton radarButton; + private JButton weatherButton; + private JButton seasonalWeatherButton; + private JButton sclkInfoButton; + private JButton danSpectrometerButton; + private JButton exitButton; + private JPanel rootLayout; + private JButton shutdownButton; + private JButton startButton; + private JButton SamButton; + private JButton sclkButton; + + private static InputStream fis; + private static Properties kafkaProperties; + private static Transmitter transmitter; + public static void main(String[] args) { + Driver.configureLogging(true); + fis = Producer.class.getResourceAsStream("/kafka1.properties"); + kafkaProperties = new Properties(); + transmitter = new Transmitter(KafkaConfig.getKafkaConfig("Mission.Control")); + try { + kafkaProperties.load(fis); + } catch (Exception e) { + e.printStackTrace(); + } + JFrame frame = new JFrame("Curiosity Rover Simulator"); + frame.setContentPane(new ProducerGUI().rootLayout); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.pack(); + frame.setVisible(true); + } + + public ProducerGUI() { + + exitButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + System.exit(0); + } + }); + moveRoverButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + MoveDialog.main(null);} + }); + //startButton.addActionListener(new ActionListener()){}; + lidarButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + + + try { + transmitter.transmitMessage(CommandBuilder.buildLidarCommand()); + SentDialog.main(null); + } catch (Exception err) { + FailedDialog.main(null); + err.printStackTrace(); + } + } + }); + specrometerButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + transmitter.transmitMessage(CommandBuilder.buildScienceMission()); + SentDialog.main(null); + } catch (Exception err) { + FailedDialog.main(null); + err.printStackTrace(); + } + } + }); + SamButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + SAMDialog.main(null);} + }); + sclkButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + SpaceclockDialog.main(null);} + }); + cameraButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + transmitter.transmitMessage(CommandBuilder.buildCameraCommand(getRandomCamId())); + SentDialog.main(null); + } catch (Exception err) { + FailedDialog.main(null); + err.printStackTrace(); + } + } + }); + + + radarButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + transmitter.transmitMessage(CommandBuilder.buildRadarCommand()); + SentDialog.main(null); + } catch (Exception err) { + FailedDialog.main(null); + err.printStackTrace(); + } + } + }); + seasonalWeatherButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + transmitter.transmitMessage(CommandBuilder.buildSeasonalWeatherCommand()); + SentDialog.main(null); + } catch (Exception err) { + FailedDialog.main(null); + err.printStackTrace(); + } + } + }); + + danSpectrometerButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + transmitter.transmitMessage(CommandBuilder.buildDANSensorCommand()); + SentDialog.main(null); + } catch (Exception err) { + FailedDialog.main(null); + err.printStackTrace(); + } + } + }); + shutdownButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + transmitter.transmitMessage(CommandBuilder.buildGracefulShutdownCommand()); + SentDialog.main(null); + } catch (Exception err) { + err.printStackTrace(); + } + } + }); + } + private static String getRandomCamId() { + String[] camIds = {"FHAZ", "NAVCAM", "MAST", "CHEMCAM", "MAHLI", "MARDI", "RHAZ"}; + int index = ThreadLocalRandom.current().nextInt(0, 7); + return camIds[index]; + } +} diff --git a/src/main/java/naasa/gov/mission/control/ProducerManual.java b/src/main/java/naasa/gov/mission/control/ProducerManual.java index 760e8f2..0379ec1 100644 --- a/src/main/java/naasa/gov/mission/control/ProducerManual.java +++ b/src/main/java/naasa/gov/mission/control/ProducerManual.java @@ -15,7 +15,7 @@ public static void main(String[] args) throws Exception { Properties kafkaProperties = new Properties(); kafkaProperties.load(fis); - Transmitter transmitter = new Transmitter(KafkaConfig.getKafkaConfig("Mission.Control", args[0])); + Transmitter transmitter = new Transmitter(KafkaConfig.getKafkaConfig("Mission.Control")); int choice = 0; while (choice != 14) { @@ -113,9 +113,9 @@ public static void main(String[] args) throws Exception { break; case 13: { Scanner dateScanner = new Scanner(System.in); - System.out.println("Please enter sol number::"); - int sol = Integer.parseInt(dateScanner.nextLine()); - byte[] msg = CommandBuilder.buildSampleAnayslisCommand(sol); + System.out.println("Enter sol number: "); + int sol = Integer.parseInt(dateScanner.nextLine()); + byte[] msg = CommandBuilder.buildSampleAnalysis(sol); transmitter.transmitMessage(msg); } break; diff --git a/src/main/java/naasa/gov/mission/control/Receiver.java b/src/main/java/naasa/gov/mission/control/Receiver.java index 2377685..038c05c 100644 --- a/src/main/java/naasa/gov/mission/control/Receiver.java +++ b/src/main/java/naasa/gov/mission/control/Receiver.java @@ -3,7 +3,6 @@ */ package naasa.gov.mission.control; -import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; import communications.protocol.ModuleDirectory; import encryption.EncryptionUtil; @@ -24,7 +23,6 @@ import space.exploration.communications.protocol.security.SecureMessage; import space.exploration.communications.protocol.service.CameraPayload; import space.exploration.communications.protocol.service.DanRDRDataSeriesOuterClass; -import space.exploration.communications.protocol.service.SampleAnalysisDataOuterClass; import space.exploration.communications.protocol.service.WeatherRDRData; import space.exploration.communications.protocol.spacecraftClock.SpacecraftClock; import space.exploration.kernel.diagnostics.LogResponse; @@ -37,9 +35,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; @@ -56,7 +51,6 @@ public class Receiver extends Thread { final static String SEPARATOR = "============================================================================"; - final static String samDataArchive = "dataArchives/SamData/"; final static String clientId = "Curiosity"; final static String TUNED_CHANNEL_PROPERTY = "source.topic"; private static String dataArchivePath = null; @@ -124,7 +118,7 @@ public void run() { try { long startTime = System.currentTimeMillis(); - byte[] rawContent = EncryptionUtil.decryptSecureMessage(certificate, secureMessagePacket, 3l); + byte[] rawContent = EncryptionUtil.decryptSecureMessage(certificate, secureMessagePacket, 3l, true); System.out.println(" Time taken for decryption = " + (System.currentTimeMillis() - startTime)); received = RoverStatusOuterClass.RoverStatus.parseFrom(rawContent); } catch (Exception e) { @@ -136,14 +130,12 @@ public void run() { printMessage("Message received from " + received.getModuleName()); if (received.getModuleReporting() == ModuleDirectory.Module.SCIENCE.getValue()) { - ApxsData.ApxsDataPacket apxsDataPacket = ApxsData.ApxsDataPacket - .parseFrom(received.getModuleMessage()); + ApxsData.ApxsDataPacket apxsDataPacket = ApxsData.ApxsDataPacket.parseFrom(received.getModuleMessage()); printMessage(received.toString()); printMessage(apxsDataPacket.toString()); } else if (received.getModuleReporting() == ModuleDirectory.Module.CAMERA_SENSOR.getValue()) { - CameraPayload.CamPayload camPayload = CameraPayload.CamPayload - .parseFrom(received.getModuleMessage()); + CameraPayload.CamPayload camPayload = CameraPayload.CamPayload.parseFrom(received.getModuleMessage()); //System.out.println(received.toString()); for (String metaData : camPayload.getImageDataMap().keySet()) { @@ -173,8 +165,7 @@ public void run() { } else if (received.getModuleReporting() == ModuleDirectory.Module.DIAGNOSTICS.getValue()) { printMessage(received.toString()); HeartBeatOuterClass.HeartBeat heartBeat = HeartBeatOuterClass.HeartBeat.parseFrom(received - .getModuleMessage() - .toByteArray()); + .getModuleMessage().toByteArray()); scetTime = received.getSCET(); printMessage(heartBeat.toString()); printMessage("OneWayLightTime = " + Double.toString(received.getMslPositionsPacket() @@ -197,8 +188,7 @@ public void run() { WeatherDataArchive weatherDataArchive = new WeatherDataArchive(weatherPayload.toString()); weatherDataArchive.archiveWeatherData(); } else if (received.getModuleReporting() == ModuleDirectory.Module.SPACECRAFT_CLOCK.getValue()) { - SpacecraftClock.SclkPacket sclkPacket = SpacecraftClock.SclkPacket - .parseFrom(received.getModuleMessage()); + SpacecraftClock.SclkPacket sclkPacket = SpacecraftClock.SclkPacket.parseFrom(received.getModuleMessage()); printMessage(sclkPacket.toString()); printMessage(received.toString()); } else if (received.getModuleReporting() == ModuleDirectory.Module.DAN_SPECTROMETER.getValue()) { @@ -212,38 +202,6 @@ public void run() { /*printMessage(logResponsePacket.toString(), 0);*/ FileUtil.saveLogFiles("curiosityLogs", logResponsePacket); System.out.println("Number of log files = " + logResponsePacket.getLogFilesCount()); - } else if (received.getModuleReporting() == ModuleDirectory.Module.SAM_SPECTROMETER.getValue()) { - SampleAnalysisDataOuterClass.SampleAnalysisData sampleAnalysisData = - SampleAnalysisDataOuterClass.SampleAnalysisData - .parseFrom(received.getModuleMessage()); - - util.FileUtil.processDirectories(samDataArchive + sampleAnalysisData.getSol()); - - for (int i = 0; i < sampleAnalysisData.getDataFilesCount(); i++) { - SampleAnalysisDataOuterClass.SampleAnalysisData.SampleDataFile sampleDataFile = - sampleAnalysisData - .getDataFiles(i); - System.out.println("SampleData file extracted:: " + sampleDataFile.toString()); - System.out.println( - "Proposed file destination path = " + samDataArchive + sampleDataFile.getFileName()); - Path path = Paths - .get(samDataArchive + sampleAnalysisData.getSol() + "/" + sampleDataFile.getFileName()); - Files.write(path, sampleDataFile.getContent().toByteArray()); - } - -// List sampleDataFiles = -// sampleAnalysisData -// .getDataFilesList(); -// for (SampleAnalysisDataOuterClass.SampleAnalysisData.SampleDataFile sampleDataFile : -// sampleDataFiles) { -// printMessage("FileName = " + sampleDataFile.getFileName()); -// Path path = Paths.get(dataArchivePath + sampleDataFile.getFileName()); -// printMessage(path.toString()); -//// Files.write(Paths.get(samDataArchive + sampleDataFile.getFileName()), -//// sampleDataFile.getContent().toByteArray()); -// } - - printMessage(sampleAnalysisData.toString()); } else { printMessage(received.toString()); } diff --git a/src/main/java/naasa/gov/mission/control/SAMDialog.form b/src/main/java/naasa/gov/mission/control/SAMDialog.form new file mode 100644 index 0000000..afb5026 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/SAMDialog.form @@ -0,0 +1,65 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/naasa/gov/mission/control/SAMDialog.java b/src/main/java/naasa/gov/mission/control/SAMDialog.java new file mode 100644 index 0000000..d7836c9 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/SAMDialog.java @@ -0,0 +1,89 @@ +package naasa.gov.mission.control; + + +import communications.protocol.KafkaConfig; +import javax.swing.*; +import javax.swing.text.AttributeSet; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.DocumentFilter; +import java.awt.event.*; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +public class SAMDialog extends JDialog { + private JPanel SAMDialogPane; + private JButton buttonOK; + private JButton buttonCancel; + private JTextField sol; + + //Frame frame =new JFrame(); + public SAMDialog() { + setContentPane(SAMDialogPane); + setModal(true); + getRootPane().setDefaultButton(buttonOK); + + buttonOK.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + onOK(); + } catch (IOException err) { + err.printStackTrace(); + } + } + }); + + buttonCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }); + + // call onCancel() when cross is clicked + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + onCancel(); + } + }); + + // call onCancel() on ESCAPE + SAMDialogPane.registerKeyboardAction(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + } + + private void onOK() throws IOException { + // add your code here + InputStream fis = Producer.class.getResourceAsStream("/kafka1.properties"); + Properties kafkaProperties = new Properties(); + kafkaProperties.load(fis); + + Transmitter transmitter = new Transmitter(KafkaConfig.getKafkaConfig("Mission.Control")); + System.out.println(sol.getText()); + int x = Integer.parseInt(sol.getText()); + try { + if(x > 0 ) + transmitter.transmitMessage(CommandBuilder.buildSampleAnalysis(x)); + + } catch (InterruptedException err) { + err.printStackTrace(); + } + dispose(); + } + + private void onCancel() { + // add your code here if necessary + dispose(); + } + + public static void main(String[] args) { + SAMDialog dialog = new SAMDialog(); + dialog.pack(); + dialog.setVisible(true); + //System.exit(0); + } +} diff --git a/src/main/java/naasa/gov/mission/control/SentDialog.form b/src/main/java/naasa/gov/mission/control/SentDialog.form new file mode 100644 index 0000000..0423cb3 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/SentDialog.form @@ -0,0 +1,107 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/naasa/gov/mission/control/SentDialog.java b/src/main/java/naasa/gov/mission/control/SentDialog.java new file mode 100644 index 0000000..56c62d7 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/SentDialog.java @@ -0,0 +1,60 @@ +package naasa.gov.mission.control; + +import javax.swing.*; +import java.awt.event.*; + +public class SentDialog extends JDialog { + private JPanel sentContentPane; + private JButton buttonOK; + private JButton buttonCancel; + // JFrame frame =new JFrame(); + public SentDialog() { + setContentPane(sentContentPane); + setModal(true); + getRootPane().setDefaultButton(buttonOK); + + buttonOK.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onOK(); + } + }); + + buttonCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }); + + // call onCancel() when cross is clicked + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + onCancel(); + } + }); + + // call onCancel() on ESCAPE + sentContentPane.registerKeyboardAction(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + } + + private void onOK() { + // add your code here + dispose(); + } + + private void onCancel() { + // add your code here if necessary + dispose(); + } + + public static void main(String[] args) { + SentDialog dialog = new SentDialog(); + dialog.pack(); + dialog.setVisible(true); + // System.exit(0); + } +} diff --git a/src/main/java/naasa/gov/mission/control/SpaceclockDialog.form b/src/main/java/naasa/gov/mission/control/SpaceclockDialog.form new file mode 100644 index 0000000..2f01b1b --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/SpaceclockDialog.form @@ -0,0 +1,100 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/naasa/gov/mission/control/SpaceclockDialog.java b/src/main/java/naasa/gov/mission/control/SpaceclockDialog.java new file mode 100644 index 0000000..041f094 --- /dev/null +++ b/src/main/java/naasa/gov/mission/control/SpaceclockDialog.java @@ -0,0 +1,90 @@ +package naasa.gov.mission.control; + + +import communications.protocol.KafkaConfig; + +import javax.swing.*; +import javax.swing.text.AttributeSet; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.DocumentFilter; +import java.awt.event.*; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +public class SpaceclockDialog extends JDialog { + private JPanel SpaceclockDialogPane; + private JButton buttonOK; + private JButton buttonCancel; + private JTextField clock; + + + + //JFrame frame =new JFrame(); + public SpaceclockDialog() { + setContentPane(SpaceclockDialogPane); + setModal(true); + getRootPane().setDefaultButton(buttonOK); + + buttonOK.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + onOK(); + } catch (IOException err) { + err.printStackTrace(); + } + } + }); + + buttonCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }); + + // call onCancel() when cross is clicked + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + onCancel(); + } + }); + + // call onCancel() on ESCAPE + SpaceclockDialogPane.registerKeyboardAction(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + } + + private void onOK() throws IOException { + // add your code here + InputStream fis = Producer.class.getResourceAsStream("/kafka1.properties"); + Properties kafkaProperties = new Properties(); + kafkaProperties.load(fis); + + Transmitter transmitter = new Transmitter(KafkaConfig.getKafkaConfig("Mission.Control")); + try { + String utcDate = clock.getText(); + System.out.println(utcDate); + transmitter.transmitMessage(CommandBuilder.buildSclkSyncCommand(utcDate)); + } catch (InterruptedException err) { + err.printStackTrace(); + } + dispose(); + } + + private void onCancel() { + // add your code here if necessary + dispose(); + } + + public static void main(String[] args) { + SpaceclockDialog dialog = new SpaceclockDialog(); + dialog.pack(); + dialog.setVisible(true); + //System.exit(0); + } +} diff --git a/src/main/java/naasa/gov/mission/control/Transmitter.java b/src/main/java/naasa/gov/mission/control/Transmitter.java index 5e1a0f8..8a69ce1 100644 --- a/src/main/java/naasa/gov/mission/control/Transmitter.java +++ b/src/main/java/naasa/gov/mission/control/Transmitter.java @@ -11,10 +11,9 @@ import com.google.protobuf.InvalidProtocolBufferException; -import org.apache.kafka.clients.producer.KafkaProducer; -import org.apache.kafka.clients.producer.Producer; +import kafka.javaapi.producer.Producer; +import kafka.producer.KeyedMessage; import kafka.producer.ProducerConfig; -import org.apache.kafka.clients.producer.ProducerRecord; /** * @author sanketkorgaonkar @@ -35,7 +34,7 @@ public Transmitter(KafkaShipmentBuilder kafkaShipmentBuilder) { kafkaProperties = new Properties(); kafkaProperties.load(inputStream); kafkaProperties.put("sourceTopic", kafkaShipmentBuilder.sourceTopic); - earthChannel = new KafkaProducer<>(kafkaProperties); + earthChannel = new Producer(new ProducerConfig(kafkaProperties)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { @@ -45,15 +44,12 @@ public Transmitter(KafkaShipmentBuilder kafkaShipmentBuilder) { public Transmitter(Properties comsConfig) { kafkaProperties = comsConfig; - earthChannel = new KafkaProducer<>(kafkaProperties); - //earthChannel = new Producer(new ProducerConfig(kafkaProperties)); + earthChannel = new Producer(new ProducerConfig(kafkaProperties)); } public void transmitMessage(byte[] message) throws InterruptedException, InvalidProtocolBufferException { for (int i = 0; i < 1; i++) { - //earthChannel.send(new KeyedMessage(kafkaProperties.getProperty("destination.topic"), message)); - earthChannel.send( - new ProducerRecord<>(kafkaProperties.getProperty("destination.topic"), message)); + earthChannel.send(new KeyedMessage(kafkaProperties.getProperty("destination.topic"), message)); System.out.println(" Sending canned interrupt messages to " + kafkaProperties.getProperty("destination.topic")); Thread.sleep(1500l); }