package pl.net.bluesoft.rnd.processtool.ui.basewidgets; import com.vaadin.terminal.Sizeable; import com.vaadin.ui.*; import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolVaadinRenderable; import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolVaadinWidget; import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolWidget; import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AliasName; import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AperteDoc; import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.ChildrenAllowed; import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.WidgetGroup; import pl.net.bluesoft.rnd.processtool.ui.widgets.impl.BaseProcessToolVaadinWidget; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; import java.util.logging.Level; import java.util.logging.Logger; import static com.vaadin.ui.Label.CONTENT_XHTML; /** * @author tlipski@bluesoft.net.pl */ @AliasName(name = "TabSheet") @AperteDoc(humanNameKey="widget.tab_sheet.name", descriptionKey="widget.tab_sheet.description") @ChildrenAllowed(true) @WidgetGroup("base-widgets") public class TabSheetWidget extends BaseProcessToolVaadinWidget implements ProcessToolVaadinRenderable { private static final Logger logger = Logger.getLogger(TabSheetWidget.class.getName()); private TabSheet ts = new TabSheet(); @Override public Component render() { ts.setWidth(100, Sizeable.UNITS_PERCENTAGE); return ts; } @Override public void addChild(ProcessToolWidget child) { if (!(child instanceof ProcessToolVaadinWidget)) { throw new IllegalArgumentException("child is not instance of " + ProcessToolVaadinWidget.class.getName()); } Component component; ProcessToolVaadinWidget vChild = (ProcessToolVaadinWidget) child; try { component = vChild.render(); } catch (Throwable e) { logger.log(Level.SEVERE, e.getMessage(), e); Panel p = new Panel(); VerticalLayout vl = new VerticalLayout(); vl.addComponent(new Label(getMessage("process.data.widget.exception-occurred"))); vl.addComponent(new Label(e.getMessage())); ByteArrayOutputStream baos = new ByteArrayOutputStream(); e.printStackTrace(new PrintWriter(baos)); vl.addComponent(new Label("<pre>" + baos.toString() + "</pre>", CONTENT_XHTML)); vl.addStyleName("error"); p.addComponent(vl); p.setHeight("150px"); component = p; } ts.addTab(component, getMessage(child.getAttributeValue("caption")), null); if (ts.getSelectedTab() == null) ts.setSelectedTab(component); } }