package com.thingtrack.konekti.view.web.form.field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.vaadin.addon.customfield.CustomField;
import com.thingtrack.konekti.domain.Service;
import com.vaadin.data.Property;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
@SuppressWarnings("serial")
public class ServiceCollectionField extends CustomField {
private VerticalLayout mainLayout;
private VerticalLayout vlService;
private HorizontalLayout hlToolbar;
private Button btnRemove;
private Button btnAdd;
private Table tbService;
private BeanItemContainer<Service> serviceTableContainer;
public ServiceCollectionField() {
buildMainLayout();
setCompositionRoot(mainLayout);
serviceTableContainer = new BeanItemContainer<Service>(Service.class);
tbService.setContainerDataSource(serviceTableContainer);
// set button event handlers
btnAdd.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
// TODO
}
});
btnRemove.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
// TODO
}
});
}
@Override
public Class<?> getType() {
return List.class;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void setPropertyDataSource(Property newDataSource) {
List collectionsValue = (List) newDataSource.getValue();
serviceTableContainer.removeAllItems();
serviceTableContainer.addAll(collectionsValue);
serviceTableContainer.addNestedContainerProperty("client.description");
tbService.setVisibleColumns(new String[] { "code", "description", "observation", "client.description" } );
tbService.setColumnHeaders(new String[] { "Código", "Descripción", "Observaciones", "Cliente" } );
tbService.setColumnCollapsed("comment", true);
super.setPropertyDataSource(newDataSource);
}
@Override
public Object getValue() {
return new ArrayList<Service>(
(Collection<? extends Service>) serviceTableContainer.getItemIds());
}
private VerticalLayout buildMainLayout() {
// common part: create layout
mainLayout = new VerticalLayout();
mainLayout.setImmediate(false);
mainLayout.setWidth("100%");
mainLayout.setHeight("100%");
mainLayout.setMargin(false);
// top-level component properties
setWidth("100.0%");
setHeight("100.0%");
// vlOrganization
vlService = buildVlOfferLine();
mainLayout.addComponent(vlService);
mainLayout.setExpandRatio(vlService, 1.0f);
return mainLayout;
}
private VerticalLayout buildVlOfferLine() {
// common part: create layout
vlService = new VerticalLayout();
vlService.setImmediate(false);
vlService.setWidth("100.0%");
vlService.setHeight("100.0%");
vlService.setMargin(false);
// tbTable
tbService = new Table();
tbService.setImmediate(true);
tbService.setSelectable(true);
tbService.setMultiSelect(false);
tbService.setColumnCollapsingAllowed(true);
tbService.setWidth("100.0%");
tbService.setHeight("100.0%");
vlService.addComponent(tbService);
vlService.setExpandRatio(tbService, 1.0f);
// hlToolbar
hlToolbar = buildHlToolbar();
vlService.addComponent(hlToolbar);
return vlService;
}
private HorizontalLayout buildHlToolbar() {
// common part: create layout
hlToolbar = new HorizontalLayout();
hlToolbar.setImmediate(false);
hlToolbar.setWidth("100.0%");
hlToolbar.setHeight("26px");
hlToolbar.setMargin(false);
// btnAdd
btnAdd = new Button();
btnAdd.setCaption("Añadir");
btnAdd.setImmediate(true);
btnAdd.setWidth("-1px");
btnAdd.setHeight("-1px");
hlToolbar.addComponent(btnAdd);
// btnRemove
btnRemove = new Button();
btnRemove.setCaption("Borrar");
btnRemove.setImmediate(true);
btnRemove.setWidth("-1px");
btnRemove.setHeight("-1px");
hlToolbar.addComponent(btnRemove);
hlToolbar.setExpandRatio(btnRemove, 1.0f);
hlToolbar.setComponentAlignment(btnRemove, new Alignment(33));
return hlToolbar;
}
}