2014-10-07 12 views
6

Jak mogę prawidłowo rozróżnić, wewnątrz, który jest dodawany poprzez ResourcePlugin.getWorkspace().addResourceChangeListener(...), że projekt został usunięty/zmieniono jego nazwę?IResourceChangeEvent - jak zidentyfikować projekt usunąć/zmienić nazwę

Dzięki wypróbowaniu różnych rzeczy wydaje się, że odpowiedź brzmi: IResourceChangeEvent.getDelta() -> IResourceDelta.

Z Eclipse API:

Po tym fakcie raporty wsadowe arbitralnych twory, delecji i modyfikacji co do jednego lub większej liczby środków w przeliczeniu na hierarchicznej delta zasobów. Typ zdarzenia to POST_CHANGE, a getDelta zwraca hierarchiczną różnicę . Delta zasobów jest zakorzeniona w obszarze roboczym root. Te zdarzenia są transmitowane do zainteresowanych stron po zmianie zbiorów zasobów i zdarzają się niezależnie od tego, czy włączone jest automatyczne budowanie. Obszar roboczy jest zamknięty w celu zmiany podczas powiadamiania o tych zdarzeniach . Różnica zgłaszana w tym cyklu zdarzeń jest identyczna dla wszystkich słuchaczy zarejestrowanych dla tego typu zdarzeń.

EDIT: dodawanie moje odkrycia dotychczas

Tak, Event.getType() jest POST_CHANGE i tam musi być

  • delta, która zawiera dziecko IResourceDelta który ma getKind() == REMOVED do usunięcia i delta getResource().getType() == PROJECT, dzięki czemu wiemy, że jest to projekt (ten IResourceDelta nie powinien mieć żadnych dzieci)

  • getDelta() że zawiera dwa dzieci IResourceDelta że mają getKind() == REMOVED i getKind() == ADDED, również getResource().getType() == PROJECT, a te nie zawierają IResourceDelta dzieci Delty (mam zaobserwowane, że gdy plik zostanie zmieniona/usunięta, IProject zasób należący do jest jeden to jest w pierwszym rzędzie dzieci rodzica Delta ...)

Czy ktoś może potwierdzić to przypuszczenie? Czy konieczne jest wykonanie wyszukiwania głębi drzewa dla dzieci, aby zdać sobie sprawę z tego, czy zdarzenie to zmiana/usunięcie projektu, czy plik/folder?

Odpowiedz

1
  • Trzeba dodać detektor zmian zasobów poprzez ResourcePlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE)

  • W słuchacza, użyj IResourceDeltaVisitor odwiedzić wszystkie zmiany w delcie poprzez event.getDelta().accept(...)

  • odwiedzającego powinien wyglądać do projektów, które są REMOVED

  • Jeśli oczekujesz Projekt e być usunięte i stworzone z tej samej nazwie (jak dzieje się plikami & foldery podczas imprez Build), wówczas oprócz REMOVED, również szukać REPLACED w delcie

+1

za pomocą tej metody, jak rozpoznałbym zmianę nazwy projektu? –

+0

Mam takie samo pytanie jak Vlad. Jak rozpoznać tylko zmianę nazwy? – 2c00L

+0

znalazł odpowiedź: http://stackoverflow.com/questions/30170492/how-to-use-an-lesourcechangelistener-to-detect-a-file-rename-and-set-the-editor?lq=1 – chani

Powiązane problemy