nz.co.senanque.vaadinsupport.viewmanager.ViewManagerImpl.java Source code

Java tutorial

Introduction

Here is the source code for nz.co.senanque.vaadinsupport.viewmanager.ViewManagerImpl.java

Source

/*******************************************************************************
 * Copyright (c)2014 Prometheus Consulting
 *
 * 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 nz.co.senanque.vaadinsupport.viewmanager;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Stack;

import javax.servlet.http.HttpSession;

import nz.co.senanque.vaadinsupport.I18n.I18nCaptionHelper;
import nz.co.senanque.vaadinsupport.application.MaduraSessionManager;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;
import org.springframework.context.support.MessageSourceAccessor;

import com.vaadin.Application;
import com.vaadin.terminal.gwt.server.WebApplicationContext;
import com.vaadin.ui.Component;
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Window;

/**
 * 
 * Original idea came from from <a href="http://dev.vaadin.com/browser/incubator/gasdiary/src/org/vaadin/gasdiary/ui/ViewManager.java"/>
 * Because it is accessible from non-spring beans (using a factory) it is used to hold various
 * view related stuff as well as the views. It should be wired as a session scoped bean.
 * 
 * @author Roger Parkinson
 * @version $Revision:$
 */
public class ViewManagerImpl implements InitializingBean, ViewManager, Serializable, MessageSourceAware {

    private static final long serialVersionUID = -2928146002699266524L;
    private static Logger logger = LoggerFactory.getLogger(ViewManagerImpl.class);
    private HashMap<String, ComponentContainer> views = new HashMap<String, ComponentContainer>();
    private final Stack<ComponentContainer> screenStack = new Stack<ComponentContainer>();
    private List<ViewManaged> initialLayouts = new ArrayList<ViewManaged>();
    private List<ViewManaged> applicationLayouts = new ArrayList<ViewManaged>();
    private Window m_mainWindow = new com.vaadin.ui.Window();
    private Application m_application;
    private int m_debugCounter = 0;
    private MaduraSessionManager m_maduraSessionManager;
    private boolean m_adjustCaptions = false;
    private MessageSource m_messageSource;

    public ViewManagerImpl() {
    }

    public void switchScreen(String viewName, ComponentContainer newView) {
        ComponentContainer view;
        if (newView != null) {
            view = newView;
            views.put(viewName, newView);
        } else
            view = views.get(viewName);
        getMainWindow().setContent(view);
    }

    public void switchScreen(String viewName) {
        switchScreen(viewName, null);
    }

    /* (non-Javadoc)
     * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#pushScreen(java.lang.String, com.vaadin.ui.ComponentContainer)
     */
    public void pushScreen(String viewName, ComponentContainer newView) {
        screenStack.push((ComponentContainer) getMainWindow().getContent());
        switchScreen(viewName, newView);
    }

    /* (non-Javadoc)
     * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#pushScreen(java.lang.String)
     */
    public void pushScreen(String viewName) {
        ComponentContainer target = get(viewName);
        pushScreen(viewName, target);
    }

    /* (non-Javadoc)
     * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#popScreen()
     */
    public void popScreen() {
        getMainWindow().setContent(screenStack.pop());
    }

    /* (non-Javadoc)
     * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#getWindow()
     */
    public Panel getWindow() {
        return getMainWindow();
    }

    /* (non-Javadoc)
     * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#put(java.lang.String, com.vaadin.ui.ComponentContainer)
     */
    public void put(String name, ComponentContainer layout) {
        views.put(name, layout);
    }

    /* (non-Javadoc)
     * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#get(java.lang.String)
     */
    public ComponentContainer get(String name) {
        return views.get(name);
    }

    public void afterPropertiesSet() throws Exception {
        MessageSourceAccessor messageSourceAccessor = new MessageSourceAccessor(m_messageSource);
        getMainWindow().setCaption(messageSourceAccessor.getMessage("title", null, "title"));
        for (ViewManaged viewManaged : getInitialLayouts()) {
            views.put(viewManaged.getClass().getName(), (ComponentContainer) viewManaged);
            if (isAdjustCaptions()) {
                I18nCaptionHelper.switchCaptions((Component) viewManaged, messageSourceAccessor);
            }
            viewManaged.setViewManager(this);
        }
    }

    /* (non-Javadoc)
      * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#getViews()
      */
    public HashMap<String, ComponentContainer> getViews() {
        return views;
    }

    public void setViews(HashMap<String, ComponentContainer> views) {
        this.views = views;
    }

    /* (non-Javadoc)
      * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#getMainWindow()
      */
    public Window getMainWindow() {
        return m_mainWindow;
    }

    public void setMainWindow(Window mainWindow) {
        m_mainWindow = mainWindow;
    }

    /* (non-Javadoc)
      * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#loadApplication()
      */
    public void loadApplication() {

        String mainLayout = null;
        logger.debug("debug counter", m_debugCounter++);
        MessageSourceAccessor messageSourceAccessor = new MessageSourceAccessor(m_messageSource);
        for (ViewManaged viewManaged : getApplicationLayouts()) {
            views.put(viewManaged.getClass().getName(), (ComponentContainer) viewManaged);
            if (mainLayout == null) {
                mainLayout = viewManaged.getClass().getName();
            }
            if (isAdjustCaptions()) {
                I18nCaptionHelper.switchCaptions((Component) viewManaged, messageSourceAccessor);
            }
            viewManaged.setViewManager(this);
        }
        switchScreen(mainLayout);

    }

    /* (non-Javadoc)
      * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#logout()
      */
    public void logout() {
        HttpSession httpSession = ((WebApplicationContext) getApplication().getContext()).getHttpSession();
        httpSession.invalidate();
        if (getMaduraSessionManager() != null) {
            getMaduraSessionManager().close();
        }
    }

    /* (non-Javadoc)
     * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#getInitialLayouts()
     */
    public List<ViewManaged> getInitialLayouts() {
        return initialLayouts;
    }

    public void setInitialLayouts(List<ViewManaged> initialLayouts) {
        this.initialLayouts = initialLayouts;
    }

    /* (non-Javadoc)
     * @see nz.co.senanque.vaadinsupport.viewmanager.ViewManager#getApplicationLayouts()
     */
    public List<ViewManaged> getApplicationLayouts() {
        return applicationLayouts;
    }

    public void setApplicationLayouts(List<ViewManaged> applicationLayouts) {
        this.applicationLayouts = applicationLayouts;
    }

    public Application getApplication() {
        return m_application;
    }

    public void setApplication(Application application) {
        m_application = application;
    }

    public void setMessageSource(MessageSource messageSource) {
        m_messageSource = messageSource;
    }

    public MaduraSessionManager getMaduraSessionManager() {
        return m_maduraSessionManager;
    }

    public void setMaduraSessionManager(MaduraSessionManager maduraSessionManager) {
        m_maduraSessionManager = maduraSessionManager;
    }

    public boolean isAdjustCaptions() {
        return m_adjustCaptions;
    }

    public void setAdjustCaptions(boolean adjustCaptions) {
        m_adjustCaptions = adjustCaptions;
    }
}