2014-10-07 4 views
6

Wie kann ich innerhalb einer IResourceChangeListener, die über ResourcePlugin.getWorkspace().addResourceChangeListener(...) hinzugefügt wurde, dass ein Projekt gelöscht/umbenannt wurde, richtig unterscheiden?IResourceChangeEvent - So identifizieren Sie ein Projekt Löschen/Umbenennen

Durch Ausprobieren, es scheint, dass die IResourceChangeEvent.getDelta() -> IResourceDelta wäre die Antwort.

Von Eclipse API:

After-the-fact Batch-Berichte über willkürliche Schöpfungen, Deletionen und Modifikationen an einer oder mehreren Ressourcen als eine hierarchische Ressource Delta ausgedrückt. Ereignistyp ist POST_CHANGE und getDelta gibt das hierarchische Delta zurück. Das Ressourcendelta ist im Arbeitsbereich root verwurzelt. Diese Ereignisse werden an interessierte Parteien nach einer Reihe von Ressourcenänderungen gesendet und passieren, ob Autobuilding aktiviert ist oder nicht. Der Arbeitsbereich wird für Änderungen während der Benachrichtigung dieser Ereignisse geschlossen. Das in diesem Ereigniszyklus gemeldete Delta ist über alle Listener identisch, die für diesen Ereignistyp registriert sind.

EDIT: Hinzufügen meine bisherigen Ergebnisse

Also, die Event.getType() ist POST_CHANGE und es muss entweder

  • ein Delta sein, die ein Kind enthält IResourceDelta, die die getKind() == REMOVED für eine Deletion und das Delta getResource().getType() == PROJECT, so dass wir wissen, es ist ein Projekt (das IResourceDelta sollte keine Kinder haben)

  • ein getDelta(), die zwei Kinder IResourceDelta die getKind() == REMOVED und getKind() == ADDED haben enthält, auch die getResource().getType() == PROJECT, und diejenigen IResourceDelta enthalten keine Kinder Deltas (ich habe beobachtet, dass, wenn eine Datei umbenannt/gelöscht, die IProject die Ressource gehört derjenige ist, das ist in der ersten Reihe der Kinder der Mutter Delta ...)

Kann jemand diese Vermutung bestätigen? Ist es wirklich notwendig, eine Baumtiefe-Suche nach Kindern durchzuführen, um festzustellen, ob das Ereignis ein Projekt ist, umbenennen/löschen oder eine Datei/einen Ordner?

Antwort

1
  • Sie benötigen einen Ressourcenänderungsempfänger über ResourcePlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE)

  • In Ihrem Zuhörer hinzufügen möchten, eine IResourceDeltaVisitor verwenden, um alle Änderungen im Delta über event.getDelta().accept(...)

  • Der Besucher besuchen sollte aussehen in die Projekte, die sind REMOVED

  • Wenn Sie th erwarten e Projekt entfernt und erstellt mit dem gleichen Namen wird (im Gegensatz zu Dateien & Ordner während Build Ereignisse geschieht), dann neben die REMOVED, für REPLACED im Delta sieht auch

+1

mit dieser Methode, Wie würde ich ein Projekt umbenennen erkennen? –

+0

Ich habe die gleiche Frage wie Vlad. Wie erkenne ich nur das Umbenennungs-Ereignis? – 2c00L

+0

eine Antwort gefunden: http://stackoverflow.com/questions/30170492/how-to-use-an-iresourcechangelistener-to-detect-a-file-rename-and-set-the-editor?lq=1 – chani