Diagramme hinzugefügt

This commit is contained in:
Maxim Derksen
2022-02-07 09:43:50 +01:00
parent 5948e1c26b
commit 1c59594b05
6 changed files with 538 additions and 236 deletions

View File

@@ -16,127 +16,127 @@
* @version Generisch_02 2014-02-21 * @version Generisch_02 2014-02-21
*/ */
public class Queue<ContentType> { public class Queue<ContentType> {
/* --------- Anfang der privaten inneren Klasse -------------- */ /* --------- Anfang der privaten inneren Klasse -------------- */
private class QueueNode { private class QueueNode {
private ContentType content = null; private ContentType content = null;
private QueueNode nextNode = null; private QueueNode nextNode = null;
/** /**
* Ein neues Objekt vom Typ QueueNode<ContentType> wird erschaffen. * Ein neues Objekt vom Typ QueueNode<ContentType> wird erschaffen.
* Der Inhalt wird per Parameter gesetzt. Der Verweis ist leer. * Der Inhalt wird per Parameter gesetzt. Der Verweis ist leer.
* *
* @param pContent das Inhaltselement des Knotens vom Typ ContentType * @param pContent das Inhaltselement des Knotens vom Typ ContentType
*/ */
public QueueNode(ContentType pContent) { public QueueNode(ContentType pContent) {
content = pContent; content = pContent;
nextNode = null; nextNode = null;
} }
/** /**
* Der Verweis wird auf das Objekt, das als Parameter uebergeben wird, * Der Verweis wird auf das Objekt, das als Parameter uebergeben wird,
* gesetzt. * gesetzt.
* *
* @param pNext der Nachfolger des Knotens * @param pNext der Nachfolger des Knotens
*/ */
public void setNext(QueueNode pNext) { public void setNext(QueueNode pNext) {
nextNode = pNext; nextNode = pNext;
} }
/** /**
* Liefert das naechste Element des aktuellen Knotens. * Liefert das naechste Element des aktuellen Knotens.
* *
* @return das Objekt vom Typ QueueNode, auf das der aktuelle Verweis zeigt * @return das Objekt vom Typ QueueNode, auf das der aktuelle Verweis zeigt
*/ */
public QueueNode getNext() { public QueueNode getNext() {
return nextNode; return nextNode;
} }
/** /**
* Liefert das Inhaltsobjekt des Knotens vom Typ ContentType. * Liefert das Inhaltsobjekt des Knotens vom Typ ContentType.
* *
* @return das Inhaltsobjekt des Knotens * @return das Inhaltsobjekt des Knotens
*/ */
public ContentType getContent() { public ContentType getContent() {
return content; return content;
} }
} }
/* ----------- Ende der privaten inneren Klasse -------------- */ /* ----------- Ende der privaten inneren Klasse -------------- */
private QueueNode head; private QueueNode head;
private QueueNode tail; private QueueNode tail;
/** /**
* Eine leere Schlange wird erzeugt. * Eine leere Schlange wird erzeugt.
* Objekte, die in dieser Schlange verwaltet werden, muessen vom Typ * Objekte, die in dieser Schlange verwaltet werden, muessen vom Typ
* ContentType sein. * ContentType sein.
*/ */
public Queue() { public Queue() {
head = null; head = null;
tail = null; tail = null;
} }
/** /**
* Die Anfrage liefert den Wert true, wenn die Schlange keine Objekte enthaelt, * Die Anfrage liefert den Wert true, wenn die Schlange keine Objekte enthaelt,
* sonst liefert sie den Wert false. * sonst liefert sie den Wert false.
* *
* @return true, falls die Schlange leer ist, sonst false * @return true, falls die Schlange leer ist, sonst false
*/ */
public boolean isEmpty() { public boolean isEmpty() {
return head == null; return head == null;
} }
/** /**
* Das Objekt pContentType wird an die Schlange angehaengt. * Das Objekt pContentType wird an die Schlange angehaengt.
* Falls pContentType gleich null ist, bleibt die Schlange unveraendert. * Falls pContentType gleich null ist, bleibt die Schlange unveraendert.
* *
* @param pContent * @param pContent
* das anzuhaengende Objekt vom Typ ContentType * das anzuhaengende Objekt vom Typ ContentType
*/ */
public void enqueue(ContentType pContent) { public void enqueue(ContentType pContent) {
if (pContent != null) { if (pContent != null) {
QueueNode newNode = new QueueNode(pContent); QueueNode newNode = new QueueNode(pContent);
if (this.isEmpty()) { if (this.isEmpty()) {
head = newNode; head = newNode;
tail = newNode; tail = newNode;
} else { } else {
tail.setNext(newNode); tail.setNext(newNode);
tail = newNode; tail = newNode;
} }
} }
} }
/** /**
* Das erste Objekt wird aus der Schlange entfernt. * Das erste Objekt wird aus der Schlange entfernt.
* Falls die Schlange leer ist, wird sie nicht veraendert. * Falls die Schlange leer ist, wird sie nicht veraendert.
*/ */
public void dequeue() { public void dequeue() {
if (!this.isEmpty()) { if (!this.isEmpty()) {
head = head.getNext(); head = head.getNext();
if (this.isEmpty()) { if (this.isEmpty()) {
head = null; head = null;
tail = null; tail = null;
} }
} }
} }
/** /**
* Die Anfrage liefert das erste Objekt der Schlange. * Die Anfrage liefert das erste Objekt der Schlange.
* Die Schlange bleibt unveraendert. * Die Schlange bleibt unveraendert.
* Falls die Schlange leer ist, wird null zurueckgegeben. * Falls die Schlange leer ist, wird null zurueckgegeben.
* *
* @return das erste Objekt der Schlange vom Typ ContentType oder null, * @return das erste Objekt der Schlange vom Typ ContentType oder null,
* falls die Schlange leer ist * falls die Schlange leer ist
*/ */
public ContentType front() { public ContentType front() {
if (this.isEmpty()) { if (this.isEmpty()) {
return null; return null;
} else { } else {
return head.getContent(); return head.getContent();
} }
} }
} }

View File

@@ -244,16 +244,16 @@ public abstract class Server
public boolean isOpen() public boolean isOpen()
{ {
return(connectionHandler.active); return(connectionHandler.active);
} }
public boolean isConnectedTo(String pClientIP, int pClientPort) public boolean isConnectedTo(String pClientIP, int pClientPort)
{ {
ClientMessageHandler aMessageHandler = findClientMessageHandler(pClientIP, pClientPort); ClientMessageHandler aMessageHandler = findClientMessageHandler(pClientIP, pClientPort);
if (aMessageHandler != null) if (aMessageHandler != null)
return(aMessageHandler.active); return(aMessageHandler.active);
else else
return(false); return(false);
} }
public void send(String pClientIP, int pClientPort, String pMessage) public void send(String pClientIP, int pClientPort, String pMessage)
@@ -265,15 +265,15 @@ public abstract class Server
public void sendToAll(String pMessage) public void sendToAll(String pMessage)
{ {
synchronized(messageHandlers) synchronized(messageHandlers)
{ {
messageHandlers.toFirst(); messageHandlers.toFirst();
while (messageHandlers.hasAccess()) while (messageHandlers.hasAccess())
{ {
messageHandlers.getContent().send(pMessage); messageHandlers.getContent().send(pMessage);
messageHandlers.next(); messageHandlers.next();
} }
} }
} }
public void closeConnection(String pClientIP, int pClientPort) public void closeConnection(String pClientIP, int pClientPort)
@@ -294,15 +294,15 @@ public abstract class Server
synchronized(messageHandlers) synchronized(messageHandlers)
{ {
ClientMessageHandler aMessageHandler; ClientMessageHandler aMessageHandler;
messageHandlers.toFirst(); messageHandlers.toFirst();
while (messageHandlers.hasAccess()) while (messageHandlers.hasAccess())
{ {
aMessageHandler = messageHandlers.getContent(); aMessageHandler = messageHandlers.getContent();
processClosingConnection(aMessageHandler.getClientIP(), aMessageHandler.getClientPort()); processClosingConnection(aMessageHandler.getClientIP(), aMessageHandler.getClientPort());
aMessageHandler.close(); aMessageHandler.close();
messageHandlers.remove(); messageHandlers.remove();
} }
} }
} }
@@ -314,46 +314,46 @@ public abstract class Server
private void addNewClientMessageHandler(Socket pClientSocket) private void addNewClientMessageHandler(Socket pClientSocket)
{ {
synchronized(messageHandlers) synchronized(messageHandlers)
{ {
messageHandlers.append(new Server.ClientMessageHandler(pClientSocket)); messageHandlers.append(new Server.ClientMessageHandler(pClientSocket));
} }
} }
private void removeClientMessageHandler(ClientMessageHandler pClientMessageHandler) private void removeClientMessageHandler(ClientMessageHandler pClientMessageHandler)
{ {
synchronized(messageHandlers) synchronized(messageHandlers)
{ {
messageHandlers.toFirst(); messageHandlers.toFirst();
while (messageHandlers.hasAccess()) while (messageHandlers.hasAccess())
{ {
if (pClientMessageHandler == messageHandlers.getContent()) if (pClientMessageHandler == messageHandlers.getContent())
{ {
messageHandlers.remove(); messageHandlers.remove();
return; return;
} }
else else
messageHandlers.next(); messageHandlers.next();
} }
} }
} }
private ClientMessageHandler findClientMessageHandler(String pClientIP, int pClientPort) private ClientMessageHandler findClientMessageHandler(String pClientIP, int pClientPort)
{ {
synchronized(messageHandlers) synchronized(messageHandlers)
{ {
ClientMessageHandler aMessageHandler; ClientMessageHandler aMessageHandler;
messageHandlers.toFirst(); messageHandlers.toFirst();
while (messageHandlers.hasAccess()) while (messageHandlers.hasAccess())
{ {
aMessageHandler = messageHandlers.getContent(); aMessageHandler = messageHandlers.getContent();
if (aMessageHandler.getClientIP().equals(pClientIP) && aMessageHandler.getClientPort() == pClientPort) if (aMessageHandler.getClientIP().equals(pClientIP) && aMessageHandler.getClientPort() == pClientPort)
return (aMessageHandler); return (aMessageHandler);
messageHandlers.next(); messageHandlers.next();
} }
return (null); return (null);
} }
} }
} }

View File

@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.3.0">
<zoom_level>8</zoom_level>
<element>
<id>UMLClass</id>
<coordinates>
<x>224</x>
<y>400</y>
<w>360</w>
<h>128</h>
</coordinates>
<panel_attributes>_object: WordleServer_
--
+ int DEFAULT_PORT
+ DatabaseConnector db
--
+ WordleServer
+ WordleServer(int pPort)
+ processNewConnection(String pClientIP, int pClientPort)
+ processClosingConnection(String pClientIP, int pClientPort)
+ processMessage(String pClientIP, int pClientPort, String pMessage)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>312</x>
<y>272</y>
<w>168</w>
<h>56</h>
</coordinates>
<panel_attributes>_object: Server_
--
</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>80</x>
<y>632</y>
<w>168</w>
<h>56</h>
</coordinates>
<panel_attributes>_object: Queue&lt;ContentType&gt;_
--
</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>320</x>
<y>632</y>
<w>168</w>
<h>56</h>
</coordinates>
<panel_attributes>_object: DatabaseConnector_
--
</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>312</x>
<y>136</y>
<w>168</w>
<h>56</h>
</coordinates>
<panel_attributes>_object: List&lt;ContentType&gt;_
--
</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>552</x>
<y>632</y>
<w>168</w>
<h>56</h>
</coordinates>
<panel_attributes>_object: QueryResult_
--
</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>392</x>
<y>320</y>
<w>24</w>
<h>96</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;-</panel_attributes>
<additional_attributes>10.0;100.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>392</x>
<y>184</y>
<w>24</w>
<h>104</h>
</coordinates>
<panel_attributes>lt=&lt;..</panel_attributes>
<additional_attributes>10.0;10.0;10.0;110.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>392</x>
<y>520</y>
<w>24</w>
<h>128</h>
</coordinates>
<panel_attributes>lt=&lt;..</panel_attributes>
<additional_attributes>10.0;140.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>240</x>
<y>648</y>
<w>96</w>
<h>24</h>
</coordinates>
<panel_attributes>lt=&lt;..</panel_attributes>
<additional_attributes>10.0;10.0;100.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>480</x>
<y>648</y>
<w>88</w>
<h>24</h>
</coordinates>
<panel_attributes>lt=&lt;..</panel_attributes>
<additional_attributes>90.0;10.0;10.0;10.0</additional_attributes>
</element>
</diagram>

View File

@@ -0,0 +1,169 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.3.0">
<zoom_level>8</zoom_level>
<element>
<id>UMLGeneric</id>
<coordinates>
<x>584</x>
<y>160</y>
<w>80</w>
<h>24</h>
</coordinates>
<panel_attributes>_Client 2_</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLGeneric</id>
<coordinates>
<x>120</x>
<y>160</y>
<w>80</w>
<h>24</h>
</coordinates>
<panel_attributes>_Client 1_</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLGeneric</id>
<coordinates>
<x>352</x>
<y>160</y>
<w>80</w>
<h>24</h>
</coordinates>
<panel_attributes>_Wordle Server_</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>152</x>
<y>176</y>
<w>24</w>
<h>536</h>
</coordinates>
<panel_attributes>lt=.</panel_attributes>
<additional_attributes>10.0;650.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>384</x>
<y>176</y>
<w>24</w>
<h>536</h>
</coordinates>
<panel_attributes>lt=.</panel_attributes>
<additional_attributes>10.0;650.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>616</x>
<y>176</y>
<w>24</w>
<h>536</h>
</coordinates>
<panel_attributes>lt=.</panel_attributes>
<additional_attributes>10.0;650.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLGeneric</id>
<coordinates>
<x>376</x>
<y>240</y>
<w>16</w>
<h>56</h>
</coordinates>
<panel_attributes/>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>152</x>
<y>216</y>
<w>240</w>
<h>40</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>280.0;30.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>152</x>
<y>288</y>
<w>240</w>
<h>40</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>10.0;30.0;280.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>400</x>
<y>280</y>
<w>240</w>
<h>48</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>10.0;40.0;280.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>400</x>
<y>352</y>
<w>240</w>
<h>48</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>280.0;40.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLGeneric</id>
<coordinates>
<x>392</x>
<y>312</y>
<w>16</w>
<h>48</h>
</coordinates>
<panel_attributes/>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>152</x>
<y>328</y>
<w>240</w>
<h>48</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>280.0;40.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLGeneric</id>
<coordinates>
<x>376</x>
<y>360</y>
<w>16</w>
<h>48</h>
</coordinates>
<panel_attributes/>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>152</x>
<y>400</y>
<w>240</w>
<h>40</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>10.0;30.0;280.0;10.0</additional_attributes>
</element>
</diagram>

View File

@@ -4,14 +4,14 @@
*/ */
public class WordleServer extends Server { public class WordleServer extends Server {
publib static final int DEFAULT_PORT = 1000; public static final int DEFAULT_PORT = 1000;
public static void main( String[] args ) { public static void main( String[] args ) {
new WordleServer(); new WordleServer();
} }
private DatabaseConnector db; private DatabaseConnector db;
public WordleServer() { public WordleServer() {

View File

@@ -1,91 +1,79 @@
#BlueJ package file #BlueJ package file
dependency1.from=DecisionNode dependency1.from=DatabaseConnector
dependency1.to=Dataset dependency1.to=QueryResult
dependency1.type=UsesDependency dependency1.type=UsesDependency
dependency2.from=Classification dependency2.from=DatabaseConnector
dependency2.to=Dataset dependency2.to=Queue
dependency2.type=UsesDependency dependency2.type=UsesDependency
dependency3.from=Decision dependency3.from=Server
dependency3.to=Dataset dependency3.to=List
dependency3.type=UsesDependency dependency3.type=UsesDependency
dependency4.from=DecisionTreeBuilder dependency4.from=WordleServer
dependency4.to=BinaryTree dependency4.to=DatabaseConnector
dependency4.type=UsesDependency dependency4.type=UsesDependency
dependency5.from=DecisionTreeBuilder editor.fx.0.height=1017
dependency5.to=DecisionNode editor.fx.0.width=854
dependency5.type=UsesDependency editor.fx.0.x=-7
dependency6.from=DecisionTreeBuilder editor.fx.0.y=0
dependency6.to=Classification objectbench.height=96
dependency6.type=UsesDependency objectbench.width=653
dependency7.from=DecisionTreeBuilder
dependency7.to=Decision
dependency7.type=UsesDependency
dependency8.from=DecisionTreeBuilder
dependency8.to=Dataset
dependency8.type=UsesDependency
editor.fx.0.height=722
editor.fx.0.width=800
editor.fx.0.x=388
editor.fx.0.y=50
objectbench.height=66
objectbench.width=1201
package.divider.horizontal=0.6 package.divider.horizontal=0.6
package.divider.vertical=0.8983286908077994 package.divider.vertical=0.8876772082878953
package.editor.height=622 package.editor.height=794
package.editor.width=1078 package.editor.width=542
package.editor.x=39 package.editor.x=0
package.editor.y=24 package.editor.y=0
package.frame.height=776 package.frame.height=1017
package.frame.width=1241 package.frame.width=693
package.numDependencies=8 package.numDependencies=4
package.numTargets=6 package.numTargets=6
package.showExtends=true package.showExtends=true
package.showUses=true package.showUses=true
project.charset=UTF-8 project.charset=UTF-8
readme.height=58 readme.height=60
readme.name=@README readme.name=@README
readme.width=47 readme.width=49
readme.x=10 readme.x=10
readme.y=10 readme.y=10
target1.height=40 target1.height=70
target1.name=Classification target1.name=DatabaseConnector
target1.showInterface=false target1.showInterface=false
target1.type=ClassTarget target1.type=ClassTarget
target1.width=210 target1.width=150
target1.x=40 target1.x=410
target1.y=460 target1.y=100
target2.height=50 target2.height=70
target2.name=Decision target2.name=QueryResult
target2.showInterface=false target2.showInterface=false
target2.type=ClassTarget target2.type=ClassTarget
target2.width=190 target2.width=120
target2.x=300 target2.x=300
target2.y=460 target2.y=190
target3.height=120 target3.height=70
target3.name=BinaryTree target3.name=Server
target3.showInterface=false target3.showInterface=false
target3.type=ClassTarget target3.type=AbstractTarget
target3.width=440 target3.width=120
target3.x=890 target3.x=540
target3.y=250 target3.y=410
target4.height=40 target4.height=70
target4.name=Dataset target4.name=WordleServer
target4.showInterface=false target4.showInterface=false
target4.type=ClassTarget target4.type=ClassTarget
target4.width=270 target4.width=120
target4.x=430 target4.x=530
target4.y=30 target4.y=240
target5.height=50 target5.height=70
target5.name=DecisionNode target5.name=List
target5.showInterface=false target5.showInterface=false
target5.type=AbstractTarget target5.type=ClassTarget
target5.width=110 target5.width=150
target5.x=210 target5.x=290
target5.y=290 target5.y=530
target6.height=60 target6.height=70
target6.name=DecisionTreeBuilder target6.name=Queue
target6.showInterface=false target6.showInterface=false
target6.type=ClassTarget target6.type=ClassTarget
target6.width=270 target6.width=160
target6.x=580 target6.x=280
target6.y=230 target6.y=420