private static void SubClassProfiles(GenDataDef genDataDef, int classId, GenContainerFragmentBase profile, GenContainerFragmentBase parentContainer, GenSegment classProfile) { foreach (var subClass in genDataDef.GetClassSubClasses(classId)) { if (String.IsNullOrEmpty(subClass.SubClass.Reference)) { ClassProfile(genDataDef, subClass.SubClass.ClassId, classProfile ?? profile, parentContainer); } else { var refClass = new GenSegment(new GenSegmentParams(genDataDef, parentContainer, subClass.SubClass.Name, GenCardinality.Reference)); (classProfile ?? profile).Body.Add(refClass); } } }
private static void ClassProfile(GenDataDef genDataDef, int classId, GenContainerFragmentBase profile, GenContainerFragmentBase parentContainer) { GenSegment classProfile = null; if (classId != 0) { GenTextBlock textBlock = null; var sb = new StringBuilder(); classProfile = new GenSegment( new GenSegmentParams(genDataDef, parentContainer, genDataDef.GetClassName(classId), genDataDef.GetClassIsInherited(classId) ? GenCardinality.Inheritance : GenCardinality.All)); if (!genDataDef.GetClassIsAbstract(classId)) { sb.Append(genDataDef.GetClassName(classId)); } if (genDataDef.GetClassProperties(classId).Count > 0 && !genDataDef.GetClassDef(classId).IsAbstract) { var j = 0; if ( String.Compare(genDataDef.GetClassProperties(classId)[0], "Name", StringComparison.OrdinalIgnoreCase) == 0) { sb.Append("="); AddText(genDataDef, ref textBlock, classProfile, sb); AddText(genDataDef, ref textBlock, classProfile, genDataDef.GetId(genDataDef.GetClassName(classId), "Name")); j = 1; } else { AddText(genDataDef, ref textBlock, classProfile, sb); } if (genDataDef.GetClassProperties(classId).Count > j) { AddText(genDataDef, ref textBlock, classProfile, "["); textBlock = null; var sep = ""; for (var i = j; i < genDataDef.GetClassProperties(classId).Count; i++) { var condExists = new GenCondition(new GenConditionParams(genDataDef, classProfile, new ConditionParameters { GenComparison = GenComparison.Exists, Var1 = genDataDef.GetId(genDataDef.GetClassName(classId), genDataDef.GetClassProperties(classId)[i]) })); condExists.Body.Add( new GenTextFragment(new GenTextFragmentParams(genDataDef, condExists, sep + genDataDef.GetClassProperties(classId)[i]))); var condNotTrue = new GenCondition(new GenConditionParams(genDataDef, condExists, new ConditionParameters { GenComparison = GenComparison.Ne, Var1 = genDataDef.GetId(genDataDef.GetClassName(classId), genDataDef.GetClassProperties(classId)[i]), Lit = "True", UseLit = true })); condNotTrue.Body.Add( new GenTextFragment(new GenTextFragmentParams(genDataDef, condNotTrue, "="))); var functionQuote = new GenFunction(new GenFunctionParams(genDataDef, condNotTrue, "StringOrName")); var param = new GenBlock(new GenFragmentParams(genDataDef, functionQuote)); param.Body.Add( new GenPlaceholderFragment(new GenPlaceholderFragmentParams(genDataDef, param, genDataDef.GetId(genDataDef.GetClassName(classId), genDataDef.GetClassProperties(classId)[i])))); functionQuote.Body.Add(param); condNotTrue.Body.Add(functionQuote); condExists.Body.Add(condNotTrue); classProfile.Body.Add(condExists); sep = ","; } AddText(genDataDef, ref textBlock, classProfile, "]\r\n"); } else { AddText(genDataDef, ref textBlock, classProfile, "\r\n"); } } profile.Body.Add(classProfile); } foreach (var inheritor in genDataDef.GetClassInheritors(classId)) { ClassProfile(genDataDef, inheritor.ClassId, classProfile ?? profile, classProfile); } if (!genDataDef.GetClassIsAbstract(classId)) { SubClassProfiles(genDataDef, classId, profile, classProfile ?? profile, classProfile); } if (genDataDef.GetClassIsInherited(classId)) { SubClassProfiles(genDataDef, genDataDef.GetClassParent(classId).ClassId, profile, classProfile ?? profile, classProfile); } }