package com.github.xburning.dubboswitch.view.app; import com.github.xburning.dubboswitch.entity.ZookeeperApp; import com.github.xburning.dubboswitch.repository.ZookeeperAppRepository; import com.vaadin.data.Item; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringUI; import com.vaadin.ui.*; import com.vaadin.ui.renderers.ButtonRenderer; import com.vaadin.ui.renderers.ClickableRenderer; import com.vaadin.ui.themes.ValoTheme; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import java.util.Collection; import java.util.Date; import java.util.List; /** * Zookeeper 应用服务切换页 */ @SpringUI public class ZookeeperAppManageUI extends VerticalLayout{ private final ZookeeperAppRepository zookeeperAppRepository; private final ZookeeperAppAddUI zookeeperAppAddUI; private final ZookeeperAppSwitchUI zookeeperAppSwitchUI; private final ZookeeperAppClearUI zookeeperAppClearUI; private final ZookeeperAppViewUI zookeeperAppViewUI; private Grid grid; private TextField filterField; private Button searchButton; @Autowired public ZookeeperAppManageUI(ZookeeperAppRepository zookeeperAppRepository, ZookeeperAppAddUI zookeeperAppAddUI,ZookeeperAppSwitchUI zookeeperAppSwitchUI,ZookeeperAppClearUI zookeeperAppClearUI,ZookeeperAppViewUI zookeeperAppViewUI) { this.zookeeperAppRepository = zookeeperAppRepository; this.zookeeperAppAddUI = zookeeperAppAddUI; this.zookeeperAppSwitchUI = zookeeperAppSwitchUI; this.zookeeperAppClearUI = zookeeperAppClearUI; this.zookeeperAppViewUI = zookeeperAppViewUI; createOperatePanel(); createDataGrid(); addAppAddWinCloseListener(); addAppSwitchWinCloseListener(); addAppClearWinCloseListener(); } /** * 创建操作面板 */ private void createOperatePanel() { Panel operatePanel = new Panel(); operatePanel.setCaption("操作"); operatePanel.setHeight(100,Unit.PIXELS); HorizontalLayout operateLayout = new HorizontalLayout(); operateLayout.addComponent(createFilterField()); operateLayout.addComponent(createSearchButton()); operateLayout.addComponent(createAddButton()); operateLayout.addComponent(createDeleteButton()); operateLayout.setSpacing(true); operateLayout.setMargin(true); operatePanel.setContent(operateLayout); addComponent(operatePanel); } /** * 创建查询过滤 * @return */ private TextField createFilterField() { filterField = new TextField(); filterField.setDescription("服务名称"); return filterField; } /** * 创建查询按钮 * @return */ private Button createSearchButton() { searchButton = new Button("查询",FontAwesome.SEARCH); searchButton.setStyleName(ValoTheme.BUTTON_PRIMARY); searchButton.addClickListener((Button.ClickListener) clickEvent -> { search(); }); return searchButton; } /** * 创建删除按钮 * @return */ private Button createDeleteButton() { Button deleteButton = new Button("删除",FontAwesome.CLOSE); deleteButton.addStyleName(ValoTheme.BUTTON_DANGER); deleteButton.addClickListener((Button.ClickListener) clickEvent -> { //validate Collection<Object> items = grid.getSelectedRows(); if(items.size() == 0){ Notification.show("请选中要删除的行!", Notification.Type.ERROR_MESSAGE); return; } //batch delete for (Object object : items) { Item item = grid.getContainerDataSource().getItem(object); if(item != null){ Long id = (Long) item.getItemProperty("序号").getValue(); zookeeperAppRepository.delete(id); } } search(); }); return deleteButton; } /** * 创建添加按钮 * @return */ private Button createAddButton() { Button addButton = new Button("添加",FontAwesome.PLUS); addButton.addStyleName(ValoTheme.BUTTON_FRIENDLY); addButton.addClickListener((Button.ClickListener) clickEvent ->{ zookeeperAppAddUI.clearForm(); UI.getCurrent().addWindow(zookeeperAppAddUI); }); return addButton; } /** * 创建数据展示网格 */ private void createDataGrid() { grid = new Grid(); grid.setSizeFull(); grid.setSelectionMode(Grid.SelectionMode.MULTI); grid.addColumn("序号", Long.class); grid.addColumn("应用名称", String.class); grid.addColumn("已切换消费者",String.class); grid.addColumn("已切换提供者",String.class); grid.addColumn("切换时间",String.class); addColumnButton("切换"); addColumnButton("清理"); addViewColumnButton("查看"); addComponent(grid); search(); } /** * 添加按钮列 * @param pId */ private void addColumnButton(String pId) { Grid.Column column = grid.addColumn(pId,String.class); column.setWidth(100d); column.setRenderer(new ButtonRenderer((ClickableRenderer.RendererClickListener) rendererClickEvent -> { Object itemId = rendererClickEvent.getItemId(); Item item = grid.getContainerDataSource().getItem(itemId); Long appId = (Long) item.getItemProperty("序号").getValue(); String appName = (String) item.getItemProperty("应用名称").getValue(); if ("清理".equals(pId)) { zookeeperAppClearUI.show(appId,appName); UI.getCurrent().addWindow(zookeeperAppClearUI); } else if ("切换".equals(pId)) { zookeeperAppSwitchUI.show(appId,appName); UI.getCurrent().addWindow(zookeeperAppSwitchUI); } })); } /** * 添加查看列 * @param pId */ private void addViewColumnButton(String pId) { Grid.Column column = grid.addColumn(pId, String.class); column.setWidth(100d); column.setRenderer(new ButtonRenderer((ClickableRenderer.RendererClickListener) rendererClickEvent -> { Object itemId = rendererClickEvent.getItemId(); Item item = grid.getContainerDataSource().getItem(itemId); String appName = (String) item.getItemProperty("应用名称").getValue(); zookeeperAppViewUI.show(appName); UI.getCurrent().addWindow(zookeeperAppViewUI); })); } /** * 添加新增应用服务关闭监听 */ private void addAppAddWinCloseListener() { this.zookeeperAppAddUI.addCloseListener((Window.CloseListener) closeEvent -> { if (this.zookeeperAppAddUI.isAddSuccess) { search(); this.zookeeperAppAddUI.isAddSuccess = false; } }); } /** * 添加应用服务切换关闭监听 */ private void addAppSwitchWinCloseListener() { this.zookeeperAppSwitchUI.addCloseListener((Window.CloseListener) closeEvent -> { if (this.zookeeperAppSwitchUI.isSwitchSuccess) { search(); this.zookeeperAppSwitchUI.isSwitchSuccess = false; } }); } /** * 添加应用服务清理关闭监听 */ private void addAppClearWinCloseListener() { this.zookeeperAppClearUI.addCloseListener((Window.CloseListener) closeEvent -> { if (this.zookeeperAppClearUI.isClearSuccess) { search(); this.zookeeperAppClearUI.isClearSuccess = false; } }); } /** * 查询数据 */ private void search(){ grid.getContainerDataSource().removeAllItems(); List<ZookeeperApp> list; String filterName = filterField.getValue(); if (StringUtils.isEmpty(filterName)) { list = zookeeperAppRepository.findAll(); }else{ list = zookeeperAppRepository.findByNameContaining(filterName); } for(ZookeeperApp zookeeperApp :list){ Date switchTime = zookeeperApp.getLastSwitchTime(); String lastSwitchTime = switchTime == null ? "": new DateTime(switchTime).toString("yyyy-MM-dd HH:mm:ss"); grid.addRow(zookeeperApp.getId(), zookeeperApp.getName(), zookeeperApp.getLastSwitchConsumer(),zookeeperApp.getLastSwitchProvider(), lastSwitchTime,"切换","清理","查看"); } } }