public void processGraphJSONString(String jsonStr) {
		try {
			JSONObject graphObj = new JSONObject(jsonStr);
			JSONArray nodesArray = graphObj.getJSONArray("nodes");
			for( int i = 0; i < nodesArray.length(); i++ ) {
				JSONObject nodeObj = nodesArray.getJSONObject(i);
				String nodeId = nodeObj.getString("nodeId");
				int minSpecificTerms = 3;
				int maxSpecificTerms = 5;
				int minGenericTerms = 2;
				int maxGenericTerms = 4;
				//Generate the terms for data items and workflows
				Domain specificDomain = this.catalog.getRandomSpecificDomain();
				if( nodeId.startsWith("d") || nodeId.startsWith("wf") ) {
					int nSpecificTerms = this.randInt(minSpecificTerms, maxSpecificTerms);
					int nGenericTerms = this.randInt(minGenericTerms, maxGenericTerms);
					for( int j = 1; j <= nSpecificTerms; j++ ) {
						String term = specificDomain.getRandomTerm();
						this.createIndexEntry(nodeId, term);
					}
					for( int j = 1; j <= nGenericTerms; j++ ) {
						String term = this.catalog.getRandomGenericTerm();
						this.createIndexEntry(nodeId, term);
					}
				}
				//Generate the terms for publications
				else if( nodeId.startsWith("pub") ) {
					int nSpecificTerms = this.randInt(minSpecificTerms, maxSpecificTerms);
					int additionalTerms = 2;
					for( int j = 1; j <= nSpecificTerms + additionalTerms; j++ ) {
						String term = specificDomain.getRandomTerm();
						this.createIndexEntry(nodeId, term);
					}
				}
			}
		}
		catch(JSONException e) {
			e.printStackTrace();
		}
	}