private String getPackage(UmlClass klass) {
   UmlPackage pkg = null;
   if (_omPkg != null) {
     pkg = UML13Utils.getPackage(UML13Utils.getModel(klass), _omPkg);
   } else {
     pkg = UML13Utils.getModel(klass);
   }
   return UML13Utils.getNamespaceName(pkg, klass);
 }
  /**
   * @param classifiers
   * @return
   */
  private Document generateConfig(Collection classifiers) {
    Element configEl = new Element("hibernate-configuration");

    Element sessEl = new Element("session-factory");
    configEl.addContent(sessEl);

    for (Iterator i = classifiers.iterator(); i.hasNext(); ) {
      Classifier klass = (Classifier) i.next();
      UmlPackage pkg = null;
      if (_pkgName != null) {
        pkg = UML13Utils.getPackage(UML13Utils.getModel(klass), _pkgName);
      } else {
        pkg = UML13Utils.getModel(klass);
      }

      String fileSuffix = _fileSuffix;
      if (fileSuffix == null) {
        fileSuffix = ".hbm.xml";
      }
      UmlClass superClass = UML13Utils.getSuperClass((UmlClass) klass);
      if (superClass == null) {
        String nn = UML13Utils.getNamespaceName(pkg, klass);
        String resourceName =
            nn.replace('.', '/') + Constant.FORWARD_SLASH + klass.getName() + fileSuffix;
        //               String implResourceName = resourceName + "/impl";
        Element mappingEl = new Element("mapping");
        sessEl.addContent(mappingEl);
        mappingEl.setAttribute("resource", resourceName);

        String resourceName1 =
            nn.replace('.', '/') + "/impl/" + klass.getName() + "Impl" + fileSuffix;
        Element mappingE2 = new Element("mapping");
        sessEl.addContent(mappingE2);
        mappingE2.setAttribute("resource", resourceName1);
      }
    }

    DocType docType =
        new DocType(
            "hibernate-configuration",
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN",
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd");
    Document doc = new Document();
    doc.setDocType(docType);
    doc.setRootElement(configEl);
    return doc;
  }
  /**
   * @param classifiers
   * @return
   */
  private String generateConfig(Collection classifiers) {

    String methodList = "";
    String method = "";

    for (Iterator i = classifiers.iterator(); i.hasNext(); ) {
      Classifier klass = (Classifier) i.next();

      // System.out.println("classifier class name: " + klass.getName());

      for (Iterator j = UML13Utils.getAssociationEnds(klass).iterator(); j.hasNext(); ) {
        AssociationEnd thisEnd = (AssociationEnd) j.next();
        AssociationEnd otherEnd = UML13Utils.getOtherAssociationEnd(thisEnd);
        UmlPackage pkg = null;
        if (_pkgName != null) {
          pkg = UML13Utils.getPackage(UML13Utils.getModel(klass), _pkgName);
        } else {
          pkg = UML13Utils.getModel(klass);
        }
        String nn = UML13Utils.getNamespaceName(pkg, klass);

        if (_pkgName != null) {
          pkg = UML13Utils.getPackage(UML13Utils.getModel((UmlClass) otherEnd.getType()), _pkgName);
        } else {
          pkg = UML13Utils.getModel((UmlClass) otherEnd.getType());
        }

        String temp1 = UML13Utils.getNamespaceName(pkg, (UmlClass) otherEnd.getType());
        method = "";
        // the other end is collection, form a string
        if ((UML13Utils.isOne2Many(thisEnd, otherEnd) || UML13Utils.isMany2Many(thisEnd, otherEnd))
            && otherEnd.isNavigable()) {
          method = method + otherEnd.getName();
          method = method + nn;
          method = method + ".";
          //					method = method + ".impl.";
          method = method + thisEnd.getType().getName();
          //					method = method + "Impl";
          method = method + "=";
          method = method + temp1;
          //					method = method + ".impl.";
          method = method + ".";
          method = method + otherEnd.getType().getName();
          //					method = method + "Impl";
          method = method + "\n";

          // 3.0.1 release
          method = method + otherEnd.getName();
          method = method + nn;
          method = method + ".impl.";
          method = method + thisEnd.getType().getName();
          method = method + "Impl";
          method = method + "=";
          method = method + temp1;
          method = method + ".impl.";
          method = method + otherEnd.getType().getName();
          method = method + "Impl";
          method = method + "\n\n";
        }

        if (method != null && methodList != null) {
          methodList = methodList + method;
        } else if (method != null && methodList == null) {
          methodList = method;
        }
      }
    }

    String setUp = "";
    setUp = setUp + methodList;
    return setUp;
  }
  /**
   * @see
   *     gov.nih.nci.codegen.framework.ArtifactHandler#execute(gov.nih.nci.codegen.framework.Artifact)
   */
  public void execute(Artifact artifact) {
    RefObject ro = artifact.getSource();
    if (!(ro instanceof ModelElement)) {
      log.error("Artifact source is not instance of " + "org.omg.uml.foundation.core.ModelElement");
      throw new RuntimeException(
          "Artifact source is not instance of " + "org.omg.uml.foundation.core.ModelElement");
    }
    ModelElement me = (ModelElement) ro;
    try {
      UmlPackage pkg = null;
      if (_basePackage != null) {
        pkg = UML13Utils.getPackage(UML13Utils.getModel(me), _basePackage);

      } else {
        pkg = UML13Utils.getModel(me);
      }
      String nn = UML13Utils.getNamespaceName(pkg, me);
      String no = "";
      // based on whether the interfaceFlag in the control file is set to yes or no
      // the outputted file will or will not have a directory named impl in its path
      if (_interfaceFlag.equals("yes")) {
        no = nn;
      } else if (_wsFlag.equals("yes")) {

        no = nn + ".ws.";
      } else if (_pojoFlag != null && _pojoFlag.equals("yes")) {
        log.error("_pojoFlag.equals(yes)");
        no = nn + ".bean.";
      } else {
        if (nn.indexOf("evs") == -1) {
          no = nn + ".impl";
        } else {
          no = nn + "";
        }
      }

      StringBuffer nameBuf = new StringBuffer();
      if (_pkgPrefix != null && _pkgPrefix.trim().length() > 0) {
        nameBuf.append(_pkgPrefix.trim());
      }
      nameBuf.append(no);
      if (_pkgSuffix != null && _pkgSuffix.trim().length() > 0) {
        nameBuf.append(_pkgSuffix.trim());
      }
      nameBuf.append('.');
      if (_classPrefix != null && _classPrefix.trim().length() > 0) {
        nameBuf.append(_classPrefix.trim());
      }
      nameBuf.append(me.getName());
      if (_classSuffix != null && _classSuffix.trim().length() > 0) {
        nameBuf.append(_classSuffix.trim());
      }
      if (_classSuffix != null && _classSuffix.equals("Impl")) {
        String temp = nameBuf.toString();
        nameBuf = new StringBuffer(temp);
      }
      String fileSuffix = _fileSuffix;
      if (fileSuffix == null) {
        fileSuffix = "hbm.xml";
      }
      File f =
          new File(
              _baseDir + '/' + nameBuf.toString().replace('.', '/') + '.' + _fileSuffix.trim());

      File p = f.getParentFile();
      if (!p.exists()) {
        p.mkdirs();
      }
      f.createNewFile();
      FileWriter w = new FileWriter(f);
      w.write(artifact.getTarget().toString());
      w.flush();
      w.close();
    } catch (Exception ex) {
      log.error("error handling artifact" + ex.getMessage());
      throw new RuntimeException("error handling artifact", ex);
    }
  }