Package org.springframework.ide.eclipse.beans.core.internal.model.process

Source Code of org.springframework.ide.eclipse.beans.core.internal.model.process.BeansConfigPostProcessorFactory

/*******************************************************************************
* Copyright (c) 2007, 2009 Spring IDE Developers
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.beans.core.internal.model.process;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.parsing.ProblemReporter;
import org.springframework.beans.factory.parsing.ReaderEventListener;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.ide.eclipse.beans.core.BeansCorePlugin;
import org.springframework.ide.eclipse.beans.core.model.IBean;
import org.springframework.ide.eclipse.beans.core.model.IBeansConfig;
import org.springframework.ide.eclipse.beans.core.model.process.IBeansConfigPostProcessingContext;
import org.springframework.ide.eclipse.beans.core.model.process.IBeansConfigPostProcessor;
import org.springframework.ide.eclipse.core.model.validation.ValidationProblem;

/**
* Internal factory for creating instances of {@link IBeansConfigPostProcessor} and
* {@link BeansConfigPostProcessingContext}.
* @author Christian Dupuis
* @since 2.0
*/
public class BeansConfigPostProcessorFactory {

  public static final String POSTPROCESSOR_EXTENSION_POINT = BeansCorePlugin.PLUGIN_ID + ".postprocessors";

  /**
   * Returns an new instance of {@link IBeansConfigPostProcessor} that is configured to match the given
   * <code>type</code>.
   * @param type the Spring {@link BeanFactoryPostProcessor} or {@link BeanPostProcessor} implementation
   * @return the beansConfigPostProcessor
   */
  public static IBeansConfigPostProcessor[] createPostProcessor(String type) {
    Set<IBeansConfigPostProcessor> postProcessors = new HashSet<IBeansConfigPostProcessor>();
    IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(POSTPROCESSOR_EXTENSION_POINT);
    if (point != null) {
      for (IExtension extension : point.getExtensions()) {
        for (IConfigurationElement config : extension.getConfigurationElements()) {
          String extensionType = config.getAttribute("type");
          if ((type == null && extensionType == null) || (type != null && type.equals(extensionType))) {
            try {
              Object object = config.createExecutableExtension("class");
              if (object instanceof IBeansConfigPostProcessor) {
                IBeansConfigPostProcessor postProcessor = (IBeansConfigPostProcessor) object;
                postProcessors.add(postProcessor);
              }
            }
            catch (CoreException e) {
              BeansCorePlugin.log(e);
            }
          }
        }
      }
    }
    return postProcessors.toArray(new IBeansConfigPostProcessor[postProcessors.size()]);
  }

  /**
   * Helper method to create a new {@link IBeansConfigPostProcessingContext}.
   */
  public static IBeansConfigPostProcessingContext createPostProcessingContext(IBeansConfig beansConfig,
      Collection<IBean> beans, ReaderEventListener readerEventListener, ProblemReporter problemReporter,
      BeanNameGenerator beanNameGenerator, BeanDefinitionRegistry beanDefinitionRegistry,
      Set<ValidationProblem> problems) {
    List<IBean> beansClone = new ArrayList<IBean>();
    beansClone.addAll(beans);
    return new BeansConfigPostProcessingContext(beansConfig, beanNameGenerator, problemReporter,
        beanDefinitionRegistry, new BeansConfigRegistrationSupport(Collections
            .unmodifiableCollection(beansClone), readerEventListener), problems);
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.beans.core.internal.model.process.BeansConfigPostProcessorFactory

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.