@SuppressWarnings("unchecked")
  public Document toGraphMLDOM_org(Document egoDom, String id, int radius, String graphType) {

    Collaborator collaborator = null;

    if (db.connect() == false) {
      throw new RuntimeException("Unable to connect to the database");
    }

    // add the graph element
    Element rootElement = egoDom.getDocumentElement();
    rootElement = createHeaderElements(egoDom, rootElement, graphType);

    Element graph = egoDom.createElement("graph");
    graph.setAttribute("id", "Contributor Network for organisation:" + " ( " + id + " )");
    graph.setAttribute("edgedefault", graphType);
    rootElement.appendChild(graph);

    network = getRawCollaboratorData_org(id, radius);

    if (network != null) {
      // add some additional required information for contributors
      collaborators = getCollaborators(network, "0");

      // get collaboration List
      collaborations = getCollaborations_org(id, network);
    } else return egoDom;

    // create node element in DOM
    for (int i = 0; i < collaborators.size(); i++) {
      Element node = createNodeElement(egoDom, i);
      graph.appendChild(node);
    }

    // we have a list of collaborations.
    // loop through the list, for each - create a collaboration
    //								  - create edge.

    // 1.iterate through the collaboration hashmap
    Iterator contributorIter = collaborations.values().iterator();
    int edgeIndex = 0;
    // collabCheck used to ensure no doubling up of collaborations. (pretty quick hack, ideally this
    // issue would be sorted before this point)
    Vector collabCheck = new Vector();

    while (contributorIter.hasNext()) {
      CollaborationList list = (CollaborationList) contributorIter.next();
      // get the actual collaborations
      if (list != null) {

        Iterator collaborationIter = list.getCollaborations().values().iterator();
        //	loop through the hashmap of collaborations
        while (collaborationIter.hasNext()) {

          Collaboration collaboration = (Collaboration) collaborationIter.next();

          if (!collabCheck.contains(
              collaboration.getPartner() + "-" + collaboration.getCollaborator())) {
            // create an edge for each of them
            Element edge =
                createEdgeElement(
                    egoDom,
                    collaboration,
                    Integer.parseInt(collaboration.getCollaborator()),
                    Integer.parseInt(collaboration.getPartner()),
                    edgeIndex);
            graph.appendChild(edge);
            //	add the collaboration to the list for checking.
            collabCheck.add(collaboration.getCollaborator() + "-" + collaboration.getPartner());
            edgeIndex++;
          }
        }
      }
    }

    return egoDom;
  }
  /**
   * A method to build a list of Collaboration objects representing a list of collaborations
   * associated with a collaborator
   *
   * @param id the unique identifier of a collaborator
   * @return a CollaborationList object containing a list of Collaboration objects
   */
  public CollaborationList getCollaborationList_org(String org_id, String id) {

    // check on the input parameters
    if (InputUtils.isValidInt(id) == false) {
      throw new IllegalArgumentException("The id parameter cannot be null");
    }

    // declare helper variables
    CollaborationList list = new CollaborationList(id);

    // define other helper variables
    Collaboration collaboration = null;

    // define other helper variables
    String partner = null;
    Integer count = null;
    String firstDate = null;
    String lastDate = null;

    // define the base sql query
    String sqlQuery =
        "SELECT distinct count(*), con.contributorid, min(e.first_date), max(e.first_date) "
            + "FROM contributor con, conevlink c , conevlink c2, orgevlink o, events e "
            + "WHERE o.organisationid = ? " // + org_id + " "
            + "AND c.eventid = O.EVENTID "
            + "AND e.eventid = O.EVENTID "
            + "AND e.eventid = c.EVENTID "
            + "AND c.contributorid != ?" // + id + " "
            + "AND con.contributorid = c.contributorid "
            + "AND c2.contributorid = ? " // + id + " "
            + "AND c2.eventid = c.eventid "
            + "GROUP BY con.contributorid, con.first_name ";

    int[] param = {Integer.parseInt(org_id), Integer.parseInt(id), Integer.parseInt(id)};
    // execute the query
    java.sql.ResultSet resultSet = db.exePreparedStatement(sqlQuery, param);

    try {
      //		 	check to see that data was returned
      if (!resultSet.last()) {
        db.tidyup();
        return null;
      } else resultSet.beforeFirst();

      // loop though the resulset
      while (resultSet.next()) {
        // get the data
        partner = resultSet.getString(2);
        count = resultSet.getInt(1);
        firstDate = resultSet.getDate(3).toString();
        lastDate = resultSet.getDate(4).toString();

        // create the collaboration object
        collaboration = new Collaboration(id, partner, count, firstDate, lastDate);

        // add the collaboration to the list
        list.addCollaboration(collaboration);
      }

    } catch (java.sql.SQLException ex) {
      System.out.println("Exception: " + ex.getMessage());
      resultSet = null;
    }

    db.tidyup();
    // return the list of collaborations
    return list;
  } // end the CollaborationList method