diff --git a/.gitignore b/.gitignore index 2330d74..9eba9bb 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ bonus/ icons/ icons-shadowless/ .vscode/ +springboot/.factorypath diff --git a/springboot/build.gradle b/springboot/build.gradle index c65b2ec..1d7ad02 100644 --- a/springboot/build.gradle +++ b/springboot/build.gradle @@ -154,7 +154,7 @@ task dockerImage(type: Exec) { } task dockerCompose(type: Exec) { - dependsOn["dockerImage"] + dependsOn "dockerImage", "bootJar" commandLine "docker", "compose", "up", "-d", "--build" } diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java b/springboot/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java index a5f4cca..2db89d0 100644 --- a/springboot/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java +++ b/springboot/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java @@ -21,6 +21,8 @@ import de.thpeetz.kontor.admin.AdminConstants; import de.thpeetz.kontor.admin.data.MetaDataColumn; import de.thpeetz.kontor.admin.services.MetaDataService; import de.thpeetz.kontor.common.views.MainLayout; +import de.thpeetz.kontor.common.views.ColumnToggleContextMenu; +import de.thpeetz.kontor.common.views.StatusIcon; import jakarta.annotation.security.RolesAllowed; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -58,11 +60,11 @@ public class MetaDataView extends VerticalLayout { .setHeader("Column Modifier").setResizable(true).setSortable(true); Grid.Column columnOrderColumn = grid.addColumn(MetaDataColumn::getColumnOrder) .setHeader("Column Order").setResizable(true).setSortable(true); - Grid.Column isShownColumn = grid.addComponentColumn(metaDataColumn -> createStatusIcon(metaDataColumn.getIsShown())). + Grid.Column isShownColumn = grid.addComponentColumn(metaDataColumn -> StatusIcon.create(metaDataColumn.getIsShown())). setHeader("Anzeige?").setWidth("6rem").setSortable(true); Grid.Column columnLabelColumn = grid.addColumn(MetaDataColumn::getColumnLabel) .setHeader("Spaltenname").setResizable(true).setSortable(true); - Grid.Column showFilterColumn = grid.addComponentColumn(metaDataColumn -> createStatusIcon(metaDataColumn.getShowFilter())). + Grid.Column showFilterColumn = grid.addComponentColumn(metaDataColumn -> StatusIcon.create(metaDataColumn.getShowFilter())). setHeader("Zeige Filter").setWidth("6rem").setSortable(true); Grid.Column filterLabelColumn = grid.addColumn(MetaDataColumn::getFilterLabel) .setHeader("Filter Name").setResizable(true).setSortable(true); @@ -73,22 +75,6 @@ public class MetaDataView extends VerticalLayout { MetaDataForm form; MetaDataService service; - private static class ColumnToggleContextMenu extends ContextMenu { - public ColumnToggleContextMenu(Component target) { - super(target); - setOpenOnClick(true); - } - - void addColumnToggleItem(String label, Grid.Column column) { - MenuItem menuItem = this.addItem(label, e -> { - column.setVisible(e.getSource().isChecked()); - }); - menuItem.setCheckable(true); - menuItem.setChecked(column.isVisible()); - menuItem.setKeepOpen(true); - } - } - public MetaDataView(MetaDataService service) { this.service = service; addClassName("metadata-view"); @@ -103,7 +89,6 @@ public class MetaDataView extends VerticalLayout { private void configureGrid() { grid.addClassName("metadata-grid"); grid.setSizeFull(); - //grid.setColumns("table.tableName", "columnName", "columnSyncName", "columnModifier", "columnOrder", "isShown", "columnLabel", "showFilter", "filterLabel"); grid.getColumns().forEach(col -> col.setAutoWidth(true)); idColumn.setVisible(false); createdColumn.setVisible(false); @@ -126,19 +111,6 @@ public class MetaDataView extends VerticalLayout { form.addCloseListener(e -> closeEditor()); } - private Icon createStatusIcon(boolean status) { - Icon icon; - if (status) { - icon = VaadinIcon.CHECK.create(); - icon.getElement().getThemeList().add("badge success"); - } else { - icon = VaadinIcon.CLOSE_SMALL.create(); - icon.getElement().getThemeList().add("badge error"); - } - icon.getStyle().set("padding", "var(--lumo-space-xs"); - return icon; - } - private void saveMetaData(MetaDataForm.SaveEvent event) { MetaDataColumn metaDataColumn = event.getMetaDataColumn(); service.saveMetaDataColumn(metaDataColumn); @@ -173,22 +145,22 @@ public class MetaDataView extends VerticalLayout { Button menuButton = new Button("Show/Hide Columns"); menuButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY); - MetaDataView.ColumnToggleContextMenu columnToggleContextMenu = new MetaDataView.ColumnToggleContextMenu(menuButton); - columnToggleContextMenu.addColumnToggleItem("ID", idColumn); - columnToggleContextMenu.addColumnToggleItem("Erstellt", createdColumn); - columnToggleContextMenu.addColumnToggleItem("Geändert", modifiedColumn); - columnToggleContextMenu.addColumnToggleItem(versionColumn.getHeaderText(), versionColumn); - columnToggleContextMenu.addColumnToggleItem(tableColumn.getHeaderText(), tableColumn); - columnToggleContextMenu.addColumnToggleItem(columnNameColumn.getHeaderText(), columnNameColumn); - columnToggleContextMenu.addColumnToggleItem(columnSyncNameColumn.getHeaderText(), columnSyncNameColumn); - columnToggleContextMenu.addColumnToggleItem(columnTypeColumn.getHeaderText(), columnTypeColumn); - columnToggleContextMenu.addColumnToggleItem(columnModifierColumn.getHeaderText(), columnModifierColumn); - columnToggleContextMenu.addColumnToggleItem(columnOrderColumn.getHeaderText(), columnOrderColumn); - columnToggleContextMenu.addColumnToggleItem(isShownColumn.getHeaderText(), isShownColumn); - columnToggleContextMenu.addColumnToggleItem(columnLabelColumn.getHeaderText(), columnLabelColumn); - columnToggleContextMenu.addColumnToggleItem(showFilterColumn.getHeaderText(), showFilterColumn); - columnToggleContextMenu.addColumnToggleItem(filterLabelColumn.getHeaderText(), filterLabelColumn); - columnToggleContextMenu.addColumnToggleItem(refColumnColumn.getHeaderText(), refColumnColumn); + ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu<>(menuButton); + columnToggleContextMenu.addColumnToggleItem(idColumn); + columnToggleContextMenu.addColumnToggleItem(createdColumn); + columnToggleContextMenu.addColumnToggleItem(modifiedColumn); + columnToggleContextMenu.addColumnToggleItem(versionColumn); + columnToggleContextMenu.addColumnToggleItem(tableColumn); + columnToggleContextMenu.addColumnToggleItem(columnNameColumn); + columnToggleContextMenu.addColumnToggleItem(columnSyncNameColumn); + columnToggleContextMenu.addColumnToggleItem(columnTypeColumn); + columnToggleContextMenu.addColumnToggleItem(columnModifierColumn); + columnToggleContextMenu.addColumnToggleItem(columnOrderColumn); + columnToggleContextMenu.addColumnToggleItem(isShownColumn); + columnToggleContextMenu.addColumnToggleItem(columnLabelColumn); + columnToggleContextMenu.addColumnToggleItem(showFilterColumn); + columnToggleContextMenu.addColumnToggleItem(filterLabelColumn); + columnToggleContextMenu.addColumnToggleItem(refColumnColumn); HorizontalLayout toolbar = new HorizontalLayout(searchField, addMetaDataButton, menuButton); toolbar.addClassName("toolbar"); return toolbar; diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java b/springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java index caf3c2f..89f93f1 100644 --- a/springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java +++ b/springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java @@ -18,6 +18,8 @@ import com.vaadin.flow.spring.annotation.SpringComponent; import de.thpeetz.kontor.admin.data.ModuleData; import de.thpeetz.kontor.admin.services.ModuleService; import de.thpeetz.kontor.common.views.MainLayout; +import de.thpeetz.kontor.common.views.ColumnToggleContextMenu; +import de.thpeetz.kontor.common.views.StatusIcon; import jakarta.annotation.security.RolesAllowed; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -36,7 +38,7 @@ public class ModuleDataView extends VerticalLayout { .setHeader("ID").setResizable(true).setSortable(true); Grid.Column nameColumn = grid.addColumn(ModuleData::getModuleName) .setHeader("Name").setResizable(true).setSortable(true); - Grid.Column importColumn = grid.addComponentColumn(moduleData -> createStatusIcon(moduleData.getImportData())) + Grid.Column importColumn = grid.addComponentColumn(moduleData -> StatusIcon.create(moduleData.getImportData())) .setHeader("Import Data").setWidth("6rem").setSortable(true); TextField filterText = new TextField(); @@ -44,22 +46,6 @@ public class ModuleDataView extends VerticalLayout { ModuleDataForm form; ModuleService service; - private static class ColumnToggleContextMenu extends ContextMenu { - public ColumnToggleContextMenu(Component target) { - super(target); - setOpenOnClick(true); - } - - void addColumnToggleItem(String label, Grid.Column column) { - MenuItem menuItem = this.addItem(label, e -> { - column.setVisible(e.getSource().isChecked()); - }); - menuItem.setCheckable(true); - menuItem.setChecked(column.isVisible()); - menuItem.setKeepOpen(true); - } - } - public ModuleDataView(ModuleService service) { this.service = service; addClassName("moduleData-view"); @@ -74,7 +60,6 @@ public class ModuleDataView extends VerticalLayout { private void configureGrid() { grid.addClassName("moduleData-grid"); grid.setSizeFull(); - //grid.setColumns("moduleName", "importData"); grid.getColumns().forEach(col -> col.setAutoWidth(true)); grid.asSingleSelect().addValueChangeListener(event -> editModuleData(event.getValue())); } @@ -88,19 +73,6 @@ public class ModuleDataView extends VerticalLayout { form.addCloseListener(e -> closeEditor()); } - private Icon createStatusIcon(boolean status) { - Icon icon; - if (status) { - icon = VaadinIcon.CHECK.create(); - icon.getElement().getThemeList().add("badge success"); - } else { - icon = VaadinIcon.CLOSE_SMALL.create(); - icon.getElement().getThemeList().add("badge error"); - } - icon.getStyle().set("padding", "var(--lumo-space-xs"); - return icon; - } - private void saveModuleData(ModuleDataForm.SaveEvent event) { ModuleData moduleData = event.getModuleData(); service.saveModuleData(moduleData); @@ -132,10 +104,10 @@ public class ModuleDataView extends VerticalLayout { Button menuButton = new Button("Show/Hide Columns"); menuButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY); - ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu(menuButton); - columnToggleContextMenu.addColumnToggleItem("ID", idColumn); - columnToggleContextMenu.addColumnToggleItem("Module Name", nameColumn); - columnToggleContextMenu.addColumnToggleItem("Import Data", importColumn); + ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu<>(menuButton); + columnToggleContextMenu.addColumnToggleItem(idColumn); + columnToggleContextMenu.addColumnToggleItem(nameColumn); + columnToggleContextMenu.addColumnToggleItem(importColumn); HorizontalLayout toolbar = new HorizontalLayout(filterText, addModuleDataButton, menuButton); toolbar.addClassName("toolbar"); return toolbar; diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicView.java b/springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicView.java index cbcf3ef..2ad8693 100644 --- a/springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicView.java +++ b/springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicView.java @@ -1,12 +1,11 @@ package de.thpeetz.kontor.comics.views; import com.vaadin.flow.component.button.ButtonVariant; -import com.vaadin.flow.component.contextmenu.ContextMenu; -import com.vaadin.flow.component.contextmenu.MenuItem; import com.vaadin.flow.component.icon.Icon; import com.vaadin.flow.component.icon.VaadinIcon; -import de.thpeetz.kontor.admin.data.MetaDataColumn; import de.thpeetz.kontor.admin.services.MetaDataService; +import de.thpeetz.kontor.common.views.ColumnToggleContextMenu; +import de.thpeetz.kontor.common.views.StatusIcon; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Scope; @@ -28,8 +27,6 @@ import de.thpeetz.kontor.comics.services.ComicService; import de.thpeetz.kontor.common.views.MainLayout; import jakarta.annotation.security.PermitAll; -import java.util.List; - @Slf4j @SpringComponent @Scope("prototype") @@ -50,33 +47,15 @@ public class ComicView extends VerticalLayout { .setHeader("Titel").setResizable(true).setSortable(true); Grid.Column publisherColumn = grid.addColumn(Comic::getPublisherName) .setHeader("Verlag").setResizable(true).setSortable(true); - Grid.Column currentOrderColumn = grid.addComponentColumn(comic -> createStatusIcon(comic.getCurrentOrder())) + Grid.Column currentOrderColumn = grid.addComponentColumn(comic -> StatusIcon.create(comic.getCurrentOrder())) .setHeader("Bestellung").setWidth("6rem").setSortable(true); - Grid.Column completedColumn = grid.addComponentColumn(comic -> createStatusIcon(comic.getCompleted())) + Grid.Column completedColumn = grid.addComponentColumn(comic -> StatusIcon.create(comic.getCompleted())) .setHeader("Abgeschlossen").setWidth("6rem").setSortable(true); TextField filterText = new TextField(); @Getter ComicForm form; ComicService service; - MetaDataService metaDataService; - private static class ColumnToggleContextMenu extends ContextMenu { - public ColumnToggleContextMenu(Component target) { - super(target); - setOpenOnClick(true); - } - - void addColumnToggleItem(String label, Grid.Column column) { - MenuItem menuItem = this.addItem(label, e -> { - column.setVisible(e.getSource().isChecked()); - }); - menuItem.setCheckable(true); - menuItem.setChecked(column.isVisible()); - menuItem.setKeepOpen(true); - } - } - - public ComicView(ComicService service) { this.service = service; addClassName("comic-view"); @@ -104,19 +83,6 @@ public class ComicView extends VerticalLayout { form.addCloseListener(e -> closeEditor()); } - private Icon createStatusIcon(boolean status) { - Icon icon; - if (status) { - icon = VaadinIcon.CHECK.create(); - icon.getElement().getThemeList().add("badge success"); - } else { - icon = VaadinIcon.CLOSE_SMALL.create(); - icon.getElement().getThemeList().add("badge error"); - } - icon.getStyle().set("padding", "var(--lumo-space-xs"); - return icon; - } - private void saveComic(ComicForm.SaveEvent event) { service.saveComic(event.getComic()); updateList(); @@ -150,14 +116,14 @@ public class ComicView extends VerticalLayout { Button menuButton = new Button("Show/Hide Columns"); menuButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY); - ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu(menuButton); - columnToggleContextMenu.addColumnToggleItem("ID", idColumn); - columnToggleContextMenu.addColumnToggleItem("Erstellt", createdColumn); - columnToggleContextMenu.addColumnToggleItem("Geändert", modifiedColumn); - columnToggleContextMenu.addColumnToggleItem("Titel", titleColumn); - columnToggleContextMenu.addColumnToggleItem("Verlag", publisherColumn); - columnToggleContextMenu.addColumnToggleItem(currentOrderColumn.getHeaderText(), currentOrderColumn); - columnToggleContextMenu.addColumnToggleItem(completedColumn.getHeaderText(), completedColumn); + ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu<>(menuButton); + columnToggleContextMenu.addColumnToggleItem(idColumn); + columnToggleContextMenu.addColumnToggleItem(createdColumn); + columnToggleContextMenu.addColumnToggleItem(modifiedColumn); + columnToggleContextMenu.addColumnToggleItem(titleColumn); + columnToggleContextMenu.addColumnToggleItem(publisherColumn); + columnToggleContextMenu.addColumnToggleItem(currentOrderColumn); + columnToggleContextMenu.addColumnToggleItem(completedColumn); HorizontalLayout toolbar = new HorizontalLayout(filterText, addComicButton, menuButton); toolbar.addClassName("toolbar"); return toolbar; diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/views/ColumnToggleContextMenu.java b/springboot/src/main/java/de/thpeetz/kontor/common/views/ColumnToggleContextMenu.java new file mode 100644 index 0000000..f2bd74e --- /dev/null +++ b/springboot/src/main/java/de/thpeetz/kontor/common/views/ColumnToggleContextMenu.java @@ -0,0 +1,32 @@ +package de.thpeetz.kontor.common.views; + +import com.vaadin.flow.component.Component; +import com.vaadin.flow.component.contextmenu.ContextMenu; +import com.vaadin.flow.component.contextmenu.MenuItem; +import com.vaadin.flow.component.grid.Grid; + +public class ColumnToggleContextMenu extends ContextMenu { + public ColumnToggleContextMenu(Component target) { + super(target); + setOpenOnClick(true); + } + + public void addColumnToggleItem(Grid.Column column) { + String label = column.getHeaderText(); + MenuItem menuItem = this.addItem(label, e -> { + column.setVisible(e.getSource().isChecked()); + }); + menuItem.setCheckable(true); + menuItem.setChecked(column.isVisible()); + menuItem.setKeepOpen(true); + } + + public void addColumnToggleItem(String label, Grid.Column column) { + MenuItem menuItem = this.addItem(label, e -> { + column.setVisible(e.getSource().isChecked()); + }); + menuItem.setCheckable(true); + menuItem.setChecked(column.isVisible()); + menuItem.setKeepOpen(true); + } +} diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/views/StatusIcon.java b/springboot/src/main/java/de/thpeetz/kontor/common/views/StatusIcon.java new file mode 100644 index 0000000..4e058c6 --- /dev/null +++ b/springboot/src/main/java/de/thpeetz/kontor/common/views/StatusIcon.java @@ -0,0 +1,19 @@ +package de.thpeetz.kontor.common.views; + +import com.vaadin.flow.component.icon.Icon; +import com.vaadin.flow.component.icon.VaadinIcon; + +public class StatusIcon { + public static Icon create(boolean status) { + Icon icon; + if (status) { + icon = VaadinIcon.CHECK.create(); + icon.getElement().getThemeList().add("badge success"); + } else { + icon = VaadinIcon.CLOSE_SMALL.create(); + icon.getElement().getThemeList().add("badge error"); + } + icon.getStyle().set("padding", "var(--lumo-space-xs"); + return icon; + } +} diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaArticleView.java b/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaArticleView.java index 67079d4..7728890 100644 --- a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaArticleView.java +++ b/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaArticleView.java @@ -17,6 +17,8 @@ import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; import com.vaadin.flow.spring.annotation.SpringComponent; import de.thpeetz.kontor.common.views.MainLayout; +import de.thpeetz.kontor.common.views.ColumnToggleContextMenu; +import de.thpeetz.kontor.common.views.StatusIcon; import de.thpeetz.kontor.media.MediaConstants; import de.thpeetz.kontor.media.data.MediaArticle; import de.thpeetz.kontor.media.services.MediaArticleService; @@ -36,7 +38,7 @@ public class MediaArticleView extends VerticalLayout { Grid.Column idColumn = grid.addColumn(MediaArticle::getId).setHeader("ID").setResizable(true); Grid.Column urlColumn = grid.addColumn(MediaArticle::getUrl).setHeader("URL").setResizable(true).setSortable(true); Grid.Column titleColumn = grid.addColumn(MediaArticle::getTitle).setHeader("Titel").setResizable(true).setSortable(true); - Grid.Column reviewColumn = grid.addComponentColumn(mediaArticle -> createStatusIcon(mediaArticle.isReview())) + Grid.Column reviewColumn = grid.addComponentColumn(mediaArticle -> StatusIcon.create(mediaArticle.isReview())) .setHeader("Überprüfung") .setWidth("6rem"); TextField searchField = new TextField(); @@ -44,22 +46,6 @@ public class MediaArticleView extends VerticalLayout { MediaArticleForm form; MediaArticleService service; - private static class ColumnToggleContextMenu extends ContextMenu { - public ColumnToggleContextMenu(Component target) { - super(target); - setOpenOnClick(true); - } - - void addColumnToggleItem(String label, Grid.Column column) { - MenuItem menuItem = this.addItem(label, e -> { - column.setVisible(e.getSource().isChecked()); - }); - menuItem.setCheckable(true); - menuItem.setChecked(column.isVisible()); - menuItem.setKeepOpen(true); - } - } - public MediaArticleView(MediaArticleService service) { this.service = service; addClassName("mediaarticle-view"); @@ -94,19 +80,6 @@ public class MediaArticleView extends VerticalLayout { closeEditor(); } - private Icon createStatusIcon(boolean status) { - Icon icon; - if (status) { - icon = VaadinIcon.CHECK.create(); - icon.getElement().getThemeList().add("badge success"); - } else { - icon = VaadinIcon.CLOSE_SMALL.create(); - icon.getElement().getThemeList().add("badge error"); - } - icon.getStyle().set("padding", "var(--lumo-space-xs"); - return icon; - } - private void deleteMediaArticle(MediaArticleForm.DeleteEvent event) { service.deleteMediaArticle(event.getMediaArticle()); updateList(); @@ -134,11 +107,11 @@ public class MediaArticleView extends VerticalLayout { Button menuButton = new Button("Show/Hide Columns"); menuButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY); - MediaArticleView.ColumnToggleContextMenu columnToggleContextMenu = new MediaArticleView.ColumnToggleContextMenu(menuButton); - columnToggleContextMenu.addColumnToggleItem("ID", idColumn); - columnToggleContextMenu.addColumnToggleItem("URL", urlColumn); - columnToggleContextMenu.addColumnToggleItem("Titel", titleColumn); - columnToggleContextMenu.addColumnToggleItem("Überprüfung", reviewColumn); + ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu<>(menuButton); + columnToggleContextMenu.addColumnToggleItem(idColumn); + columnToggleContextMenu.addColumnToggleItem(urlColumn); + columnToggleContextMenu.addColumnToggleItem(titleColumn); + columnToggleContextMenu.addColumnToggleItem(reviewColumn); HorizontalLayout toolbar = new HorizontalLayout(searchField, addMediaArticleButton, menuButton); toolbar.addClassName("toolbar"); return toolbar; diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaFileView.java b/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaFileView.java index 3793a38..a5c182c 100644 --- a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaFileView.java +++ b/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaFileView.java @@ -15,7 +15,9 @@ import com.vaadin.flow.data.value.ValueChangeMode; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; import com.vaadin.flow.spring.annotation.SpringComponent; +import de.thpeetz.kontor.common.views.ColumnToggleContextMenu; import de.thpeetz.kontor.common.views.MainLayout; +import de.thpeetz.kontor.common.views.StatusIcon; import de.thpeetz.kontor.media.data.MediaFile; import de.thpeetz.kontor.media.services.MediaFileService; import jakarta.annotation.security.RolesAllowed; @@ -47,31 +49,15 @@ public class MediaFileView extends VerticalLayout { .setHeader("Dateiname").setResizable(true).setSortable(true); Grid.Column cloudLinkColumn = grid.addColumn(MediaFile::getCloudLink) .setHeader("Cloud Link").setResizable(true).setSortable(true); - Grid.Column reviewColumn = grid.addComponentColumn(mediafile -> createStatusIcon(mediafile.isReview())). + Grid.Column reviewColumn = grid.addComponentColumn(mediafile -> StatusIcon.create(mediafile.isReview())). setHeader("Überprüfung").setWidth("6rem").setSortable(true); - Grid.Column shouldDownloadColumn = grid.addComponentColumn(mediafile -> createStatusIcon(mediafile.isShouldDownload())). + Grid.Column shouldDownloadColumn = grid.addComponentColumn(mediafile -> StatusIcon.create(mediafile.isShouldDownload())). setHeader("Download?").setWidth("6rem").setSortable(true); TextField searchField = new TextField(); @Getter MediaFileForm form; MediaFileService service; - private static class ColumnToggleContextMenu extends ContextMenu { - public ColumnToggleContextMenu(Component target) { - super(target); - setOpenOnClick(true); - } - - void addColumnToggleItem(String label, Grid.Column column) { - MenuItem menuItem = this.addItem(label, e -> { - column.setVisible(e.getSource().isChecked()); - }); - menuItem.setCheckable(true); - menuItem.setChecked(column.isVisible()); - menuItem.setKeepOpen(true); - } - } - public MediaFileView(MediaFileService service) { this.service = service; addClassName("mediafile-view"); @@ -106,19 +92,6 @@ public class MediaFileView extends VerticalLayout { closeEditor(); } - private Icon createStatusIcon(boolean status) { - Icon icon; - if (status) { - icon = VaadinIcon.CHECK.create(); - icon.getElement().getThemeList().add("badge success"); - } else { - icon = VaadinIcon.CLOSE_SMALL.create(); - icon.getElement().getThemeList().add("badge error"); - } - icon.getStyle().set("padding", "var(--lumo-space-xs"); - return icon; - } - private void deleteMediaFile(MediaFileForm.DeleteEvent event) { service.deleteMediaFile(event.getMediaFile()); updateList(); @@ -146,16 +119,16 @@ public class MediaFileView extends VerticalLayout { Button menuButton = new Button("Show/Hide Columns"); menuButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY); - ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu(menuButton); - columnToggleContextMenu.addColumnToggleItem("ID", idColumn); - columnToggleContextMenu.addColumnToggleItem("Erstellt", createdColumn); - columnToggleContextMenu.addColumnToggleItem("Geändert", modifiedColumn); - columnToggleContextMenu.addColumnToggleItem("URL", urlColumn); - columnToggleContextMenu.addColumnToggleItem("Titel", titleColumn); - columnToggleContextMenu.addColumnToggleItem("Dateiname", fileNameColumn); - columnToggleContextMenu.addColumnToggleItem("Cloud Link", cloudLinkColumn); - columnToggleContextMenu.addColumnToggleItem("Überprüfung", reviewColumn); - columnToggleContextMenu.addColumnToggleItem("Download?", shouldDownloadColumn); + ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu<>(menuButton); + columnToggleContextMenu.addColumnToggleItem(idColumn); + columnToggleContextMenu.addColumnToggleItem(createdColumn); + columnToggleContextMenu.addColumnToggleItem(modifiedColumn); + columnToggleContextMenu.addColumnToggleItem(urlColumn); + columnToggleContextMenu.addColumnToggleItem(titleColumn); + columnToggleContextMenu.addColumnToggleItem(fileNameColumn); + columnToggleContextMenu.addColumnToggleItem(cloudLinkColumn); + columnToggleContextMenu.addColumnToggleItem(reviewColumn); + columnToggleContextMenu.addColumnToggleItem(shouldDownloadColumn); HorizontalLayout toolbar = new HorizontalLayout(searchField, addMediaFileButton, menuButton); toolbar.addClassName("toolbar"); return toolbar; diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaVideoView.java b/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaVideoView.java index 8b0c131..37f5554 100644 --- a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaVideoView.java +++ b/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaVideoView.java @@ -16,6 +16,8 @@ import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; import com.vaadin.flow.spring.annotation.SpringComponent; import de.thpeetz.kontor.common.views.MainLayout; +import de.thpeetz.kontor.common.views.ColumnToggleContextMenu; +import de.thpeetz.kontor.common.views.StatusIcon; import de.thpeetz.kontor.media.MediaConstants; import de.thpeetz.kontor.media.data.MediaVideo; import de.thpeetz.kontor.media.services.MediaVideoService; @@ -37,10 +39,10 @@ public class MediaVideoView extends VerticalLayout { Grid.Column titleColumn = grid.addColumn(MediaVideo::getTitle).setHeader("Titel").setResizable(true).setSortable(true); Grid.Column fileNameColumn = grid.addColumn(MediaVideo::getFileName).setHeader("Dateiname").setResizable(true).setSortable(true); Grid.Column cloudLinkColumn = grid.addColumn(MediaVideo::getCloudLink).setHeader("Cloud Link").setResizable(true).setSortable(true); - Grid.Column reviewColumn = grid.addComponentColumn(mediaVideo -> createStatusIcon(mediaVideo.isReview())) + Grid.Column reviewColumn = grid.addComponentColumn(mediaVideo -> StatusIcon.create(mediaVideo.isReview())) .setHeader("Überprüfung") .setWidth("6rem"); - Grid.Column shouldDownloadColumn = grid.addComponentColumn(mediaVideo -> createStatusIcon(mediaVideo.isShouldDownload())) + Grid.Column shouldDownloadColumn = grid.addComponentColumn(mediaVideo -> StatusIcon.create(mediaVideo.isShouldDownload())) .setHeader("Download?") .setWidth("6rem"); TextField searchField = new TextField(); @@ -48,22 +50,6 @@ public class MediaVideoView extends VerticalLayout { MediaVideoForm form; MediaVideoService service; - private static class ColumnToggleContextMenu extends ContextMenu { - public ColumnToggleContextMenu(Component target) { - super(target); - setOpenOnClick(true); - } - - void addColumnToggleItem(String label, Grid.Column column) { - MenuItem menuItem = this.addItem(label, e -> { - column.setVisible(e.getSource().isChecked()); - }); - menuItem.setCheckable(true); - menuItem.setChecked(column.isVisible()); - menuItem.setKeepOpen(true); - } - } - public MediaVideoView(MediaVideoService service) { this.service = service; addClassName("mediavideo-view"); @@ -98,19 +84,6 @@ public class MediaVideoView extends VerticalLayout { closeEditor(); } - private Icon createStatusIcon(boolean status) { - Icon icon; - if (status) { - icon = VaadinIcon.CHECK.create(); - icon.getElement().getThemeList().add("badge success"); - } else { - icon = VaadinIcon.CLOSE_SMALL.create(); - icon.getElement().getThemeList().add("badge error"); - } - icon.getStyle().set("padding", "var(--lumo-space-xs"); - return icon; - } - private void deleteMediaVideo(MediaVideoForm.DeleteEvent event) { service.deleteMediaVideo(event.getMediaVideo()); updateList(); @@ -138,14 +111,14 @@ public class MediaVideoView extends VerticalLayout { Button menuButton = new Button("Show/Hide Columns"); menuButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY); - MediaVideoView.ColumnToggleContextMenu columnToggleContextMenu = new MediaVideoView.ColumnToggleContextMenu(menuButton); - columnToggleContextMenu.addColumnToggleItem("ID", idColumn); - columnToggleContextMenu.addColumnToggleItem("URL", urlColumn); - columnToggleContextMenu.addColumnToggleItem("Titel", titleColumn); - columnToggleContextMenu.addColumnToggleItem("Dateiname", fileNameColumn); - columnToggleContextMenu.addColumnToggleItem("Cloud Link", cloudLinkColumn); - columnToggleContextMenu.addColumnToggleItem("Überprüfung", reviewColumn); - columnToggleContextMenu.addColumnToggleItem("Download?", shouldDownloadColumn); + ColumnToggleContextMenu columnToggleContextMenu = new ColumnToggleContextMenu<>(menuButton); + columnToggleContextMenu.addColumnToggleItem(idColumn); + columnToggleContextMenu.addColumnToggleItem(urlColumn); + columnToggleContextMenu.addColumnToggleItem(titleColumn); + columnToggleContextMenu.addColumnToggleItem(fileNameColumn); + columnToggleContextMenu.addColumnToggleItem(cloudLinkColumn); + columnToggleContextMenu.addColumnToggleItem(reviewColumn); + columnToggleContextMenu.addColumnToggleItem(shouldDownloadColumn); HorizontalLayout toolbar = new HorizontalLayout(searchField, addMediaVideoButton, menuButton); toolbar.addClassName("toolbar"); return toolbar;