Java Getriebe

Java und NetBeans

Eigene Icons im UpdateCenter

NetBeans hat eine super funktionierendes, eingebautes Update System. Ich bekomme eine Auflistung verschiedenster Erweiterungen inklusive einer Beschreibung wofür die Dinger gut sind, setze das gewünschte Häkchen und drücke auf „Install“. Kurz warten, ggf. IDE neu starten, tut.

Dieses System lässt sich auch super für eigene RCP Anwendungen auf Basis der NetBeans Plattform nutzen. Ich brauche sogar in der IDE nur auf den Kontexteintrag „Create NBMs“ von meinem Suiteprojekt klicken und schon habe ich einen eigenes Update Center über das ich die Updates zu meinen Modulen verteilen kann. Genau so wie es die IDE selbst macht.

Exakt genau so. Nicht weniger, aber auch nicht mehr. Möchte man jetzt allerdings eine andere Kategorie als „STANDARD“, „BETA“ oder „COMMUNITY“ anbieten (weil die eigene RCP z.B. gar keine „COMMUNITY“ hat) so ist Ebbe angesagt. Um das zu ändern wurde bereits ein entsprechender Bug Report angelegt mit der Bitte

Can we make it possible to specify custom categories in the AutoUpdateType
service?

Vor ein paar Tagen kam dann auch die Antwort

Of course! if you provide a patch with implementation.

und der Report wurde mit „Lösung“ WONTFIX gekennzeichnet. Nicht sehr zufriedenstellend.

Da ich für meine RCP aber schon gerne ein eigenes Icon für eine Kategorie setzen möchte und nicht das Standard NetBeans Icon auftauchen sollte bin ich der oben genannten Aufforderung nachgekommen und habe mir zumindest einmal den entsprechenden Quelltext angesehen. Betroffen sind die Module „Auto Update Services“ in der die grundlegende Funktion des Updateprozesses an sich enthalten ist und die „Auto Update UI“ in dem der Dialog des „Plugin Managers“ sowie die dazugehörigen Resourcen definiert sind ((Zum Testen habe ich noch „Update Centers“ hinzugenommen, da hier die Standard Center der IDE angegeben sind. Aber die haben mit dem eigentlichen „Problem“ nichts zu tun.)).

Erste Erkenntnisse

Die Wurzel des Problem ist nach meinem bisherigen Stand das enum org.netbeans.api.autoupdate.UpdateUnitProvider.CATEGORY. Hier sind die drei Konstanten STANDARD, COMMUNITY und BETA deklariert. Da es ein enum ist, gibt es „per Definition“ keine Möglichkeit an dieser Stelle dynamisch eine weitere Kategorie definieren zu können. So praktisch enums an machen Stellen auch sein mögen, an dieser Stelle blockieren sie ehr als dass sie nützen.

Dieses Enum wird an hunderten Stellen in den beiden besagten Modulen verwendet. Allerdings nur an einer Stelle innerhalb einer switch Anweisung wo die enums ihre Stärke ausspielen könnte. Ansonsten ziemlich viele name() und valueOf() Aufrufe.

Ich habe bereits ein paar Tests gemacht, mit denen ich erfolgreich das Icon eines der Kategorien ändern konnte, aber die Sache steht noch auf sehr wackeligen Füßen. Wenn ich mehr weiß, werde ich berichten. Oder hat jemand sonst sich damit schon auseinander gesetzt?

Eigenes Icon im Plugin Manager