Java tutorial
/* * Copyright (c) 2011-2015 Marat Gubaidullin. * * This file is part of HYBRIDBPM. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * */ package com.hybridbpm.ui; import com.hybridbpm.core.data.access.User; import com.hybridbpm.ui.component.UserImageSource; import com.hybridbpm.ui.component.ValoUserItemButton; import com.vaadin.data.Item; import com.vaadin.event.FieldEvents; import com.vaadin.server.StreamResource; import com.vaadin.server.ThemeResource; import com.vaadin.shared.ui.MarginInfo; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Image; import com.vaadin.ui.Table; import com.vaadin.ui.TextField; import com.vaadin.ui.CssLayout; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; import java.util.List; import java.util.UUID; /** */ @SuppressWarnings({ "serial", "unchecked" }) public final class UsersMenu extends VerticalLayout { private final TextField textSearch = new TextField(); private final Table table = new Table(); public UsersMenu() { textSearch.addStyleName(ValoTheme.TEXTFIELD_SMALL); textSearch.setWidth(100, Unit.PERCENTAGE); textSearch.setNullRepresentation(""); textSearch.setWidth(100, Unit.PERCENTAGE); textSearch.setInputPrompt("type to search users"); textSearch.addTextChangeListener(new FieldEvents.TextChangeListener() { @Override public void textChange(FieldEvents.TextChangeEvent event) { search(event.getText()); } }); table.addStyleName(ValoTheme.TABLE_BORDERLESS); table.addStyleName(ValoTheme.TABLE_NO_HEADER); table.addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); table.addStyleName(ValoTheme.TABLE_SMALL); table.addStyleName(ValoTheme.TABLE_COMPACT); table.addStyleName(ValoTheme.TABLE_NO_STRIPES); table.addContainerProperty("user", User.class, null, "Username", null, Table.Align.LEFT); table.addContainerProperty("tasks", Label.class, null, "Tasks", null, Table.Align.LEFT); table.setColumnExpandRatio("user", 1f); table.setVisibleColumns("user", "tasks"); table.setSizeFull(); table.setColumnExpandRatio("user", 1f); table.setSelectable(false); table.addGeneratedColumn("user", new UserColumnGenerator()); addComponents(textSearch, table); setExpandRatio(table, 1f); setHeight(100, Unit.PERCENTAGE); setWidth(300, Unit.PIXELS); addStyleName("users-list"); setVisible(false); } public void search(String text) { table.removeAllItems(); List<User> list = HybridbpmUI.getAccessAPI().findUsersByName(text); for (User u : list) { Item item = table.addItem(u); Label notificationsBadge = new Label("45"); notificationsBadge.addStyleName(ValoTheme.MENU_BADGE); notificationsBadge.addStyleName(ValoTheme.LABEL_TINY); notificationsBadge.setWidthUndefined(); notificationsBadge.setDescription("45 task todo"); item.getItemProperty("tasks").setValue(notificationsBadge); } // table.select(list.get(0)); } public final class UserColumnGenerator implements Table.ColumnGenerator { @Override public Object generateCell(Table source, Object itemId, Object columnId) { User user = (User) itemId; Image image = new Image(); image.addStyleName("users-menu-image"); if (user.getImage() != null) { StreamResource.StreamSource imagesource = new UserImageSource(user.getImage().toStream()); StreamResource resource = new StreamResource(imagesource, UUID.randomUUID().toString()); image.setSource(resource); } else { image.setSource(new ThemeResource("img/profile-pic-300px.jpg")); } ValoUserItemButton btnUsername = new ValoUserItemButton(user, ValoUserItemButton.TYPE.USER_NAME); ValoUserItemButton btnFullName = new ValoUserItemButton(user, ValoUserItemButton.TYPE.FULL_NAME); VerticalLayout nameLayout = new VerticalLayout(btnFullName, btnUsername); nameLayout.setSizeFull(); nameLayout.setComponentAlignment(btnFullName, Alignment.BOTTOM_LEFT); nameLayout.setComponentAlignment(btnUsername, Alignment.TOP_LEFT); HorizontalLayout usersHorizontalLayout = new HorizontalLayout(image, nameLayout); usersHorizontalLayout.setComponentAlignment(image, Alignment.MIDDLE_CENTER); usersHorizontalLayout.setComponentAlignment(nameLayout, Alignment.MIDDLE_LEFT); usersHorizontalLayout.setExpandRatio(nameLayout, 1f); usersHorizontalLayout.addStyleName("users-horizontal-layout"); usersHorizontalLayout.setWidth(100, Unit.PERCENTAGE); usersHorizontalLayout.setHeight(45, Unit.PIXELS); usersHorizontalLayout.setSpacing(true); return usersHorizontalLayout; } } }