ru.codeinside.gses.webui.utils.Components.java Source code

Java tutorial

Introduction

Here is the source code for ru.codeinside.gses.webui.utils.Components.java

Source

/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 * Copyright (c) 2013, MPL CodeInside http://codeinside.ru
 */

package ru.codeinside.gses.webui.utils;

import com.vaadin.Application;
import com.vaadin.data.util.ObjectProperty;
import com.vaadin.terminal.DownloadStream;
import com.vaadin.terminal.StreamResource;
import com.vaadin.terminal.StreamResource.StreamSource;
import com.vaadin.terminal.gwt.server.WebBrowser;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Link;
import com.vaadin.ui.Table;
import com.vaadin.ui.Upload.SucceededEvent;
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.BaseTheme;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.delegate.Expression;
import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.tepi.filtertable.FilterTable;
import ru.codeinside.gses.activiti.FileValue;

import javax.ejb.EJBException;
import javax.mail.internet.MimeUtility;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URI;
import java.util.Set;

import static com.vaadin.ui.Window.Notification.TYPE_ERROR_MESSAGE;

public class Components {

    public static void showException(Window window, Exception e) {
        String reason = "";
        Throwable cause = e;
        if (e instanceof EJBException) {
            reason = " ??";
            final Exception causedByException = ((EJBException) e).getCausedByException();
            if (causedByException != null) {
                cause = causedByException;
            }
        }
        if (cause instanceof ActivitiException) {
            reason = "  ";
            if (cause.getCause() != null) {
                cause = cause.getCause();
            }
        }
        String msg = cause.getMessage();
        if (msg == null) {
            msg = cause.getClass().getSimpleName();
        }
        window.showNotification(reason, msg, TYPE_ERROR_MESSAGE);
    }

    public static Window showComponent(ClickEvent event, CustomComponent putComponent, String caption) {
        Window mainWindow = event.getButton().getApplication().getMainWindow();
        return showComponent(mainWindow, putComponent, caption);
    }

    public static Window showComponent(Window mainwindow, CustomComponent putComponent, String caption) {
        Window subwindow = createWindow(mainwindow, caption);
        subwindow.addComponent(putComponent);
        return subwindow;
    }

    public static Window createWindow(Window mainwindow, String caption) {
        Window subwindow = new Window(caption);
        subwindow.setSizeUndefined();
        subwindow.getContent().setSizeUndefined();
        subwindow.setScrollable(false);
        subwindow.setResizable(false);
        subwindow.setPositionX(50);
        subwindow.setPositionY(50);
        mainwindow.addWindow(subwindow);
        return subwindow;
    }

    public static Table createTable(String width, String height) {
        Table table = new Table();
        table.setImmediate(false);
        table.setWidth(width);
        table.setHeight(height);
        table.setEditable(false);
        table.setImmediate(true);
        table.setSelectable(true);
        table.setNullSelectionAllowed(false);

        return table;
    }

    public static FilterTable createFilterTable(String width, String height) {
        FilterTable table = new FilterTable();
        table.setImmediate(false);
        table.setWidth(width);
        table.setHeight(height);
        table.setEditable(false);
        table.setImmediate(true);
        table.setSelectable(true);
        table.setNullSelectionAllowed(false);

        return table;
    }

    public static Table createProcessRouteTable(final ProcessDefinitionEntity entity, String width, String height) {
        Table result = Components.createTable(width, height);
        result.addContainerProperty("id", String.class, null);
        result.addContainerProperty("name", String.class, null);
        result.addContainerProperty("type", String.class, null);
        result.addContainerProperty("accessPermissions", String.class, null);
        result.setSortDisabled(true);
        result.setColumnHeaders(
                new String[] { "?", "?", " ", " ?" });

        int index = 0;
        for (ActivityImpl ac : entity.getActivities()) {
            String candidateUser = "";
            String candidateGroup = "";

            if (ac.getActivityBehavior() instanceof UserTaskActivityBehavior) {
                UserTaskActivityBehavior utab = (UserTaskActivityBehavior) ac.getActivityBehavior();

                Set<Expression> candidateUserIdExpressions = utab.getTaskDefinition()
                        .getCandidateUserIdExpressions();
                if (candidateUserIdExpressions.size() > 0) {
                    candidateUser = ": " + candidateUserIdExpressions;
                }
                Set<Expression> candidateGroupIdExpressions = utab.getTaskDefinition()
                        .getCandidateGroupIdExpressions();
                if (candidateGroupIdExpressions.size() > 0) {
                    candidateUser = ": " + candidateGroupIdExpressions;
                }
            }
            String actName = ac.getProperty("name") != null ? ac.getProperty("name").toString()
                    : " ?";
            result.addItem(new Object[] { ac.getId(), actName, ac.getProperty("type").toString(),
                    candidateUser + " " + candidateGroup }, index++);
        }
        return result;
    }

    public static ObjectProperty<String> stringProperty(final Object o, final String defaultName) {
        return stringProperty(o != null ? o.toString() : null, defaultName);
    }

    public static ObjectProperty<String> stringProperty(final String name) {
        return stringProperty(name, " ");
    }

    public static ObjectProperty<String> stringProperty(final String name, final String defaultName) {
        return new ObjectProperty<String>(name != null ? name : defaultName);
    }

    public static ObjectProperty<Component> buttonProperty(final String name, final String defaultName,
            ClickListener listener) {
        return buttonProperty(name != null ? name : defaultName, listener);
    }

    public static ObjectProperty<Component> buttonProperty(final String name, ClickListener listener) {
        Button b = createButton(name, listener);
        return new ObjectProperty<Component>(b);
    }

    public static Button createButton(final String name, ClickListener listener) {
        Button result = new Button(name);
        result.setStyleName(BaseTheme.BUTTON_LINK);
        result.addListener(listener);
        return result;
    }

    // ru.codeinside.gses.activiti.ftarchive.AttachmentField.createDownloadLink() ?
    @Deprecated
    public static Link createAttachShowButton(final FileValue attachment, final Application appl) {
        if (attachment == null) {
            return null;
        }
        final Link result = new Link();
        result.setCaption(attachment.getFileName());
        result.setTargetName("_top");
        result.setImmediate(true);
        //String description = attachment.getDescription();
        result.setDescription("");
        StreamSource streamSource = new StreamSource() {

            private static final long serialVersionUID = 456334952891567271L;

            public InputStream getStream() {
                return new ByteArrayInputStream(attachment.getContent());
            }
        };
        StreamResource resource = new StreamResource(streamSource, attachment.getFileName(), appl) {

            private static final long serialVersionUID = -3869546661105572851L;

            public DownloadStream getStream() {
                final StreamSource ss = getStreamSource();
                if (ss == null) {
                    return null;
                }
                final DownloadStream ds = new DownloadStream(ss.getStream(), getMIMEType(), getFilename());
                ds.setBufferSize(getBufferSize());
                ds.setCacheTime(0);
                try {
                    WebBrowser browser = (WebBrowser) result.getWindow().getTerminal();
                    if (browser.isIE()) {
                        URI uri = new URI(null, null, attachment.getFileName(), null);
                        ds.setParameter("Content-Disposition", "attachment; filename=" + uri.toASCIIString());
                    } else {
                        ds.setParameter("Content-Disposition", "attachment; filename=\""
                                + MimeUtility.encodeWord(attachment.getFileName(), "utf-8", "Q") + "\"");
                    }
                } catch (Exception e) {
                    ds.setParameter("Content-Disposition", "attachment; filename=" + attachment.getFileName());
                }
                return ds;
            }
        };
        String type = attachment.getMimeType();
        if (type != null) {
            resource.setMIMEType(type);
        }
        result.setResource(resource);
        return result;
    }

    public static void showMessage(SucceededEvent event, String message, int type) {
        Window window = event.getUpload().getWindow();
        if (window != null) {
            window.showNotification(message, type);
        }
    }

}