Tuesday, June 24, 2008

GMF Read only

In manchen Projekten lohnt es sich auch auf GMF zu setzen selbst wenn das Diagram read only ist und somit die Editierfunktionen von dem Framework nicht gefragt sind. GMF kommt schon mit einigen Features out of the box daher die man für solche Einsätze erstmal abstellen muss. Im folgenden Bild kann man zum Beispiel ein Popup Feature sehen welches nicht mehr hochkommen soll und somit dem Anwender das Erstellen eines neuen Element untersagt:


In den EditParts findet man die Methode createDefaultEditPolicies. Hier ist der richtige Platz um die nicht gewünschten Feature zu unterdrücken oder besser gesagt zu removen. Im folgenden Code Snippet kann man sehen wie dies funktioniert:

/**

* @generated

*/

protected void createDefaultEditPolicies() {

super.createDefaultEditPolicies();

installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,

new TopicSubtopicsItemSemanticEditPolicy());

removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);

}


Diese Methode sollte man allerdings auch am besten in einem CustomXXXEditPart überschreiben damit man die Generierung von GMF immer verwenden kann ohne großes Bauchweh zu haben.
Die Klasse EditPolicyRoles hat noch einige andere Rollen die je nach Nutzen removed oder geadded werden können.

Dann mal wieder viel Spaß beim testen. 

Tooltip GMF

Um in GMF einen Tooltip an eine IFigure zu bekommen gibt es zwei Möglichkeiten die man wählen kann. Der erste Weg ist der einfache in dem man einfach an eine Figure mittels der Methode setToolTip eine IFigure übergibt welche den ToolTip enthält.

Im folgenden Beispiel wird direkt in der ToolTip-Methode ein Label mit dem Text der angezeigt werden soll angelegt.

















protected NodeFigure createNodeFigure() {
NodeFigure figure = createNodePlate();
figure.setLayoutManager(new StackLayout());
figure.setToolTip(new Label("Tooltip"));
IFigure shape = createNodeShape();
figure.add(shape);
contentPane = setupContentPane(shape);
return figure; }

Der zweite und wohl der häufigere Weg ist etwas komplizierter. Wenn man weiterhin die Generierung der EditParts in GMF nutzen will, sollte man die generierten EditParts überschreiben. Wenn man diesen Ansatz verfolgt erspart man sich einiges an Arbeit bei Änderungen an den Modellen und erneutem Generieren. Leider kommt es bei GMF ab und zu vor, das sich der Generator verschluckt und der Entwickler manuell alle Packages löschen muss um dann die Generierung erneut zu starten. Natürlich kann man auch die Fehler per Hand lösen.
Soll ein Name von einem Element im Diagramm den Namen des jeweiligen Elements anzeigen sollte man in der inneren Klasse Figure des EditParts eine Methode anlegen die sich das semantische Modellelemente holt um das Feature zu auszulesen. Mit dem folgenden Code kommt man an das Modellelement ran.

ownedElement = (OwnedElement) ((org.eclipse.gmf.runtime.notation.Node) CustomOwnedElementEditPart.this.getModel()).getElement();

Wenn man das gewünschte Element hat kann man dann wieder mittels eines Labels den ToolTip über die Figure Methode setzen.

Folgender Code zeigt das Setzen des ToolTips durch die semantische Information im Modellelement:

if (ownedElement.getName() != null && ownedElement.getName().length()> 0) {
tooltipText = ownedElement.getName();
} else {
tooltipText = "Owned-Element";
}

if (getToolTip() == null) {
setToolTip(new Label(tooltipText));
} else if (getToolTip() instanceof Label) {
((Label) getToolTip()).setText(tooltipText);
}

Einfach mal austesten und feststellen das es doch nicht so schwer ist wie es auf den ersten Blick ausschaut.


Sunday, April 20, 2008

Jazz - Artikel

Wie versprochen hier der Link des angekündigten Artikel über Jazz in der Elektronikpraxis. 

Des Weiteren wird ein Vortrag auf dem Entwicklertag von der Andrena in Karlsruhe stattfinden.

Viel Spaß beim Lesen und vielleicht sieht man sich ja in Karlsruhe!!!  ;)

Tuesday, March 18, 2008

Parser- Lexer-Entwicklung mit Antlr

Mittels des Antlr Framework kann man sehr schnell und effektiv durch Definition von Grammatiken Recognizer, Interpreter, Compiler und Translator sich generieren lassen. Was das Framework aus meiner Sicht sehr sexy macht ist, wie bei allen Frameworks die ihre Artefakten generieren, die Wartbarkeit sowie Erweiterungsmöglichkeiten. Diese Aspekte sind vor allem im Umfeld der Parser-Entwicklung sehr wichtig. 
Die Grammatiken für den Parser werden in einer Art Backus Naur Form in *.g Files geschrieben. Wie diese Statements in dem *.g File aussehen kann man in dem folgenden kleinen Beispiel sehen:

variableDeclaration : type ident ';'
type  : 'int' | 'String';
ident  : ('a'...'z' | 'A'...'Z' | '0'...'9' | '_' ) (  'a'...'z' | 'A'...'Z' |'0'...'9' | '_' )*;

Innerhalb solcher Rules, wie es z.B. variableDeclaration ist, kann mittels Actions in der Sprache die als Zielsprache gewählt wird, normaler Code eingewoben werden und auf die Werte der Tokens zugegriffen werden. 
Antlr bietet des Weiteren die Möglichkeit die geparsten Informationen in einem AST (abstract syntax tree) zu speichern und sich wiederum mittels einer Grammatik ein TreeWalker generieren zu lassen. Diese Feature habe ich leider bis dato noch nicht getestet aber es hört sich vielversprechend an. 
Ein Tipp für alle die die ihre geparsten Daten in ein Modell packen wollen ist mittels den Actions in der Grammatik sich ein EMF Modell zu füllen. Wenn man sich ein Metamodell mittels EMF erstellt und sich die Implementierung durch Generierung der Java-Klassen erstellen lässt kann man einfach und elegant mit den Actions in der Grammatik die Daten in ein Modell füllen und weiterverarbeiten. ;)
Also einfach mal probieren und mit Antlr sowie EMF herumspielen.
Have a lot of fun!

The collaboration tool Jazz


Für die alltägliche Arbeit in Softwareprojekten benötigt ein Entwickler eine Vielzahl von Werkzeugen. Der häufige Wechsel zwischen diesen Werkzeugen senkt dabei die Produktivität und erschwert die Traceability, mit der zusammengehörige Artefakte in den unterschiedlichen Tools verknüpft werden können. Die Jazz Technology Platform integriert eine Vielzahl von Werkzeugen, die für die Softwareentwicklung benötigt werden, und stellt sie mit dem Produkt Rational Team Concert unter das Dach der Eclipse IDE.
Jazz ist eine viel versprechendes Projekt was sich auf jeden Fall lohnt näher zu begutachten!!!! Ein einführender Artikel wird in der neuen Elektronik Praxis erscheinen. Die Autoren Johannes Tysiak und Markus Kopf arbeiten beide bei itemis und beschäftigen sich unter anderem mit Jazz.
Wer jetzt also Lust auf Jazz bekommen hat sollte entweder in einen Club gehen oder den Artikel in der Elektronik Praxis lesen. ;)
Ein kleiner Appetitanreger kann man sich von dem Screenshot holen......

Sunday, March 16, 2008

Checkstyle

Für alle die unter uns die vielleicht denken Checkstyle macht nur das Entwicklernotebook bund muss ich leider sagen - DEM IST NICHT "NUR" SO ;)

Checkstyle hilft in Projekten die Code-Qualität zu steigern und kostet eigentlich null Aufwand. Somit zählen auch die üblichen Ausreden wie - es ist keine Zeit für noch so ein Tool in den Prozess einzubauen - nicht. Man kann die enthaltene Konfiguration erstmal für den Anfang verwenden und diesen dann sukzessive an das eigene Projekt anpassen. Durch dieses Herangehen fällt Checkstyle kaum (eigentlich gar nicht) in die eigene Workload. 

Wer mehr wissen will kann unter Checkstyle mehr zu diesem Thema finden. Einfach mal installieren und testen.

Greetz,
Markus