package com.github.xburning.dubboswitch.view.provider; import com.github.xburning.dubboswitch.entity.ZookeeperProvider; import com.github.xburning.dubboswitch.repository.ZookeeperProviderRepository; 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; /** * Zookeeper 提供者管理页 */ @SpringUI public class ZookeeperProviderManageUI extends VerticalLayout{ private final ZookeeperProviderRepository zookeeperProviderRepository; private final ZookeeperProviderAddUI zookeeperProviderAddUI; private Grid grid; @Autowired public ZookeeperProviderManageUI(ZookeeperProviderRepository zookeeperProviderRepository, ZookeeperProviderAddUI zookeeperProviderAddUI) { this.zookeeperProviderRepository = zookeeperProviderRepository; this.zookeeperProviderAddUI = zookeeperProviderAddUI; createOperatePanel(); createDataGrid(); addProviderAddWinCloseListener(); } /** * 创建操作面板 */ 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(); zookeeperProviderRepository.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 ->{ zookeeperProviderAddUI.clearForm(); UI.getCurrent().addWindow(zookeeperProviderAddUI); }); 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 addProviderAddWinCloseListener() { this.zookeeperProviderAddUI.addCloseListener((Window.CloseListener) closeEvent -> { if(this.zookeeperProviderAddUI.isAddSuccess){ search(); this.zookeeperProviderAddUI.isAddSuccess = false; } }); } /** * 查询数据 */ private void search(){ grid.getContainerDataSource().removeAllItems(); List<ZookeeperProvider> list = zookeeperProviderRepository.findAll(); for(ZookeeperProvider zookeeperProvider :list){ grid.addRow(zookeeperProvider.getId(), zookeeperProvider.getName(), zookeeperProvider.getIp(),zookeeperProvider.getPort().toString(),"测试"); } } }