# Common Navigator Framework erste Knoten werden nicht angezeigt



## Edub (19. Apr 2011)

Guten Tag allerseits,

ich sitze schon seit ein bisschen längeren Zeit an dem Common Navigator Framework. Das Problem was sich mir zuerst gestellt hatte ist, dass es mir überhaupt nichts angezeigt hat. Dafür habe ich eine Lösung im weiten Web gefunden und alles funktioniert zuzeit, so wie ich es mir vorstelle, ausser dass meine ersten Knoten im Verzeichnisbaum (Projekte) keine Icons bekommen wie auf dem folgendem Bild zu sehen.






Um dem "Fehler" auf den Grund zu gehen, habe ich eine eigene ContentExtension für den Navigator geschrieben, die dann alle icons verarbeiten soll in der Methode:

```
protected ImageDescriptor decorateImage(ImageDescriptor input,
			Object element) {
		 System.out.println(element.getClass());
		if (element instanceof IFolder) {
			input = PlatformUI.getWorkbench().getSharedImages()
					.getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER);
		   }
                // ... weiterer Code der hier steht
		}
		return super.decorateImage(input, element);
	}
```

Das Problem ist hierbei, dass ich keine Project elemente übergeben bekomme, d.h. es werden nur die darunter liegenden Ordner und Dateien als element Objekte der Methode übergeben.
Die Klasse der methode ist der LabelProvider von der ContentExtension und erbt von WorkbenchLabelProvider und implementiert	ILabelProvider, IDescriptionProvider. Hier ist die Ausgabe, die ich bekomme wenn ich mich durch das Projekt von Oben durchklicke.

```
class org.eclipse.core.internal.resources.Folder
class org.eclipse.core.internal.resources.Folder
class org.eclipse.core.internal.resources.File
```


Wenn Jemand eine Idee hat wie ich das Lösen könnte oder mir einen Tip geben kann wäre ich demjenigen sehr dankbar 

Mfg

Edub


----------



## Wildcard (19. Apr 2011)

Zb bei Java Projekten bekommst du keine IProjects sondern IJavaElements. Daher ist instanceof bei Eclipse oft ungeschickt, statt dessen arbeitet man mit Adaptern.
Poste mal die betreffenden Teile der plugin.xml, dort musst du vermutlich auch mit Adapter arbeiten.


----------



## Edub (19. Apr 2011)

Hallo Wildcard,

hier die wichtigen xml auschnitte, hoffe ich habe alle die nötig sind "erwischt"  


```
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.views">
      <view
            class="id.Navigator"
            icon="icons/view/package_explorer.png"
            id="id.navigator"
            name="%view.navigator">
      </view>
   </extension>
   <extension
         point="org.eclipse.ui.navigator.viewer">
      <viewer
            viewerId="id.navigator">
      </viewer>
      <viewerContentBinding
            viewerId="id.navigator">
         <includes>
            <contentExtension
                  pattern="org.eclipse.ui.navigator.resourceContent">
            </contentExtension>
            <contentExtension
                  pattern="org.eclipse.ui.navigator.resources.filters.*">
            </contentExtension>
            <contentExtension
                  pattern="id.navigator.myContent">
            </contentExtension>
         </includes>
      </viewerContentBinding>
      <viewerActionBinding
            viewerId="id.navigator">
         <includes>
            <actionExtension
                  pattern="org.eclipse.ui.navigator.resources.*">
            </actionExtension>
         </includes>
      </viewerActionBinding>
   </extension>
   <extension
         point="org.eclipse.ui.navigator.navigatorContent">
      <navigatorContent
            activeByDefault="true"
            contentProvider="org.eclipse.ui.model.WorkbenchContentProvider"
            icon="project.png"
            id="id.navigator.myContent"
            labelProvider="id.navigator.LabelProvider"
            name="%NavigatorContent"
            priority="normal">
         <triggerPoints>
            <or>
               <instanceof
                     value="org.eclipse.core.resources.IResource">
               </instanceof>
               <instanceof
                     value="java.lang.Object">
               </instanceof>
            </or>
         </triggerPoints>
      </navigatorContent>
   </extension>
</plugin>
```

In dem id.navigator.LabelProvider war auch die oben beschriebene Methode, mit der ich die Icons der Dateien ändere.

**Edit**
Was ich zurzeit auch nicht verstehe ist, dass bei anderen Im Tutorial die Projekte angezeigt werden obwohl die nur die normalen Resourcen (Standard von Java) einblenden lassen. Bei mir wird auch bei den Java Resourcen die Projekte nicht angezeigt. Wie man in der Plugin.xml sieht, sind diese auch eingebunden und auch aktiviert


----------



## Edub (24. Apr 2011)

Es scheint wohl ein Problem zu geben das Common Navigator Framework mit RCP zu verwenden, da die Eclipse IDE "nicht eingebunden" wird oder so ähnlich. Deswegen sind die Icons, die bei der IDE mitgeladen werden nicht vorhanden und er zeigt die nicht an. Scheinbar werden deswegen auch die Knoten nicht weitergereicht an meine oben beschriebene Methode ( es tritt vielleichte eine Exception weiter unten auf, die nicht weitergereicht wird ).

Die Lösung darin bestand noch mehr zu googlen und ich bin auf die folgende Seite gestoßen:
Building a Workspace Resources-powered Common Navigator Framework (CNF) View - Eclipse Driven Rich Application Development. Ich würde den Code auch hier rein zitieren aber "gehört" der mir nicht, deswegen nur der Link.

Ich finde recht passend dazu die unten Zitierte Quelle beim Link:
"Magic Required to use the Common Navigator in an RCP Application that uses Resources"

Nachdem ich die Bilder quasi wieder eingebunden habe, hat der mir auch die Nodes an die Methode weitergereicht und ich konnte sie verändern. Also hat danach alles so geklappt, wie ich es haben wollte.


Happy Easter für euch alle


----------



## dzim (26. Apr 2011)

Ich bin mir nicht sicher, denke aber, dass es hier vielleicht einfach ein Problem mit deinem Content gibt.
Da ich früher das CNF auch verwendet habe, es aber seit Eclipse 3.6.1 wegen bescheuerter Dependencies ins Nirvana gejagt hab, hab ich da noch ein paar grausige Erinnerungen dran.

Wenn ich mich recht entsinne gab es da mal einen Bug für CNF oder sogar TreeViewer allgemein (den Link hab ich leider nicht mehr), das man immer ein unsichtbares Wurzelelement anlegen muss, damit nicht so etwas passiert wie dir. Überprüfe mal, ob es bei dir dieses Element gibt. Ansonsten würde ich auf deinen Content-Provider tippen, dass du den noch einmal überarbeiten müsstest. Vielleicht bringt das ja auch den erhofften Erfolg.

Im ApplicationWorkbenchAdvisor der RCP kann man übrigens den Default-Input der Workbench festlegen:

```
@Override
	public IAdaptable getDefaultPageInput() {
		IWorkspace workspace = ResourcesPlugin.getWorkspace();
		return workspace.getRoot();
	}
```
Dieses Code-Schnipsel würde also den Workspace, wie bei Eclipse im Start-Dialog angegeben oder per -data Parameter übergeben, laden und zurück geben.

Da ich "nur" eine Plugin-Navigation und keine Ressourcen-Navigation brauche, hat sich CNF aufgrund der Komplexität seiner Einstellungsmöglichkeiten aber Schlichtheit in der Darstellung irgendwann dann selbst unnötig gemacht.

MfG
Daniel


----------

