Package org.cruxframework.crux.core.rebind.screen.widget

Source Code of org.cruxframework.crux.core.rebind.screen.widget.WidgetCreatorHelper

/*
* Copyright 2011 cruxframework.org.
*
* 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 org.cruxframework.crux.core.rebind.screen.widget;

import java.lang.reflect.Method;

import org.cruxframework.crux.core.rebind.CruxGeneratorException;
import org.cruxframework.crux.core.rebind.screen.widget.declarative.DeclarativeFactory;
import org.cruxframework.crux.core.rebind.screen.widget.declarative.TagConstraints;


/**
* @author Thiago da Rosa de Bustamante
*
*/
public class WidgetCreatorHelper
{
  private final Class<?> factoryClass;
  private final Class<?> widgetType;
  private final Class<?> contextType;

  /**
   * @param factoryClass
   */
  public WidgetCreatorHelper(Class<?> factoryClass)
    {
    this.factoryClass = factoryClass;
    this.widgetType = getWidgetTypeFromClass();
    this.contextType = getContextTypeFromClass();
    }

  /**
   * @return
   */
  public Class<?> getFactoryClass()
    {
      return factoryClass;
    }

  public String getWidgetDeclarationType()
  {
    DeclarativeFactory declarativeFactory = factoryClass.getAnnotation(DeclarativeFactory.class);
    if (declarativeFactory != null)
    {
      return declarativeFactory.library()+"_"+declarativeFactory.id();
    }
    else
    {
      return null;
    }
  }

  /**
   * @return
   */
  public Class<?> getWidgetType()
    {
      return widgetType;
    }
 
  /**
   * @return
   */
  public Class<?> getContextType()
    {
      return contextType;
    }

  /**
   *
   * @param processorClass
   * @return
   */
  public TagConstraints getChildtrenAttributesAnnotation(Class<?> processorClass)
  {
    TagConstraints attributes = processorClass.getAnnotation(TagConstraints.class);
    if (attributes == null)
    {
      Class<?> superClass = processorClass.getSuperclass();
      if (superClass != null && superClass.getSuperclass() != null)
      {
        attributes = getChildtrenAttributesAnnotation(superClass);
      }
    }
   
    return attributes;
 
 
  /**
   *
   * @return
   */
  private Class<?> getWidgetTypeFromClass()
  {
    DeclarativeFactory declarativeFactory = factoryClass.getAnnotation(DeclarativeFactory.class);
    if (declarativeFactory != null)
    {
      return declarativeFactory.targetWidget();
    }
    else
    {
      return null;
    }
  } 

  /**
   *
   * @return
   */
  private Class<?> getContextTypeFromClass()
  {
        try
        {
          Method method = factoryClass.getMethod("instantiateContext", new Class<?>[]{});
          return method.getReturnType();
        }
        catch (Exception e)
        {
      throw new CruxGeneratorException("Error generating widget factory ["+factoryClass.getName()+"]. Can not realize the type for generic declaration.");
        }
  } 
}
TOP

Related Classes of org.cruxframework.crux.core.rebind.screen.widget.WidgetCreatorHelper

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.