/// <summary> /// Update parameters to the database /// </summary> /// <param name="paramValues"></param> /// <returns></returns> public async Task <ResponseMessage> UpdateParametersAsync(WindowsIdentity callerIdentity, string[] paramNames, string[] paramValues) { ResponseMessage response = BuildParamValueDict(paramNames, paramValues); if (!response.IsSuccessful) { return(response); } IDictionary <string, List <Parameter> > exportParamDict = response.Data as IDictionary <string, List <Parameter> >; foreach (KeyValuePair <string, List <Parameter> > exportParamEntry in exportParamDict) { if (!CompIdNameDict.ContainsKey(exportParamEntry.Key)) { return(new ResponseMessage(false, "No information about component '" + exportParamEntry.Key + "' was found")); } if (!LoadedCompDict.ContainsKey(exportParamEntry.Key)) { response = await UpdateLinkedComponentParams(callerIdentity, exportParamEntry.Key, exportParamEntry.Value); } else { response = await UpdateLoadedComponentParams(callerIdentity, exportParamEntry.Key, exportParamEntry.Value); } if (!response.IsSuccessful) { return(response); } } return(new ResponseMessage(true, null)); // update succeeded }
/// <summary> /// Fetch data from the database /// note that the import parameters must be ordered so that parameters that belong to the same component are grouped together /// </summary> public async Task <ResponseMessage> LoadParametersAsync(WindowsIdentity callerIdentity, string[] importParams, string[] searchConstraints) { ResponseMessage response = await LoadImportParamsFromSearchComponents(callerIdentity, importParams, searchConstraints); if (!response.IsSuccessful) { return(response); } IDictionary <string, List <Parameter> > impParamDict = response.Data as IDictionary <string, List <Parameter> >; //Load these components from the databases List <object> result = new List <object>(); foreach (KeyValuePair <string, List <Parameter> > impParam in impParamDict) { if (!LoadedCompDict.ContainsKey(impParam.Key)) { response = await LoadParamsFromLinkedComponents(callerIdentity, impParam.Key, impParam.Value); if (!response.IsSuccessful) { return(response); } } //add parameters to the result result.AddRange(impParam.Value.Select(param => param.Value)); } return(new ResponseMessage(true, result)); }
private ResponseMessage DeriveCompIdFromLinkedComponent(string dBAndCompNames) { if (DataLinksDict.ContainsKey(dBAndCompNames)) { //get the component name this is linked to this component string linkedComponentName = DataLinksDict[dBAndCompNames]; //check if the linked component was already loaded if (LoadedCompDict.ContainsKey(linkedComponentName)) { //get the linked component id value //string linkedComponentIdValue = LoadedCompDict[linkedComponentName].GetIdValue(); //get the component id value that is associated to the linked component id's value ResponseMessage response = Common.SplitDBAndCompNames(dBAndCompNames); if (!response.IsSuccessful) { return(response); } string[] split = response.Data as string[]; List <string> componentIdValues; if (split[0].ToLower().CompareTo("cdp") == 0) { //componentIdValues = ProjectLinkProcessor.GetCdpProjectId(linkedComponentIdValue); componentIdValues = new List <string> { "36005" }; //hard-code this for testing purpose } else if (split[0].ToLower().CompareTo("hdb") == 0) { //try //{ // int cdpComponentId = Int32.Parse(linkedComponentIdValue); // componentIdValues = ProjectLinkProcessor.GetHdbProjectId(cdpComponentId); //} //catch (Exception e) //{ // return new ResponseMessage(false, e.Message); //} componentIdValues = new List <string> { "fc6b1c42-865c-472f-ae59-000364028f43" }; //hard-code this value for testing purpose } else { return(new ResponseMessage(false, "Database '" + split[0] + "' is unknown")); } if (componentIdValues == null || componentIdValues.Count == 0) { return(new ResponseMessage(false, "Component '" + linkedComponentName + "' and '" + dBAndCompNames + "' are not linked to each other")); } else if (componentIdValues.Count > 1) { return(new ResponseMessage(false, "Multiple components '" + dBAndCompNames + "' are linked to the same component '" + linkedComponentName + "'")); } return(new ResponseMessage(true, componentIdValues[0])); } } return(new ResponseMessage(false, "Component '" + dBAndCompNames + "' is not linked to any component in the search")); }
private async Task <ResponseMessage> LoadParamsFromLinkedComponents(WindowsIdentity callerIdentity, string dBAndCompNames, List <Parameter> paramList) { ResponseMessage response = await LoadLinkedComponent(callerIdentity, dBAndCompNames, paramList); if (!response.IsSuccessful) { return(response); } Component component = response.Data as Component; LoadedCompDict.Add(dBAndCompNames, component); return(new ResponseMessage(true, component)); }
private async Task <ResponseMessage> LoadImportParamsFromSearchComponents(WindowsIdentity callerIdentity, string[] importParams, string[] searchConstraints) { ResponseMessage response = BuildImportParamDict(importParams); if (!response.IsSuccessful) { return(response); } IDictionary <string, List <Parameter> > impParamDict = response.Data as IDictionary <string, List <Parameter> >; IDictionary <string, Constraint> searchConstraintsDict = BuildSearchConstraintsDict(searchConstraints); //get all components w.r.t the search criteria LoadedCompDict.Clear(); response = await LoadSearchComponents(callerIdentity, impParamDict, searchConstraintsDict); if (!response.IsSuccessful) { return(response); } return(new ResponseMessage(true, impParamDict)); }
private async Task <ResponseMessage> LoadSearchComponents(WindowsIdentity callerIdentity, IDictionary <string, List <Parameter> > impParamDict, IDictionary <string, Constraint> searchConstraintsDict) { foreach (KeyValuePair <string, Constraint> searchComp in searchConstraintsDict) { string dBAndCompName = searchComp.Key; List <Parameter> impParams = impParamDict.ContainsKey(dBAndCompName) ? impParamDict[dBAndCompName] : null; ResponseMessage response = CreateComponent(dBAndCompName, searchComp.Value); if (!response.IsSuccessful) { return(response); } Component component = response.Data as Component; var paramPaths = impParams?.Select(param => param.PropPath); response = await WindowsIdentity.RunImpersonated(callerIdentity.AccessToken, async() => await component.LoadParameters(paramPaths, impParams)); if (!response.IsSuccessful) { return(response); } LoadedCompDict.Add(searchComp.Key, component); } return(new ResponseMessage(true, null)); }