private static GenModel ecore2GenModel()

in tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java [554:665]


  private static GenModel ecore2GenModel(Collection ePackages, Hashtable packageInfoTable, int genOptions)
  {
    GenModel genModel = GenModelFactory.eINSTANCE.createGenModel();
    genModel.initialize(ePackages);
    
    genModel.setRootExtendsInterface("");
    genModel.setRootImplementsInterface("commonj.sdo.DataObject");
    genModel.setRootExtendsClass("org.apache.tuscany.sdo.impl.ExtensibleDataObjectImpl");
    genModel.setFeatureMapWrapperInterface("commonj.sdo.Sequence");
    genModel.setFeatureMapWrapperInternalInterface("org.apache.tuscany.sdo.util.BasicSequence");
    genModel.setFeatureMapWrapperClass("org.apache.tuscany.sdo.util.BasicSequence");
    genModel.setSuppressEMFTypes(true);
    genModel.setSuppressEMFMetaData(true);
    genModel.setSuppressEMFModelTags(true);
    genModel.setCanGenerate(true);
    //FIXME workaround java.lang.NoClassDefFoundError: org/eclipse/jdt/core/jdom/IDOMNode with 02162006 build
    genModel.setFacadeHelperClass("Hack");
    genModel.setForceOverwrite(true);
    
    if ((genOptions & OPTION_NO_INTERFACES) != 0)
    {
      genModel.setSuppressInterfaces(true);
    }
    
    if ((genOptions & OPTION_SPARSE_PATTERN) != 0)
    {
      genModel.setFeatureDelegation(GenDelegationKind.VIRTUAL_LITERAL);
    }
    else if ((genOptions & OPTION_STORE_PATTERN) != 0)
    {
      genModel.setFeatureDelegation(GenDelegationKind.REFLECTIVE_LITERAL);
      genModel.setRootExtendsClass("org.apache.tuscany.sdo.impl.StoreDataObjectImpl");
    }

    if ((genOptions & OPTION_NO_CONTAINMENT) != 0)
    {
      genModel.setSuppressContainment(true);
    }
    
    if ((genOptions & OPTION_NO_NOTIFICATION) != 0)
    {
      genModel.setSuppressNotification(true);
    }
    
    if ((genOptions & OPTION_ARRAY_ACCESSORS) != 0)
    {
      genModel.setArrayAccessors(true);
    }
    
    if ((genOptions & OPTION_NO_UNSETTABLE) != 0)
    {
      genModel.setSuppressUnsettable(true);
    }
    
    //if ((genOptions & OPTION_USE_EMF_PATTERNS) == 0)
    {
      genModel.setRootExtendsClass("org.apache.tuscany.sdo.impl.DataObjectBase");
    }
    
    if ((genOptions & OPTION_INTERFACE_DO) != 0)
    {
      genModel.setRootExtendsInterface("commonj.sdo.DataObject");
    }
    else
    {
      genModel.setRootExtendsInterface("java.io.Serializable");
    }
    
    //GenPackage genPackage = (GenPackage)genModel.getGenPackages().get(0);
    Collection packages = genModel.getGenPackages(); 
    for (Iterator iter1 = packages.iterator(); iter1.hasNext();)
    {
      GenPackage genPackage   = (GenPackage)iter1.next();
      PackageInfo packageInfo = (PackageInfo)packageInfoTable.get(genPackage.getEcorePackage());
        
      if (packageInfo.getBasePackage() != null)
      {
          genPackage.setBasePackage(packageInfo.getBasePackage());
      }
      if (packageInfo.getPrefix() != null) 
      {
          genPackage.setPrefix(packageInfo.getPrefix());
      }

      //FIXME Temporary, I need this option for now to get Switch classes generated for the SCDL models
      if ((genOptions & OPTION_GENERATE_SWITCH) == 0)
      {
          genPackage.setAdapterFactory(false);
      }

      if ((genOptions & OPTION_GENERATE_LOADER) != 0)
      {
        //FIXME workaround compile error with 02162006 build, generated code references non-existent EcoreResourceImpl class
        genPackage.setResource(GenResourceKind.XML_LITERAL);
        //genPackage.setDataTypeConverters(true);
      }
      else
      {
        genPackage.setResource(GenResourceKind.NONE_LITERAL);
        for (Iterator iter2 = genPackage.getGenClasses().iterator(); iter2.hasNext();)
        {
          GenClass genClass = (GenClass)iter2.next();
          if ("DocumentRoot".equals(genClass.getName()))
          {
            genClass.setDynamic(true); // Don't generate DocumentRoot class
            break;
          }
        }    
      }
    }
    return genModel;
  }