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
This commit is contained in:
ahren 2023-12-20 16:00:43 +01:00
parent 7ae10ac02f
commit e8f0fd53d6
13 changed files with 114 additions and 186 deletions

View File

@ -6,10 +6,8 @@
package ChatProgramm; package ChatProgramm;
import ChatProgramm.controller.CommandController; import ChatProgramm.controller.CommandController;
import ChatProgramm.controller.GrafikController; import ChatProgramm.model.ChatModel;
import ChatProgramm.model.GrafikModel;
import ChatProgramm.view.ChatView; import ChatProgramm.view.ChatView;
import ChatProgramm.view.GrafikView;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.UIManager; import javax.swing.UIManager;
@ -21,21 +19,12 @@ public class Start
{ {
public Start() public Start()
{ {
GrafikModel model = new GrafikModel();
ChatView view = new ChatView(); ChatView view = new ChatView();
GrafikView zeichenflaeche = view.getGvZeichenflaeche(); ChatModel model = new ChatModel(view);
zeichenflaeche.setModel(model); view.getGvZeichenflaeche().setModel(model.getGrafikDaten());
CommandController controller_commands = new CommandController(view, model);
GrafikController controller = new GrafikController(zeichenflaeche, model);
controller.registerEvents();
CommandController controller_commands = new CommandController(view, model, controller, zeichenflaeche);
controller_commands.registerEvents(); controller_commands.registerEvents();
controller_commands.registerCommands(); controller_commands.registerCommands();
view.setVisible(true); view.setVisible(true);
} }

View File

@ -8,41 +8,43 @@ package ChatProgramm.controller;
import ChatProgramm.controller.commands.CommandConnect; import ChatProgramm.controller.commands.CommandConnect;
import ChatProgramm.controller.commands.CommandInvoker; import ChatProgramm.controller.commands.CommandInvoker;
import ChatProgramm.controller.commands.CommandSend; import ChatProgramm.controller.commands.CommandSend;
import ChatProgramm.model.GrafikModel; import ChatProgramm.model.ChatModel;
import ChatProgramm.view.ChatView; import ChatProgramm.view.ChatView;
import ChatProgramm.view.GrafikView;
import java.awt.Component; import java.awt.Component;
import java.awt.Point;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; 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 * @author ahren
*/ */
public class CommandController implements ActionListener{ public class CommandController extends MouseAdapter implements MouseMotionListener, ActionListener{
private ChatView view; private ChatView view;
private GrafikModel model; private ChatModel model;
private GrafikView gView;
private CommandInvoker invoker; 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.view = view;
this.model = model; this.model = model;
this.gView = gView;
this.invoker = new CommandInvoker(); this.invoker = new CommandInvoker();
this.controller = controller;
} }
public void registerEvents(){ public void registerEvents(){
view.getBtnConnect().addActionListener(this); view.getBtnConnect().addActionListener(this);
view.addMouseMotionListener(this);
view.addMouseListener(this);
} }
public void registerCommands(){ public void registerCommands(){
CommandSend commandSend = new CommandSend(view.getGvZeichenflaeche(), model); invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, model));
invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, commandSend, model, gView));
this.controller.setCommand(commandSend); invoker.addCommand(view.getGvZeichenflaeche(), new CommandSend(view, model));
} }
/** /**
@ -55,6 +57,20 @@ public CommandController(ChatView view, GrafikModel model, GrafikController cont
invoker.executeCommand(key); 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());
}
} }

View File

@ -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();
}
}
}

View File

@ -5,9 +5,11 @@
package ChatProgramm.controller.commands; package ChatProgramm.controller.commands;
import ChatProgramm.model.ChatModel;
import ChatProgramm.model.Client; import ChatProgramm.model.Client;
import ChatProgramm.model.GrafikModel; import ChatProgramm.model.GrafikDaten;
import ChatProgramm.model.Server; import ChatProgramm.model.Server;
import ChatProgramm.model.Transmitter;
import ChatProgramm.util.OhmLogger; import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView; import ChatProgramm.view.ChatView;
import ChatProgramm.view.GrafikView; import ChatProgramm.view.GrafikView;
@ -26,22 +28,16 @@ public class CommandConnect implements CommandInterface
private JRadioButton rBtnClient; private JRadioButton rBtnClient;
private JDialog dialogFenster; private JDialog dialogFenster;
private static Logger lg = OhmLogger.getLogger(); private static Logger lg = OhmLogger.getLogger();
private CommandSend commandSend;
private ChatView view; private ChatView view;
private GrafikModel model; private ChatModel model;
private GrafikView gView;
public CommandConnect(ChatView view, CommandInterface value, GrafikModel model, GrafikView gView) public CommandConnect(ChatView view, ChatModel model)
{ {
rBtnServer = view.getBtnServer(); rBtnServer = view.getBtnServer();
rBtnClient = view.getBtnClient(); rBtnClient = view.getBtnClient();
dialogFenster = view.getjDialog1(); dialogFenster = view.getjDialog1();
commandSend = (CommandSend) value;
this.view = view; this.view = view;
this.model = model; this.model = model;
this.gView = gView;
} }
@Override @Override
@ -50,7 +46,7 @@ public class CommandConnect implements CommandInterface
if(rBtnServer.isSelected()){ if(rBtnServer.isSelected()){
lg.info("Server ausgewählt"); lg.info("Server ausgewählt");
try { try {
commandSend.setTransmitter(new Server(view, model, gView)); model.setTransmitterToServer();
} catch (IOException ex) { } catch (IOException ex) {
lg.info("Die Verbindung zum Server ist Fehlgeschlagen"); lg.info("Die Verbindung zum Server ist Fehlgeschlagen");
} }
@ -59,13 +55,12 @@ public class CommandConnect implements CommandInterface
if(rBtnClient.isSelected()){ if(rBtnClient.isSelected()){
lg.info("Client ausgewählt"); lg.info("Client ausgewählt");
try { try {
commandSend.setTransmitter(new Client(view, model, gView)); model.setTransmitterToClient();
} catch (IOException ex) { } catch (IOException ex) {
lg.info("Die Verbindung zum Client ist Fehlgeschlagen"); lg.info("Die Verbindung zum Client ist Fehlgeschlagen");
} }
} }
dialogFenster.setVisible(false); dialogFenster.setVisible(false);
} }

View File

@ -5,16 +5,11 @@
package ChatProgramm.controller.commands; package ChatProgramm.controller.commands;
import ChatProgramm.model.Client; import ChatProgramm.model.ChatModel;
import ChatProgramm.model.Figur; import ChatProgramm.model.Figur;
import ChatProgramm.model.GrafikModel;
import ChatProgramm.model.Server;
import ChatProgramm.model.TransmitterInterface;
import ChatProgramm.util.OhmLogger; import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView; import ChatProgramm.view.ChatView;
import java.util.logging.Logger; 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 static Logger lg = OhmLogger.getLogger();
private GrafikView view; private ChatView view;
private GrafikModel model; private ChatModel model;
public TransmitterInterface transmitterInterface; public CommandSend(ChatView view, ChatModel model)
public Server server;
public Client client;
public CommandSend(GrafikView view, GrafikModel model)
{ {
this.view = view; this.view = view;
this.model = model; this.model = model;
//ToDo: Hier muss auch der gFrame referenziert werden
//this.eingabeFeld = view.getTfNachricht();
transmitterInterface = null;
} }
@Override @Override
public void execute() public void execute()
{ {
Figur aktuelleFigur = model.getFiguren().getLast(); Figur aktuelleFigur = model.getGrafikDaten().getFiguren().getLast();
try try
{ {
transmitterInterface.send(aktuelleFigur); model.getTransmitter().send(aktuelleFigur);
} }
catch(Exception NullPointerExeption) catch(Exception NullPointerExeption)
{ {
@ -58,7 +42,6 @@ public class CommandSend implements CommandInterface
} }
} }
@Override @Override
public boolean isUndoable() public boolean isUndoable()
{ {
@ -69,15 +52,4 @@ public class CommandSend implements CommandInterface
public void undo() 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");
}
}
} }

View File

@ -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;
}
}

View File

@ -20,11 +20,11 @@ public class Client extends Transmitter {
private static Logger lg = OhmLogger.getLogger(); private static Logger lg = OhmLogger.getLogger();
private static final int PORT = 35000; //lt. iana port > 2¹ 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 { public Client(ChatView view, ChatModel model) throws IOException {
super(view, model, gView); super(view, model);
connect(); connect();
initIO(); initIO();
} }

View File

@ -24,14 +24,14 @@ import ChatProgramm.util.OhmLogger;
* *
* @author le * @author le
*/ */
public class GrafikModel { public class GrafikDaten {
private Figur aktuelleFigur; private Figur aktuelleFigur;
private ArrayList<Figur> figuren; private ArrayList<Figur> figuren;
private Preferences pref; private Preferences pref;
private static Logger lg = OhmLogger.getLogger(); private static Logger lg = OhmLogger.getLogger();
public GrafikModel() { public GrafikDaten() {
aktuelleFigur = new Figur(); aktuelleFigur = new Figur();
figuren = new ArrayList<>(); figuren = new ArrayList<>();
} }

View File

@ -20,14 +20,12 @@ public class ReceiveAdapter implements Subscriber<Figur> {
private static Logger lg = OhmLogger.getLogger(); private static Logger lg = OhmLogger.getLogger();
private ChatView view; private ChatView view;
private GrafikModel model; private ChatModel model;
private GrafikView gView;
private Flow.Subscription subscription; private Flow.Subscription subscription;
public ReceiveAdapter(ChatView view, GrafikModel model, GrafikView gView) { public ReceiveAdapter(ChatView view, ChatModel model) {
this.view = view; this.view = view;
this.model = model; this.model = model;
this.gView = gView;
} }
@Override @Override
@ -37,8 +35,8 @@ public class ReceiveAdapter implements Subscriber<Figur> {
} }
public void onNext(Figur item) { public void onNext(Figur item) {
model.addFigure(item); model.getGrafikDaten().addFigure(item);
gView.drawFigur(); view.getGvZeichenflaeche().drawFigur();
lg.info("Figur wurde dem Grafikmodel hinzugefügt"); lg.info("Figur wurde dem Grafikmodel hinzugefügt");
this.subscription.request(1); this.subscription.request(1);
} }

View File

@ -21,8 +21,8 @@ public class Server extends Transmitter
private static Logger lg = OhmLogger.getLogger(); private static Logger lg = OhmLogger.getLogger();
private static final int PORT = 35000; //lt. iana port > 2¹ private static final int PORT = 35000; //lt. iana port > 2¹
public Server(ChatView view, GrafikModel model, GrafikView gView) throws IOException { public Server(ChatView view, ChatModel model) throws IOException {
super(view, model, gView); super(view, model);
connect(); connect();
initIO(); initIO();
} }

View File

@ -5,18 +5,11 @@
package ChatProgramm.model; package ChatProgramm.model;
import ChatProgramm.view.ChatView; 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.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.Socket; import java.net.Socket;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@ -31,7 +24,7 @@ import java.util.logging.Logger;
* *
* @author ahren * @author ahren
*/ */
public abstract class Transmitter implements Runnable, Subscriber<Figur>, TransmitterInterface { public abstract class Transmitter implements Runnable, Subscriber<Figur> {
static final int timeout = 60000; static final int timeout = 60000;
private static final int PORT = 35000; private static final int PORT = 35000;
@ -47,14 +40,14 @@ public abstract class Transmitter implements Runnable, Subscriber<Figur>, Transm
private ExecutorService eService; private ExecutorService eService;
private String receivedString; private String receivedString;
private ChatView view; private ChatView view;
private GrafikModel model; private ChatModel model;
private ReceiveAdapter receiveAdapter; private ReceiveAdapter receiveAdapter;
public Transmitter(ChatView view, GrafikModel model, GrafikView gView) public Transmitter(ChatView view, ChatModel model)
{ {
socket = new Socket(); socket = new Socket();
eService = null; eService = null;
receiveAdapter = new ReceiveAdapter(view, model, gView); receiveAdapter = new ReceiveAdapter(view, model);
figurPublisher = new SubmissionPublisher<>(); figurPublisher = new SubmissionPublisher<>();
this.view = view; this.view = view;
addWertSubscription(receiveAdapter); addWertSubscription(receiveAdapter);
@ -93,7 +86,6 @@ public abstract class Transmitter implements Runnable, Subscriber<Figur>, Transm
* @param figur * @param figur
* @throws IOException * @throws IOException
*/ */
@Override
public void send(Figur figur){ public void send(Figur figur){
try try
{ {

View File

@ -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();
}

View File

@ -22,7 +22,7 @@ import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.standard.DialogTypeSelection; import javax.print.attribute.standard.DialogTypeSelection;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import ChatProgramm.model.GrafikModel; import ChatProgramm.model.GrafikDaten;
import ChatProgramm.util.OhmLogger; 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 static Dimension EINS = new Dimension(1, 1); // Dimension ist eine Klasse die width udn height hält
private Rectangle2D.Float pixel; private Rectangle2D.Float pixel;
private Line2D.Float line; private Line2D.Float line;
private GrafikModel model; private GrafikDaten model;
private Point from = null; private Point from = null;
private Point to = null; private Point to = null;
@ -47,7 +47,7 @@ public class GrafikView extends JComponent
line = new Line2D.Float(); line = new Line2D.Float();
} }
public void setModel(GrafikModel model) public void setModel(GrafikDaten model)
{ {
this.model = model; this.model = model;
} }