2016-08-09 150 views
1

Ich arbeite an einem Eclipse Plug-In, das automatisch einen Arbeitssatz erstellen soll, indem ich Projekte mit ihren Pfaden hinzufüge. Ich habe Probleme zu verstehen, wie die Klasse IAdaptable funktioniert.Wie IAdaptable-Klasse zum Erstellen von Arbeitssätzen verwenden? [Eclipse Plug-In]

public static void createWorkingSet(List<Path> projectPaths, String workingSetName){ 

    IWorkingSetManager manager = PlatformUI.getWorkbench().getWorkingSetManager(); 
    IWorkingSet newSet = manager.createWorkingSet(workingSetName, new IAdaptable[0]); 
    manager.addWorkingSet(newSet); 

} 

Die Liste angegeben als Parameter enthält Pfade wie:

Path p = Paths.get("C:", "Users", "Me", "workspace", "ProjectName");

Die Art und Weise des Code jetzt geschrieben wird, erzeugt er nur einen leeren Arbeitssatz, weil ich rufe die createWorkingSet Methode mit „neuen IAdaptable [0] ". Wie kann ich ein IAdaptable-Array füllen, um Informationen zu den Projekten zu speichern, die ich hinzufügen möchte?

Antwort

0

Die createWorkingSet Methode erfordert, dass die Objekte, die Sie in dem elements Argumente übergeben den IAdaptable-Schnittstelle implementieren.

Wenn Sie versuchen, Eclipse-Workspace-Projekte an createWorkingSet zu übergeben, müssen Sie fast sicher die Klasse Eclipse IProject verwenden, die IAdaptable implementiert.

+0

Haben Sie eine Idee, warum 'import org.eclipse.core.resources.IProject;' nicht aufgelöst werden kann? – ERX95

+0

Sie benötigen 'org.eclipse.core.resources' in Ihren Plug-in-Abhängigkeiten. –

+0

Danke, ich habe herausgefunden, wie ich das umsetzen kann, was ich wollte. Ich füge ein Projekt folgendermaßen hinzu: 'IProject p = ResourcesPlugin.getWorkspace(). GetRoot(). GetProject (" Projektname ");'. Mit welchen Methoden kann ich Projekte hinzufügen, die sich nicht in meinem Arbeitsbereich befinden, aber ich habe ihren vollständigen Pfad? Ich habe überall gesucht, aber ich kann immer noch nicht herausfinden. – ERX95

0

Sie sollten projectPaths an die Methode übergeben createWorkingSet wie:

manager.createWorkingSet(workingSetName, projectPaths.toArray(new IAdaptable[projectPaths.size()]);

Aber weil Ihr projectPaths sind nicht IAdaptable s wird es nicht funktionieren. Sie sollten also Ihre eigene Wrapperklasse erstellen, die IAdaptable implementiert und diese zum Erstellen eines Arbeitssatzes verwendet. Beispiel-Code unten:

AdaptablePath p1 = new AdaptablePath(Paths.get("C:", "Users", "Me", "workspace", "ProjectName")); 
    AdaptablePath p2 = new AdaptablePath(Paths.get("C:", "Users", "Me", "workspace", "ProjectName2")); 


    List<AdaptablePath> paths = new ArrayList<AdaptablePath>(); 
    paths.add(p1); 
    paths.add(p2); 
    public static void createWorkingSet(List<AdaptablePath> paths, String workingSetName) 
    { 


     IWorkingSetManager manager = PlatformUI.getWorkbench().getWorkingSetManager(); 

     IWorkingSet newSet = manager.createWorkingSet(workingSetName, paths.toArray(new IAdaptable[paths.size()])); 
     manager.addWorkingSet(newSet); 

     printElements(newSet); 

    } 

    private static void printElements(IWorkingSet set) 
    { 
     IAdaptable[] elements = set.getElements(); 

     if (elements != null && elements.length > 0) 
     { 
      for (IAdaptable element : elements) 
      { 
       Path p = (Path)element.getAdapter(Path.class); 
       if (p != null) 
       { 
        System.out.println(p.getFileName()); 
       } 

      } 
     } 
    } 

    static class AdaptablePath implements IAdaptable 
    { 
     private Path path; 
     public AdaptablePath(Path p) 
     { 
      this.path = p; 
     } 

     @Override 
     public Object getAdapter(Class adapter) 
     { 
      if(adapter == Path.class) 
      { 
       return path; 
      } 
      return null; 
     } 

    } 
+0

Eigentlich ist es eine Liste . Kann ich 'Path' irgendwie in' IAdaptable' umwandeln, um den Parameter in 'List ' zu ändern? Oder erstellen Sie ein "IAdaptable" -Array/-Liste innerhalb der Methode, indem Sie meine Pfadliste verwenden? Ich würde es vorziehen, den Parameter 'List ' zu behalten. – ERX95

+0

'Path' implementiert nicht'IAdaptable', daher erhalten Sie einen Fehler, wenn Sie' toArray' aufrufen (genau genommen 'ArrayStoreException'). –

+0

@ ERX95 Das Objekt 'Path' funktioniert nicht, weil es kein'IAdaptable' ist. Stattdessen müssen Sie eine Wrapper-Klasse erstellen, die 'IAdaptable' implementiert. Ich habe eine Antwort bearbeitet, die zeigt, wie man einen anpassungsfähigen Pfad erstellt, um Arbeitssätze zu erstellen. – SomeDude