private Map<Byte, DbJVPrimitiveType> getJavaTypes() throws DbException {

    // if first call, build the map
    if (m_javaTypes == null) {
      m_javaTypes = new HashMap<Byte, DbJVPrimitiveType>();
      DbRelationN relN = m_project.getComponents();
      DbEnumeration enu = relN.elements(DbSMSBuiltInTypeNode.metaClass);
      while (enu.hasMoreElements()) {
        DbSMSBuiltInTypeNode typeNode = (DbSMSBuiltInTypeNode) enu.nextElement();
        DbRelationN relN2 = typeNode.getComponents();
        DbEnumeration enu2 = relN2.elements(DbSMSBuiltInTypePackage.metaClass);
        while (enu2.hasMoreElements()) {
          DbSMSBuiltInTypePackage pack = (DbSMSBuiltInTypePackage) enu2.nextElement();
          DbSMSTargetSystem ts = pack.getTargetSystem();
          if ("Java".equals(ts.getName())) {
            DbRelationN relN3 = pack.getComponents();
            DbEnumeration enu3 = relN3.elements(DbJVPrimitiveType.metaClass);
            while (enu3.hasMoreElements()) {
              DbJVPrimitiveType type = (DbJVPrimitiveType) enu3.nextElement();
              String name = type.getName();
              if ("boolean".equals(name)) {
                m_javaTypes.put(Constants.T_BOOLEAN, type);
              } else if ("byte".equals(name)) {
                m_javaTypes.put(Constants.T_BYTE, type);
              } else if ("short".equals(name)) {
                m_javaTypes.put(Constants.T_SHORT, type);
              } else if ("char".equals(name)) {
                m_javaTypes.put(Constants.T_CHAR, type);
              } else if ("int".equals(name)) {
                m_javaTypes.put(Constants.T_INT, type);
              } else if ("long".equals(name)) {
                m_javaTypes.put(Constants.T_LONG, type);
              } else if ("double".equals(name)) {
                m_javaTypes.put(Constants.T_DOUBLE, type);
              } else if ("float".equals(name)) {
                m_javaTypes.put(Constants.T_FLOAT, type);
              } // end if
            } // end while
            enu3.close();
          } // end if
          pack.getAlias();
        } // end while
        enu2.close();
      } // end while
      enu.close();
    } // end if

    return m_javaTypes;
  }
  private DbJVPackage findPackageByName(String qualifiedPackageName) throws DbException {
    DbJVPackage pack = packages.get(qualifiedPackageName);

    if (pack == null) {
      DbOOAbsPackage parent = m_classModel;
      StringTokenizer st = new StringTokenizer(qualifiedPackageName, ".");

      while (st.hasMoreElements()) {
        String token = st.nextToken();
        pack = findPackageByName(parent, token);
        if (pack == null) {
          pack = new DbJVPackage(parent);
          pack.setName(token);
        } // end if
        parent = pack;
      } // end while

      packages.put(qualifiedPackageName, pack);
    } // end if

    return pack;
  }
  private DbOOAdt findClassByName(DbJVPackage pack, String classname) throws DbException {
    DbJVClass foundClass = null;

    DbRelationN relN = (pack == null) ? m_classModel.getComponents() : pack.getComponents();
    DbEnumeration enu = relN.elements(DbJVClass.metaClass);
    while (enu.hasMoreElements()) {
      DbJVClass claz = (DbJVClass) enu.nextElement();
      String name = claz.getName();
      if (classname.equals(name)) {
        foundClass = claz;
        break;
      }
    } // end while
    enu.close();

    if (foundClass == null) {
      JVClassCategory catg = JVClassCategory.getInstance(JVClassCategory.CLASS);
      foundClass = (pack == null) ? new DbJVClass(m_classModel, catg) : new DbJVClass(pack, catg);
      foundClass.setName(classname);
      types.put(classname, foundClass);
    }

    return foundClass;
  } // end findClassByName()