diff --git a/src/controller/CommandController.java b/src/controller/CommandController.java index 326012b..6e3015b 100644 --- a/src/controller/CommandController.java +++ b/src/controller/CommandController.java @@ -6,15 +6,12 @@ package controller; +import controller.commands.CommandInvite; +import controller.commands.CommandRegister; import gui.Hauptfenster; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.text.ParseException; -import java.util.logging.Level; import java.util.logging.Logger; -import javax.sdp.SdpException; -import javax.sip.InvalidArgumentException; -import javax.sip.SipException; import logger.OhmLogger; import model.VoIP; @@ -27,10 +24,12 @@ public class CommandController implements ActionListener private static final Logger lc = OhmLogger.getLogger(); private VoIP model; private Hauptfenster view; + private CommandInvoker invoker; public CommandController(VoIP model, Hauptfenster view) { this.model = model; this.view = view; + invoker = new CommandInvoker(); } public void registerEvents() @@ -38,33 +37,20 @@ public class CommandController implements ActionListener view.getBtn1().addActionListener(this); view.getBtn2().addActionListener(this); } + public void registerCommands() + { + //invoker.addCommand(view.getMnuioeffnen(), new CommandOpen(view, model)); + + invoker.addCommand(view.getBtn1(), new CommandRegister(model, view)); + invoker.addCommand(view.getBtn2(), new CommandInvite(model, view)); + } @Override public void actionPerformed(ActionEvent e) { Object key = e.getSource(); - if (key.equals(view.getBtn1())) - { - lc.info("Register Butten geklickt"); - try - { - model.sendRegister("123123", 1); - } - catch (ParseException|InvalidArgumentException|SipException ex) - { - lc.getLogger(CommandController.class.getName()).log(Level.SEVERE, null, ex); - } - } - if(key.equals(view.getBtn2())) - { - try { - lc.info("Invite Button geklickt"); - model.sendInvitation("23", 2); - } - catch (ParseException|InvalidArgumentException|SdpException|SipException ex) { - lc.getLogger(CommandController.class.getName()).log(Level.SEVERE, null, ex); - } - } + + invoker.executeCommand(key); } } diff --git a/src/controller/CommandInterface.java b/src/controller/CommandInterface.java new file mode 100644 index 0000000..b3b956e --- /dev/null +++ b/src/controller/CommandInterface.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package controller; + +/** + * + * @author Normal + */ +public interface CommandInterface +{ + public void execute(); + public void undo(); + public Boolean isundoable(); +} diff --git a/src/controller/CommandInvoker.java b/src/controller/CommandInvoker.java new file mode 100644 index 0000000..410514a --- /dev/null +++ b/src/controller/CommandInvoker.java @@ -0,0 +1,53 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package controller; + +import java.util.HashMap; +import java.util.Stack; + +/** + * + * @author Normal + */ +public class CommandInvoker +{ + + private HashMap commands; + private Stack undoStack; + + public CommandInvoker() + { + commands = new HashMap<>(); + undoStack = new Stack<>(); + } + + public void addCommand(Object key,CommandInterface value) + { + commands.put(key,value); + } + + public void executeCommand(Object key) + { + commands.get(key).execute(); + if(commands.get(key).isundoable()==true) + { + undoStack.push(commands.get(key)); + } + } + + public void undoCommand(Object key) + { + try + { + undoStack.pop().undo(); + } + catch (Exception e) + { + + } + } +} \ No newline at end of file diff --git a/src/controller/commands/CommandInvite.java b/src/controller/commands/CommandInvite.java new file mode 100644 index 0000000..8080ca8 --- /dev/null +++ b/src/controller/commands/CommandInvite.java @@ -0,0 +1,61 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package controller.commands; + +import controller.CommandInterface; +import gui.Hauptfenster; +import java.text.ParseException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.sdp.SdpException; +import javax.sip.InvalidArgumentException; +import javax.sip.SipException; +import logger.OhmLogger; +import model.VoIP; + +/** + * + * @author Normal + */ +public class CommandInvite implements CommandInterface +{ + private static final Logger lginvite = OhmLogger.getLogger(); + private VoIP model; + private Hauptfenster view; + public CommandInvite(VoIP model, Hauptfenster view) + { + this.model = model; + this.view = view; + } + + @Override + public void execute() + { + try + { view.getTxtArea().append("Einladung an " + view.getTxtServerIP().getText() + " gesendet\n"); + model.sendInvitation(view.getTxtcallIP().getText(), 5078); + } + catch (ParseException|InvalidArgumentException|SdpException|SipException ex) + { + view.getTxtArea().append("Einladung fehlgeschlagen"); + lginvite.getLogger(CommandInvite.class.getName()).log(Level.SEVERE, null, ex); + } + } + + + @Override + public void undo() + { + + } + + @Override + public Boolean isundoable() + { + return false; + } +} diff --git a/src/controller/commands/CommandRegister.java b/src/controller/commands/CommandRegister.java new file mode 100644 index 0000000..0d6e86a --- /dev/null +++ b/src/controller/commands/CommandRegister.java @@ -0,0 +1,62 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package controller.commands; + +import controller.CommandInterface; +import gui.Hauptfenster; +import java.text.ParseException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.sip.InvalidArgumentException; +import javax.sip.SipException; +import logger.OhmLogger; +import model.VoIP; + +/** + * + * @author Normal + */ +public class CommandRegister implements CommandInterface +{ + private static final Logger lgregister = OhmLogger.getLogger(); + private VoIP model; + private Hauptfenster view; + public CommandRegister(VoIP model, Hauptfenster view) + { + this.model = model; + this.view = view; + } + + @Override + public void execute() + { + try + { + view.getTxtArea().append("Registrierung an " + view.getTxtServerIP().getText() + " gesendet\n"); + model.sendRegister(view.getTxtServerIP().getText(), 5078); + + } + catch (ParseException|InvalidArgumentException|SipException ex) + { + view.getTxtArea().append("Registrierung fehlgeschlagen"); + lgregister.getLogger(CommandRegister.class.getName()).log(Level.SEVERE, null, ex); + } + } + + + @Override + public void undo() + { + + } + + @Override + public Boolean isundoable() + { + return false; + } +} diff --git a/src/gui/Hauptfenster.form b/src/gui/Hauptfenster.form index 0da850b..1ba00ca 100644 --- a/src/gui/Hauptfenster.form +++ b/src/gui/Hauptfenster.form @@ -43,13 +43,6 @@ - - - - - - - @@ -77,5 +70,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gui/Hauptfenster.java b/src/gui/Hauptfenster.java index 2ea6a01..1585c70 100644 --- a/src/gui/Hauptfenster.java +++ b/src/gui/Hauptfenster.java @@ -30,18 +30,11 @@ public class Hauptfenster extends javax.swing.JFrame /** * @return the textField */ - public javax.swing.JTextField getTextField() - { - return textField; - } /** * @param textField the textField to set */ - public void setTextField(javax.swing.JTextField textField) - { - this.textField = textField; - } + /** * @return the txtArea @@ -79,11 +72,19 @@ public class Hauptfenster extends javax.swing.JFrame jScrollPane1 = new javax.swing.JScrollPane(); txtArea = new javax.swing.JTextArea(); - textField = new javax.swing.JTextField(); jPanel1 = new javax.swing.JPanel(); btn1 = new javax.swing.JButton(); btn2 = new javax.swing.JButton(); jButton1 = new javax.swing.JButton(); + jPanel3 = new javax.swing.JPanel(); + jPanel4 = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + jLabel2 = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + jPanel2 = new javax.swing.JPanel(); + lblmyIP = new javax.swing.JLabel(); + txtServerIP = new javax.swing.JTextField(); + txtcallIP = new javax.swing.JTextField(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); @@ -92,7 +93,6 @@ public class Hauptfenster extends javax.swing.JFrame jScrollPane1.setViewportView(txtArea); getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER); - getContentPane().add(textField, java.awt.BorderLayout.PAGE_START); btn1.setText("Register"); btn1.setToolTipText("Registrierung am Server"); @@ -106,6 +106,38 @@ public class Hauptfenster extends javax.swing.JFrame getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_END); + jPanel4.setLayout(new javax.swing.BoxLayout(jPanel4, javax.swing.BoxLayout.Y_AXIS)); + + jLabel1.setText("My IP:"); + jLabel1.setFocusable(false); + jLabel1.setInheritsPopupMenu(false); + jPanel4.add(jLabel1); + + jLabel2.setText("Server IP:"); + jPanel4.add(jLabel2); + + jLabel3.setText("Call IP:"); + jPanel4.add(jLabel3); + + jPanel3.add(jPanel4); + + jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.Y_AXIS)); + + lblmyIP.setText("xxx.xxx.xxx.xxx"); + lblmyIP.setToolTipText(""); + lblmyIP.setVerticalAlignment(javax.swing.SwingConstants.TOP); + jPanel2.add(lblmyIP); + + txtServerIP.setText("xxx.xxx.xxx.xxx"); + jPanel2.add(txtServerIP); + + txtcallIP.setText("xxx.xxx.xxx.xxx"); + jPanel2.add(txtcallIP); + + jPanel3.add(jPanel2); + + getContentPane().add(jPanel3, java.awt.BorderLayout.PAGE_START); + pack(); setLocationRelativeTo(null); }// //GEN-END:initComponents @@ -163,9 +195,49 @@ public class Hauptfenster extends javax.swing.JFrame private javax.swing.JButton btn1; private javax.swing.JButton btn2; private javax.swing.JButton jButton1; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; + private javax.swing.JPanel jPanel3; + private javax.swing.JPanel jPanel4; private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JTextField textField; + private javax.swing.JLabel lblmyIP; private javax.swing.JTextArea txtArea; + private javax.swing.JTextField txtServerIP; + private javax.swing.JTextField txtcallIP; // End of variables declaration//GEN-END:variables + + /** + * @return the lblmyIP + */ + public javax.swing.JLabel getLblmyIP() + { + return lblmyIP; + } + + /** + * @param lblmyIP the lblmyIP to set + */ + public void setLblmyIP(javax.swing.JLabel lblmyIP) + { + this.lblmyIP = lblmyIP; + } + + /** + * @return the txtServerIP + */ + public javax.swing.JTextField getTxtServerIP() + { + return txtServerIP; + } + + /** + * @return the txtcallIP + */ + public javax.swing.JTextField getTxtcallIP() + { + return txtcallIP; + } } diff --git a/src/model/VoIP.java b/src/model/VoIP.java index 0e6b228..eebde21 100644 --- a/src/model/VoIP.java +++ b/src/model/VoIP.java @@ -7,6 +7,7 @@ package model; import gov.nist.javax.sip.DialogTimeoutEvent; import gov.nist.javax.sip.SipListenerExt; +import gui.Hauptfenster; import java.net.InetAddress; import java.text.ParseException; import java.util.*; @@ -38,6 +39,7 @@ import logger.OhmLogger; */ public class VoIP implements SipListenerExt { + Hauptfenster view; //später entfernen wegen Zugriff private static final Logger lg = OhmLogger.getLogger(); SipFactory sipFactory; // Used to access the SIP API. SipStack sipStack; // The SIP stack. @@ -61,9 +63,9 @@ public class VoIP implements SipListenerExt - public VoIP() //Konstruktor für eigene Daten + public VoIP(Hauptfenster view) //Konstruktor für eigene Daten { - + this.view = view; try { //wird an sich erstmal nicht gebraucht aber später sinnvoll um eigene Daten zu initialisieren @@ -76,7 +78,7 @@ public class VoIP implements SipListenerExt this.properties = new Properties(); this.properties.setProperty("javax.sip.STACK_NAME", "stack"); this.sipStack = this.sipFactory.createSipStack(this.properties); - this.messageFactory = this.sipFactory.createMessageFactory(); + this.messageFactory = this.sipFactory.createMessageFactory(); this.headerFactory = this.sipFactory.createHeaderFactory(); this.addressFactory = this.sipFactory.createAddressFactory(); this.listeningPoint = this.sipStack.createListeningPoint(this.myIPAddress, this.myPort, this.protocolTyp); @@ -119,6 +121,7 @@ public class VoIP implements SipListenerExt request.addHeader(allow); request.addHeader(expire); this.sipProvider.sendRequest(request); + view.getTxtArea().append("Erfolgreiche Registierung\n"); lg.info("Erfolgreiches Senden der Registrierung"); } public void sendInvitation(String sipaddresse, int serverPort)throws ParseException, InvalidArgumentException, SipException, SdpException @@ -179,6 +182,7 @@ public class VoIP implements SipListenerExt response.addHeader(allow); response.addHeader(allowevents); this.sipProvider.sendResponse(response); + view.getTxtArea().append("Server Option Request erfolgreich beantwortet\n"); lg.info("Erfolgreiches senden des Headers"); } catch (ParseException | SipException ex) @@ -189,6 +193,7 @@ public class VoIP implements SipListenerExt //Aktive Kommunikation else if ((Request.INVITE).equals(requestEvent.getRequest().getMethod())) // Invite von anderem Benutzer { + view.getTxtArea().append("Werde von xxx angerufen"); lg.info("Hab Invitation bekommen"); try { @@ -359,6 +364,20 @@ public class VoIP implements SipListenerExt return sessionDescription; } + + //Get Methoden falls man mal die Parameter braucht + public String getmyName() + { + return myName; + } + public Integer getMyPort() + { + return myPort; + } + public String getMyIPAdress() + { + return myIPAddress; + } @Override public void processTimeout(TimeoutEvent timeoutEvent) diff --git a/src/phone/Start.java b/src/phone/Start.java index 4893c00..4f6cbc9 100644 --- a/src/phone/Start.java +++ b/src/phone/Start.java @@ -8,6 +8,8 @@ package phone; import controller.CommandController; import gui.Hauptfenster; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.text.ParseException; import model.VoIP; /** @@ -16,14 +18,19 @@ import model.VoIP; */ public class Start { - public Start() throws ParseException + public Start() throws ParseException, UnknownHostException { Hauptfenster view = new Hauptfenster(); - VoIP model = new VoIP(); + VoIP model = new VoIP(view); CommandController controller = new CommandController(model, view); controller.registerEvents(); - //view.setExtendedState(Frame.MAXIMIZED_BOTH); + controller.registerCommands(); + + view.getLblmyIP().setText(InetAddress.getLocalHost().getHostAddress()); + view.getTxtServerIP().setText("192.168.100.11"); + view.getTxtcallIP().setText("192.168.100.xxx"); + view.setExtendedState(view.MAXIMIZED_BOTH); view.setTitle("TestOberfläche VoIP Phone"); view.setVisible(true); @@ -32,7 +39,7 @@ public class Start /** * @param args the command line arguments */ - public static void main(String[] args) throws ParseException + public static void main(String[] args) throws ParseException, UnknownHostException { new Start(); }