private List<XElement> CreateConceptSchemeMap(GroupVM group, List<StudyUnitVM> studyUnits) { //ConceptとConceptSchemeの比較関係をタグに保存するだけなのだが親子関係を考慮しないといけないので複雑な処理となる。 //処理の流れは //・Conceptの比較結果を取得。 //・Conceptの比較結果を、同じ対応を持つConceptSchemeの比較結果ごとにまとめる //・ConceptSchemeの比較結果を取得。 //・ConceptSchemeの比較結果を書き出す。対応したConceptの比較結果のリストが存在する場合これを書き出す。 //・残りのConceptの比較結果を書き出す(ConceptSchemeレベルでは比較結果が存在しないがConceptでは違う場合がありうる)。 //Conceptの対応関係を取得する List<CompareItem> conceptItems = DoCreateCompareItem(group, studyUnits, group.GroupModel.ConceptCompareTable); Dictionary<string, List<CompareItem>> conceptMap = new Dictionary<string,List<CompareItem>>(); //同じ比較元、比較先のConceptScheme(親)をもつものは同じタグにぶら下げる必要があるためconceptMapを使って振り分けていく。 foreach (CompareItem item in conceptItems) { //親をユニークに識別するためのPaentIdはConcept_XXXXX_YYYYYという形式。 item.ParentIdPrefix = "Concept"; item.ParentSourceId = FindParentConceptSchemeIdByConceptId(studyUnits, item.SourceId); item.ParentTargetId = FindParentConceptSchemeIdByConceptId(studyUnits, item.TargetId); List<CompareItem> list = null; if (conceptMap.ContainsKey(item.ParentId)) { list = conceptMap[item.ParentId]; } else { list = new List<CompareItem>(); conceptMap[item.ParentId] = list; } list.Add(item); } //ConceptSchemeの対応を取得する List<CompareItem> conceptSchemeItems = DoCreateCompareItem(group, studyUnits, group.GroupModel.ConceptSchemeCompareTable); List<XElement> elements = new List<XElement>(); foreach (CompareItem item in conceptSchemeItems) { XElement element = CreateConceptSchemeElement(item, "Concept"); elements.Add(element); if (conceptMap.ContainsKey(item.Id)) { List<CompareItem> concepts = conceptMap[item.Id]; foreach (CompareItem childItem in concepts) { XElement childElement = CreateItemElement(childItem); element.Add(childElement); } conceptMap.Remove(item.Id); } } //残りのConceptMapを保存する。 foreach (KeyValuePair<string, List<CompareItem>> pair in conceptMap) { List<CompareItem> concepts = pair.Value; CompareItem first = concepts.First(); CompareItem parentItem = new CompareItem( first.ParentSourceId, first.ParentTargetId, Resources.GenerateForCmpareConcept, "0"); //Concept比較のために生成 XElement element = CreateConceptSchemeElement(parentItem, "Variable"); elements.Add(element); foreach (CompareItem childItem in concepts) { XElement childElement = CreateItemElement(childItem); element.Add(childElement); } } return elements; }
private XElement CreateItemElement(CompareItem item) { XElement childElement = new XElement(cm + TAG_ITEM_MAP, new XElement(cm + TAG_SOURCE_ITEM, item.SourceItemId), new XElement(cm + TAG_TARGET_ITEM, item.TargetItemId), new XElement(cm + TAG_CORRESPONDENCE, new XElement(cm + TAG_COMMONALITY, item.Memo), new XElement(cm + TAG_DIFFERENCE, item.Memo), new XElement(cm + TAG_COMMONALITY_WEIGHT, item.Weight) )); return childElement; }
private XElement CreateConceptSchemeElement(CompareItem item, string prefix) { //cm:ConceptMap XElement element = new XElement(cm + TAG_CONCEPT_MAP, CreateIDAttribute(item.IdWithPrefix(prefix)), CreateReferenceID(cm + TAG_SOURCE_SCHEME_REFERENCE, item.SourceId.Id), CreateReferenceID(cm + TAG_TARGET_SCHEME_REFERENCE, item.TargetId.Id), new XElement(cm + TAG_CORRESPONDENCE, //Correspondence new XElement(cm + TAG_COMMONALITY, item.Memo), //Commonality+ new XElement(cm + TAG_DIFFERENCE, item.Memo), //Difference+ new XElement(cm + TAG_COMMONALITY_WEIGHT, item.Weight) //CommonalityWeight? )); return element; }
private List<XElement> CreateVariableMap(GroupVM group, List<StudyUnitVM> studyUnits) { List<CompareItem> variableItems = DoCreateCompareItem(group, studyUnits, group.GroupModel.VariableCompareTable); Dictionary<string, List<CompareItem>> variableMap = new Dictionary<string, List<CompareItem>>(); foreach (CompareItem item in variableItems) { item.ParentSourceId = FindParentConceptSchemeIdByVariableId(studyUnits, item.SourceId); item.ParentTargetId = FindParentConceptSchemeIdByVariableId(studyUnits, item.TargetId); List<CompareItem> list = null; if (variableMap.ContainsKey(item.ParentId)) { list = variableMap[item.ParentId]; } if (list == null) { list = new List<CompareItem>(); variableMap[item.ParentId] = list; } list.Add(item); } List<XElement> elements = new List<XElement>(); foreach (KeyValuePair<string, List<CompareItem>> pair in variableMap) { List<CompareItem> variables = pair.Value; CompareItem first = variables.First(); CompareItem parentItem = new CompareItem( first.ParentSourceId, first.ParentTargetId, Resources.GenerateForCmpareVariable, "0"); //Variable比較のために生成 XElement element = CreateVariableElement(parentItem); elements.Add(element); foreach (CompareItem childItem in variables) { XElement childElement = CreateItemElement(childItem); element.Add(childElement); } } return elements; }
private XElement CreateVariableElement(CompareItem item) { XElement element = new XElement(cm + TAG_VARIABLE_MAP, CreateIDAttribute(item.Id), CreateReferenceID(cm + TAG_SOURCE_SCHEME_REFERENCE, item.SourceId.Id), CreateReferenceID(cm + TAG_TARGET_SCHEME_REFERENCE, item.TargetId.Id), new XElement(cm + TAG_CORRESPONDENCE, new XElement(cm + TAG_COMMONALITY, item.Memo), new XElement(cm + TAG_DIFFERENCE, item.Memo) )); return element; }
private static CompareItem CreateVariableCompareItem(XElement variableMapElem, List<StudyUnit> studyUnits) { string rawVariableId = (string)variableMapElem.Element(cm + TAG_SOURCE_ITEM); if (rawVariableId == null) { return null; } string sourceVariableId = CompareItem.ToOrigId(rawVariableId); StudyUnit sourceStudyUnit = StudyUnit.FindByVariableId(studyUnits, sourceVariableId); if (sourceStudyUnit == null) { return null; } Variable sourceVariable = sourceStudyUnit.FindVariable(sourceVariableId); string rawTargetVariableId = (string)variableMapElem.Element(cm + TAG_TARGET_ITEM); if (rawTargetVariableId == null) { return null; } string targetVariableId = CompareItem.ToOrigId(rawTargetVariableId); StudyUnit targetStudyUnit = StudyUnit.FindByVariableId(studyUnits, targetVariableId); if (targetStudyUnit == null) { return null; } Variable targetVariable = targetStudyUnit.FindVariable(targetVariableId); if (targetVariable == null) { return null; } XElement correspondenceElem = variableMapElem.Element(cm + TAG_CORRESPONDENCE); if (correspondenceElem == null) { return null; } string weightStr = (string)correspondenceElem.Element(cm + TAG_COMMONALITY_WEIGHT); if (string.IsNullOrEmpty(weightStr)) { return null; } double weight = 0; if (!double.TryParse(weightStr, out weight)) { return null; } bool validWeight = weight > 0; if (!validWeight) { return null; } string memo = (string)correspondenceElem.Element(cm + TAG_COMMONALITY); GroupId sourceId = new GroupId(sourceStudyUnit.Id, sourceVariableId); GroupId targetId = new GroupId(targetStudyUnit.Id, targetVariableId); CompareItem compareItem = new CompareItem(sourceId, targetId, memo, weightStr); compareItem.SourceTitle = sourceVariable.Title; compareItem.TargetTitle = targetVariable.Title; return compareItem; }
private static CompareItem CreateConceptSchemeCompareItem(XElement conceptMapElem, List<StudyUnit> studyUnits) { string sourceSchemeId = ReadReferenceID(conceptMapElem, cm + TAG_SOURCE_SCHEME_REFERENCE); if (sourceSchemeId == null) { return null; } StudyUnit sourceStudyUnit = StudyUnit.FindByConceptSchemeId(studyUnits, sourceSchemeId); if (sourceStudyUnit == null) { return null; } ConceptScheme sourceConceptScheme = sourceStudyUnit.FindConceptScheme(sourceSchemeId); string targetSchemeId = ReadReferenceID(conceptMapElem, cm + TAG_TARGET_SCHEME_REFERENCE); if (targetSchemeId == null) { return null; } StudyUnit targetStudyUnit = StudyUnit.FindByConceptSchemeId(studyUnits, targetSchemeId); if (targetStudyUnit == null) { return null; } ConceptScheme targetConceptScheme = targetStudyUnit.FindConceptScheme(targetSchemeId); if (targetConceptScheme == null) { return null; } XElement correspondenceElem = conceptMapElem.Element(cm + TAG_CORRESPONDENCE); if (correspondenceElem == null) { return null; } string weightStr = (string)correspondenceElem.Element(cm + TAG_COMMONALITY_WEIGHT); if (string.IsNullOrEmpty(weightStr)) { return null; } double weight = 0; if (!double.TryParse(weightStr, out weight)) { return null; } bool validWeight = weight > 0; if (!validWeight) { return null; } string memo = (string)correspondenceElem.Element(cm + TAG_COMMONALITY); GroupId sourceId = new GroupId(sourceStudyUnit.Id, sourceSchemeId); GroupId targetId = new GroupId(targetStudyUnit.Id, targetSchemeId); CompareItem compareItem = new CompareItem(sourceId, targetId, memo, weightStr); compareItem.SourceTitle = sourceConceptScheme.Title; compareItem.TargetTitle = targetConceptScheme.Title; return compareItem; }