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

View File

@ -244,16 +244,16 @@ public abstract class Server
public boolean isOpen()
{
return(connectionHandler.active);
return(connectionHandler.active);
}
public boolean isConnectedTo(String pClientIP, int pClientPort)
{
ClientMessageHandler aMessageHandler = findClientMessageHandler(pClientIP, pClientPort);
ClientMessageHandler aMessageHandler = findClientMessageHandler(pClientIP, pClientPort);
if (aMessageHandler != null)
return(aMessageHandler.active);
return(aMessageHandler.active);
else
return(false);
return(false);
}
public void send(String pClientIP, int pClientPort, String pMessage)
@ -265,15 +265,15 @@ public abstract class Server
public void sendToAll(String pMessage)
{
synchronized(messageHandlers)
{
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
messageHandlers.getContent().send(pMessage);
messageHandlers.next();
}
}
synchronized(messageHandlers)
{
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
messageHandlers.getContent().send(pMessage);
messageHandlers.next();
}
}
}
public void closeConnection(String pClientIP, int pClientPort)
@ -294,15 +294,15 @@ public abstract class Server
synchronized(messageHandlers)
{
ClientMessageHandler aMessageHandler;
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
aMessageHandler = messageHandlers.getContent();
processClosingConnection(aMessageHandler.getClientIP(), aMessageHandler.getClientPort());
aMessageHandler.close();
messageHandlers.remove();
}
ClientMessageHandler aMessageHandler;
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
aMessageHandler = messageHandlers.getContent();
processClosingConnection(aMessageHandler.getClientIP(), aMessageHandler.getClientPort());
aMessageHandler.close();
messageHandlers.remove();
}
}
}
@ -314,46 +314,46 @@ public abstract class Server
private void addNewClientMessageHandler(Socket pClientSocket)
{
synchronized(messageHandlers)
{
messageHandlers.append(new Server.ClientMessageHandler(pClientSocket));
}
synchronized(messageHandlers)
{
messageHandlers.append(new Server.ClientMessageHandler(pClientSocket));
}
}
private void removeClientMessageHandler(ClientMessageHandler pClientMessageHandler)
{
synchronized(messageHandlers)
{
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
if (pClientMessageHandler == messageHandlers.getContent())
{
messageHandlers.remove();
return;
}
else
messageHandlers.next();
}
}
synchronized(messageHandlers)
{
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
if (pClientMessageHandler == messageHandlers.getContent())
{
messageHandlers.remove();
return;
}
else
messageHandlers.next();
}
}
}
private ClientMessageHandler findClientMessageHandler(String pClientIP, int pClientPort)
{
synchronized(messageHandlers)
{
ClientMessageHandler aMessageHandler;
messageHandlers.toFirst();
synchronized(messageHandlers)
{
ClientMessageHandler aMessageHandler;
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
aMessageHandler = messageHandlers.getContent();
if (aMessageHandler.getClientIP().equals(pClientIP) && aMessageHandler.getClientPort() == pClientPort)
return (aMessageHandler);
messageHandlers.next();
}
return (null);
}
while (messageHandlers.hasAccess())
{
aMessageHandler = messageHandlers.getContent();
if (aMessageHandler.getClientIP().equals(pClientIP) && aMessageHandler.getClientPort() == pClientPort)
return (aMessageHandler);
messageHandlers.next();
}
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 {
publib static final int DEFAULT_PORT = 1000;
public static final int DEFAULT_PORT = 1000;
public static void main( String[] args ) {
new WordleServer();
}
private DatabaseConnector db;
private DatabaseConnector db;
public WordleServer() {

View File

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