From e8f0fd53d6526be682feb40e64eddf03943b12b1 Mon Sep 17 00:00:00 2001 From: ahren Date: Wed, 20 Dec 2023 16:00:43 +0100 Subject: [PATCH] angepasst an Lehners UML, Transmitterinterface raus, nur noch ein Controller und ein Chatmodel mit GrafikDaten anstatt GrafikModel das einzige was noch nicht so ist wie in seinem UML ist, dass das Chatmodel kein Subscriber ist sondern immernoch der Transmitter --- src/ChatProgramm/Start.java | 19 ++---- .../controller/CommandController.java | 44 ++++++++---- .../controller/GrafikController.java | 67 ------------------- .../controller/commands/CommandConnect.java | 19 ++---- .../controller/commands/CommandSend.java | 40 ++--------- src/ChatProgramm/model/ChatModel.java | 49 ++++++++++++++ src/ChatProgramm/model/Client.java | 6 +- .../{GrafikModel.java => GrafikDaten.java} | 4 +- src/ChatProgramm/model/ReceiveAdapter.java | 10 ++- src/ChatProgramm/model/Server.java | 4 +- src/ChatProgramm/model/Transmitter.java | 16 ++--- .../model/TransmitterInterface.java | 16 ----- src/ChatProgramm/view/GrafikView.java | 6 +- 13 files changed, 114 insertions(+), 186 deletions(-) delete mode 100644 src/ChatProgramm/controller/GrafikController.java create mode 100644 src/ChatProgramm/model/ChatModel.java rename src/ChatProgramm/model/{GrafikModel.java => GrafikDaten.java} (96%) delete mode 100644 src/ChatProgramm/model/TransmitterInterface.java diff --git a/src/ChatProgramm/Start.java b/src/ChatProgramm/Start.java index 7af4d5a..cab9bbe 100644 --- a/src/ChatProgramm/Start.java +++ b/src/ChatProgramm/Start.java @@ -6,10 +6,8 @@ package ChatProgramm; import ChatProgramm.controller.CommandController; -import ChatProgramm.controller.GrafikController; -import ChatProgramm.model.GrafikModel; +import ChatProgramm.model.ChatModel; import ChatProgramm.view.ChatView; -import ChatProgramm.view.GrafikView; import javax.swing.JOptionPane; import javax.swing.UIManager; @@ -21,21 +19,12 @@ public class Start { public Start() { - GrafikModel model = new GrafikModel(); ChatView view = new ChatView(); - GrafikView zeichenflaeche = view.getGvZeichenflaeche(); - zeichenflaeche.setModel(model); - - GrafikController controller = new GrafikController(zeichenflaeche, model); - controller.registerEvents(); - - CommandController controller_commands = new CommandController(view, model, controller, zeichenflaeche); + ChatModel model = new ChatModel(view); + view.getGvZeichenflaeche().setModel(model.getGrafikDaten()); + CommandController controller_commands = new CommandController(view, model); controller_commands.registerEvents(); controller_commands.registerCommands(); - - - - view.setVisible(true); } diff --git a/src/ChatProgramm/controller/CommandController.java b/src/ChatProgramm/controller/CommandController.java index 90365a1..69b6b5d 100644 --- a/src/ChatProgramm/controller/CommandController.java +++ b/src/ChatProgramm/controller/CommandController.java @@ -8,43 +8,45 @@ package ChatProgramm.controller; import ChatProgramm.controller.commands.CommandConnect; import ChatProgramm.controller.commands.CommandInvoker; import ChatProgramm.controller.commands.CommandSend; -import ChatProgramm.model.GrafikModel; +import ChatProgramm.model.ChatModel; import ChatProgramm.view.ChatView; -import ChatProgramm.view.GrafikView; import java.awt.Component; +import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import static java.awt.event.MouseEvent.MOUSE_RELEASED; +import java.awt.event.MouseMotionListener; /** * * @author ahren */ -public class CommandController implements ActionListener{ +public class CommandController extends MouseAdapter implements MouseMotionListener, ActionListener{ private ChatView view; - private GrafikModel model; - private GrafikView gView; + private ChatModel model; private CommandInvoker invoker; - private GrafikController controller; -public CommandController(ChatView view, GrafikModel model, GrafikController controller, GrafikView gView){ +public CommandController(ChatView view, ChatModel model){ this.view = view; this.model = model; - this.gView = gView; this.invoker = new CommandInvoker(); - this.controller = controller; } public void registerEvents(){ - view.getBtnConnect().addActionListener(this); + view.getBtnConnect().addActionListener(this); + view.addMouseMotionListener(this); + view.addMouseListener(this); } public void registerCommands(){ - CommandSend commandSend = new CommandSend(view.getGvZeichenflaeche(), model); - invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, commandSend, model, gView)); - this.controller.setCommand(commandSend); + invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, model)); + + invoker.addCommand(view.getGvZeichenflaeche(), new CommandSend(view, model)); } - + /** * Ausführen des jeweiligen Kommandos * @param e Referenz auf das Event @@ -55,6 +57,20 @@ public CommandController(ChatView view, GrafikModel model, GrafikController cont invoker.executeCommand(key); } + @Override + public void mouseDragged(MouseEvent evt) + { + Point p = evt.getPoint(); + model.getGrafikDaten().addPoint(p); + view.getGvZeichenflaeche().drawPoint(); + } + @Override + public void mouseReleased(MouseEvent evt) + { + model.getGrafikDaten().endShape(); + invoker.executeCommand(view.getGvZeichenflaeche()); + + } } diff --git a/src/ChatProgramm/controller/GrafikController.java b/src/ChatProgramm/controller/GrafikController.java deleted file mode 100644 index d490e74..0000000 --- a/src/ChatProgramm/controller/GrafikController.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template - */ - -package ChatProgramm.controller; - -import ChatProgramm.controller.commands.CommandSend; -import java.awt.Point; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; -import ChatProgramm.model.GrafikModel; -import ChatProgramm.view.GrafikView; - -/** - * - * @author le - */ -public class GrafikController extends MouseAdapter implements MouseMotionListener -{ - private GrafikView view; - private GrafikModel model; - private CommandSend commandSend; - - public GrafikController(GrafikView view, GrafikModel model) - { - this.view = view; - this.model = model; - commandSend = null; - } - - void setCommand(CommandSend command){ - this.commandSend = command; - } - - public void registerEvents() - { - view.addMouseMotionListener(this); - view.addMouseListener(this); - } - - - - @Override - public void mouseDragged(MouseEvent evt) - { - Point p = evt.getPoint(); - model.addPoint(p); - view.drawPoint(); - } - - @Override - public void mouseMoved(MouseEvent e) - { - } - - @Override - public void mouseReleased(MouseEvent evt) - { - model.endShape(); - if(commandSend != null){ - commandSend.execute(); - } - - } -} diff --git a/src/ChatProgramm/controller/commands/CommandConnect.java b/src/ChatProgramm/controller/commands/CommandConnect.java index 99c9627..f4bbf3f 100644 --- a/src/ChatProgramm/controller/commands/CommandConnect.java +++ b/src/ChatProgramm/controller/commands/CommandConnect.java @@ -5,9 +5,11 @@ package ChatProgramm.controller.commands; +import ChatProgramm.model.ChatModel; import ChatProgramm.model.Client; -import ChatProgramm.model.GrafikModel; +import ChatProgramm.model.GrafikDaten; import ChatProgramm.model.Server; +import ChatProgramm.model.Transmitter; import ChatProgramm.util.OhmLogger; import ChatProgramm.view.ChatView; import ChatProgramm.view.GrafikView; @@ -26,22 +28,16 @@ public class CommandConnect implements CommandInterface private JRadioButton rBtnClient; private JDialog dialogFenster; private static Logger lg = OhmLogger.getLogger(); - private CommandSend commandSend; private ChatView view; - private GrafikModel model; - private GrafikView gView; + private ChatModel model; - public CommandConnect(ChatView view, CommandInterface value, GrafikModel model, GrafikView gView) + public CommandConnect(ChatView view, ChatModel model) { rBtnServer = view.getBtnServer(); rBtnClient = view.getBtnClient(); dialogFenster = view.getjDialog1(); - - commandSend = (CommandSend) value; - this.view = view; this.model = model; - this.gView = gView; } @Override @@ -50,7 +46,7 @@ public class CommandConnect implements CommandInterface if(rBtnServer.isSelected()){ lg.info("Server ausgewählt"); try { - commandSend.setTransmitter(new Server(view, model, gView)); + model.setTransmitterToServer(); } catch (IOException ex) { lg.info("Die Verbindung zum Server ist Fehlgeschlagen"); } @@ -59,13 +55,12 @@ public class CommandConnect implements CommandInterface if(rBtnClient.isSelected()){ lg.info("Client ausgewählt"); try { - commandSend.setTransmitter(new Client(view, model, gView)); + model.setTransmitterToClient(); } catch (IOException ex) { lg.info("Die Verbindung zum Client ist Fehlgeschlagen"); } } - dialogFenster.setVisible(false); } diff --git a/src/ChatProgramm/controller/commands/CommandSend.java b/src/ChatProgramm/controller/commands/CommandSend.java index 306c886..3db96dd 100644 --- a/src/ChatProgramm/controller/commands/CommandSend.java +++ b/src/ChatProgramm/controller/commands/CommandSend.java @@ -5,16 +5,11 @@ package ChatProgramm.controller.commands; -import ChatProgramm.model.Client; +import ChatProgramm.model.ChatModel; import ChatProgramm.model.Figur; -import ChatProgramm.model.GrafikModel; -import ChatProgramm.model.Server; -import ChatProgramm.model.TransmitterInterface; import ChatProgramm.util.OhmLogger; import ChatProgramm.view.ChatView; import java.util.logging.Logger; -import javax.swing.JTextField; -import ChatProgramm.view.GrafikView; /** * @@ -24,33 +19,22 @@ public class CommandSend implements CommandInterface { private static Logger lg = OhmLogger.getLogger(); - private GrafikView view; - private GrafikModel model; + private ChatView view; + private ChatModel model; - public TransmitterInterface transmitterInterface; - public Server server; - public Client client; - - - - - public CommandSend(GrafikView view, GrafikModel model) + public CommandSend(ChatView view, ChatModel model) { this.view = view; this.model = model; - //ToDo: Hier muss auch der gFrame referenziert werden - //this.eingabeFeld = view.getTfNachricht(); - transmitterInterface = null; } @Override public void execute() { - Figur aktuelleFigur = model.getFiguren().getLast(); + Figur aktuelleFigur = model.getGrafikDaten().getFiguren().getLast(); try { - transmitterInterface.send(aktuelleFigur); - + model.getTransmitter().send(aktuelleFigur); } catch(Exception NullPointerExeption) { @@ -58,7 +42,6 @@ public class CommandSend implements CommandInterface } } - @Override public boolean isUndoable() { @@ -69,15 +52,4 @@ public class CommandSend implements CommandInterface public void undo() { } - - void setTransmitter(TransmitterInterface transmitter) { - lg.info("Transmitter wird gesetzt"); - if(transmitter != null){ - this.transmitterInterface = transmitter; - - } - else{ - lg.info("der transmitter kommt hier als null an"); - } - } } diff --git a/src/ChatProgramm/model/ChatModel.java b/src/ChatProgramm/model/ChatModel.java new file mode 100644 index 0000000..bc51ff4 --- /dev/null +++ b/src/ChatProgramm/model/ChatModel.java @@ -0,0 +1,49 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ + +package ChatProgramm.model; + +import ChatProgramm.util.OhmLogger; +import ChatProgramm.view.ChatView; +import java.io.IOException; +import java.util.logging.Logger; + +/** + * + * @author ahren + */ +public class ChatModel +{ + + private Transmitter transmitter; + private static Logger lg = OhmLogger.getLogger(); + private GrafikDaten grafikdaten = new GrafikDaten(); + private ChatView view; + + public ChatModel(ChatView view) + { + this.view = view; + } + + public GrafikDaten getGrafikDaten() + { + return grafikdaten; + } + + public void setTransmitterToClient() throws IOException + { + transmitter = new Client(view, this); + } + + public void setTransmitterToServer()throws IOException + { + transmitter = new Server(view, this); + } + + public Transmitter getTransmitter() + { + return transmitter; + } +} diff --git a/src/ChatProgramm/model/Client.java b/src/ChatProgramm/model/Client.java index 9675448..816598c 100644 --- a/src/ChatProgramm/model/Client.java +++ b/src/ChatProgramm/model/Client.java @@ -20,11 +20,11 @@ public class Client extends Transmitter { private static Logger lg = OhmLogger.getLogger(); private static final int PORT = 35000; //lt. iana port > 2¹⁵ - private static final String IP = "100.83.18.179"; + private static final String IP = "127.0.0.1"; - public Client(ChatView view, GrafikModel model, GrafikView gView) throws IOException { - super(view, model, gView); + public Client(ChatView view, ChatModel model) throws IOException { + super(view, model); connect(); initIO(); } diff --git a/src/ChatProgramm/model/GrafikModel.java b/src/ChatProgramm/model/GrafikDaten.java similarity index 96% rename from src/ChatProgramm/model/GrafikModel.java rename to src/ChatProgramm/model/GrafikDaten.java index 6a27a3d..58fa342 100644 --- a/src/ChatProgramm/model/GrafikModel.java +++ b/src/ChatProgramm/model/GrafikDaten.java @@ -24,14 +24,14 @@ import ChatProgramm.util.OhmLogger; * * @author le */ -public class GrafikModel { +public class GrafikDaten { private Figur aktuelleFigur; private ArrayList figuren; private Preferences pref; private static Logger lg = OhmLogger.getLogger(); - public GrafikModel() { + public GrafikDaten() { aktuelleFigur = new Figur(); figuren = new ArrayList<>(); } diff --git a/src/ChatProgramm/model/ReceiveAdapter.java b/src/ChatProgramm/model/ReceiveAdapter.java index 427d027..71d8c48 100644 --- a/src/ChatProgramm/model/ReceiveAdapter.java +++ b/src/ChatProgramm/model/ReceiveAdapter.java @@ -20,14 +20,12 @@ public class ReceiveAdapter implements Subscriber { private static Logger lg = OhmLogger.getLogger(); private ChatView view; - private GrafikModel model; - private GrafikView gView; + private ChatModel model; private Flow.Subscription subscription; - public ReceiveAdapter(ChatView view, GrafikModel model, GrafikView gView) { + public ReceiveAdapter(ChatView view, ChatModel model) { this.view = view; this.model = model; - this.gView = gView; } @Override @@ -37,8 +35,8 @@ public class ReceiveAdapter implements Subscriber { } public void onNext(Figur item) { - model.addFigure(item); - gView.drawFigur(); + model.getGrafikDaten().addFigure(item); + view.getGvZeichenflaeche().drawFigur(); lg.info("Figur wurde dem Grafikmodel hinzugefügt"); this.subscription.request(1); } diff --git a/src/ChatProgramm/model/Server.java b/src/ChatProgramm/model/Server.java index f0ea7aa..75f411a 100644 --- a/src/ChatProgramm/model/Server.java +++ b/src/ChatProgramm/model/Server.java @@ -21,8 +21,8 @@ public class Server extends Transmitter private static Logger lg = OhmLogger.getLogger(); private static final int PORT = 35000; //lt. iana port > 2¹⁵ - public Server(ChatView view, GrafikModel model, GrafikView gView) throws IOException { - super(view, model, gView); + public Server(ChatView view, ChatModel model) throws IOException { + super(view, model); connect(); initIO(); } diff --git a/src/ChatProgramm/model/Transmitter.java b/src/ChatProgramm/model/Transmitter.java index 4c4ffac..2b377ef 100644 --- a/src/ChatProgramm/model/Transmitter.java +++ b/src/ChatProgramm/model/Transmitter.java @@ -5,18 +5,11 @@ package ChatProgramm.model; import ChatProgramm.view.ChatView; -import ChatProgramm.view.GrafikView; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.util.concurrent.ExecutorService; @@ -31,7 +24,7 @@ import java.util.logging.Logger; * * @author ahren */ -public abstract class Transmitter implements Runnable, Subscriber, TransmitterInterface { +public abstract class Transmitter implements Runnable, Subscriber { static final int timeout = 60000; private static final int PORT = 35000; @@ -47,14 +40,14 @@ public abstract class Transmitter implements Runnable, Subscriber, Transm private ExecutorService eService; private String receivedString; private ChatView view; - private GrafikModel model; + private ChatModel model; private ReceiveAdapter receiveAdapter; - public Transmitter(ChatView view, GrafikModel model, GrafikView gView) + public Transmitter(ChatView view, ChatModel model) { socket = new Socket(); eService = null; - receiveAdapter = new ReceiveAdapter(view, model, gView); + receiveAdapter = new ReceiveAdapter(view, model); figurPublisher = new SubmissionPublisher<>(); this.view = view; addWertSubscription(receiveAdapter); @@ -93,7 +86,6 @@ public abstract class Transmitter implements Runnable, Subscriber, Transm * @param figur * @throws IOException */ - @Override public void send(Figur figur){ try { diff --git a/src/ChatProgramm/model/TransmitterInterface.java b/src/ChatProgramm/model/TransmitterInterface.java deleted file mode 100644 index 1b88ebd..0000000 --- a/src/ChatProgramm/model/TransmitterInterface.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template - */ -package ChatProgramm.model; - -/** - * - * @author ahren - */ -public interface TransmitterInterface -{ - public void send(Figur figur); - public Figur receive(); - -} diff --git a/src/ChatProgramm/view/GrafikView.java b/src/ChatProgramm/view/GrafikView.java index cc50f44..5083bc5 100644 --- a/src/ChatProgramm/view/GrafikView.java +++ b/src/ChatProgramm/view/GrafikView.java @@ -22,7 +22,7 @@ import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.standard.DialogTypeSelection; import javax.swing.JComponent; import javax.swing.JOptionPane; -import ChatProgramm.model.GrafikModel; +import ChatProgramm.model.GrafikDaten; import ChatProgramm.util.OhmLogger; @@ -36,7 +36,7 @@ public class GrafikView extends JComponent private static Dimension EINS = new Dimension(1, 1); // Dimension ist eine Klasse die width udn height hält private Rectangle2D.Float pixel; private Line2D.Float line; - private GrafikModel model; + private GrafikDaten model; private Point from = null; private Point to = null; @@ -47,7 +47,7 @@ public class GrafikView extends JComponent line = new Line2D.Float(); } - public void setModel(GrafikModel model) + public void setModel(GrafikDaten model) { this.model = model; }