package demo.helicopter; import java.awt.*; import java.awt.event.*; import java.text.*; // for class DecimalFormat import java.util.*; // for class Vector import mil.navy.nps.dis.*; import mil.navy.nps.testing.*; import mil.navy.nps.util.*; import mil.navy.nps.disEnumerations.*; public class AntennaStartPanel extends Frame implements WindowListener, ActionListener, ItemListener{ private BehaviorStreamBufferUDP behaviorStreamBuffer; private boolean antennaHeard = false; public Vector testAntVec ; // an array of Antenna objects passed in public Vector heardMarkings; public Vector myActiveAntennas; //list of Antennas that are instantiated through this class public static int currentAntennaArraySize = 0; private boolean agentDriven = false; private boolean selection = false; private static int windowWidth; private static int windowHeight; private static int multicastFieldHash = 0; private static int portFieldHash = 0; private static int startHash = 0; private static int rejoinHash = 0; private static int exitHash = 0; private static int playerHash = 0; private static int siteHash = 0; private static int applicationHash = 0; private static String multiAddr; private static int portNum; private static int timeToLive; private static boolean rtpHeaderEnabled; private static short siteNum; private static short appNum; private static short playerId; private static Color panelColor; private static java.awt.List playerNames; private static java.awt.Checkbox agentCheck; static String marking; // 11 characters max //============================================================================================== // Constructor //============================================================================================== public AntennaStartPanel(int wdt, int ht, Vector pAntennas) { setSize(wdt, ht); // set the main window dimensions setTitle("Stand by while listening for other players..."); // title the main window panelColor = new Color(255, 174, 23); setBackground(panelColor); testAntVec = new Vector(); heardMarkings = new Vector(); myActiveAntennas = new Vector(); this.addAntennas(pAntennas); // set main window background color // these are the defualt values setMultiAddr("224.2.181.145"); setPortNum(62040); setSiteNum((short)0); setAppNum((short)1); setPlayerId((short)70); // defaults setMarking("UHF"); selection = false; agentDriven = false; Toolkit tk = Toolkit.getDefaultToolkit(); // retrieve the dimesions of the Dimension dim = tk.getScreenSize(); // local host computer screen setLocation((dim.width - wdt)/2 , (dim.height - ht)/2);// locate main window in center of setWindowWidth(wdt); setWindowHeight(ht); addWindowListener(this); // for handling window close events setLayout(new GridLayout(2, 2)); behaviorStreamBuffer = new BehaviorStreamBufferUDP (multiAddr, portNum); Thread pduReader = new Thread(behaviorStreamBuffer); pduReader.start(); for (int sleepCount = 0; sleepCount < StartPanel.multicastListenDelay; sleepCount++) { try { Thread.sleep( 1000 ); // This is how long it will wait in Milliseconds } catch (InterruptedException ie) { System.out.println ("fitful sleep: " + ie); } if (sleepCount == 0) System.out.print("Listening for other vehicles"); System.out.print("."); java.util.Vector pdus = behaviorStreamBuffer.receivedPdus(); //test to see if there is another Antenna control Panel out there for the //antennas that we are about to instantiate and use for (Enumeration enum = pdus.elements(); enum.hasMoreElements();) { ProtocolDataUnit tempPdu = (ProtocolDataUnit) enum.nextElement(); UnsignedByte pduType = tempPdu.getPduType(); if (pduType.shortValue() == PduTypeField.ENTITYSTATE) { EntityStatePdu tempEntityPdu = (EntityStatePdu) tempPdu; String marking = tempEntityPdu.getMarking(); for (int ix = 0; ix < testAntVec.size(); ix++) { Antenna testAntenna = (Antenna)testAntVec.elementAt(ix); if (marking.equals((String)testAntenna.getSite())) { heardMarkings.add(marking); }//end if else { myActiveAntennas.add(testAntenna); } }//end for }//end if entitystatePDU }//end for loop } behaviorStreamBuffer.shutdown (); setTitle("Please select your Antenna team player identification and agent status:"); // title the main window buildPlayerPanel(); // goes into grid position (1, 1) buildButtonPanel(); // goes into grid position (1, 2) buildNetworkInfoPanel(); // goes into grid position (2, 1) buildIdInfoPanel(); // goes into grid position (2, 2) } // end constructor //============================================================================================== // Properties //============================================================================================== public void setWindowWidth(int wdt) {windowWidth = wdt;} public int getWindowWidth() {return windowWidth;} public void setWindowHeight(int ht) {windowHeight = ht;} public int getWindowHeight() {return windowHeight;} public void setMultiAddr(String addr) {multiAddr = addr;} public String getMultiAddr() {return multiAddr;} public void setPortNum(int setValue) {portNum = setValue;} public int getPortNum() {return portNum;} public void setSiteNum(short setValue) {siteNum = setValue;} public short getSiteNum() {return siteNum;} public void setAppNum(short setValue) {appNum = setValue;} public short getAppNum() {return appNum;} public void setPlayerId(short setValue) {playerId = setValue;} public short getPlayerId() {return playerId;} public void setMarking (String setValue) {marking = setValue;} public String getMarking () {return marking;} public void setTimeToLive (int ttl) {timeToLive = ttl;} public int getTimeToLive () {return timeToLive;} public void setRtpHeaderEnabled (boolean RtpMatch) {rtpHeaderEnabled = RtpMatch;} public boolean getRtpHeaderEnabled () {return rtpHeaderEnabled;} public void setAgentDriven (boolean isAgent) {agentDriven = isAgent;} //***************************** public boolean getAgentDriven () {return agentDriven;} //***************************** //============================================================================================= // Implements WindowListener //============================================================================================= public void windowClosing(WindowEvent evt){ // allows the close option on the if(evt.getSource().equals(this)){ // file menu to function properly System.exit(0); // as well as the X button } // end if } // end windowDeactivated public void windowClosed(WindowEvent e) {} // completes the implementation of public void windowIconified(WindowEvent e) {} // WindowListener in 'adapter' public void windowOpened(WindowEvent e) {} // fashion public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} //============================================================================================== // Panel Builders //============================================================================================== public void buildNetworkInfoPanel(){ Panel networkInfoPanel = new Panel(); // build the panel networkInfoPanel.setBackground(panelColor); // set panel color GridBagLayout gbl = new GridBagLayout(); // instantiate layout mgr. networkInfoPanel.setLayout(gbl); // set panel layout manager Label portNumber = new Label("Multicast Port Number"); // build textfield labels Label multiAddress = new Label("Multicast Address"); // and set text portNumber.setFont(new Font("SansSerif", Font.BOLD, 16)); //portNumber.setForeground (new Color (255, 255, 255)); // was 180,180,180 multiAddress.setFont(new Font("SansSerif", Font.BOLD, 16)); //multiAddress.setForeground (new Color (255, 255, 255)); // was 180,180,180 TextField multicastField = new TextField(multiAddr, 20); // build textFields multicastField.setBackground (new Color (200, 200, 100)); multicastField.setFont(new Font("SansSerif", Font.PLAIN, 14)); TextField portField = new TextField((new Integer(portNum)).toString(), 20); portField.setBackground (new Color (200, 200, 100)); portField.setFont(new Font("SansSerif", Font.PLAIN, 14)); portField.setColumns(20); multicastFieldHash = multicastField.hashCode(); // grab and save hash codes portFieldHash = portField.hashCode(); // for the textfields GridBagConstraints gbc = new GridBagConstraints(); // set up the gbc.fill = GridBagConstraints.NONE; // gridbagConstraints gbc.weighty = 1; addComponent(networkInfoPanel, multiAddress, gbl, gbc, 0, 0); // add components built addComponent(networkInfoPanel, multicastField, gbl, gbc, 1, 0);// above to the network addComponent(networkInfoPanel, portNumber, gbl, gbc, 2, 0); // panel addComponent(networkInfoPanel, portField, gbl, gbc, 3, 0); add(networkInfoPanel); // add the panel to the } // end buildNetworkInfoPanel() // frame public void buildPlayerPanel(){ Panel playerPanel = new Panel(); // build the panel playerPanel.setBackground(panelColor); // set panel color GridBagLayout gbl = new GridBagLayout(); // instantiate layout mgr. playerPanel.setLayout(gbl); // set the layout manager Label blank = new Label(" "); blank.setFont(new Font("Monospaced", Font.PLAIN, 8)); Label playerId = new Label("Player Entity Identification"); // build label an set font playerId.setFont(new Font("SansSerif", Font.BOLD, 16)); //playerId.setForeground (new Color (255, 255, 255)); playerId.setAlignment (Label.CENTER); int numAntennas = testAntVec.size(); playerNames = new java.awt.List (numAntennas, true); // 15 rows, no multiple selections playerNames.setBackground (new Color (240, 240, 160)); playerNames.setFont(new Font("Monospaced", Font.PLAIN, 14)); for (int ix = 0; ix < numAntennas; ix++) { Antenna tempAntenna = (Antenna)testAntVec.elementAt(ix); String tempMarking = tempAntenna.getSite(); if(!heardMarkings.contains((String)tempMarking)) { playerNames.add(tempAntenna.getDescription() + " " + tempMarking); } else { playerNames.add("[ " + tempAntenna.getDescription() + " " + tempMarking + " ] , active" ); } } playerHash = playerNames.hashCode(); // retrieve hashcode playerNames.addItemListener( (ItemListener) this); // frame listens to list GridBagConstraints gbc = new GridBagConstraints(); // set up the gbc.fill = GridBagConstraints.BOTH; // gridbagConstraints gbc.insets = new Insets (5, 5, 5, 5); gbc.weighty = 1; addComponent(playerPanel, blank, gbl, gbc, 0, 0); // to the panel addComponent(playerPanel, playerId, gbl, gbc, 1, 0); // add the components built above addComponent(playerPanel, playerNames, gbl, gbc, 2, 0); add(playerPanel); // add the panel to the } // end buildPlayerPanel() // frame public void buildButtonPanel(){ Panel buttonPanel = new Panel(); // create the panel buttonPanel.setBackground(panelColor); // set the color GridBagLayout gbl = new GridBagLayout(); // instantiate layout mgr. buttonPanel.setLayout(gbl); // set the layout manager agentCheck = new Checkbox("Agent Driven", agentDriven); //agentCheck.setForeground(new Color (255, 255, 255)); //agentCheck.setForeground(new Color (180, 180, 180)); agentCheck.setFont(new Font("SansSerif", Font.BOLD, 16)); Button start = new Button(" Start "); // create the buttons Button rejoin = new Button(" Rejoin "); Button exit = new Button(" Exit "); start.setFont(new Font("SansSerif", Font.BOLD, 14)); //start.setForeground (new Color (0, 0, 255)); rejoin.setFont(new Font("SansSerif", Font.BOLD, 14)); //rejoin.setForeground (new Color (255, 0, 0)); exit.setFont(new Font("SansSerif", Font.BOLD, 14)); //exit.setForeground (new Color (0, 0, 0)); agentCheck.addItemListener(this); start.addActionListener(this); // main frame listens for rejoin.addActionListener(this); // the button presses exit.addActionListener(this); // the button presses startHash = start.hashCode(); // save the hashcode rejoinHash = rejoin.hashCode(); exitHash = exit.hashCode(); GridBagConstraints gbc = new GridBagConstraints(); // set up the gbc.fill = GridBagConstraints.NONE; // gridbagConstraints gbc.weighty = 1; addComponent(buttonPanel, agentCheck, gbl, gbc, 0, 0); addComponent(buttonPanel, start, gbl, gbc, 1, 0); // add the components built addComponent(buttonPanel, rejoin, gbl, gbc, 2, 0); // above to the panel addComponent(buttonPanel, exit, gbl, gbc, 3, 0); add(buttonPanel); // add the panel to the } // end buildButtonPanel() // frame public void buildIdInfoPanel(){ Panel idInfoPanel = new Panel(); // create the panel idInfoPanel.setBackground(panelColor); // set the color GridBagLayout gbl = new GridBagLayout(); // create layout mgr idInfoPanel.setLayout(gbl); // set layout mgr Label siteId = new Label("DIS Site ID"); siteId.setFont(new Font("SansSerif", Font.BOLD, 16)); //siteId.setForeground (new Color (255, 255, 255)); // old color (180, 180, 180) Label applicationId = new Label("DIS Application ID"); applicationId.setFont(new Font("SansSerif", Font.BOLD, 16)); //applicationId.setForeground (new Color (255, 255, 255)); // old color (180, 180, 180) TextField siteField = new TextField((new Integer(siteNum)).toString()); siteField.setBackground (new Color (200, 200, 100)); siteField.setFont(new Font("SansSerif", Font.PLAIN, 14)); TextField applicationField = new TextField((new Integer(appNum)).toString()); applicationField.setBackground (new Color (200, 200, 100)); applicationField.setFont(new Font("SansSerif", Font.PLAIN, 14)); siteHash = siteField.hashCode(); // retrieve and save the applicationHash = applicationField.hashCode(); // hashcodes siteField.addActionListener(this); // frame listens to site applicationField.addActionListener(this); // & application fields GridBagConstraints gbc = new GridBagConstraints(); // set up the gbc.fill = GridBagConstraints.NONE; // gridbagConstraints gbc.weighty = 1; addComponent(idInfoPanel, siteId, gbl, gbc, 0, 0); // add the components built addComponent(idInfoPanel, siteField, gbl, gbc, 1, 0); // above to the panel addComponent(idInfoPanel, applicationId, gbl, gbc, 2, 0); addComponent(idInfoPanel, applicationField, gbl, gbc, 3, 0); add(idInfoPanel); } // buildIdInfoPanel() //============================================================================================== // Utility Methods //============================================================================================== public void addComponent(Container container, Component component, GridBagLayout gbl, GridBagConstraints gbc, int columnNumber, int rowNumber){ container.add(component); gbc.gridx = rowNumber; gbc.gridy = columnNumber; gbc.anchor = GridBagConstraints.WEST; gbl.setConstraints(component, gbc); } // end addComponent() //============================================================================================= // Implements ActionListener //============================================================================================= public void actionPerformed(ActionEvent evt){ System.out.println("entering actionPerformed() w/args... " + "\n event = " + evt); int eventCode = evt.getSource().hashCode(); if (eventCode == startHash) { System.out.println("Starting up"); if (agentDriven) { System.out.println("This is wrong!!!"); //future work } else // not agentDriven { System.out.println("This is right!!!"); Thread antennaThread; for (int ix = 0; ix < testAntVec.size(); ix++) { System.out.println("starting Antenna Control Panel"); Antenna tempAntenna = (Antenna)testAntVec.elementAt(ix); setTitle("Switching to AntennaControlPanel..."); // title the main window AntennaControlPanel antcp = new AntennaControlPanel(multiAddr, portNum,timeToLive, siteNum, appNum, tempAntenna, rtpHeaderEnabled); antennaThread = new Thread(antcp); antennaThread.start(); antcp.show(); } this.setVisible(false); } // end else } if (eventCode == rejoinHash) { // do nothing } // end if if (eventCode == exitHash){ dispose(); System.exit(0); } // end if if (eventCode == siteHash) { String newText = evt.getActionCommand(); System.out.println("entering if check for eventCode == siteHash; newText = " + newText); Integer temp = new Integer(0); try { siteNum = (short)temp.parseInt(newText); } // end try catch (NumberFormatException nfe){ System.out.println("String entered in the Site Number field cannot be parsed to " + "to an integer, site number set to zero instead"); siteNum = 0; } // end catch } // end if if (eventCode == applicationHash){ String newText = evt.getActionCommand(); System.out.println("entering if check for eventCode == applicationHash; newText = " + newText); } // end if } // end actionPerformed //============================================================================================= // Implements ItemListener //============================================================================================= public void itemStateChanged(ItemEvent evt) { if (antennaHeard && playerNames.getSelectedIndex() == 0) { playerNames.deselect (0); return; } if (antennaHeard && playerNames.getSelectedIndex() == 1) { playerNames.deselect (1); return; } if (antennaHeard && playerNames.getSelectedIndex() == 2) { playerNames.deselect (2); return; } if (antennaHeard && playerNames.getSelectedIndex() == 3) { playerNames.deselect (3); return; } if (antennaHeard && playerNames.getSelectedIndex() == 4) { playerNames.deselect (4); return; } if (antennaHeard && playerNames.getSelectedIndex() == 5) { playerNames.deselect (5); return; } if (antennaHeard && playerNames.getSelectedIndex() == 6) { playerNames.deselect (6); return; } if (antennaHeard && playerNames.getSelectedIndex() == 7) { playerNames.deselect (7); return; } if (antennaHeard && playerNames.getSelectedIndex() == 8) { playerNames.deselect (8); return; } if (antennaHeard && playerNames.getSelectedIndex() == 9) { playerNames.deselect (9); return; } if (antennaHeard && playerNames.getSelectedIndex() == 10) { playerNames.deselect (10); return; } if (antennaHeard && playerNames.getSelectedIndex() == 11) { playerNames.deselect (11); return; } if (antennaHeard && playerNames.getSelectedIndex() == 12) { playerNames.deselect (12); return; } if (antennaHeard && playerNames.getSelectedIndex() == 13) { playerNames.deselect (13); return;} if (antennaHeard && playerNames.getSelectedIndex() == 14) { playerNames.deselect (14); return;} if (antennaHeard && playerNames.getSelectedIndex() == 15) { playerNames.deselect (15); return;} if (antennaHeard && playerNames.getSelectedIndex() == 16) { playerNames.deselect (16); return;} if (antennaHeard && playerNames.getSelectedIndex() == 17) { playerNames.deselect (17); return;} if (antennaHeard && playerNames.getSelectedIndex() == 18) { playerNames.deselect (18); return;} if (antennaHeard && playerNames.getSelectedIndex() == 19) { playerNames.deselect (19); return;} if (antennaHeard && playerNames.getSelectedIndex() == 20) { playerNames.deselect (20); return;} if (antennaHeard && playerNames.getSelectedIndex() == 21) { playerNames.deselect (21); return;} if (antennaHeard && playerNames.getSelectedIndex() == 22) { playerNames.deselect (22); return;} if (antennaHeard && playerNames.getSelectedIndex() == 23) { playerNames.deselect (22); return;} if (antennaHeard && playerNames.getSelectedIndex() == 24) { playerNames.deselect (24); return;} agentDriven = agentCheck.getState(); System.out.println("agentDriven = " + agentDriven); String newText = evt.getItem().toString(); selection = true; if (newText.equals("0")) {playerId = 70; marking = "SHF70 Radio";} else if (newText.equals("1")) {playerId = 71; marking = "SHF71 Radio";} else if (newText.equals("2")) {playerId = 72; marking = "SHF72 Radio";} else if (newText.equals("3")) {playerId = 73; marking = "SHF73 Radio";} else if (newText.equals("4")) {playerId = 74; marking = "SHF74 Radio";} else if (newText.equals("5")) {playerId = 75; marking = "SHF75 Radio";} else if (newText.equals("6")) {playerId = 76; marking = "SHF76 Radio";} else if (newText.equals("7")) {playerId = 77; marking = "SHF77 Radio";} else if (newText.equals("8")) {playerId = 78; marking = "UHF78 Radio";} else if (newText.equals("9")) {playerId = 79; marking = "UHF79 Radio";} else if (newText.equals("10")) {playerId = 80; marking = "UHF80 Radio";} else if (newText.equals("11")) {playerId = 81; marking = "UHF81 Radio";} else if (newText.equals("12")) {playerId = 82; marking = "UHF82 Radio";} else if (newText.equals("13")) {playerId = 83; marking = "UHF83 Radio";} else if (newText.equals("14")) {playerId = 84; marking = "UHF84 Radio";} else if (newText.equals("15")) {playerId = 85; marking = "UHF85 Radio";} else if (newText.equals("16")) {playerId = 86; marking = "RAU86 Radio";} else if (newText.equals("17")) {playerId = 87; marking = "RAU87 Radio";} else if (newText.equals("18")) {playerId = 88; marking = "RAU88 Radio";} else if (newText.equals("19")) {playerId = 89; marking = "RAU89 Radio";} else if (newText.equals("20")) {playerId = 90; marking = "RAU90 Radio";} else if (newText.equals("21")) {playerId = 91; marking = "RAU91 Radio";} else if (newText.equals("22")) {playerId = 92; marking = "RAU92 Radio";} else if (newText.equals("23")) {playerId = 93; marking = "RAU93 Radio";} else if (newText.equals("24")) {playerId = 94; marking = "RAU94 Radio";} else System.out.println("AntennaStartPanel mismatched entity name; newText = " + newText); } // end itemStateChanged //============================================================================================== // //============================================================================================== public void addAntennas(Vector readInAntennas){ for (int ix = 0; ix < readInAntennas.size(); ix++) { testAntVec.add((Antenna)readInAntennas.elementAt(ix)); }// end for } //============================================================================================== // Main //============================================================================================== public static void main(String[] args){ /* // how do I pass the vestor of Antenna into the the VRML world AntennaStartPanel antennaPanel = new AntennaStartPanel(650, 650, testAntVec); antennaPanel.show(); */ } // end main } // end class AntennaStartPanel