Umsortieren (Verschieben) und Löschen von Seiten im jadice web toolkit

Artikel wurde auf Basis von jadice web toolkit 5.8 erstellt

Dieser Artikel beschreibt, wie über die Thumbnail-Ansicht im jadice web toolkit Seiten entfernt oder umsortiert werden können.


Anforderung

Mitunter sind in Dokumenten störende Leerseiten enthalten oder die Reihenfolge von Seiten ist beim Scannen vertauscht worden. Es besteht die fachliche Anforderung, einzelne Seiten umzusortieren bzw. zu löschen. 


Lösung

Das Verschieben von Seiten in der ThumbnailView kann man über die Berechtigung DocumentPermission.DENY.REORDER_PAGES bzw. DocumentPermission.ALLOW.REORDER_PAGES steuern.

Die Berechtigung lässt sich entweder clientseitg setzen, z.B. im AsyncCallback des clientseitigen Readers:

     @Override
      public void onSuccess(Document result) {
        getPageView().setDocument(result);
        result.getPermissions().getPermissions().add(DocumentPermission.ALLOW.REORDER_PAGES);
      }

oder serverseitig in der kundeneigenen Implementierung des DocumentDataProvider. Die Berechtigungen werden von den mitgelieferten Implementierungen der ThumbnailView unmittelbar berücksichtigt - egal ob die Thumbnail-Ansicht über ThumbnailViewBuilder.build() oder durch Einbinden des ThumbnailTools erzeugt wird.


Das Löschen von Seiten lässt sich mit Hilfe eines Commands realisieren. Dabei wird davon ausgegangen, dass der Anwender einzelne Seiten in der Thumbnail-Ansicht selektiert und diese z.B. über einen Tastaturshortcut löschen möchte.

Im folgenden exemplarisch der Code für ein Command, das die in der ThumbnailView selektierten Seiten löscht:

DeleteSelectedPagesCommand .java
public class DeleteSelectedPagesCommand extends AbstractDocumentCommand {

  @Override
  protected void execute() {
    ThumbnailTool thumbnailTool = getPageView().getToolManager().getTool(ThumbnailTool.class);
    getDocument().getPages().removeAll(thumbnailTool.getThumbnailView().getSelectedPages());
    thumbnailTool.getThumbnailView().clearSelection();
  }

  @Override
  protected boolean canExecute() {
    ThumbnailTool thumbnailTool = getPageView().getToolManager().getTool(ThumbnailTool.class);

    if (!thumbnailTool.getThumbnailView().getSelectedPages().isEmpty()) 
      return true;

    return false;
  }
}

Das Command kann z.B. durch eine RegisteredAction eingebunden werden:

// register action without Button
ActionRegistrationUtils.register(panel, new RegisteredAction("Delete selected Pages",
   new KeyStroke(Keys.DELETE, Modifier.CTRL), null, new DeleteSelectedPagesCommand (), null));

Siehe hierzu auch folgender Showcase: https://webtoolkit.jadice.com/showcase/index.html?connection=longpoll#!ActionsExample


Ausblick

Sollen die durchgeführten Änderungen persistiert werden, kann dies über die Ausführung einer ServerOperation erreicht werden. Dadurch wird der geänderte clientseitige Dokumentzustand auf die Serverseite transportiert und kann dort in kundenspezifischem Code beliebig weiterverarbeitet werden.