myLogger.info(getAgentIdentifier() + " OpConInfoRelay content = " + content + " response = " + response);
myLogger.info("OpConInfoRelay content = " + content + " response = " + response);
  private void createOperationalRFDs (Collection changedOpConInfoRelays) {    HashMap relayMap = new HashMap();    NonOverlappingTimeSpanSet rfdInfos = buildRFDInfos(myRFDSubscription);    NonOverlappingTimeSpanSet orgActivities =       new NonOverlappingTimeSpanSet(myOrgActivitySubscription);    NonOverlappingTimeSpanSet opconInfos =  buildOpConInfos(orgActivities);    for (Iterator changes = changedOpConInfoRelays.iterator();	 changes.hasNext();) {      OpConInfoRelay relay = (OpConInfoRelay) changes.next();            TimeSpan content = (TimeSpan) relay.getContent();      ArrayList response = (ArrayList) relay.getResponse();      if (myLogger.isInfoEnabled()) {	myLogger.info(getAgentIdentifier() + " OpConInfoRelay content = " + content +		       " response = " + response);      }            if ((response == null) || 	  (response.size() < 2)) {	if (myLogger.isDebugEnabled()) {	  myLogger.debug(getAgentIdentifier() + " ignoring invalid response.");	}      } else {	String opConItemId = (String)response.get(0);	String opConTypeId = (String)response.get(1);	if (relayMap.containsKey(opConItemId)) {	  if (myLogger.isInfoEnabled()) {	    myLogger.info(getAgentIdentifier() + 			  ": ignoring OpConInfoRelay " + relay +			  " already added required RFDs.");	  }	} else {	  relayMap.put(opConItemId, relay);	  boolean usedRelay = false;	  	  // Iterate over OrgActivities to see whether there are RFDs for 	  // OpCons specified by the OrgActivities.	  for (Iterator iterator = opconInfos.iterator(); 	       iterator.hasNext(); ) {	    OpConInfo opconInfo = (OpConInfo) iterator.next();	    	    // Only interested if OpCon is the same. Trust that OpConInfoRelays	    // have been sent out for other missing OpCons.	    if (opconInfo.getOpCon().equals(opConItemId)) {	      // Is time span already covered?	      Collection affectedRFDInfos = 		rfdInfos.intersectingSet(opconInfo);	      	      if (!(affectedRFDInfos.isEmpty())) {		// Existence of any RFDs means that we had the info to make		// all RFDs to this OpCon. Let processPotentialChangedOpCons()		// ensure that entire time period is covered.		continue;	      }	      // Make RFD	      MessageAddress maTarget = relay.getTarget();	      String relTargetAddr = (String)maTarget.getAddress();	      	      Asset otherAsset = getAsset(myAssetClassName, 					  opConItemId, 					  opConTypeId, 					  maTarget.getAddress());	      Relationship relationship = 		myPlanningFactory.newRelationship((Constants.Role.OPERATIONALSUBORDINATE),						  (HasRelationships) myLocalAsset,						  (HasRelationships) otherAsset,						  opconInfo.getStartTime(),						  opconInfo.getEndTime());	      report(relationship);	      	      if (myLogger.isInfoEnabled()) {		myLogger.info(getAgentIdentifier() + " published RFD to " +			      maTarget + " for " + 			      new Date(opconInfo.getStartTime()) + " to " +			      new Date(opconInfo.getEndTime()));	      }	      	      usedRelay = true;	    }	  }	  if ((!usedRelay) && (myLogger.isInfoEnabled())) {	    myLogger.info(getAgentIdentifier() + 			  ": ignoring OpConInfoRelay " + relay + 			  " required RFDs already exist.");	  }	}      }      // General clean up      publishRemove(relay);    }  }