improve view of meta data by using icons for boolean and add search
This commit is contained in:
committed by
Thomas Peetz
parent
c619745a4a
commit
8d31a92692
@@ -177,7 +177,7 @@ public class SetupModuleAdmin implements ApplicationListener<ContextRefreshedEve
|
||||
metaDataService.getColumn(comicTable, "last_modified_date", "modified", "TIMESTAMP", null, 3, Boolean.FALSE, "", Boolean.FALSE, null);
|
||||
metaDataService.getColumn(comicTable, "version", "version", "LONG", null, 4, Boolean.FALSE, "", Boolean.FALSE, null);
|
||||
metaDataService.getColumn(comicTable, "completed", "completed", "BOOLEAN", null, 5, Boolean.TRUE, "Complete", Boolean.TRUE, "Complete");
|
||||
metaDataService.getColumn(comicTable, "current_order", "current_order", "BOOLEAN", null, 6, Boolean.TRUE, "Betsellung", Boolean.TRUE, "Bestellung");
|
||||
metaDataService.getColumn(comicTable, "current_order", "current_order", "BOOLEAN", null, 6, Boolean.TRUE, "Bestellung", Boolean.TRUE, "Bestellung");
|
||||
metaDataService.getColumn(comicTable, "title", "title", "TEXT", "UNIQUE", 7, Boolean.TRUE, "Title", Boolean.FALSE, null);
|
||||
metaDataService.getColumn(comicTable, "publisher_id", "publisher_id", "TEXT", null, 8, Boolean.TRUE, "Verlag", Boolean.FALSE, null);
|
||||
MetaDataTable issueTable = metaDataService.getTable("issue");
|
||||
|
||||
@@ -40,4 +40,8 @@ public class MetaDataColumn extends AbstractEntity {
|
||||
@JoinColumn(name = "table_id")
|
||||
@NotNull
|
||||
private MetaDataTable table;
|
||||
|
||||
public String getTableName() {
|
||||
return table.getTableName();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
package de.thpeetz.kontor.admin.data;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface MetaDataColumnRepository extends JpaRepository<MetaDataColumn, String> {
|
||||
|
||||
List<MetaDataColumn> findByTable(MetaDataTable table);
|
||||
|
||||
@Query("select m from MetaDataColumn m " +
|
||||
"where lower(m.columnName) like lower(concat('%', :searchTerm, '%')) or lower(m.columnLabel) like lower(concat('%', :searchTerm, '%'))")
|
||||
List<MetaDataColumn> search(@Param("searchTerm") String searchTerm);
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ public class MetaDataService {
|
||||
|
||||
public void getColumn(MetaDataTable table, String columnName, String columnSyncName, String columnType, String columnModifier, Integer columnOrder, Boolean isShown, String columnLabel, Boolean showFilter, String filterLabel) {
|
||||
if (table.getTableColumns().stream().anyMatch(column -> column.getColumnName().equals(columnName))) {
|
||||
log.info("Column {} with name {} of table {} found, check Values", columnOrder, columnName, table.getTableName());
|
||||
log.debug("Column {} with name {} of table {} found, check Values", columnOrder, columnName, table.getTableName());
|
||||
MetaDataColumn column = table.getTableColumns().get(columnOrder.intValue()-1);
|
||||
if (!column.getColumnName().equals(columnName)) {
|
||||
log.debug("columnName has to be changed to {}", columnName);
|
||||
@@ -85,8 +85,15 @@ public class MetaDataService {
|
||||
}
|
||||
}
|
||||
|
||||
public List<MetaDataColumn> findAllMetaDataColumns() {
|
||||
return metaDataColumnRepository.findAll();
|
||||
public List<MetaDataColumn> findAllMetaDataColumns(String stringFilter) {
|
||||
if (stringFilter == null || stringFilter.isEmpty()) {
|
||||
log.debug("Found " + metaDataColumnRepository.count()+ " entries");
|
||||
return metaDataColumnRepository.findAll();
|
||||
} else {
|
||||
List<MetaDataColumn> results = metaDataColumnRepository.search(stringFilter);
|
||||
log.debug("Found " + results.size() + " entries");
|
||||
return results;
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteMetaDataColumn(MetaDataColumn metaDataColumn) {
|
||||
|
||||
@@ -26,7 +26,9 @@ public class MetaDataForm extends FormLayout {
|
||||
TextField columnModifier = new TextField("Column Modifier");
|
||||
IntegerField columnOrder = new IntegerField("Column Order");
|
||||
Checkbox isShown = new Checkbox("Is Shown");
|
||||
TextField columnLabel = new TextField("Column Label");
|
||||
Checkbox showFilter = new Checkbox("Show Filter");
|
||||
TextField filterLabel = new TextField("Filter Label");
|
||||
|
||||
Button save = new com.vaadin.flow.component.button.Button("Save");
|
||||
Button delete = new com.vaadin.flow.component.button.Button("Delete");
|
||||
@@ -40,12 +42,12 @@ public class MetaDataForm extends FormLayout {
|
||||
|
||||
table.setItems(tables);
|
||||
table.setItemLabelGenerator(MetaDataTable::getTableName);
|
||||
add(table, 2);
|
||||
add(columnName, 2);
|
||||
add(columnSyncName, 2);
|
||||
add(columnModifier, 2);
|
||||
add(columnOrder, 2);
|
||||
add(isShown, showFilter, createButtonsLayout());
|
||||
add(table, columnName, columnSyncName, columnModifier, columnOrder);
|
||||
add(isShown, columnLabel);
|
||||
isShown.addClickListener(click -> columnLabel.setEnabled(isShown.getValue()));
|
||||
add(showFilter, filterLabel);
|
||||
showFilter.addClickListener(click -> filterLabel.setEnabled(showFilter.getValue()));
|
||||
add(createButtonsLayout());
|
||||
}
|
||||
|
||||
private HorizontalLayout createButtonsLayout() {
|
||||
|
||||
@@ -2,9 +2,18 @@ package de.thpeetz.kontor.admin.views;
|
||||
|
||||
import com.vaadin.flow.component.Component;
|
||||
import com.vaadin.flow.component.button.Button;
|
||||
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.grid.Grid;
|
||||
import com.vaadin.flow.component.grid.GridSortOrder;
|
||||
import com.vaadin.flow.component.icon.Icon;
|
||||
import com.vaadin.flow.component.icon.VaadinIcon;
|
||||
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
||||
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
||||
import com.vaadin.flow.component.textfield.TextField;
|
||||
import com.vaadin.flow.data.provider.SortDirection;
|
||||
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;
|
||||
@@ -13,9 +22,13 @@ import de.thpeetz.kontor.admin.data.MetaDataColumn;
|
||||
import de.thpeetz.kontor.admin.services.MetaDataService;
|
||||
import de.thpeetz.kontor.common.views.MainLayout;
|
||||
import jakarta.annotation.security.RolesAllowed;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@SpringComponent
|
||||
@Scope("prototype")
|
||||
@@ -24,10 +37,56 @@ import org.springframework.context.annotation.Scope;
|
||||
@PageTitle("Meta Data | Admin | Kontor")
|
||||
public class MetaDataView extends VerticalLayout {
|
||||
|
||||
Grid<MetaDataColumn> grid = new Grid<>(MetaDataColumn.class);
|
||||
Grid<MetaDataColumn> grid = new Grid<>(MetaDataColumn.class, false);
|
||||
Grid.Column<MetaDataColumn> idColumn = grid.addColumn(MetaDataColumn::getId)
|
||||
.setHeader("ID").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> createdColumn = grid.addColumn(MetaDataColumn::getCreatedDate)
|
||||
.setHeader("Erstellt").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> modifiedColumn = grid.addColumn(MetaDataColumn::getLastModifiedDate)
|
||||
.setHeader("Geändert").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> versionColumn = grid.addColumn(MetaDataColumn::getVersion)
|
||||
.setHeader("Version").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> tableColumn = grid.addColumn(MetaDataColumn::getTableName)
|
||||
.setHeader("Table").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> columnNameColumn = grid.addColumn(MetaDataColumn::getColumnName)
|
||||
.setHeader("Column Name").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> columnSyncNameColumn = grid.addColumn(MetaDataColumn::getColumnSyncName)
|
||||
.setHeader("Column Sync Name").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> columnTypeColumn = grid.addColumn(MetaDataColumn::getColumnType)
|
||||
.setHeader("Column Type").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> columnModifierColumn = grid.addColumn(MetaDataColumn::getColumnModifier)
|
||||
.setHeader("Column Modifier").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> columnOrderColumn = grid.addColumn(MetaDataColumn::getColumnOrder)
|
||||
.setHeader("Column Order").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> isShownColumn = grid.addComponentColumn(metaDataColumn -> createStatusIcon(metaDataColumn.getIsShown())).
|
||||
setHeader("Anzeige?").setWidth("6rem").setSortable(true);
|
||||
Grid.Column<MetaDataColumn> columnLabelColumn = grid.addColumn(MetaDataColumn::getColumnLabel)
|
||||
.setHeader("Spaltenname").setResizable(true).setSortable(true);
|
||||
Grid.Column<MetaDataColumn> showFilterColumn = grid.addComponentColumn(metaDataColumn -> createStatusIcon(metaDataColumn.getShowFilter())).
|
||||
setHeader("Zeige Filter").setWidth("6rem").setSortable(true);
|
||||
Grid.Column<MetaDataColumn> filterLabelColumn = grid.addColumn(MetaDataColumn::getFilterLabel)
|
||||
.setHeader("Filter Name").setResizable(true).setSortable(true);
|
||||
TextField searchField = new TextField();
|
||||
@Getter
|
||||
MetaDataForm form;
|
||||
MetaDataService service;
|
||||
|
||||
private static class ColumnToggleContextMenu extends ContextMenu {
|
||||
public ColumnToggleContextMenu(Component target) {
|
||||
super(target);
|
||||
setOpenOnClick(true);
|
||||
}
|
||||
|
||||
void addColumnToggleItem(String label, Grid.Column<MetaDataColumn> 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");
|
||||
@@ -42,8 +101,17 @@ public class MetaDataView extends VerticalLayout {
|
||||
private void configureGrid() {
|
||||
grid.addClassName("metadata-grid");
|
||||
grid.setSizeFull();
|
||||
grid.setColumns("table.tableName", "columnName", "columnSyncName", "columnModifier", "columnOrder", "isShown", "showFilter");
|
||||
//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);
|
||||
modifiedColumn.setVisible(false);
|
||||
versionColumn.setVisible(false);
|
||||
grid.setMultiSort(true);
|
||||
List sortOrder = new ArrayList();
|
||||
sortOrder.add(new GridSortOrder<MetaDataColumn>(tableColumn, SortDirection.ASCENDING));
|
||||
sortOrder.add(new GridSortOrder<MetaDataColumn>(columnOrderColumn, SortDirection.ASCENDING));
|
||||
grid.sort(sortOrder);
|
||||
grid.asSingleSelect().addValueChangeListener(event -> editMetaData(event.getValue()));
|
||||
}
|
||||
|
||||
@@ -56,6 +124,19 @@ 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);
|
||||
@@ -79,8 +160,34 @@ public class MetaDataView extends VerticalLayout {
|
||||
}
|
||||
|
||||
private HorizontalLayout getToolbar() {
|
||||
Button addAuthorizationMaxtrixButton = new Button("Add Meta Data", click -> addMetaDataColumn());
|
||||
HorizontalLayout toolbar = new HorizontalLayout(addAuthorizationMaxtrixButton);
|
||||
searchField.setPlaceholder("Search");
|
||||
searchField.setClearButtonVisible(true);
|
||||
searchField.setPrefixComponent(new Icon(VaadinIcon.SEARCH));
|
||||
searchField.setValueChangeMode(ValueChangeMode.EAGER);
|
||||
searchField.addValueChangeListener(e -> updateList());
|
||||
|
||||
Button addMetaDataButton = new Button("Add Meta Data");
|
||||
addMetaDataButton.addClickListener(click -> addMetaDataColumn());
|
||||
|
||||
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);
|
||||
|
||||
HorizontalLayout toolbar = new HorizontalLayout(searchField, addMetaDataButton, menuButton);
|
||||
toolbar.addClassName("toolbar");
|
||||
return toolbar;
|
||||
}
|
||||
@@ -107,6 +214,6 @@ public class MetaDataView extends VerticalLayout {
|
||||
}
|
||||
|
||||
private void updateList() {
|
||||
grid.setItems(service.findAllMetaDataColumns());
|
||||
grid.setItems(service.findAllMetaDataColumns(searchField.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,11 +19,11 @@ public class MediaFileService {
|
||||
|
||||
public List<MediaFile> findAllMediaFiles(String stringFilter) {
|
||||
if (stringFilter == null || stringFilter.isEmpty()) {
|
||||
log.info("Found " + mediaFileRepository.count()+ " entries");
|
||||
log.debug("Found " + mediaFileRepository.count()+ " entries");
|
||||
return mediaFileRepository.findAll();
|
||||
} else {
|
||||
List<MediaFile> results = mediaFileRepository.search(stringFilter);
|
||||
log.info("Found " + results.size() + " entries");
|
||||
log.debug("Found " + results.size() + " entries");
|
||||
return results;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user