Package net.sourceforge.javautil.container.impl

Source Code of net.sourceforge.javautil.container.impl.ContainerPojo

package net.sourceforge.javautil.container.impl;

import java.lang.reflect.Proxy;

import net.sourceforge.javautil.common.reflection.cache.ClassCache;
import net.sourceforge.javautil.common.reflection.cache.ClassMethod;
import net.sourceforge.javautil.container.IContainer;
import net.sourceforge.javautil.container.annotation.Container;
import net.sourceforge.javautil.lifecycle.ILifecycle;
import net.sourceforge.javautil.lifecycle.ILifecycle.PhaseType;
import net.sourceforge.javautil.lifecycle.annotation.Lifecycle;
import net.sourceforge.javautil.lifecycle.impl.ChildLifecycle;
import net.sourceforge.javautil.lifecycle.impl.LifecyclePojo;
import net.sourceforge.javautil.lifecycle.impl.ParentLifecycle;

/**
* A container backed by a POJO.
*
* @author elponderador
* @author $Author$
* @version $Id$
*/
public class ContainerPojo<T> extends ContainerAbstract {
 
  /**
   * @param pojoContainer The pojo container from which to extract a name
   * @return The name of the pojo container
   */
  public static String getPojoContainerName (Object pojoContainer) {
    Container container = pojoContainer.getClass().getAnnotation(Container.class);
    if (container != null && !"".equals(container.name())) {
      return container.name();
    } else {
      if (Proxy.isProxyClass(pojoContainer.getClass())) {
        for (Class<?> iface : pojoContainer.getClass().getInterfaces()) {
          container = iface.getAnnotation(Container.class);
          if (container != null && !"".equals(container.name())) {
            return container.name();
          } else if (container != null) {
            return iface.getSimpleName();
          }
        }
        return "Proxied Container";
      }
      return pojoContainer.getClass().getSimpleName().split("\\$")[0];
    }
  }
 
  protected final T pojoContainer;

  public ContainerPojo(T pojoContainer) {
    this(getPojoContainerName(pojoContainer), pojoContainer);
  }
 
  public ContainerPojo(String name, T pojoContainer) {
    super(name);
    this.pojoContainer = pojoContainer;
  }

  @Override protected ILifecycle createLifecycle() {
    ClassMethod method = ClassCache.getFor(pojoContainer.getClass()).getMethod(Lifecycle.class);
    if (method != null) {
      return (ILifecycle) method.invoke(pojoContainer);
    } else {
      return new LifecyclePojo(pojoContainer);
    }
  }

}
TOP

Related Classes of net.sourceforge.javautil.container.impl.ContainerPojo

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.