Esempio n. 1
0
        void list(out QLList QLList)
        {
            QLList = new QLList();
            Expect(4);
            QLPart QLPart;

            part(out QLPart);
            QLList.Add(QLPart);
            while (la.kind == 11)
            {
                Get();
                part(out QLPart);
                QLList.Add(QLPart);
            }
            Expect(5);
        }
Esempio n. 2
0
        public void SetInversePropertyVal(QLEntity entity, string propertyName, QLEntityId qlEntityId, bool deleteOld)
        {
            var index = repository.InversePropertyIndex(entity.ClassName, propertyName);

            var part = entity.QlInverseList.List[index];

            if (deleteOld || (part.QLEntityId == null && part.QLList == null))
            {
                entity.QlInverseList.List[index] = new QLPart()
                {
                    QLEntityId = qlEntityId
                }
            }
            ;
            else
            {
                if (part.QLEntityId != null)
                {
                    var list = new QLList();
                    list.Add(new QLPart()
                    {
                        QLEntityId = part.QLEntityId
                    });
                    list.Add(new QLPart()
                    {
                        QLEntityId = qlEntityId
                    });

                    part.QLEntityId = null;
                    part.QLList     = list;
                }
                else
                {
                    part.QLList.Add(new QLPart()
                    {
                        QLEntityId = qlEntityId
                    });
                }
            }
        }
Esempio n. 3
0
        public void SetInverseValues(QLEntity entity, QLList list, int level, int propIndex, Dictionary <int, QLEntity> idToEntity)
        {
            var className = entity.ClassName;

            if (classesToSkipInverse.Contains(className)) //has list of lists and no inverse attributes
            {
                return;
            }

            for (int i = 0; i < list.List.Count; i++)
            {
                var part             = list.List[i];
                var currentPropIndex = level == 0 ? i : propIndex;

                //class lookup
                var propName = repository.DirectProperty(className, currentPropIndex).PropName;

                List <Tuple <string, string, string> > invertedAttribute = null;
                if (invertedAttributeReversed.ContainsKey(className))
                {
                    invertedAttribute = invertedAttributeReversed[className].ToList();
                }

                if (part.QLEntityId != null)
                {
                    var referencedWrapper = idToEntity[part.QLEntityId.Id];

                    //direct attributes
                    if (string.IsNullOrEmpty(part.QLEntityId.ConcreteType))
                    {
                        part.QLEntityId.ConcreteType = referencedWrapper.ClassName;
                    }

                    var inverseAttributeTarget =
                        invertedAttribute?.FirstOrDefault(a => a.Item1 == propName && a.Item3 == referencedWrapper.ClassName);

                    if (inverseAttributeTarget != null)
                    {
                        var inverseList  = referencedWrapper.QlInverseList;
                        var inverseCount = repository.InversePropertyCount(referencedWrapper.ClassName);
                        if (inverseList == null)
                        {
                            var ifcList = new QLList();
                            for (int j = 0; j < inverseCount; j++)
                            {
                                ifcList.Add(new QLPart());
                            }

                            referencedWrapper.QlInverseList = ifcList;
                        }
                        SetInversePropertyVal(referencedWrapper, inverseAttributeTarget.Item2, entity.QlEntityId, false);
                    }
                }

                if (part.QLList != null)
                {
                    propIndex = i;
                    SetInverseValues(entity, part.QLList, level + 1, propIndex, idToEntity);
                }
            }
        }