Eclipse – Sebastians Blog https://sgaul.de Neues aus den Softwareminen Thu, 13 Mar 2014 20:34:47 +0000 de-DE hourly 1 https://wordpress.org/?v=6.1.7 https://sgaul.de/wp-content/uploads/2019/02/cropped-sgaul-2-1-32x32.jpg Eclipse – Sebastians Blog https://sgaul.de 32 32 Echtzeit-Semantikprüfung für Java https://sgaul.de/2012/11/12/echtzeit-semantikprufung-java/ Mon, 12 Nov 2012 20:24:25 +0000 https://sgaul.de/?p=1625 Echtzeit-Semantikprüfung für Java weiterlesen]]> Fast schon unscheinbar kommt es daher, bahnbrechend könnte die Idee sein: Das Eclipse-Plugin JUnitLoop prüft in Echtzeit, welche Unittests von gerade gemachten Änderungen betroffen sind und führt diese automatisch aus. Der Entwickler bekommt mit dem Speichern eine Rückmeldung, ob und wo seine Änderungen zu Problemen geführt haben. Das Tool ist in etwas so einfach zu bedienen, wie es die Einbild-Bedienungsanleitung vermuten lässt. Zudem ist das Plugin frei und der Code bei GitHub zu finden.

Nach der vollständigen Syntaxanalyse, die man von Eclipse schon heute gewohnt ist, ist dies ein weiterer Schritt mit großem Effizienzsteigerungspotential. Und für Testmuffel werden Unittests um einiges interessanter…

]]>
Apache-Wicket-Quickstart unter Ubuntu 12.04 https://sgaul.de/2012/09/08/apache-wicket-quickstart-unter-ubuntu-12-04/ Sat, 08 Sep 2012 13:01:16 +0000 https://sgaul.de/?p=1397 Nachdem ich mich auf Arbeit die letzten Wochen oft über Windows und Tomcat ärgern musste, habe ich heute auf einer frischen Installation von Ubuntu 12.04 ein Demoprojekt mit Apache Wicket eingerichtet. Wicket ist ein Rundumsorglospaket für die Webapp-Entwicklung und in Verbindung mit Maven in 5 Minuten lauffähig. Statt Apache und Tomcat wird für die Entwicklung der handliche Webserver Jetty verwendet.

Java-Umgebung installieren

Alles was ich brauche ist eine Java-Entwicklerumgebung und Maven:

sudo apt-get install openjdk-6-jdk maven

Je nach Bedarf kann man auch die neuere Version 7 wählen. Da diese keine nennenswerten Neuerungen bringt, setze ich auf den (hoffentlich) besser getesteten Vorgänger.

Die Eclipse-Version aus den Ubuntu-Repos ist erfahrungsgemäß alt und problematisch, daher einfach eine aktuelle Version der EE-Variante von der Projektseite laden und z.B. in /opt entpacken.

Nach der Installation starte ich Eclipse schon einmal, damit alle Konfigurationsverzeichnisse angelegt werden.

Wicket-Projekt erstellen

Ich erstelle meine Javaprojekte in $HOME/workspace. Mehr müssen Maven und Eclipse nicht voneinander wissen:

mvn -Declipse.workspace=$HOME/workspace eclipse:add-maven-repo

Nun erstelle ich mit Maven ein neues Wicket-Projekt, das automatisch alle Abhängigkeiten auflöst und das Projektverzeichnis mit allen Dateien erstellt. Für den Befehl gibt es einen Maven-Generator auf der Wicket-Website.

mvn archetype:generate -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=6.0.0 -DgroupId=de.sgaul -DartifactId=myproject -DarchetypeRepository=https://repository.apache.org/ -DinteractiveMode=false

Nun wechsele ich in das Projekt und erstellen mit Maven eine geeignete Eclipse-Konfiguration:

cd myproject
mvn eclipse:eclipse

Das war es schon mit der Einrichtung. Ich kannte Maven bisher nur vom Namen und habe es kaum genutzt. Das wird sich künftig wohl ändern.

Wicket-Projekt mit Eclipse bearbeiten

Nun einfach Eclipse starten und das Projekt importieren: File > Import > Existing Projects into Workspace. Im geöffneten Projekt die Datei Start.java suchen und mit einem Rechtsklick über Run as als Java Application starten. Automatisch wird der kleine Webserver Jetty gestartet (Entwicklung ohne Tomcat, ein Segen) und die Seite ist lokal erreichbar: localhost:8080.

So sollte die Wicket-App anfangs aussehen

Wer Wicket noch nicht kennt, kann nun die Beispiele der Projekteseite nachvollziehen.

]]>
Einstellungen für Eclipse-Plugins: PreferencePage https://sgaul.de/2011/06/25/einstellungen-fur-eclipse-plugins-preferencepage/ Sat, 25 Jun 2011 11:51:33 +0000 https://sgaul.de/?p=138 Einstellungen für Eclipse-Plugins: PreferencePage weiterlesen]]> Viele wichtige Sachen kann man bei der Plugin-Entwicklung für Eclipse einfach über Wizards machen, die anhand eines kleines Beispiels meist ausreichend zeigen, wie man sich einem Thema nähern kann. Leider basiert das Beispiel für Einstellungsseiten auf FieldEditorPreferencePage. Diese Klasse ist zwar recht einfach zu erweitern und erzeugt schnell eine Einstellungsseite mit einigen Feldern, dafür ist diese leider alles andere als flexibel. Einträge gruppieren? Einen Beschreibungsabsatz hinzufügen? Hier muss man doch eine Stufe höher gehen und stattdessen von PreferencePage erben.

Der Plugin-Extension-Wizard von Eclipse

Festlegen von Namen und zuständigen Klassen

Zunächst ändern wir folglich den Kopf der automatisch erzeugten Klasse:

public class SamplePreferencePage
	extends PreferencePage
	implements IWorkbenchPreferencePage {

In Zeile 2 wurde nun FieldEditorPreferencePage ersetzt. Nun wird die Methode createFieldEditors, welche Änderungen an der Einstellungsseite mittels addField zulässt, durch createContents ersetzt. Hierin können wir wie üblich im SWT-Kontext alle Einstellungen selber vornehmen – müssen es aber auch. Man muss also wie üblich mit einem Layout beginnen:

@Override
protected Control createContents(Composite parent) {
	Composite top = new Composite(parent , SWT.LEFT);
        top.setLayout(new GridLayout());
	top.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        // ...
}

Gruppieren von Einstellungsfeldern

Hierin können wir nun wie üblich Widgets hinzufügen. Zunächst wollen wir aber Gruppen erzeugen, welche einzelne Felder umranden und mit einer Überschrift versehen.

Group personal = new Group(parent, SWT.NULL);
personal.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
personal.setText("Information about Yourself");
Eine Einstellungsseite mit Gruppierungen in Eclipse

Die Klasse Group erbt von Composite und kann daher als Elternelement der einzelnen Felder verwendet werden.

Einstellungsfelder hinzufügen

Nun können wir wieder auf die FieldEditor-Klassen des Eclipse-Beispiels zurückgreifen, um einfache Felder zu erzeugen, die direkt mit den Einstellungen verknüpft sind.

nameField =
   new StringFieldEditor(PreferenceConstants.USER_NAME, "Your name:", personal);
nameField.setEmptyStringAllowed(false);
nameField.setPreferenceStore(getPreferenceStore());
nameField.load();

Da wir die Feldeditoren noch an anderer Stelle brauchen, sind diese als Klassenattribute angelegt. In Zeile 1 sieht man, dass das Textfeld in die Gruppe personal eingehängt wird. Zeile 2 verbietet es, das Feld leer zu lassen (Eclipse gibt in diesem Fall eine Fehlermeldung aus). Zeilen 3 und 4 sind noch etwas Verwaltungsarbeit: Welcher Einstellungsspeicher für dieses Feld verantwortlich ist und das Laden der aktuellen Werte werden so realisiert.

Leider war es das noch nicht an Verwaltung, nicht umsonst haben wir nameField als Attribut angelegt:

protected void performDefaults() {
	nameField.loadDefault();
	super.performDefaults();
}

public boolean performOk() {
	nameField.store();
	return super.performOk();
}

Hier wird festgelegt, dass bei einem Klick auf die Standardwert-Schaltfläche der Einstellungsseite eben diese Werte auch wieder hergestellt werden. Nach einem Klick auf OK sollen die Änderungen gespeichert werden. Dies muss mit allen Feldern geschehen.

]]>
Aktive/nichtaktive Menüeinträge in Eclipse erstellen https://sgaul.de/2011/06/16/aktivenichtaktive-menueintrage-in-eclipse-erstellen/ https://sgaul.de/2011/06/16/aktivenichtaktive-menueintrage-in-eclipse-erstellen/#comments Thu, 16 Jun 2011 11:08:58 +0000 https://sgaul.de/?p=64 Während der Entwicklung eines Eclipse-Plugins zur zeitgleichen Bearbeitung von Dokumenten, Real-Time Collaboration for Eclipse genannt, hat sich die Erzeugung von Menüeinträgen als recht kompliziert erwiesen. Gerade im Vergleich zu anderen GUI-Elementen kam ich hier nur langsam voran.

Schnell und einfach Menüeinträge für ein Plugin erstellen

Der Einstieg ist eigentlich recht simpel. In der Eclipse-Plugin-Manifest-Verwaltung muss unter dem Reiter Extensions ein neues Actionset erzeugt werden. Hierzu klickt man auf Add, dann am bestem im Reiter Extension Wizard das „Hello, world“ action set wählen, welches bereits ein Beispielmenü und einen Action-Delegator (IWorkbenchWindowActionDelegate) erzeugt. Der Delegator delegiert Aktionen, wenn der Nutzer auf einen entsprechenden Menüeintrag geklickt hat.

Nach ein bisschen weiterer Arbeit kann das alles so aussehen:

Der Plugin-Editor von Eclipse

In der erstellten Delegate-Klasse kann man nun unter der Methode run die gewünschten Aktionen des Menüeintrags ausführen. Man muss auch nicht für jede Kleinigkeit eine neue Klasse erstellen, sondern kann innerhalb einer Run-Methode Fallunterscheidung verwenden:

if (action.getId().equals("de.uni_rostock.rtce.menu.add_shared")) {
    // dann das
} else if (...) {
    // dann so
}

Menüeinträge ausgrauen (disable) und reaktivieren (enable)

Aktionen lassen sich aktivieren und deaktivieren. Dies graut automatisch entsprechende Menüeinträge und Icons aus. Jeder Menüeintrag hat seine eigene Action, auf die man immer Zugriff hat, wenn ein anderer Editor oder Eclipse-View in den Fokus kommt. Wenn dies passiert, wird im Aktionsdelegator die Methode selectionChanged aufgerufen. Dieses übergibt die Aktion als Parameter, welche dann ein- und ausgeschaltet werden kann:

public void selectionChanged(IAction action, ISelection selection) {
    // Aktion deaktivieren
    action.setEnabled(false);
    // Unter einer bestimmten Bedingung aktivieren
    if ([condition]) {
        action.setEnabled(true);
    }
}
]]>
https://sgaul.de/2011/06/16/aktivenichtaktive-menueintrage-in-eclipse-erstellen/feed/ 2