Package org.openiaml.docs.generation

Source Code of org.openiaml.docs.generation.LoadEMFClasses

/**
*
*/
package org.openiaml.docs.generation;

import java.util.List;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EEnumLiteral;
import org.eclipse.emf.ecore.EPackage;
import org.openiaml.docs.generation.semantics.ITagHandler;
import org.openiaml.docs.modeldoc.EMFAttribute;
import org.openiaml.docs.modeldoc.EMFClass;
import org.openiaml.docs.modeldoc.JavaClass;
import org.openiaml.docs.modeldoc.JavadocTagElement;
import org.openiaml.docs.modeldoc.ModelDocumentation;
import org.openiaml.docs.modeldoc.ModeldocFactory;

/**
* @author jmwright
*
*/
public class LoadEMFClasses extends EMFLoaderHelper implements ILoader {
 
  /**
   * The root EMF package to load from.
   */
  private EPackage rootPackage;
 
  /**
   * The plugin the generated package is stored in, e.g. "org.openiaml.model".
   */
  private String plugin;
 
  /**
   * The base of the plugin, e.g. "org.openiaml.model.".
   */
  private String packageBase;

  private DocumentationGenerator generator;
 
  /**
   * @param rootPackage
   * @param plugin
   * @param packageBase
   */
  public LoadEMFClasses(EPackage rootPackage, String plugin,
      String packageBase, DocumentationGenerator generator) {
    super();
    this.rootPackage = rootPackage;
    this.plugin = plugin;
    this.packageBase = packageBase;
    this.generator = generator;
  }

  @Override
  public List<ITagHandler> getSemanticTagHandlers() {
    return generator.getSemanticTagHandlers();
  }
 
  /* (non-Javadoc)
   * @see org.openiaml.docs.generation.IDocGenerator#load(org.openiaml.docs.modeldoc.ModeldocFactory, org.openiaml.docs.modeldoc.ModelDocumentation)
   */
  public void load(ModeldocFactory factory, ModelDocumentation root) {
    loadEMFClasses(rootPackage, factory, root);
  }
 
  /**
   * Load all EMF classes in the given package into the given documentation.
   *
   * @param root
   */
  public void loadEMFClasses(EPackage pkg, ModeldocFactory factory, ModelDocumentation root) {
    for (EClassifier classifier : pkg.getEClassifiers()) {
      if (classifier instanceof EClass) {
       
        EClass cls = (EClass) classifier;
       
        EMFClass c = factory.createEMFClass();
        c.setTargetClass(cls);
        c.setName(cls.getName());
        c.setAbstract(cls.isAbstract());
        c.setInterface(cls.isInterface());

        // add tagline
        {
          JavadocTagElement e = getTaglineForEMFElement(factory, cls);
          if (e != null) {
            c.setTagline(e);
          }
        }
       
        // add rationale
        {
          JavadocTagElement e = getRationaleForEMFElement(factory, cls);
          if (e != null) {
            c.setRationale(e);
          }
        }
       
        c.setParent(root);
       
        // link up the source java class
        getJavaClassFor(c, cls, factory, root);
       
        // parse attributes
        parseAttributes(factory, cls, c);
      }
    }
 
    // load all subpackages
    for (EPackage sub : pkg.getESubpackages()) {
      loadEMFClasses(sub, factory, root);
    }
  }
 

  /**
   * Add all (local) attributes in the source class to the target EMFClass.
   */
  private void parseAttributes(ModeldocFactory factory, EClass source, EMFClass target) {
    for (EAttribute a : source.getEAttributes()) {
      EMFAttribute created = factory.createEMFAttribute();
      created.setName(a.getName());
      created.setId(a.isID());
      created.setLowerBound(a.getLowerBound());
      created.setUpperBound(a.getUpperBound());
      created.setType(a.getEAttributeType().getName());
      created.setDefaultLiteral(a.getDefaultValueLiteral());
     
      // add tagline
      JavadocTagElement e = getTaglineForEMFElement(factory, a);
      if (e != null) {
        created.setTagline(e);
      }
     
      // is it an enumeration? populate list of accepted literals
      if (a.getEAttributeType() instanceof EEnum) {
        EEnum en = (EEnum) a.getEAttributeType();
        for (EEnumLiteral literal : en.getELiterals()) {
          created.getAcceptedValues().add(literal.getLiteral());
        }
      }
     
      target.getAttributes().add(created);
    }
   
  }

  /**
   * Link up a Java reference for the given EMFClass.
   *
   * @param c
   * @param cls
   * @param factory
   * @param root
   */
  protected void getJavaClassFor(EMFClass c, EClass cls,
      ModeldocFactory factory, ModelDocumentation root) {
   
    JavaClass jc = factory.createJavaClass();
    jc.setPlugin(plugin);       
    jc.setPackage(packageBase + getJavaPackageFor(cls.getEPackage()));
    jc.setName(cls.getName());
    jc.setParent(root);
   
    c.setRuntimeClass(jc);
   
  }

  private String getJavaPackageFor(EPackage c) {
    if (c == null)
      return "";
    String parent = getJavaPackageFor(c.getESuperPackage());
   
    return parent + (parent.isEmpty() ? "" : ".") + c.getName();
  }
 
}
TOP

Related Classes of org.openiaml.docs.generation.LoadEMFClasses

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.