/** @throws Exception */
 public void delete() throws Exception {
   Connection delConnection = null;
   String sName = (String) oInput.get("archetype");
   if (!SourceVersion.isName(sName))
     throw new Exception("name " + sName + " is not a valid java identifier");
   PreparedStatement oStmt = null;
   try {
     delConnection = OpenShiftDerbySource.getConnection();
     oStmt = delConnection.prepareStatement("DELETE FROM " + sName + " WHERE id" + sName + " = ?");
     oStmt.setString(1, (String) oInput.get("id" + sName));
     int nRows = oStmt.executeUpdate();
     if (nRows == 0) throw new Exception("no rows deleted");
   } finally {
     if (delConnection != null)
       try {
         delConnection.close();
       } catch (SQLException logOrIgnore) {
       }
     if (oStmt != null)
       try {
         oStmt.close();
       } catch (SQLException logOrIgnore) {
       }
   }
 }
  /** @throws Exception */
  public void save() throws Exception {
    // these are external variables
    Connection insConnection = null;
    PreparedStatement oStmt = null;
    ResultSet rs = null;
    try {
      // get idDispClass
      insConnection = OpenShiftDerbySource.getConnection();
      String sName = (String) oInput.get("archetype");
      oStmt = insConnection.prepareStatement("SELECT idDispClass FROM DispClass WHERE name = ?");
      oStmt.setString(1, sName);
      rs = oStmt.executeQuery();
      rs.next();
      long idDispClass = rs.getLong(1);
      oStmt.close();
      rs.close();
      // get attributes to build sql
      oStmt =
          insConnection.prepareStatement("SELECT name FROM DispAttribute where idDispClass = ?");
      oStmt.setLong(1, idDispClass);
      rs = oStmt.executeQuery();
      String sSQL = null;
      boolean bInsert = false;
      aBindVars.clear();
      if (oInput.get("id" + oInput.get("archetype")) == null) {
        sSQL = doInsert(rs);
        bInsert = true;
      } else {
        sSQL = doUpdate(rs);
      }
      oStmt.close();
      oStmt = insConnection.prepareStatement(sSQL, Statement.RETURN_GENERATED_KEYS);
      int nColumn = 1;

      // set the bindvars, whice were previously cleared and updated by either the insert or update
      // SQL production
      for (String sValue : aBindVars) {
        oStmt.setString(nColumn++, sValue);
      }
      int nRowsAffected = oStmt.executeUpdate();
      if (nRowsAffected == 0) throw new Exception("0 rows updated by insert");
      if (bInsert) {
        // set the inserted id in to our object
        rs.close();
        rs = oStmt.getGeneratedKeys();
        if (rs.next()) {
          set("id" + sName, rs.getString(1));
        } else {
          throw new SQLException("Creating " + sName + " failed, no generated key obtained.");
        }
      }
    } finally {
      if (insConnection != null)
        try {
          insConnection.close();
        } catch (SQLException logOrIgnore) {
        }
      if (rs != null)
        try {
          rs.close();
        } catch (SQLException logOrIgnore) {
        }
      if (oStmt != null)
        try {
          oStmt.close();
        } catch (SQLException logOrIgnore) {
        }
    }
  }