/// <summary> /// Find those Task Assistant workbooks in the database that are not being used by /// any step that launches ArcMap /// </summary> /// <returns>The total number of orphaned items found</returns> private int UpdateOrphanedTaWorkbooks() { SortedList <string, string> unusedItems = new SortedList <string, string>(); IJTXDatabase3 wmxDb = this.WmxDatabase; IJTXConfiguration3 configMgr = wmxDb.ConfigurationManager as IJTXConfiguration3; IJTXTaskAssistantWorkflowRecordSet allItems = configMgr.TaskAssistantWorkflowRecords; // First check to see if there are even any TA workbooks in the database if (allItems.Count > 0) { Dictionary <string, string> usedTypes = new Dictionary <string, string>(); // Search all the step types for Task Assistant workbooks currently in use IJTXStepTypeSet allStepTypes = wmxDb.ConfigurationManager.StepTypes; for (int i = 0; i < allStepTypes.Count; i++) { IJTXStepType2 stepType = allStepTypes.get_Item(i) as IJTXStepType2; // Skip over unused step types if (m_unusedStepTypes.Keys.Contains(stepType.ID)) { continue; } // Examine the remaining step types for (int j = 0; j < stepType.Arguments.Length; j++) { string stepArg = stepType.Arguments[j].ToString(); if (stepArg.StartsWith(C_WORKBOOK_FLAG)) { string suffix = stepArg.Substring(C_WORKBOOK_FLAG.Length); suffix = suffix.Trim(new char[] { '"' }); usedTypes[suffix] = null; } } } // Loop over all the Task Assistant workbooks, looking for anything // that we didn't identify as "in use" for (int i = 0; i < allItems.Count; i++) { IJTXTaskAssistantWorkflowRecord item = allItems.get_Item(i); if (!usedTypes.ContainsKey(item.Alias)) { m_unusedTaWorkbooks[item.Alias] = null; } } } return(m_unusedTaWorkbooks.Count); }
/// <summary> /// Find those step types in the database that are not being used by any workflow. /// </summary> /// <returns>The total number of orphaned items found</returns> private int UpdateOrphanedStepTypes() { Dictionary <int, int> usedStepTypes = new Dictionary <int, int>(); IJTXDatabase3 wmxDb = this.WmxDatabase; IJTXConfiguration3 configMgr = wmxDb.ConfigurationManager as IJTXConfiguration3; IJTXWorkflowSet workflows = configMgr.Workflows; // Iterate through each workflow, building up the list of used steps for (int i = 0; i < workflows.Count; i++) { // Skip over those workflows that aren't in use IJTXWorkflow workflow = workflows.get_Item(i); if (m_unusedWorkflows.Keys.Contains(workflow.ID)) { continue; } // Examine the remaining workflows IJTXWorkflowConfiguration workflowCfg = workflows.get_Item(i) as IJTXWorkflowConfiguration; int[] stepIds = workflowCfg.GetAllSteps(); foreach (int stepId in stepIds) { int stepTypeId = workflowCfg.GetStep(stepId).StepTypeID; usedStepTypes[stepTypeId] = stepTypeId; } } // Get the complete list of step types in the database IJTXStepTypeSet allStepTypeObjs = configMgr.StepTypes; // Loop over all of the step types. For anything whose step type ID is not // contained in the "used" list, add it to the "unused" list. // If all of the items are used, don't bother trying to add to the // unused list. if (usedStepTypes.Count != allStepTypeObjs.Count) { for (int i = 0; i < allStepTypeObjs.Count; i++) { IJTXStepType2 stepType = allStepTypeObjs.get_Item(i) as IJTXStepType2; int stepTypeId = stepType.ID; if (!usedStepTypes.ContainsKey(stepTypeId)) { m_unusedStepTypes[stepTypeId] = stepType.Name; } } } return(m_unusedStepTypes.Count); }
/// <summary> /// Find those map documents embedded in the database that are not being /// referenced in any way /// </summary> /// <returns>The total number of orphaned items found</returns> private int UpdateOrphanedMapDocuments() { SortedList <string, int> unusedItems = new SortedList <string, int>(); IJTXDatabase3 wmxDb = this.WmxDatabase; IJTXConfiguration3 configMgr = wmxDb.ConfigurationManager as IJTXConfiguration3; IJTXConfigurationEdit2 configEdit = wmxDb.ConfigurationManager as IJTXConfigurationEdit2; IJTXMapSet allMaps = configMgr.JTXMaps; Dictionary <string, int> allMapNames = new Dictionary <string, int>(); for (int i = 0; i < allMaps.Count; i++) { IJTXMap map = allMaps.get_Item(i); allMapNames[map.Name] = map.ID; } Dictionary <string, int> usedItems = new Dictionary <string, int>(); // Find the map types that are associated with job types IJTXJobTypeSet allJobTypes = configMgr.JobTypes; for (int i = 0; i < allJobTypes.Count; i++) { // TODO: Skip orphaned job types IJTXJobType3 jobType = allJobTypes.get_Item(i) as IJTXJobType3; if (jobType.AOIMap != null) { usedItems[jobType.AOIMap.Name] = jobType.AOIMap.ID; } if (jobType.JobMap != null) { usedItems[jobType.JobMap.Name] = jobType.JobMap.ID; } } // If necessary, find the map types launched by custom steps. Look for // the "/mxd:" argument as an identifier. IJTXStepTypeSet allStepTypes = wmxDb.ConfigurationManager.StepTypes; for (int i = 0; i < allStepTypes.Count; i++) { IJTXStepType2 stepType = allStepTypes.get_Item(i) as IJTXStepType2; // Skip orphaned step types if (m_unusedStepTypes.Keys.Contains(stepType.ID)) { continue; } for (int j = 0; j < stepType.Arguments.Length; j++) { string stepArg = stepType.Arguments[j].ToString(); if (stepArg.StartsWith(C_MAP_DOC_FLAG)) { string suffix = stepArg.Substring(C_MAP_DOC_FLAG.Length); suffix = suffix.Trim(new char[] { '"' }); if (allMapNames.Keys.Contains(suffix)) { usedItems[suffix] = allMapNames[suffix]; } } } } // Add in the map document that's used as the template map document // (if one exists) IJTXConfigurationProperties configProps = this.WmxDatabase.ConfigurationManager as IJTXConfigurationProperties; string mapIdStr = configProps.GetProperty(Constants.JTX_PROPERTY_MAPVIEW_MAP_GUID); if (mapIdStr != null && !mapIdStr.Equals(string.Empty)) { for (int i = 0; i < allMaps.Count; i++) { IJTXMap tempMap = allMaps.get_Item(i); IJTXIdentifier tempMapId = tempMap as IJTXIdentifier; if (tempMapId.GUID.Equals(mapIdStr)) { usedItems[tempMap.Name] = tempMap.ID; break; } } } // Loop over all the map documents in the DB, looking for anything // that we didn't identify as "in use" foreach (string name in allMapNames.Keys) { if (!usedItems.ContainsKey(name)) { m_unusedMapDocs[name] = allMapNames[name]; } } return(m_unusedMapDocs.Count); }