Package org.dcarew.model.core.impl

Source Code of org.dcarew.model.core.impl.ModelClass

package org.dcarew.model.core.impl;

import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.dcarew.model.ModelPlugin;
import org.dcarew.model.annotations.ClassName;
import org.dcarew.model.annotations.Icon;
import org.dcarew.model.annotations.Property;
import org.dcarew.model.core.IModelClass;
import org.dcarew.model.core.IModelProperty;
import org.dcarew.model.utils.CoreUtils;
import org.eclipse.swt.graphics.Image;

/**
*
*
* @author Devon Carew
*/
public class ModelClass
  implements IModelClass
{
  private Class<?>       clazz;
 
  private String        name;
  private Image        icon;
 
  private IModelProperty[]  properties;
 
 
  public ModelClass(Class<?> clazz)
  {
    this.clazz = clazz;
   
    init();
  }
 
  public Class<?> getClazz()
  {
    return clazz;
  }
 
  public String getName()
  {
    return name;
  }
 
  public Image getIcon()
  {
    return icon;
  }
 
  public IModelProperty[] getProperties()
  {
    return properties;
  }
 
  // implementation
 
  private void init()
  {
    // name property
    ClassName nameAnnotation = clazz.getAnnotation(ClassName.class);
   
    if (nameAnnotation != null)
      name = nameAnnotation.value();
    else
      name = CoreUtils.getShortName(clazz);
   
    // icon property
    Icon iconAnnotation = clazz.getAnnotation(Icon.class);
   
    if (iconAnnotation != null)
    {
      URL iconURL = clazz.getClassLoader().getResource(iconAnnotation.value());
     
      icon = ModelPlugin.getPlugin().getImage(iconURL);
    }
    else
    {
      icon = ModelPlugin.getImage("resources/icons/obj16/unknown_obj.gif");
    }
   
    // properties
    List<IModelProperty> list = new ArrayList<IModelProperty>();
   
    for (Method method : clazz.getMethods())
    {
      if (!method.isAnnotationPresent(Property.class))
        continue;
     
      Property propertyAnnotation = method.getAnnotation(Property.class);
     
      list.add(new ModelProperty(propertyAnnotation.name()));
    }
   
    properties = list.toArray(new IModelProperty[0]);
  }
 
}
TOP

Related Classes of org.dcarew.model.core.impl.ModelClass

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.