/* *get collaboration information based on organisation - returns a collaborationList. */ public HashMap<Integer, CollaborationList> getCollaborations_org( String id, TreeMap<Integer, Collaborator> network) { HashMap<Integer, CollaborationList> collaborations = new java.util.HashMap<Integer, CollaborationList>(); // reset the iterator Set<Integer> networkKeys = network.keySet(); Iterator<Integer> networkKeyIterator = networkKeys.iterator(); Integer networkKey = null; CollaborationList collaborationList; // loop through the list of keys while (networkKeyIterator.hasNext()) { // get the key networkKey = (Integer) networkKeyIterator.next(); // get the list of collaborations for this user collaborationList = getCollaborationList_org(id, networkKey.toString()); // add the collaborationList object to the list collaborations.put(networkKey, collaborationList); } return collaborations; }
@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; }
/* * add some of the additional required information for collaborator */ public ArrayList<Collaborator> getCollaborators( TreeMap<Integer, Collaborator> network, String id) { // declare helper variables java.util.ArrayList<Collaborator> collaborators = new java.util.ArrayList<Collaborator>(); // define a SPARQL query to get details about a collaborator String sparqlQuery = "PREFIX foaf: <" + FOAF.NS + ">" + "PREFIX ausestage: <" + AuseStage.NS + "> " + "SELECT ?collabName ?function ?gender ?nationality " + "WHERE { " + " @ a foaf:Person ; " + " foaf:name ?collabName. " + "OPTIONAL {@ ausestage:function ?function} " + "OPTIONAL {@ foaf:gender ?gender} " + "OPTIONAL {@ ausestage:nationality ?nationality} " + "} "; String queryToExecute = null; ResultSet results = null; QuerySolution row = null; Collaborator collaborator = null; // loop through the list of collaborators and get additional information Collection networkKeys = network.keySet(); Iterator networkKeyIterator = networkKeys.iterator(); Integer networkKey = null; Integer centreId = Integer.parseInt(id); // loop through the list of keys while (networkKeyIterator.hasNext()) { // get the key for this collaborator networkKey = (Integer) networkKeyIterator.next(); // create a new collaborator object collaborator = new Collaborator(networkKey.toString()); // build the query queryToExecute = sparqlQuery.replaceAll( "@", "<" + AusStageURI.getContributorURI(collaborator.getId()) + ">"); // execute the query results = rdf.executeSparqlQuery(queryToExecute); // add details to this contributor while (results.hasNext()) { // loop though the resulset // get a new row of data row = results.nextSolution(); // add the data to the collaborator collaborator.setName(row.get("collabName").toString()); if (row.get("function") != null) { collaborator.setFunction(row.get("function").toString()); } if (row.get("gender") != null) { collaborator.setGender(row.get("gender").toString()); } if (row.get("nationality") != null) { collaborator.setNationality(row.get("nationality").toString()); } collaborator.setUrl(AusStageURI.getContributorURL(collaborator.getId())); } // play nice and tidy rdf.tidyUp(); results = null; // add the collaborator to the list collaborators.add(collaborator); } return collaborators; }