Пример #1
0
        /// <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
        }
Пример #2
0
        /// <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));
        }
Пример #3
0
        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"));
        }
Пример #4
0
        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));
        }
Пример #5
0
        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));
        }
Пример #6
0
        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));
        }