# Plugin - Property Page - Get IResource in View



## ManIHang (12. Apr 2012)

Hallo,
Ich sitze leider leider noch bei meiner Property Page. Derzeit habe ich ein paar Textfelder und Buttons implementiert. Wird der Property Page - Apply Button angeklickt so werden die Einträge in den Textfeldern gespeichert.

Die Funktion hierfür sieht so aus.

```
public void setProperty(QualifiedName key, String value) {
	IResource resource = (IResource) getElement();
	try {
		resource.setPersistentProperty(key, value);
	} catch (CoreException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
```

Beim öffnen der Property Page wird mit der Methode getProperty die Information wieder gelesen

```
public String getProperty(QualifiedName key) {
	IResource resource = (IResource) getElement();
	if (key == null || resource == null) {
		return null;
	}
		
	try {
		return resource.getPersistentProperty(key);
	} catch (CoreException e) {
		return null;
	}
}
```

Die Informationen stehen also immer zur Verfügung meine Frage ist jetzt wie ich in einer anderen View auf diese Information zurückgreifen kann.

Zudem möchte ich ein SelectionListener verwenden, dass die View aktualisiert wird sobald der PropertyPage Apply Button gedrückt wird, falls möglich. Versuche hatte ich bereits mit dem ISelectionListener und IAdaptable gemacht jedoch keinen Erfolg zum Updaten der anderen View. Würde mich aber auch interessieren ob ich mit diesen beiden bei einer PropertyPage überhaupt richtig unterwegs bin oder ob ich nicht etwas anderes verwenden muss.

Grüße
Andi


----------



## ManIHang (24. Apr 2012)

Hab es leider noch immer nicht hinbekommen und leider auch noch keine Antwort.

Problem: 
In der PropertyPage speichere ich den Pfad zu einem speziellen Directory ab.

In einer view oder einer klasse contentprovider möchte ich diesen pfad auslesen.
Daran scheitert es.


Bitte um Hilfe, irgendwie muss man ja an die Daten rankommen.


----------



## noxar (26. Apr 2012)

Nabend,

ich bin mir nicht ganz sicher, aber kannst du nicht die View in der du dein Button und deine Textfelder hast einfach mit 
	
	
	
	





```
getSite().setSelectionProvider(ISelectionProvider provider);
```
 zur überwachung anmelden und in der anderen View mit 
	
	
	
	





```
ISelectionService selectionService = getSite().getWorkbenchWindow().getSelectionService();
    selectionService.addSelectionListener(new ISelectionListener()...);
```
entsprechend reagieren?

Das sollte eigentlich auch mit Buttons gehn oder irre ich da?

Hast du dabei ein ganz konkretes Problem?

Gruß
noxar


----------



## noxar (27. Apr 2012)

Du könntest auch einen Handler erstellen. Diesen rufst du mit dem Button auf.Die View, welche den Button enthält bekommt ein getter für die benötigten Daten. Im Handler greifst du auf die View zu, von der der handler aufgerufen wurde, wodurch du an den getter rannkommst. Dann holst du dir im Handler noch die andere View in die die Daten rein sollen, das kannst du über die ID der View machen. In der Anzeigen View schreibst du ein setter, auf den der Handler zugreift. Das ist zwar nicht besonders elegant, aber so kannst du daten zwischen Views austauschen.


----------



## ManIHang (9. Mai 2012)

Danke noxar, habe den selection service verwendet und es funktioniert. Im Create Part Control der View habe ich stehen.


```
// register other selection for this view : needs to be unregistered see dispose()
getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(listener);
```

Im dispose


```
getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(listener);
```

Mein Selection listener selbst sieht so aus. Dieser funktioniert auf selections vom Project Explorer und Package Explorer und liest die Project Properties aus. Wenn es eine kürzere Methode gibt als diese wäre ich dankbar wenn ihr sie teilt. Mich stört die Schleife um zu einem Project zu gelangen. Die Properties können aber auch nur für ein Project gesetzt werden.


```
private ISelectionListener listener = new ISelectionListener() {
  public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection) {

  // Works in Project Explorer and Package Explorer -> Structure Selections (Trees)
  if (selection instanceof StructuredSelection) {
    StructuredSelection ss = (StructuredSelection) selection;
    Object element = ss.getFirstElement();
				
  // Collect Informations about the Selected File
    filePath = "";
    if (element instanceof ITranslationUnit) {
      ITranslationUnit file = (ITranslationUnit) element;
      filePath = file.getPath().toOSString();
    }
				
   // Collect Project Relevant Informations for the CodeReview Path
   // Get the Project Properties - therefore go from file -> folder -> project
   reviewPath = ""; // reset the review path
   if (element instanceof ITranslationUnit || element instanceof ICContainer || 
       element instanceof ISourceRoot || element instanceof IFolder || element instanceof IProject) {
					
   while((element instanceof ITranslationUnit) || (element instanceof ICContainer) || 
     (element instanceof ISourceRoot) || (element instanceof IFolder)) {
						
   if(element instanceof ITranslationUnit) {
     ITranslationUnit file = (ITranslationUnit) element;
     element = file.getParent();
   }
   else if(element instanceof ICContainer) {
     ICContainer container = (ICContainer) element;
     element = container.getParent();
   }
   else if(element instanceof ISourceRoot) {
     ISourceRoot source = (ISourceRoot) element;
     element = source.getParent();
   }
   else if(element instanceof IFolder) {
     IFolder source = (IFolder) element;
     element = source.getParent();
   }
   }
					
   // Create an IProject via the name of the ICProject
   if(element instanceof ICProject) {
     String projectName = ((ICProject) element).getElementName();
     element = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
   }
				
   // Within this function I get
   // - the persistent properties of the project
  // - a relative path to the code review directory
  if(element instanceof IProject) {
     IProject project = (IProject) element;
					
    try {
      String pathToReviewDir = project.getPersistentProperty(PropertyPageCodeReview.REVIEW_FILE_PATH);
      if (pathToReviewDir != null && !pathToReviewDir.equals("")) {
         reviewPath = pathToReviewDir;
      }
							
     } catch (CoreException e) {
         e.getMessage();
     }
   }
  }
}
```


----------

