/*
* PluginReceiverPanel.java
*
* Created on 5. April 2008, 16:31
*/
package pluginreceiver.gui;
import framework.*;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DecimalFormat;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import messages.PlaneDataObject;
import messages.PlaneUpdateObject;
import pluginreceiver.PluginReceiver;
/**
*
* @author nicATC
*/
public class PluginReceiverPanel extends javax.swing.JPanel implements IGUI {
private IATMClient atmClient;
private boolean connected = false;
private boolean receiving = false;
private boolean startup = true;
private boolean update = false;
private InetAddress ip;
private float lat = 0, lon = 0, alt = 0, speed = 0, heading = 0;
private PlaneDataObject plane;
private PlaneUpdateObject planeUpdate;
// Contains the timerTask
private MyTimerTask timerTask;
// The running timer
private Timer timer;
DecimalFormat df = new DecimalFormat("#.00");
/**
* Creates new form PluginReceiverPanel
* @param atmc the ATMClient
*/
public PluginReceiverPanel(IATMClient atmc) {
this.atmClient = atmc;
initComponents();
this.setVisible(true);
try {
ip = InetAddress.getLocalHost();
} catch (UnknownHostException ex) {
Logger.getLogger(PluginReceiverPanel.class.getName()).log(Level.SEVERE, null, ex);
}
plane = new PlaneDataObject(ip.toString(), atmClient.getModel().getNickname(),0,0,0,0,0);
timer = new Timer();
timerTask = new MyTimerTask();
timer.schedule(timerTask, 1000L, 1000L);
}
/**
* Sets the value of the indicated data no
* @param no the data number to which val should be assigned
* @param val the value
*/
public void setValue(int no, float val) {
receiving = true;
if (startup) {
jLabelStatus.setText("Data receiver started.");
}
switch (no) {
case 0: // Ground speed
val*=1.944; // m/s to kn
jLabelGspVal.setText(df.format(val));
speed = val;
break;
case 2: // Heading
jLabelHeading.setText(df.format(val));
heading = val;
break;
case 4: // Lattitude
jLabelLatVal.setText(df.format(val));
lat = val;
break;
case 5: // Longtitude
jLabelLonVal.setText(df.format(val));
lon = val;
break;
case 9: // Elevation
val*=3.2808; // m to ft
jLabelAltVal.setText(df.format(val));
alt = val;
break;
}
if (update) {
atmClient.getModel().sendObject(planeUpdate);
update = false;
}
startup = false;
}
/**
* Sets the values of the indicated IPlaneUpdateObject
* @param puo the IPlaneUpdateObject on which the values should be set
*/
public void setValues(IPlaneUpdateObject puo) {
jTextField1.setText(puo.getFlightNumber());
jTextField2.setText(puo.getAirline());
jTextField3.setText(puo.getManufacturer());
jTextField4.setText(puo.getPlaneType());
jTextField5.setText(puo.getPlaneSubType());
jTextField6.setText(puo.getSquawk());
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jLabelLatVal = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabelLonVal = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabelAltVal = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jLabelGspVal = new javax.swing.JLabel();
jLabel12 = new javax.swing.JLabel();
jLabelHeading = new javax.swing.JLabel();
jLabelStatus = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jTextField3 = new javax.swing.JTextField();
jTextField4 = new javax.swing.JTextField();
jTextField5 = new javax.swing.JTextField();
jTextField6 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jLabel11 = new javax.swing.JLabel();
portNumber = new javax.swing.JTextField();
jButton2 = new javax.swing.JButton();
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Current data"));
jLabel2.setText("Latitude");
jLabelLatVal.setText("0");
jLabel4.setText("Longtitude");
jLabelLonVal.setText("0");
jLabel6.setText("Altitude (feet above sealevel)");
jLabelAltVal.setText("0");
jLabel8.setText("Ground speed (knots)");
jLabelGspVal.setText("0");
jLabel12.setText("Heading (degrees)");
jLabelHeading.setText("0");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(jLabel8)
.addComponent(jLabel6)
.addComponent(jLabel4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 226, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabelGspVal, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabelAltVal, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabelLonVal, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabelLatVal, javax.swing.GroupLayout.Alignment.TRAILING)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel12)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 280, Short.MAX_VALUE)
.addComponent(jLabelHeading)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(jLabelLatVal)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabelLonVal)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabelAltVal)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabelGspVal))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel8)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel12)
.addComponent(jLabelHeading)))
);
jLabelStatus.setText("Not receiving data from x-Plane");
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Plane data"));
jLabel1.setText("Flightnumber:");
jLabel3.setText("Airline:");
jLabel5.setText("Manufacturer:");
jLabel7.setText("Type:");
jLabel9.setText("Subtype:");
jLabel10.setText("Squawk:");
jTextField1.setText("???");
jTextField2.setText("???");
jTextField3.setText("???");
jTextField4.setText("???");
jTextField5.setText("???");
jTextField6.setText("???");
jButton1.setText("submit changes");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel3))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 305, Short.MAX_VALUE)
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 305, Short.MAX_VALUE)))
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel5)
.addComponent(jLabel7)
.addComponent(jLabel9)
.addComponent(jLabel10))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField4, javax.swing.GroupLayout.DEFAULT_SIZE, 302, Short.MAX_VALUE)
.addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 302, Short.MAX_VALUE)
.addComponent(jTextField5, javax.swing.GroupLayout.DEFAULT_SIZE, 302, Short.MAX_VALUE)
.addComponent(jTextField6, javax.swing.GroupLayout.DEFAULT_SIZE, 302, Short.MAX_VALUE)))
.addComponent(jButton1))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel7)
.addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel9)
.addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel10)
.addComponent(jTextField6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton1)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jLabel11.setText("Port:");
portNumber.setText("49003");
jButton2.setText("Start");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel11)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(portNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton2))
.addComponent(jLabelStatus, javax.swing.GroupLayout.DEFAULT_SIZE, 411, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel11)
.addComponent(portNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton2))
.addGap(18, 18, 18)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabelStatus)
.addGap(18, 18, 18)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(18, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
IRadarPlaneObject rpo = (IRadarPlaneObject) atmClient.getModel().getRadarPlaneObjects().get(ip.toString());
if (rpo != null) {
rpo.setAirline(jTextField2.getText());
rpo.setFlightNumber(jTextField1.getText());
rpo.setManufacturer(jTextField3.getText());
rpo.setPlaneType(jTextField4.getText());
rpo.setPlaneSubType(jTextField5.getText());
rpo.setSquawk(jTextField6.getText());
// atmClient.getModel().sendObject(new PlaneUpdateObject(rpo));
planeUpdate = new PlaneUpdateObject(rpo);
update = true;
}
}//GEN-LAST:event_jButton1ActionPerformed
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
try {
int port = Integer.parseInt(portNumber.getText());
new PluginReceiver(this, port);//GEN-LAST:event_jButton2ActionPerformed
jButton2.setEnabled(false);
} catch (Exception ex) {
Logger.getLogger(PluginReceiverPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}
private class MyTimerTask extends TimerTask {
public MyTimerTask() {
}
public void run() {
if (receiving) {
System.out.println(atmClient.getModel().getNickname());
plane = new PlaneDataObject(ip.toString(),atmClient.getModel().getNickname(), lat, lon, alt, speed, heading);
atmClient.getModel().sendObject(plane);
}
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JLabel jLabelAltVal;
private javax.swing.JLabel jLabelGspVal;
private javax.swing.JLabel jLabelHeading;
private javax.swing.JLabel jLabelLatVal;
private javax.swing.JLabel jLabelLonVal;
private javax.swing.JLabel jLabelStatus;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
private javax.swing.JTextField jTextField5;
private javax.swing.JTextField jTextField6;
private javax.swing.JTextField portNumber;
// End of variables declaration//GEN-END:variables
}