Zadanie #1705

Dodanie operacji do zarządzania strukturą na drzewie

Added by Michał Komar almost 7 years ago. Updated over 6 years ago.

Status:TestowanieStart date:2017-06-08
Priority:NormalnyDue date:2017-06-08
Assignee:Łukasz Waśkiewicz% Done:

100%

Category:ui
Target version:0.3
Developer:Łukasz Waśkiewicz Tester:Jarosław Bąbel

Description

Należy dodać akcje pozwalające na przenoszenie elementów na drzewie.
Należy udostępnić 2 opcje :
  1. Przenoszenie elementu jako dziecko wskazanego elementu
  2. Przenoszenie dzieci

W przypadku przenoszenia dzieci, użytkownik powinien mieć możliwosćś wskazania, które dzieci chce przenieść (oraz oczywiście wybór elementu docelowego). Gdy wybrane są wszystkie dzieci, powinna istnieć możliwość oznaczenie flagi "Usuń rodzica", co spowoduje automatyczne usunięcie rodzica przenoszonych dzieci.

Dodać czytanie websocketa o zmianach struktury, gdy zmieni się struktura jednego z wyświetlanych elementów, należy go przenieść na dobre miejsce w drzewie - do zastanowienia się jak dokładnie ma to działać


Related issues

Follows Jupiter - Zadanie #1560: Oprogramowanie drzewa publikacji Rozwiązany 2017-02-09
Follows Jupiter - Zadanie #1726: Obsługa operacji na strukturze Rozwiązany 2017-06-07

Associated revisions

Revision 1df5b592
Added by Monika Maksymiuk almost 7 years ago

refs #1705. Nie rozwijanie ostatniego node, brak expandera przy artykułach

Revision 9369bc87
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 UI zarządzanie strukturą

Revision 0139071c
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 UI zarządzanie strukturą, dialog-tree

Revision 0946ae8e
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 UI zarządzanie strukturą, ograniczenie wybierania

Revision ea4689ca
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 UI zarządzanie strukturą, dostosowanie pod przenoszenie
dzieci

Revision b0aa6af6
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 UI zarządzanie strukturą, tłumaczenia

Revision c2300878
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 UI zarządzanie strukturą, wołanie backendu

Revision d1dd18ad
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 poprawki context menu

Revision 1253578d
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 poprawki modyfikacji struktury

Revision da435b66
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 poprawka zaznaczania elementu

Revision 9ecf9311
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 obsługa sync z infoną

Revision d2afb056
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 poprawa obsługi sync z infoną

Revision b378f5a4
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 obsługa sync z infoną, poprawa rozwiązania

Revision 2a290243
Added by Łukasz Waśkiewicz over 6 years ago

refs #1705 ukrycie dokumentu w wyszukiwaniu do momentu zaindeksowania
zmiany rodzica

Revision ebeb2545
Added by Jarosław Bąbel about 6 years ago

refs #1705 obsługa sync z infoną, poprawka ostatniej poprawki (przywrócenie możliwości dodawania czasopisma do bazy danych)

History

#1 Updated by Michał Komar almost 7 years ago

#2 Updated by Michał Komar almost 7 years ago

#3 Updated by Michał Komar almost 7 years ago

  • Description updated (diff)

#4 Updated by Michał Komar over 6 years ago

  • Assignee changed from Monika Maksymiuk to Michał Komar

#5 Updated by Michał Komar over 6 years ago

  • Assignee changed from Michał Komar to Łukasz Waśkiewicz

#6 Updated by Łukasz Waśkiewicz over 6 years ago

  • Status changed from Nowy to Testowanie
  • % Done changed from 0 to 100
  • Developer Łukasz Waśkiewicz added
  • Tester Michał Komar added

#7 Updated by Łukasz Waśkiewicz over 6 years ago

  • Assignee changed from Łukasz Waśkiewicz to Michał Komar

#8 Updated by Michał Komar over 6 years ago

  • Assignee changed from Michał Komar to Jarosław Bąbel
  • Tester Jarosław Bąbel added

#9 Updated by Jarosław Bąbel over 6 years ago

  • Status changed from Testowanie to Odpowiedź
  • Assignee changed from Jarosław Bąbel to Łukasz Waśkiewicz

Można wybrać całą bazę danych jako cel dla przenoszonych zasobów

  1. kliknij na artykule "Przenieś dokument"
  2. pojawia się okno wyboru z drzewem
  3. zaznacz bazę danych i kliknij "Wybierz"
  4. Pojawia się okno "Błąd po stronie serwera"

Podwójne kliknięcie zasobu w oknie wyboru celu przenoszenia powoduje otwarcie podglądu tego zasobu w głównym oknie aplikacji "po spodem"

Wybranie zasobu w oknie wyboru celu przenoszenia czasem powoduje przewinięcie listy do góry i zniknięcie wybranego elementu z pola widzenia

  1. Kliknij "Przenieś dzieci dokumentu" dla czasopisma "Acta Scientiarum Polonorum. Oeconomiaa" w BazEkon (http://localhost:4200/editor/document/bwmeta1.element.ekon-element-issn-1644-0757/preview)
  2. W drzewie wyboru rozwiń węzeł tego czasopisma
  3. Przewiń na dół i kliknij na następnym czasopiśmie w drzewie wyboru
  4. Lista zostaje przewinięta do góry, a wybrane czasopismo znika na dole

Próba przeniesienia zasobu, który ma błąd w danych (nie waliduje się po otwarciu w UI) kończy się niepowodzeniem bez komunikatu. Jeżeli takie dane będą istniały w systemie, to przydałby się komunikat przy przenoszeniu.

Np. pierwszy artykuł z:
BazEkon -> Acta Scientiarum Polonorum. Oeconomiaa -> 9 (2010) -> nr 1
http://localhost:4200/editor/document/bwmeta1.element.ekon-element-000171198405/preview

Po przenoszeniu żółta belka zaznaczająca edytowany element pozostaje na stałe przy jednym elemencie

  1. Przygotować artykuł A i nr N, do którego można przenieść A
  2. Otworzyć edycję elementu X innego niż A i N
  3. Rozwinąć w drzewie rodzica A i N
  4. Przenieść A do N
  5. Poczekać aż A pojawi się w N
  6. Otworzyć edycję elementu Y (innego niż A, N, X)
  7. Belka pozostaje na X

Po przenoszeniu żółta belka zaznaczająca edytowany element znika

  1. Przygotować artykuł A i nr N, do którego można przenieść A
  2. Otworzyć edycję A
  3. Przenieść A do N
  4. Żółta belka znika (pojawia się informacja "dokument został zmieniony")
  5. Otworzyć edycję elementu Y (innego niż A, N)
  6. Brak żółtej belki na Y
  7. Kliknąć odśwież przy N,
  8. belka pojawia się na A
  9. kliknąć edycję Y - belka nadal zostaje na A

Przy przenoszeniu zasobu w konsoli pojawia się błąd

Błąd przetwarzania XML: nie znaleziono głównego elementu
Obszar: http://localhost:8080/api/structure/move/fd6dac44-8422-452f-9b1f-8642b2d0f7c6?deleteParent=false
Numer wiersza: 1, kolumna 1:

Nie widać, żeby powodował jakieś problemy.

Nie można przenieść numeru do rocznika jeżeli nie utworzono wolumenu

(niezależnie od przenoszenia dokumentów, w ogóle nie można dodać bezpośrednio numeru do rocznika)

Być może to nie jest błąd tylko kwestia konfiguracji hierarchii dla danej bazy i tak ma być?

Np. w BazEkon, czasopismo "Acta Scientiarum Polonorum. Oeconomiaa" nie ma wolumenów i nie da się przenosić numerów między rocznikami tego czasopisma.

Problemy z aktualizacją drzewa podczas przenoszenia elementów, nie wiadomo kiedy kończy się operacja przenoszenia

Zaraz po wykonaniu akcji przenieś drzewo jest aktualizowane, ale operacja nadal trwa w backendzie. Przyciski "odśwież" w drzewie pokazują aktualny stan przenoszenia. Użytkownik w oczekiwaniu na wynik przenoszenia może zacząć klikać "odśwież" na węzłach drzewa.

Przykład:
  1. Przenieś artykuł A z numeru N1 do numeru N2
  2. A pojawia się w drzewie pod N2 i znika z N1
  3. kliknij odśwież na N1 i N2
  4. A pojawia się z powrotem w N1 i znika z N2
  5. Po zakończeniu przenoszenia, kliknięcie odśwież na N1 i N2 wyświetli A prawidłowo w N2

Podobnie, gdy przenosimy z usuwaniem rodzica - po odśwież rodzica znika skreślenie usuwanego elementu.

Podczas przenoszenia w drzewie mogą pojawić się "kopie" zasobów. Powstaje wtedy efekt "powiązania":
Przykład:
  1. Przenieść artykuł A z N1 do N2
  2. Poczekać aż A pojawi się w miejscu docelowym N2
  3. Po zniknięciu A z N1, odświeżyć N1 (A pojawia się ponownie)
  4. Teraz mamy A w N1 i w N2
  5. Po kliknięciu na którąś kopię A zielona belka pojawia się dla obu kopii
  6. Akcje w drzewie są dublowane dla skopiowanych węzłów (np. rozwinięcie potomków)

Przy przenoszeniu elementów z wieloma potomkami i klikaniu odśwież elementy pojawiają się i znikają w zależności od etapu przenoszenia. Nie wiadomo, w którym momencie kończy się proces przenoszenia i czy to co widzimy w drzewie to końcowy efekt, czy tymczasowe położenie węzłów związane z odświeżaniem.

Pojawia się też "błąd połączenia" opisany w #1927, związany z usunięciem elementu, który nadal jest widoczny w drzewie (przez akcję odśwież).

Jeżeli uruchomimy kolejną akcję przenoszenia zanim zakończy się poprzednia to odświeżanie węzłów będzie też "psuło" drzewo w okienku, w którym wybieramy cel dla przenoszonych zasobów.

Jeśli poczekamy na zakończenie przenoszenia przez backend, to opisane problemy nie występują.

Na przenoszonych węzłach można wywoływać akcje przed zakończeniem przenoszenia.

Brak oznaczenia i blokowania przenoszonych węzłów powoduje, że można na nich wywoływać kolejne akcje przed zakończeniem przenoszenia np.: przenieś, usuń, dodaj nowy element. W połączeniu z akcją odśwież pokazującą częściowy stan przenoszenia zaczynają się pojawiać trudne do uchwycenia błędy:

m.in. natknąłem się na NPE w:

pl.edu.icm.jupiter.services.storage.hierarchy.HierarchyManagementServiceImpl.getAllowedChildTypes(HierarchyManagementServiceImpl.java:101)

Zdarzyło się też usunięcie całego czasopisma podczas usuwania numeru. Stało się, to na czasopiśmie, którego zawartość wielokrotnie przenosiłem i "psułem". Mogła to być moja pomyłka, ale wyglądało na "skumulowany podczas klikania" problem w UI (najpierw został skreślony usuwany element, dopiero potem całe drzewo).

Może też się zdarzyć puste okno edytora jeżeli edytujemy usuwanego rodzica.

Nie opisuję poszczególnych przypadków, bo trudno je wyłapać i opisać. Mają wspólne źródło i nie ma sensu ich katalogować.

Może przydało by się blokowanie ekranu aplikacji podczas przenoszenia (wtedy nie można nic popsuć i wiadomo, kiedy akcja się zakończyła)? Może wystarczy tylko implementacja #1691: Cache danych tymczasowych (tak jak w #1881)?

Według opisu zadania powinna być możliwość wybrania pojedynczych dzieci do przenoszenia, ale być może zostało ustalone ustnie, że tego nie robimy

#10 Updated by Łukasz Waśkiewicz over 6 years ago

  • Status changed from Odpowiedź to W toku

#11 Updated by Łukasz Waśkiewicz over 6 years ago

  • Status changed from W toku to Testowanie
  • Assignee changed from Łukasz Waśkiewicz to Jarosław Bąbel
  1. Wybranie zasobu w oknie wyboru celu przenoszenia czasem powoduje przewinięcie listy do góry i zniknięcie wybranego elementu z pola widzenia
    nie udało mi się odtworzyć
  1. Po przenoszeniu żółta belka zaznaczająca edytowany element pozostaje na stałe przy jednym elemencie
    wystarczyło otworzyć okno w dodatkowym drzewem
  1. Nie można przenieść numeru do rocznika jeżeli nie utworzono wolumenu
    jeśli konfiguracja hierarchii nie pozwala na dany element w docelowym miejscu to nie można go tam przenieść
  1. Według opisu zadania powinna być możliwość wybrania pojedynczych dzieci do przenoszenia, ale być może zostało ustalone ustnie, że tego nie robimy
    ustaliliśmy z Michałem, że w pierwsze kolejności przenosimy wszystkie dzieci, ewentualnie później mieliśmy dorobić wybór
  • przenoszone elementy są wyszarzane i nie powinno być możliwości uruchamiania na nich akcji, uruchamianie REST, jak ktoś będzie chciał przenieść ponownie element, który przed chwilą był przenoszony to elementy ostatecznie wyląduje w miejscu z ostatniej operacji przenoszenia

#12 Updated by Jarosław Bąbel over 6 years ago

  • Status changed from Testowanie to Odpowiedź
  • Assignee changed from Jarosław Bąbel to Łukasz Waśkiewicz
  • Można wybrać całą bazę danych jako cel dla przenoszonych zasobów
    powyższy problem nadal występuje

Łukasz Waśkiewicz wrote:

  1. Wybranie zasobu w oknie wyboru celu przenoszenia czasem powoduje przewinięcie listy do góry i zniknięcie wybranego elementu z pola widzenia
    nie udało mi się odtworzyć

problem występuje w Firefox (w Chrome działa dobrze)

  1. Po przenoszeniu żółta belka zaznaczająca edytowany element pozostaje na stałe przy jednym elemencie
    wystarczyło otworzyć okno w dodatkowym drzewem

nie rozumiem odpowiedzi, co znaczy "otworzyć okno z dodatkowym drzewem"?

  • przenoszone elementy są wyszarzane i nie powinno być możliwości uruchamiania na nich akcji, uruchamianie REST, jak ktoś będzie chciał przenieść ponownie element, który przed chwilą był przenoszony to elementy ostatecznie wyląduje w miejscu z ostatniej operacji przenoszenia

nie widzę, żeby elementy były wyszarzane, nadal można je usuwać, edytować, odświeżać itp. może coś źle robię po swojej stronie?

#13 Updated by Łukasz Waśkiewicz over 6 years ago

  • Status changed from Odpowiedź to Testowanie
  • Assignee changed from Łukasz Waśkiewicz to Jarosław Bąbel
  1. Wybranie zasobu w oknie wyboru celu przenoszenia czasem powoduje przewinięcie listy do góry i zniknięcie wybranego elementu z pola widzenia
    duplikat #1928
  1. Po przenoszeniu żółta belka zaznaczająca edytowany element pozostaje na stałe przy jednym elemencie wystarczyło otworzyć okno w dodatkowym drzewem
    chodziło mi ze wystarczy otworzyć okno przenoszenia, (kliknąć w context menu przenieś...) to już powodowało problem z drzewem nie było konieczności przenoszenia dokumentów
  1. przenoszenie dokumentów, przenoszone dokumenty są usuwane z wyników wyszukania dopóki wynik wyszukania w indeksie nie będzie wskazywał ze mają poprawnego rodzica

#14 Updated by Jarosław Bąbel over 6 years ago

  • Assignee changed from Jarosław Bąbel to Łukasz Waśkiewicz
  • jest jeszcze drobiazg związany z możliwością przeniesienia artykułu/zasobu do innej bazy danych - leci błąd po stronie serwera
  • pierwszy odruch użytkownika po zleceniu przenoszenia, to klikanie na odśwież, żeby zobaczyć efekt operacji. Klikając kilka razy odśwież na docelowym węźle zaraz po uruchomieniu przenoszenia zasobu mamy taki efekt:
    1. nie widać zasobu
    2. pojawia się
    3. znika
    4. nie widać go aż do zakończenia operacji (ten punkt jest ok)

Mi się nadal wydaje, że nie było by nic złego w zablokowaniu całego ekranu podczas przenoszenia, a żeby było super można by pokazywać jakiś progres bar, albo informację w stylu "przeniesiono X dokumentów, pozostało Y", bazując na odpytywaniu Infony. Myślę, że przenoszenie to jest solidna porcja przetwarzania i trudno, żeby aplikacja w tym czasie działała dobrze.

#15 Updated by Łukasz Waśkiewicz over 6 years ago

samo moje ukrywanie to średnio można przyśpieszyć, ono jest zapięte na starcie publikacji, wcześniej idzie zapis + potwierdzenie i jak tu odświeżymy to dostaniemy zasób, tylko one działają na danych lokalnych i tu nie można ukrywać zasobów

blokada całego ekranu była by spoko dla jednego użytkownika ale jak było by ich kilku to już inni by mieli te problemy co my mamy + nasz użytkownik mógłbym kliknąć F5 przeładować aplikację i ominąć tą przesłonkę

i będzie też ten problem dla innych forkflow: przy uruchomieniu procesu publikacji (ten idzie zupełnie async) proces zapisze zasób do infony, skasuje CurrentDocument i mamy ten sam problem co teraz (różnica jest taka że po starcie publikacji użytkownik jest w innych ekranach i nie ma drzewa, ale jak by szybko klikał to mógłby tam dotrzeć podczas procesu)

jedyne co można zrobić to blokować częste odświeżanie ... ale nie ważne jak to zrobimy dokument przez chwile będzie w docelowym miejscu (Current) potem idzie publikacja (tu aktywuje sie moje ukrywanie) i jest kasowanie Current, wiec dokument i tak się pojawi i zniknie, można jak teraz usuwam dokument z listy wyników to zastępować go jakimś placeholderem typu "dokument w trakcie modyfikacji" zamiast go usuwać
a jak dokument jest widoczny to można go jeszcze po WS próbować zamienić ->
jak user ma widoczny dokument a ktoś inny coś z nim robi to można było by wysłać WS informacje ze dokument jest w trakcie publikacji i wszystkie dokumenty z taką flagą jakoś blokować

WS = WebSocket

Also available in: Atom PDF