/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package de.unioninvestment.eai.portal.portlet.crud.mvp.views; import groovy.lang.Closure; import java.util.List; import java.util.Map; import java.util.Set; import com.vaadin.data.Item; import com.vaadin.ui.Notification.Type; import com.vaadin.ui.Table.ColumnGenerator; import de.unioninvestment.eai.portal.portlet.crud.domain.model.DataContainer; import de.unioninvestment.eai.portal.portlet.crud.domain.model.Download; import de.unioninvestment.eai.portal.portlet.crud.domain.model.Table; import de.unioninvestment.eai.portal.portlet.crud.domain.model.Table.Mode; import de.unioninvestment.eai.portal.portlet.crud.domain.model.TableAction; import de.unioninvestment.eai.portal.support.vaadin.mvp.View; /** * Beschreibt die Erwartungen des Presenters an die View. */ public interface TableView extends View { /** * * {@link Presenter} Beschreibt die Erwartungen der View an den Presenter. * */ public interface Presenter { /** * * @return liefert, ob das Hinzufügen neuer Zeilen zugelassen ist. */ boolean isInsertable(); /** * * @return liefert, ob das Bearbeiten von Zeilen zugelassen ist. */ boolean isUpdateable(); /** * * @return liefert, ob das Löschen von Zeilen zugelassen ist. */ boolean isDeleteable(); /** * * @param itemId die ItemId der Zeile * @return <code>true</code>, falls die Zeile gelöscht werden darf */ boolean isRowDeletable(Object itemId); /** * Holt, die zur Tabelle gehörende SQL-Connection und bindet es an das * Closure und fürht diesen aus. * * @param action * Tabellenbutton */ void callClosure(TableAction action); /** * * @param viewMode * Ansichtsmodus */ void switchMode(Mode viewMode); /** * * @param selection * Selektionen */ void changeSelection(Set<Object> selection); /** * * @param item * Datensatz */ void doubleClick(Item item); /** * Wird aufgerufen, wenn die Tabelle fertig initialiert wurde. */ void doInitialize(); /** * Gibt zurück, ob der Excel-ExportCallback aktiviert ist. * * @return ob Excel-ExportCallback aktiviert ist * @deprecated Export capabilities are no longer to be configured using * the global attribute, but instead to use special * export-actions (@see {@link TableAction#isExportAction()} * ). */ public boolean isExcelExport(); /** * Gibt zurück, ob der CSV-ExportCallback aktiviert ist. * * @return ob CSV-ExportCallback aktiviert ist * @deprecated Export capabilities are no longer to be configured using * the global attribute, but instead to use special * export-actions (@see {@link TableAction#isExportAction()} * ). */ public boolean isCSVExport(); /** * Gibt zurück ob der FormularEdit-Modus aktiviert ist. * * @return Ob FormularEdit-Modus aktiviert ist */ public boolean isFormEditEnabled(); public void openRowEditingForm(); /** * @param uncommittedItemId die aktuell in Änderung befindliche Zeile */ void updateUncommittedItemId(Object uncommittedItemId); } /** * * @param presenter * Presenter * @param dataContainer * Der Vaadin Daten-Container * @param model * das Modell * @param pageLength * Anzahl der angezeigten Zeilen * @param cacheRate * Faktor an Zeilen im Verhältnis zu den angezeigten Zeilen, die * gerendert werden sollen. */ void initialize(TableView.Presenter presenter, DataContainer dataContainer, Table model, int pageLength, double cacheRate); /** * @param msgKey * Message Key * @param notificationType * Notification Type */ void showNotification(String msgKey, Type notificationType); /** * Action Methode fuer das Zuruecksetzen von Aenderungen in der * Datentabelle. */ public void onRevertChanges(); /** * Fügt der Tabelle dynamisch eine neue Spalte hinzu. * * @param id * die ID der Spalte * @param columnTitle * die Überschrift der Spalte * @param columnGenerator * der Generator, der den Inhalt der einzelnen Zellen generiert */ void addGeneratedColumn(String id, String columnTitle, ColumnGenerator columnGenerator); /** * Entfernt eine zuvor per * {@link #addGeneratedColumn(String, ColumnGenerator)} hinzugefügte Spalte * aus der Tabelle. * * @param id * die ID der Spalte, die bei * {@link #addGeneratedColumn(String, ColumnGenerator)} verwendet * wurde */ void removeGeneratedColumn(String id); /** * Schaltet das automatische Refreshing ein, falls * {@code refreshContent == true} wird auch direkt ein Refresh durchgeführt. * * @param refreshContent * wenn {@code true}, wird direkt ein requestRepaint abgesetzt, * ansonsten wird nur das automatische Refreshing wieder * eingeschaltet */ public void enableContentRefreshing(boolean refreshContent); /** * Schaltet das automatische Refreshing ab. * * @return ob das Refresh vorher eingeschaltet war. */ public boolean disableContentRefreshing(); /** * @return die IDs der sichtbaren Spalten in der Reihenfolge, in der sie * angezeigt werden. * @see #setVisibleColumns(List) */ public List<String> getVisibleColumns(); /** * Setzt gleichzeitig die Reihenfolge und die Sichtbarkeit der Spalten. Alle * Spalten, deren ID in der übergebenen Liste {@code visibleColumns} * enthalten sind, werden angezeigt, alle anderen nicht. Das bezieht sich * nicht nur auf per {@code addGeneratedColumn} hinzugefügten Spalten * sondern auf alle Spalten inkl. der fest in der Konfiguration * deklarierten. Die Spalten werden in der Reihenfolge angeordnet, wie sie * in {@code visibleColumns} stehen. * * @param visibleColumns * die Liste der ColumnNames. Für eine per * {@link #addGeneratedColumn(String, String, Closure)} * hinzugefügte Spalten ist das der String, der dabei als * Argument {@code columnName} verwendet wurde, für eine * deklarierte Spalte das Attribut {@code name} */ public void setVisibleColumns(List<String> visibleColumns); /** * Setzt die Sichtbarkeit der TableAction (Button) mit der ID {@code id}. * * @param id * die ID der TableAction, so wie sie im Attribut <tt>id</tt> des * Tags <tt>action</tt> definiert ist. * * @param visible * {@code true}: sichtbar, {@code false}: unsichtbar, */ public void setTableActionVisibility(String id, boolean visible); /** * Fügt der Tabelle eine neue Zeile hinzu. * * @return die Item ID */ public Object addItemToTable(); /** * Wählt eine Zeile zum Editieren aus. * * @param itemId * die ItemID der neuen Zeile * @param suppressCommit * unterdrückt das implizite Commit, das ggf. beim Deselektieren * der alten Zeile ausgelöst wird. (Genau genommen wird die * komplette Verarbeitung des onSelectionChange-Listeners * unterdrückt). */ void selectItemForEditing(Object itemId, boolean suppressCommit); /** * Update the displayed table selection. * * @param selection * the new selection */ void selectionUpdatedExternally(Set<Object> selection); /** * Open a document for download with the content being generated by the * 'download' parameter. * * @param download the generator */ void download(Download download); void switchToViewMode(); void switchToEditMode(); Map<String, Object> getModifiedColumnNames(); void commitChangesToContainer(); }