Esempio n. 1
0
 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);
         }
     }
 }
Esempio n. 2
0
        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);
            }
        }