All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vaadin.spring.internal.ViewScopeImpl Maven / Gradle / Ivy

There is a newer version: 24.7.0
Show newest version
/*
 * Copyright 2015 The original authors
 *
 * 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 com.vaadin.spring.internal;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.Scope;
import org.springframework.util.Assert;

/**
 * Implementation of Spring's
 * {@link org.springframework.beans.factory.config.Scope} that binds the views
 * and dependent beans to the visibility of the view, i.e. the scope is
 * activated when a user navigates into a view and destroyed when the user
 * navigates out of the view. Registered by default as the scope
 * {@value #VAADIN_VIEW_SCOPE_NAME}.
 *
 * @author Petter Holmström ([email protected])
 * @author Henri Sara ([email protected])
 * @see com.vaadin.spring.annotation.ViewScope
 */
public class ViewScopeImpl implements Scope, BeanFactoryPostProcessor {

    private static final Logger LOGGER = LoggerFactory
            .getLogger(ViewScopeImpl.class);

    public static final String VAADIN_VIEW_SCOPE_NAME = "vaadin-view";

    private static ViewCacheRetrievalStrategy viewCacheRetrievalStrategy = new BeanFactoryContextViewCacheRetrievalStrategy();

    private ConfigurableListableBeanFactory beanFactory;

    /**
     * Sets the
     * {@link com.vaadin.spring.internal.ViewCacheRetrievalStrategy}
     * to use.
     */
    public static synchronized void setViewCacheRetrievalStrategy(
            ViewCacheRetrievalStrategy viewCacheRetrievalStrategy) {
        if (viewCacheRetrievalStrategy == null) {
            viewCacheRetrievalStrategy = new BeanFactoryContextViewCacheRetrievalStrategy();
        }
        ViewScopeImpl.viewCacheRetrievalStrategy = viewCacheRetrievalStrategy;
    }

    /**
     * Returns the
     * {@link com.vaadin.spring.internal.ViewCacheRetrievalStrategy}
     * to use. By default,
     * {@link com.vaadin.spring.internal.ViewScopeImpl.BeanFactoryContextViewCacheRetrievalStrategy}
     * is used.
     */
    public static synchronized ViewCacheRetrievalStrategy getViewCacheRetrievalStrategy() {
        return viewCacheRetrievalStrategy;
    }

    @Override
    public Object get(String name, ObjectFactory objectFactory) {
        return getViewCache().getCurrentViewBeanStore()
                .get(name, objectFactory);
    }

    @Override
    public Object remove(String name) {
        return getViewCache().getCurrentViewBeanStore().remove(name);
    }

    @Override
    public void registerDestructionCallback(String name, Runnable callback) {
        getViewCache().getCurrentViewBeanStore().registerDestructionCallback(
                name, callback);
    }

    @Override
    public Object resolveContextualObject(String key) {
        return null;
    }

    /**
     * {@inheritDoc}
     * 

* This implementation always returns {@code null}. */ @Override public String getConversationId() { return null; } private ViewCache getViewCache() { Assert.notNull(beanFactory, "beanFactory has not been set yet"); return viewCacheRetrievalStrategy.getViewCache(beanFactory); } @Override public void postProcessBeanFactory( ConfigurableListableBeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; LOGGER.debug("Registering Vaadin View scope with bean factory [{}]", beanFactory); beanFactory.registerScope(VAADIN_VIEW_SCOPE_NAME, this); } /** * Implementation of * {@link com.vaadin.spring.internal.ViewCacheRetrievalStrategy} * that fetches the {@link com.vaadin.spring.internal.ViewCache} * instance from the provided bean factory. */ public static class BeanFactoryContextViewCacheRetrievalStrategy implements ViewCacheRetrievalStrategy { @Override public ViewCache getViewCache(BeanFactory beanFactory) { return beanFactory.getBean(ViewCache.class); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy