/// <summary> /// The weather list is used, so convert it to a custom (unowned) list, create a new /// custom field for RnGenericRec elements, and convert any Weather elements to that /// new custom field. /// </summary> private void ConvertWeatherToCustomListAndField(IDomainObjectDTORepository repoDTO) { // Change the Weather list to being unowned. DomainObjectDTO dtoLP = null; foreach (var dto in repoDTO.AllInstancesWithSubclasses("LangProject")) { dtoLP = dto; break; } string sWeatherListGuid = RemoveWeatherConditionsElement(dtoLP).ToLowerInvariant(); repoDTO.Update(dtoLP); DomainObjectDTO dtoWeatherList = null; foreach (var dto in repoDTO.AllInstancesWithSubclasses("CmPossibilityList")) { if (dto.Guid.ToLowerInvariant() == sWeatherListGuid) { dtoWeatherList = dto; break; } } dtoWeatherList.Xml = RemoveOwnerGuid(dtoWeatherList.Xml); repoDTO.Update(dtoWeatherList); // Create the custom field. string fieldName = "Weather"; while (repoDTO.IsFieldNameUsed("RnGenericRec", fieldName)) { fieldName = fieldName + "A"; } repoDTO.CreateCustomField("RnGenericRec", fieldName, SIL.CoreImpl.CellarPropertyType.ReferenceCollection, CmPossibilityTags.kClassId, "originally a standard part of Data Notebook records", WritingSystemServices.kwsAnals, new Guid(sWeatherListGuid)); string customStart = String.Format("<Custom name=\"{0}\">", fieldName); // Remove any empty Weather elements in the RnGenericRec objects, and convert // nonempty ones to custom elements. foreach (var dto in repoDTO.AllInstancesWithSubclasses("RnGenericRec")) { string sXml = dto.Xml; int idx = sXml.IndexOf("<Weather"); if (idx > 0) { string sXmlT = RemoveEmptyWeather(sXml, idx); if (sXmlT == sXml) { sXmlT = sXml.Replace("<Weather>", customStart); sXmlT = sXmlT.Replace("</Weather>", "</Custom>"); } dto.Xml = sXmlT; repoDTO.Update(dto); } } }
/// <summary> /// The weather list is used, so convert it to a custom (unowned) list, create a new /// custom field for RnGenericRec elements, and convert any Weather elements to that /// new custom field. /// </summary> private void ConvertWeatherToCustomListAndField(IDomainObjectDTORepository repoDTO) { // Change the Weather list to being unowned. DomainObjectDTO dtoLP = null; foreach (var dto in repoDTO.AllInstancesWithSubclasses("LangProject")) { dtoLP = dto; break; } string sWeatherListGuid = RemoveWeatherConditionsElement(dtoLP).ToLowerInvariant(); repoDTO.Update(dtoLP); DomainObjectDTO dtoWeatherList = null; foreach (var dto in repoDTO.AllInstancesWithSubclasses("CmPossibilityList")) { if (dto.Guid.ToLowerInvariant() == sWeatherListGuid) { dtoWeatherList = dto; break; } } dtoWeatherList.Xml = RemoveOwnerGuid(dtoWeatherList.Xml); repoDTO.Update(dtoWeatherList); // Create the custom field. string fieldName = "Weather"; while (repoDTO.IsFieldNameUsed("RnGenericRec", fieldName)) fieldName = fieldName + "A"; repoDTO.CreateCustomField("RnGenericRec", fieldName, SIL.CoreImpl.CellarPropertyType.ReferenceCollection, CmPossibilityTags.kClassId, "originally a standard part of Data Notebook records", WritingSystemServices.kwsAnals, new Guid(sWeatherListGuid)); string customStart = String.Format("<Custom name=\"{0}\">", fieldName); // Remove any empty Weather elements in the RnGenericRec objects, and convert // nonempty ones to custom elements. foreach (var dto in repoDTO.AllInstancesWithSubclasses("RnGenericRec")) { string sXml = dto.Xml; int idx = sXml.IndexOf("<Weather"); if (idx > 0) { string sXmlT = RemoveEmptyWeather(sXml, idx); if (sXmlT == sXml) { sXmlT = sXml.Replace("<Weather>", customStart); sXmlT = sXmlT.Replace("</Weather>", "</Custom>"); } dto.Xml = sXmlT; repoDTO.Update(dto); } } }