Package com.carrotgarden.osgi.anno.scr.make

Source Code of com.carrotgarden.osgi.anno.scr.make.Maker

/**
* Copyright (C) 2010-2013 Andrei Pozolotin <Andrei.Pozolotin@gmail.com>
*
* All rights reserved. Licensed under the OSI BSD License.
*
* http://www.opensource.org/licenses/bsd-license.php
*/
package com.carrotgarden.osgi.anno.scr.make;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.carrotgarden.osgi.anno.scr.bean.AggregatorBean;
import com.carrotgarden.osgi.anno.scr.util.Util;
import com.thoughtworks.xstream.XStream;

public class Maker {

  @SuppressWarnings("unused")
  private static final Logger log = LoggerFactory.getLogger(Maker.class);

  private final XStream xstream;

  private final Builder builder;

  public Maker() {

    this(new HashSet<String>());

  }

  public Maker(final Set<String> excludedServiceSet) {

    xstream = new XStream();
    xstream.autodetectAnnotations(true);

    builder = new Builder(excludedServiceSet);

  }

  /**
   *
   * generate SCR xml descriptors; classes must be initialized
   *
   * @return valid xml or null
   *
   */
  public String make(final Class<?>... klazArray) {

    final List<Class<?>> klazList = new LinkedList<Class<?>>();

    for (final Class<?> klaz : klazArray) {

      if (Util.isAbstract(klaz)) {
        /**
         * abstract classes are processed as part of component
         * inheritance
         */
        continue;
      }

      if (!Util.hasComponentAnno(klaz)) {
        /**
         * interested in @Component annotated only
         */
        continue;
      }

      klazList.add(klaz);

    }

    if (klazList.isEmpty()) {
      return null;
    }

    final AggregatorBean bean = builder.makeAggregator(klazList);

    return xstream.toXML(bean);

  }

  static final boolean INIT_NOT = false;
  static final boolean INIT_YES = true;

  /**
   *
   * generate SCR xml descriptors; classes will be loaded and initialized as
   * needed
   *
   * @return valid xml or null
   *
   */
  public String make(final ClassLoader loader, final String... nameArray)
      throws Throwable {

    final List<Class<?>> klazList = new LinkedList<Class<?>>();

    for (final String name : nameArray) {

      final Class<?> klaz = Class.forName(name, INIT_NOT, loader);

      if (Util.isAbstract(klaz)) {
        /**
         * abstract classes are processed as part of component
         * inheritance
         */
        continue;
      }

      if (!Util.hasComponentAnno(klaz)) {
        /**
         * interested in @Component annotated only
         */
        continue;
      }

      /** force class hierarchy initialization */
      Class.forName(name, INIT_YES, loader);

      klazList.add(klaz);

    }

    if (klazList.isEmpty()) {
      return null;
    }

    final AggregatorBean bean = builder.makeAggregator(klazList);

    return xstream.toXML(bean);

  }

}
TOP

Related Classes of com.carrotgarden.osgi.anno.scr.make.Maker

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.