private void CalculateDiffForMas(IMa maComplete, IMa maSubset, Dictionary <string, List <string> > diff) { Dictionary <string, IAsma> childAsmasOfSubset = new Dictionary <string, IAsma>(); foreach (IAsma childAsmaOfSubset in maSubset.Asmas) { childAsmasOfSubset.Add(childAsmaOfSubset.Name, childAsmaOfSubset); } foreach (IAsma childAsmaOfComplete in maComplete.Asmas) { if (childAsmasOfSubset.ContainsKey(childAsmaOfComplete.Name)) { BieAggregator bieAggregatorOfComplete = childAsmaOfComplete.AssociatedBieAggregator; if (bieAggregatorOfComplete.IsMa) { CalculateDiffForMas(bieAggregatorOfComplete.Ma, childAsmasOfSubset[childAsmaOfComplete.Name].AssociatedBieAggregator.Ma, diff); } else if (bieAggregatorOfComplete.IsAbie) { CalculateDiffForAbie(bieAggregatorOfComplete.Abie, childAsmasOfSubset[childAsmaOfComplete.Name].AssociatedBieAggregator.Abie, diff); } } else { // den subtree welcher am asma haengt entfernen } } }
private void Compile(IDocLibrary docLibrary) { IMa documentRoot = docLibrary.DocumentRoot; IAsma asma = documentRoot.Asmas.FirstOrDefault(); BieAggregator bieAggregator = asma.AssociatedBieAggregator; if (bieAggregator.IsMa) { CompileXsdTypesFromMa(bieAggregator.Ma); } else if (bieAggregator.IsAbie) { CompileXsdTypesFromAbie(bieAggregator.Abie); } else { throw new Exception("The ASMA " + asma.Name + " of the Document Root Element " + documentRoot.Name + " neither aggregates a MA nor an ABIE."); } }
private void CompileXsdTypesFromMa(IMa ma) { if (!alreadyCompiledTypes.Contains(ma.Id)) { alreadyCompiledTypes.Add(ma.Id); XsdType xsdType = AddXsdType(ma.Name); foreach (IAsma asma in ma.Asmas) { BieAggregator bieAggregator = asma.AssociatedBieAggregator; if (bieAggregator.IsMa) { xsdType.AddChild(asma.Name); CompileXsdTypesFromMa(bieAggregator.Ma); } else if (bieAggregator.IsAbie) { //if (bieAggregator.Name == "PaymentConditionsType_PaymentTerms") //{ // int y = 1; //} // BUG FIX: xsdType.AddChild(asma.Name); // In case that trough the ASMA aggregated element is an ABIE, // then the ASMA is not an actual complex element of the MA's // complex type. CompileXsdTypesFromAbie(bieAggregator.Abie); } else { throw new Exception("The ASMA " + asma.Name + " of the MA " + ma.Name + " neither aggregates a MA nor an ABIE."); } } } }