/// <summary> /// Returns a generic RmResource object from the getResponse object. /// </summary> /// <param name="getResponse">The get response from the server.</param> /// <returns>The RmResource object with the attributes returned in getResponse.</returns> public RmResource CreateResource(GetResponse getResponse) { if (getResponse == null) { throw new ArgumentNullException("getResponse"); } if (getResponse.BaseObjectSearchResponse == null) { throw new ArgumentNullException("getResponse.BaseObjectSearchResponse"); } lock (getResponse) { // look ahead for the type String objectType = null; foreach (PartialAttributeType partialAttribute in getResponse.BaseObjectSearchResponse.PartialAttributes) { if (partialAttribute.Values.Count > 0) { String localName = partialAttribute.Values[0].LocalName; if (String.IsNullOrEmpty(localName)) { continue; } if (localName.Equals(ObjectType)) { objectType = partialAttribute.Values[0].InnerText; break; } } } if (objectType == null) { objectType = string.Empty; } RmResource rmResource = this.resourceTypeFactory.CreateResource(objectType); // fill in the attribute values foreach (PartialAttributeType partialAttribute in getResponse.BaseObjectSearchResponse.PartialAttributes) { RmAttributeName attributeName = null; RmAttributeValue newAttribute = null; if (partialAttribute.Values.Count > 0) { String localName = partialAttribute.Values[0].LocalName; if (String.IsNullOrEmpty(localName)) { continue; } else { attributeName = new RmAttributeName(localName); } } else { continue; } if (rmResource.TryGetValue(attributeName, out newAttribute) == false) { newAttribute = CreateRmAttributeValue(attributeName); // PATCHED: the following line was missing rmResource[attributeName] = newAttribute; } // add values to the typed list foreach (XmlNode value in partialAttribute.Values) { IComparable newValue = this.ConstructAttributeValue(attributeName, value.InnerText); if (base.IsMultiValued(attributeName) == false) newAttribute.Values.Clear(); if (attributeName.Name.Equals(ObjectType) || attributeName.Name.Equals(ObjectID)) newAttribute.Values.Clear(); newAttribute.Values.Add(newValue); } } return rmResource; } }