Create instance of ThreadPool? with as many general Threads as specified by local configuration
Loop through Providers
Perform MetaDataRequest? and store response in Provider
Harvester Only – If date of Last Update is not after the last time Harvester gathered information from this access point, then Continue to next Provider
Harvester Only – If GMT is not equal to (in their indexingPreferences) Provider startTime ± harvestStartTimeOffset (also consider frequency in indexingPreferences), then Continue to next Provider
Check SearchSummary?: While (Start index+Page Size) < totalMatched, repeat SearchRequest on next page and Send to ResponseManager? in a thread-safe environment
Send response to ResponseManager? in a thread-safe environment
PerformRequest?(String requestType, String url, int pageNum, int pageSize)
Get request URL for specified requestType (MetaData?, Capabilities, Search or Inventory)
Adjust KVP values inURL for paging according to pageNum and pageSize (requestType Search only)
(Harvester Only - RequestManager? performs MetadataRequest to get date of last update)
Loop through providers, performs CapabilitiesRequest, or load capabilities from local cache * (Harvester Only – if there have been no changes since last harvest, move to next provider)
See steps 7-10
Create specific request URL and configure according to capabilities using RequestConfiguration?
RequestManager? adjusts KVP parameters according to paging size and page number
RequestManager? passes URL to an HTTPThread in the ThreadPool?
HTTPThread connects to the provider
HTTPThread gets back XML and initializes the Response object
Response is passed to the ResponseManager? in a thread-safe environment
Repeat steps 7-11 until all pages have been accessed according to local specifications
ResponseManager? deals with the response according to local specifications (Harvester, Portal, …)