package com.github.xburning.dubboswitch.view.consumer; import com.github.xburning.dubboswitch.entity.ZookeeperConsumer; import com.github.xburning.dubboswitch.repository.ZookeeperConsumerRepository; import com.github.xburning.dubboswitch.util.DubboSwitchTool; 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.springframework.beans.factory.annotation.Autowired; import java.util.Collection; import java.util.List; import static com.github.xburning.dubboswitch.util.DubboSwitchTool.isConnected; /** * Zookeeper 消费者管理页 */ @SpringUI public class ZookeeperConsumerManageUI extends VerticalLayout{ private final ZookeeperConsumerRepository zookeeperConsumerRepository; private final ZookeeperConsumerAddUI zookeeperConsumerAddUI; private Grid grid; @Autowired public ZookeeperConsumerManageUI(ZookeeperConsumerRepository zookeeperConsumerRepository, ZookeeperConsumerAddUI zookeeperConsumerAddUI) { this.zookeeperConsumerRepository = zookeeperConsumerRepository; this.zookeeperConsumerAddUI = zookeeperConsumerAddUI; createOperatePanel(); createDataGrid(); addConsumerAddWinCloseListener(); } /** * 创建操作面板 */ private void createOperatePanel() { Panel operatePanel = new Panel(); operatePanel.setCaption("操作"); operatePanel.setHeight(100,Unit.PIXELS); HorizontalLayout operateLayout = new HorizontalLayout(); operateLayout.addComponent(createAddButton()); operateLayout.addComponent(createDeleteButton()); operateLayout.setSpacing(true); operateLayout.setMargin(true); operatePanel.setContent(operateLayout); addComponent(operatePanel); } /** * 创建删除按钮 * @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(); zookeeperConsumerRepository.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 ->{ zookeeperConsumerAddUI.clearForm(); UI.getCurrent().addWindow(zookeeperConsumerAddUI); }); return addButton; } /** * 创建数据展示网格 */ private void createDataGrid() { grid = new Grid(); grid.setSizeFull(); grid.addColumn("序号", Long.class); grid.addColumn("消费者名称", String.class); grid.addColumn("IP",String.class); grid.addColumn("端口",String.class); grid.setSelectionMode(Grid.SelectionMode.MULTI); addTestColumnButton("测试"); addComponent(grid); search(); } /** * 添加按钮列 * @param pId */ private void addTestColumnButton(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 ip = (String) item.getItemProperty("IP").getValue(); String port = (String) item.getItemProperty("端口").getValue(); boolean isConnected = DubboSwitchTool.isConnected(ip + ":" + port); if (isConnected) { Notification.show("连接成功!",Notification.Type.HUMANIZED_MESSAGE); return; } Notification.show("连接失败!",Notification.Type.ERROR_MESSAGE); })); } /** * 添加新增消费者关闭监听 */ private void addConsumerAddWinCloseListener() { this.zookeeperConsumerAddUI.addCloseListener((Window.CloseListener) closeEvent -> { if(this.zookeeperConsumerAddUI.isAddSuccess){ search(); this.zookeeperConsumerAddUI.isAddSuccess = false; } }); } /** * 查询数据 */ private void search(){ grid.getContainerDataSource().removeAllItems(); List<ZookeeperConsumer> list = zookeeperConsumerRepository.findAll(); for(ZookeeperConsumer zookeeperConsumer :list){ grid.addRow(zookeeperConsumer.getId(), zookeeperConsumer.getName(), zookeeperConsumer.getIp(),zookeeperConsumer.getPort().toString(),"测试"); } } }