Package org.aperteworkflow.editor.vaadin

Source Code of org.aperteworkflow.editor.vaadin.GenericEditorApplication

package org.aperteworkflow.editor.vaadin;


import com.vaadin.Application;
import com.vaadin.terminal.gwt.server.HttpServletRequestListener;
import com.vaadin.terminal.gwt.server.WebApplicationContext;
import org.apache.commons.lang.StringUtils;
import pl.net.bluesoft.rnd.processtool.ProcessToolContext;
import pl.net.bluesoft.rnd.processtool.ProcessToolContextCallback;
import pl.net.bluesoft.rnd.util.i18n.I18NSourceFactory;
import pl.net.bluesoft.rnd.util.i18n.impl.DefaultI18NSource;
import pl.net.bluesoft.rnd.processtool.plugins.ProcessToolRegistry;
import pl.net.bluesoft.rnd.util.i18n.I18NSource;
import pl.net.bluesoft.rnd.util.i18n.impl.PropertiesBasedI18NProvider;
import pl.net.bluesoft.rnd.util.i18n.impl.PropertyLoader;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

/**
* Basic class for editor application which provides integration with rest of
* the Aperte Workflow infrastructure
*/
public class GenericEditorApplication extends Application implements HttpServletRequestListener {

    private static ThreadLocal<GenericEditorApplication> current = new ThreadLocal<GenericEditorApplication>();

    /**
     * Get current application object associated with this thread of execution
     * @return current application
     */
    public static GenericEditorApplication getCurrent() {
        return current.get();
    }

    /**
     * Get current {@link ProcessToolRegistry}
     * @return current registry
     */
    public static ProcessToolRegistry getRegistry() {
        WebApplicationContext webCtx = (WebApplicationContext) getCurrent().getContext();
        ServletContext sc = webCtx.getHttpSession().getServletContext();
        return (ProcessToolRegistry) sc.getAttribute(ProcessToolRegistry.class.getName());
    }

    @Override
    public void init() {
        current.set(this);
    }

    @Override
    public void onRequestStart(final HttpServletRequest request, HttpServletResponse response) {
        current.set(this);

        I18NSource.ThreadUtil.setThreadI18nSource(I18NSourceFactory.createI18NSource(request.getLocale()));

        // Setting ProcessToolContext was taken from ProcessToolVaadinApplicationPortlet2
        // to preserve functionality used in portlet based Vaadin applications
        ServletContext servletContext = request.getSession().getServletContext();
        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
        Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
        try {
            ProcessToolRegistry registry = (ProcessToolRegistry) servletContext.getAttribute(ProcessToolRegistry.class.getName());

            final String providerId = "step-editor";
            if (!registry.hasI18NProvider(providerId)) {
                registry.registerI18NProvider(
                        new PropertiesBasedI18NProvider(new PropertyLoader() {
                            @Override
                            public InputStream loadProperty(String path) throws IOException {
                                return getClass().getClassLoader().getResourceAsStream(path);
                            }
                        }, providerId + "-messages"),
                        providerId
                );
            }

            registry.withProcessToolContext(new ProcessToolContextCallback() {
                @Override
                public void withContext(ProcessToolContext ctx) {
                    ProcessToolContext.Util.setThreadProcessToolContext(ctx);
                }
            });
        } finally {
            Thread.currentThread().setContextClassLoader(contextClassLoader);
        }
    }

    @Override
    public void onRequestEnd(HttpServletRequest request, HttpServletResponse response) {
        ProcessToolContext.Util.removeThreadProcessToolContext();
        I18NSource.ThreadUtil.removeThreadI18nSource();
        current.remove();
    }
   
    protected String getStringParameterByName(String paramterName, Map<String, String[]> paramterMap) {
        String[] value = paramterMap.get(paramterName);
        if (value != null && value.length > 0 && !StringUtils.isEmpty(value[0])) {
            return value[0].trim();
        }
        return null;
    }

}
TOP

Related Classes of org.aperteworkflow.editor.vaadin.GenericEditorApplication

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.