# Bundle verzeichnis



## lumo (23. Jun 2010)

Hallo

ich habe bis jetzt immer versucht den pfad auszulesen indem ich folgende struktur gebaut hab.
ich hab im src einen folder images (indem ich eine klasse IMGROOT habe)
und dann hab ich noch einen resource folder images (wo die daten liegen)

bis jetzt hab ich dann imgroot.class.getclassloader etc angewandt um die bilder zu laden.
da das natürlich alles andere als nobel ist dachte ich mir dass ichs nun richte...

per
ClassLoader.getSystemResource(".")
hab ich das getestet (funktioniert super wenn ich meine klasse mit der eingenen main aufrufe)

nun muss ich meine bilder aber von einem anderen bunde aus anfragen, und bekomme nun bei oben genannter funktion keinen pfad sondern nur null zurück...

wie kann ich nun SAUBER den pfad von meinem images ordner ermitteln?

hoffe dass einer von euch einen guten rat hat!


----------



## @x.l (23. Jun 2010)

Ich glaube, dass wir schwierig. Und außerdem ist es doch recht ungünstig, wenn ein Bundle so stark von einem anderem abhängig gemacht wird. So sollte doch jedes Bundle seine eigenen Ressourcen mitbringen. Dann kannst du mittels des ImageDescriptors ganz einfach darauf zugreifen.

```
ImageData data = Activator.getImageDescriptor("/icons/pic.jpg").createImage().getImageData();
```

Obiges Bsp. geht davon aus, das der Ordner icons parallel zu src liegt.


----------



## lumo (23. Jun 2010)

meine bundles haben keine Activators, brauch ich auch nicht...

das mit dem mitbringen der eigenen resources hab ich bereits mit einigen softwareentwicklern diskutiert.

es geht mir darum dass nicht zig resourcen doppelt und dreifach geladen werden, darum wird in meinem projekt jede resource in ein plugin geworfen, sodass alle 'aus einem napf fressen'


----------



## @x.l (23. Jun 2010)

Und wenn du die Ressourcen in ein bestimmtes Package ablegst, welches du dann exportierst?!
So müsste dieses Package ja dann für andere Bundles sichtbar sein und somit auch die Ressourcen.


----------



## code404 (23. Jun 2010)

lumo hat gesagt.:


> es geht mir darum dass nicht zig resourcen doppelt und dreifach geladen werden, darum wird in meinem projekt jede resource in ein plugin geworfen, sodass alle 'aus einem napf fressen'



Was einen hindert das so zu machen ist, dass diese Resourcen nur im programmatischen Teil deines Plugins verwendet werden können.
Wenn du aber z.B. Icons im plugin.xml verwenden willst, kannst du nur auf Resourcen zugreifen die im selben Plugin liegen.


----------



## Wildcard (23. Jun 2010)

Mit AbstractUIPlugin.imageDescriptorFromPlugin kannst du auch ImageDescriptors für beliebige Bundles erzeugen lassen.
Für Shared Images bietet sich auch ein ISharedImages Interface an über das du die Pfade/ImageDescriptors bekommen kannst. Dieses Interface exportierst du dann einfach.


----------



## lumo (24. Jun 2010)

hab das mit dem *ImageDescriptor imageDescriptor = AbstractUIPlugin
						.imageDescriptorFromPlugin(pluginId, fileName)* jetzt mal versucht, bekomme aber immer null zurück - ich gehe davon aus dass ich die falsche pluginId habe.

wo sollte ich die id finden?

wenn ich auf meine plugin.xml gehe (ich hab nur eine plugin.xml und zwar in meinem haupt-plugin)
dort steht unter ID ein string. wenn ich den eintrage bekomm ich noch immer ne nullpointerexception...

der pfad zur file sollte passen...

EDIT:

hab jetzt meinem hauptplugin noch einen activator hinzugefügt (ist zwar sinnlos aber...)
immer noch...
ImageDescriptor imageDescriptor = AbstractUIPlugin
						.imageDescriptorFromPlugin(Activator.PLUGIN_ID, fileName);
-> NullPointerException


----------



## lumo (24. Jun 2010)

code404 hat gesagt.:


> Was einen hindert das so zu machen ist, dass diese Resourcen nur im programmatischen Teil deines Plugins verwendet werden können.
> Wenn du aber z.B. Icons im plugin.xml verwenden willst, kannst du nur auf Resourcen zugreifen die im selben Plugin liegen.



die icons der plugin.xml sollen nicht das problem sein.
über den code kann man übrigens alle icons setzen, bis auf das des plugins selbst (wurde schon als bug submitted)
ausserdem stelle ich ein resource-plugin zur verfügung mit OSGi-Service über das man die resourcen bekommen kann -> programmiertechnisch ist das schon umgesetzt und funktioniert bestens


----------



## Wildcard (24. Jun 2010)

lumo hat gesagt.:


> hab jetzt meinem hauptplugin noch einen activator hinzugefügt (ist zwar sinnlos aber...)
> immer noch...
> ImageDescriptor imageDescriptor = AbstractUIPlugin
> .imageDescriptorFromPlugin(Activator.PLUGIN_ID, fileName);
> -> NullPointerException


Die ID muss die ID des Plugins sein das die Resource enthält. Und fileName ist nicht nur der Dateiname, sondern der Plugin relative Pfad zur Resource.


----------



## code404 (25. Jun 2010)

lumo hat gesagt.:


> die icons der plugin.xml sollen nicht das problem sein.
> *über den code* kann man übrigens alle icons setzen, bis auf das des plugins selbst (wurde schon als bug submitted)
> ausserdem stelle ich ein resource-plugin zur verfügung mit OSGi-Service über das man die resourcen bekommen kann -> programmiertechnisch ist das schon umgesetzt und funktioniert bestens



Wie machst du das aber wenn du z.B. deine Menüs u.s.w. über Commands festlegst?


----------



## lumo (28. Jun 2010)

commands kann man auch per code schreiben
@wildcard - hatte ich, klappt nicht - habs jetzt so gelassen wies war - schade um die zeit, die für die kleinigkeit draufgeht.


----------

