MethodView.java
package algorithmen.umleditor;
import java.awt.*;
import javax.swing.*;
import java.util.*;
/**
* View einer Methode.
* Zuständig für die graphische Darstellung der Methodendaten.
*/
public class MethodView extends View {
/**
* Erzeugt einen View für die Methode model an der Position p.
*/
public MethodView(Method model, Point p) {
super(model, p);
}
/**
* Erzeugt einen Standard-View.
*/
public MethodView() {
this(new Method(), new Point(10, 10));
}
/**
* Zeichnet das Datenfeld als einfachen String in UML-Notation.
* Mögliche Weiterentwicklung: Zeilenumbrüche im String.
*/
public void draw(Graphics g) {
Method m = (Method) model;
// abstrakte Methoden werden in italics dargestellt
Font standardFont = g.getFont();
if (m.isAbstract()) {
if (cursiveFont == null) { // lazy Intialisierung
cursiveFont = standardFont.deriveFont(Font.ITALIC);
}
g.setFont(cursiveFont);
}
String s = toUmlString();
size.width = getStringWidth(s, g);
size.height = getStringHeight(g);
g.drawString(s, pos.x, pos.y + size.height);
// statische Methoden unterstreichen
if (((Method) model).isStatic()) {
int yLine = pos.y + size.height + 1;
g.drawLine(pos.x, yLine, pos.x + size.width, yLine);
}
// ggf. Font zurücksetzen
if (m.isAbstract()) {
g.setFont(standardFont);
}
}
/**
* Liefert eine String-Darstellung eines Method-Objekts in UML-Form.
* Typische Beispiele:
* "+add(d1: double, d2: double): double"
*/
public String toUmlString() {
Method m = (Method) model;
String s = m.getVisibility().getUmlSymbol() + m.getName() + "(";
// laufe durch die Parameterliste
// verwendet nicht die draw-Methode, sondern nur den UMLString der Felder
Iterator i = m.getParameter().iterator();
// erstes Feld ohne Komma am Anfang
if (i.hasNext()) { // Liste ist nicht leer
FieldView view = new FieldView((Field) i.next(), new Point());
s += view.toUmlString();
}
// übrige Elemente, mit Komma getrennt
while (i.hasNext()) {
FieldView view = new FieldView((Field) i.next(), new Point());
s += ", " + view.toUmlString();
}
s += "): " + m.getType();
return s;
}
/**
* Erzeugt einen Editor für das UmlObjekt m, modal bzgl. dem Dialog p.
*/
public Editor createEditor(UmlElement m, Dialog p) {
return new MethodEditor((Method) m, p);
}
/**
* Erzeugt einen Editor für das UmlObjekt m, modal bzgl. dem Frame p.
*/
public Editor createEditor(UmlElement m, Frame p) {
return new MethodEditor((Method) m, p);
}
public UmlElement createStandardObject() {
return new Method();
}
}