예제 #1
0
        public BookResult readControl([FromBody] CompositeObject compositeObject)
        {
            Book book = compositeObject.book;
            User user = compositeObject.user;

            return(bookOperation.readControl(user, book));
        }
        public CompositeObject Find(Guid id)
        {
            CompositeObject cachedObject = null;

            Trace.WriteLine("InMemoryCompositeObjectCache.Find: locking localStorage");

            lock (localStorage)
            {
                if (localStorage.ContainsKey(id))
                {
                    cachedObject = localStorage[id];
                }
            }

            Trace.WriteLine("InMemoryCompositeObjectCache.Find: localStorage lock released");

            if (cachedObject != null)
            {
                return(cachedObject);
            }

            object lockHandle;

            cachedObject = FindAndLock(id, lockTimespan, out lockHandle);
            Unlock(id, lockHandle);
            return(cachedObject);
        }
예제 #3
0
파일: Style.cs 프로젝트: FlaviusHouk/DotX
 public void Detach(CompositeObject obj)
 {
     foreach (var setter in Setters)
     {
         setter.UnsetValue(obj);
     }
 }
예제 #4
0
        public UserOperationResult readListUpdate([FromBody] CompositeObject compositeObject)
        {
            User user = compositeObject.user;
            Book book = compositeObject.book;

            return(userOperation.readListUpdate(user, book));
        }
예제 #5
0
        public override void Changed <T>(CompositeObject obj, T oldVal, T newVal)
        {
            if (EqualityComparer <T> .Default.Equals(oldVal, newVal))
            {
                return;
            }

            if (obj is not Visual v)
            {
                throw new InvalidOperationException();
            }

            if (Options.HasFlag(PropertyOptions.AffectsMeaure))
            {
                v.InvalidateMeasure();
            }

            if (Options.HasFlag(PropertyOptions.AffectsArrange))
            {
                v.InvalidateArrange();
            }

            if (Options.HasFlag(PropertyOptions.AffectsRender))
            {
                v.Invalidate();
            }

            if (Options.HasFlag(PropertyOptions.AffectsParentRender))
            {
                v.VisualParent?.Invalidate();
            }

            base.Changed(obj, oldVal, newVal);
        }
예제 #6
0
        public BookResult incrementLikeCount([FromBody] CompositeObject compositeObject)
        {
            Book book = compositeObject.book;
            User user = compositeObject.user;

            return(bookOperation.incrementLikeCount(book, user));
        }
예제 #7
0
        public void NotSupportedValueException()
        {
            CompositeObject model = new CompositeObject(new SingleModel("Doe"));

            string json = formatter.Serialize(model);

            Assert.IsNotNull(json);
        }
예제 #8
0
        public void MainTest()
        {
            // Persisting
            using (var session = Domain.OpenSession()) {
                using (var t = session.OpenTransaction()) {
                    var c  = new Container();
                    var co = new CompositeObject();
                    co.Name           = "SomeName";
                    co.Value          = 12d;
                    c.CompositeObject = co;

                    Assert.IsNotNull(c.CompositeObject);
                    Assert.IsNotNull(c.CompositeObjectHandler);

                    Assert.AreEqual(co.Name, c.CompositeObject.Name);
                    Assert.AreEqual(co.Value, c.CompositeObject.Value);

                    Assert.AreEqual(co.Name, c.CompositeObjectHandler.Name);
                    Assert.AreEqual(co.Value, c.CompositeObjectHandler.Value);

                    t.Complete();
                }
            }

            // Fetching
            using (var session = Domain.OpenSession()) {
                using (var t = session.OpenTransaction()) {
                    var c = session.Query.All <Container>().First();

                    Assert.IsNotNull(c.CompositeObject);
                    Assert.IsNotNull(c.CompositeObjectHandler);

                    var co = c.CompositeObject;

                    Assert.AreEqual(co.Name, c.CompositeObject.Name);
                    Assert.AreEqual(co.Value, c.CompositeObject.Value);

                    Assert.AreEqual(co.Name, c.CompositeObjectHandler.Name);
                    Assert.AreEqual(co.Value, c.CompositeObjectHandler.Value);

                    // Rollback
                }
            }

            // Querying
            using (var session = Domain.OpenSession()) {
                using (var t = session.OpenTransaction()) {
                    var c = session.Query.All <Container>().Where(i => i.CompositeObject.Name == "SomeName").FirstOrDefault();
                    Assert.IsNotNull(c);
                    Assert.AreEqual("SomeName", c.CompositeObject.Name);

                    // Rollback
                }
            }
        }
        public void Should_return_0_for_both_member_is_null()
        {
            var instance0 = new CompositeObject {
                Value = null
            };
            var instance1 = new CompositeObject {
                Value = null
            };

            instance0.CompareTo(instance1).Should().Be(0);
        }
        public void Should_return_1_for_other_member_is_null()
        {
            var instance0 = new CompositeObject {
                Value = new CompositeChildValue {
                    Value1 = 1
                }
            };
            var instance1 = new CompositeObject {
                Value = null
            };

            instance0.CompareTo(instance1).Should().Be(1);
        }
        public void Should_return_minus1_for_self_member_is_null()
        {
            var instance0 = new CompositeObject {
                Value = null
            };
            var instance1 = new CompositeObject {
                Value = new CompositeChildValue {
                    Value1 = 2
                }
            };

            instance0.CompareTo(instance1).Should().Be(-1);
        }
예제 #12
0
        public void UnsetValue(CompositeObject obj)
        {
            if (_wasSet)
            {
                var propToUnset = PropertyManager.Instance.GetProperties(obj.GetType())
                                  .FirstOrDefault(p => p.PropName == Property);

                obj.SetValue(propToUnset, Value);

                _oldValue = CompositeObjectProperty.UnsetValue;

                _wasSet = false;
            }
        }
예제 #13
0
        public bool Matches(CompositeObject obj)
        {
            if (_typeName is not null)
            {
                if (!_classes.Any() || obj is not IStylable stylable)
                {
                    return(obj.GetType().Name == _typeName);
                }

                return(MatchClasses(stylable));
            }

            return(false);
        }
예제 #14
0
        public void CompositeObject_Initialization()
        {
            var compositeObjectId = new Guid("3C7BEEC3-9418-49CF-9B63-6309EB9154AA");
            var changeSetId1      = new Guid("E84DDA60-F418-4F11-91DE-773CEE47B2C8");

            var timeStamp1 = DateTimeOffset.UtcNow.Ticks;
            var dateTime1  = DateTimeOffset.UtcNow.Ticks;
            var compositeObjectAttributeValues1 = new[]
            {
                attributeValueFactory.Create(() => TestCompositeBusinessObjectStatic.Int32Property, CompositeObjectTestData.TestValues.Int32Value),
                attributeValueFactory.Create(() => TestCompositeBusinessObjectStatic.StringProperty, CompositeObjectTestData.TestValues.StringValue)
            };

            var simpleObjectId               = new Guid("25E5692F-2262-4013-B668-15EA40F83A9B");
            var simpleObjectChangeSetId1     = new Guid("89E51585-1FF9-458F-9C9D-E66B3EB1F8EC");
            var simpleObjectAttributeValues1 = new[]
            {
                attributeValueFactory.Create(() => TestCompositeBusinessObjectStatic.Int64Property, CompositeObjectTestData.TestValues.Int64Value),
                attributeValueFactory.Create(() => TestCompositeBusinessObjectStatic.EnumProperty, CompositeObjectTestData.TestValues.EnumValue)
            };

            var simpleObjectChangeSet1 = new CreateSimpleObjectChangeSet(simpleObjectChangeSetId1, simpleObjectId, simpleObjectAttributeValues1, simpleObjectTypeId, null);

            SimpleObjectChangeSet[] simpleObjectChangeSets = { simpleObjectChangeSet1 };

            var changeSet1 = new CreateCompositeObjectChangeSet(compositeObjectId, changeSetId1, timeStamp1, compositeObjectTypeId,
                                                                simpleObjectChangeSets, compositeObjectAttributeValues1, userId, dateTime1);

            var changeSets      = new[] { changeSet1 };
            var compositeObject = new CompositeObject(changeSets, businessObjectDefinitionProvider);

            Assert.AreEqual(compositeObjectTypeId, compositeObject.CompositeObjectTypeId);
            Assert.AreEqual(compositeObjectId, compositeObject.Id);
            Assert.AreEqual(changeSetId1, compositeObject.Revision);
            Assert.AreEqual(new DateTimeOffset(dateTime1, new TimeSpan(0)), compositeObject.LastModified);
            Assert.AreEqual(compositeObjectAttributeValues1.Length, compositeObject.Attributes.Count);
            Assert.AreEqual(CompositeObjectTestData.TestValues.Int32Value, compositeObject.Attribute(() => TestCompositeBusinessObjectStatic.Int32Property));
            Assert.AreEqual(CompositeObjectTestData.TestValues.StringValue, compositeObject.Attribute(() => TestCompositeBusinessObjectStatic.StringProperty));

            Assert.AreEqual(1, compositeObject.SimpleObjects.Count);
            var simpleObject = compositeObject.SimpleObjects[simpleObjectId];

            Assert.AreEqual(simpleObjectTypeId, simpleObject.SimpleObjectTypeId);
            Assert.AreEqual(simpleObjectId, simpleObject.Id);
            Assert.AreEqual(changeSetId1, simpleObject.Revision);
            Assert.AreEqual(simpleObjectAttributeValues1.Length, simpleObject.Attributes.Count);
            Assert.AreEqual(CompositeObjectTestData.TestValues.Int64Value, simpleObject.Attribute(() => TestCompositeBusinessObjectStatic.Int64Property));
            Assert.AreEqual(CompositeObjectTestData.TestValues.EnumValue, simpleObject.Attribute(() => TestCompositeBusinessObjectStatic.EnumProperty));
        }
        public void MemberWiseDeepClone_Test_2()
        {
            //Arrange
            AirlineCompany airCompany = new AirlineCompany("Momola Airlines", 12555, "here_must_be_64base_string_immage", "fhf53dg5525", "aAS23", 12565);
            Administrator  admin      = new Administrator("John", "65df56dfd56f", 7254, airCompany);
            Customer       customer   = new Customer("Nadgad", "Konstantinski", "not a house nor a street", "22333222356", "355-353-530", "image_image_where_are_you", "sdf54sf54sdf", 4587);
            Flight         flight     = new Flight {
                AIRLINECOMPANY_ID = 1, DEPARTURE_TIME = DateTime.Now, DESTINATION_COUNTRY_CODE = 123, ID = 21, IDENTIFIER = "sg546rfgv54fgv54", LANDING_TIME = DateTime.Now.AddDays(5).AddHours(8).AddMinutes(55), ORIGIN_COUNTRY_CODE = 446, REMAINING_TICKETS = 568
            };
            Country country = new Country {
                COUNTRY_NAME = "Bolivia", ID = 658, IDENTIFIER = "fgb52df54dg54dgv", admin = admin
            };

            CheckingObject  checkingObj = new CheckingObject(customer, flight, country);
            CompositeObject original    = new CompositeObject(admin, airCompany, checkingObj);

            checkingObj.composite = original;
            original.checking     = checkingObj;

            //Act
            CompositeObject clonedObject  = original.MemberWiseDeepClone();
            var             deepCloned    = clonedObject;
            var             shallowCloned = original.SimpleMemberWiseClone();

            //Assert
            Assert.IsNotNull(deepCloned);
            Assert.IsFalse(ReferenceEquals(original, deepCloned));
            Assert.That(original.AirCompany == deepCloned.AirCompany);
            Assert.AreEqual(original.AirCompany, deepCloned.AirCompany);

            string str              = string.Empty;
            var    originalFields   = original.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy | BindingFlags.Instance);
            var    deepClonedFields = deepCloned.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy | BindingFlags.Instance);

            Assert.AreEqual(originalFields.Length, deepClonedFields.Length);
            for (int i = 0; i < originalFields.Length; i++)
            {
                str += $"{originalFields[i].Name}: {originalFields[i].GetValue(original)}";
                //Assert.AreEqual(originalFields[i].GetValue(original), deepClonedFields[i].GetValue(deepCloned));
            }
            var originalAdministrator   = original.GetType().GetField("_administrator", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy | BindingFlags.Instance).GetValue(original);
            var deepClonedAdministrator = deepCloned.GetType().GetField("_administrator", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy | BindingFlags.Instance).GetValue(deepCloned);

            Assert.AreEqual(originalAdministrator, deepClonedAdministrator);
            Assert.AreEqual(original.CheckingObject.composite.AirCompany, deepCloned.CheckingObject.composite.AirCompany);

            //Failing the test
            //Assert.AreEqual(original.CheckingObject, deepCloned.CheckingObject);
        }
예제 #16
0
파일: Style.cs 프로젝트: FlaviusHouk/DotX
        public bool TryAttach(CompositeObject obj)
        {
            bool attached = false;

            var props = PropertyManager.Instance.GetProperties(obj.GetType());

            foreach (var setter in Setters.Where(s => props.Any(p => p.PropName == s.Property)))
            {
                setter.SetValue(obj);

                attached = true;
            }

            return(attached);
        }
        public void Should_return_CompareTo_result_for_type_with_subclass_of_generated_code_as_member()
        {
            var instance0 = new CompositeObject {
                Value = new CompositeChildValue {
                    Value1 = 1
                }
            };
            var instance1 = new CompositeObject {
                Value = new CompositeChildValue {
                    Value1 = 2
                }
            };

            instance0.CompareTo(instance1)
            .Should().Be(instance0.Value.Value1.CompareTo(instance1.Value.Value1));
        }
예제 #18
0
        public void SetValue(CompositeObject owner,
                             CompositeObjectProperty prop,
                             IPropertyValue value)
        {
            Dictionary <CompositeObjectProperty, IPropertyValue> props;

            if (!_valueStorage.TryGetValue(owner, out props))
            {
                props = new Dictionary <CompositeObjectProperty, IPropertyValue>();
                _valueStorage.Add(owner, props);
            }

            var oldValue = props[prop];

            props[prop] = value;
            oldValue.OnDetached(owner, prop);
            value.OnAttached(owner, prop);
        }
예제 #19
0
        internal static IReadOnlyCollection <PriorityStyle> GetStylesForElement(this Widget owner,
                                                                                CompositeObject obj)
        {
            int i      = 0;
            var styles = owner.Styles.Where(s => s.Selector.Matches(obj))
                         .Select(s => new PriorityStyle(s, i));

            owner.TraverseTop <Widget>(w =>
            {
                i++;

                styles = styles.Concat(w.Styles.Where(s => s.Selector.Matches(obj))
                                       .Select(s => new PriorityStyle(s, i)));

                return(false);
            });

            return(styles.ToArray());
        }
예제 #20
0
        public void SetValue(CompositeObject obj)
        {
            var propToSet = PropertyManager.Instance.GetProperties(obj.GetType())
                            .FirstOrDefault(p => p.PropName == Property);

            if (propToSet is null)
            {
                throw new Exception();
            }

            _wasSet = obj.IsPropertySet(propToSet);

            if (_wasSet)
            {
                _oldValue = obj.GetValue <IPropertyValue>(propToSet);
            }

            obj.SetValue(propToSet, Value);
        }
예제 #21
0
        public T Coerce <T>(CompositeObject obj, T value)
        {
            if (_coerceFunc is null)
            {
                return(value);
            }

            if (obj is TOwner owner &&
                value is TValue val)
            {
                TValue coerced = _coerceFunc.Invoke(owner, val);

                if (coerced is T converted)
                {
                    return(converted);
                }
            }

            throw new InvalidCastException();
        }
예제 #22
0
        public virtual void Changed <T>(CompositeObject obj, T oldVal, T newVal)
        {
            if (_changeValueFunc is null ||
                EqualityComparer <T> .Default.Equals(oldVal, newVal))
            {
                return;
            }

            if (obj is TOwner owner)
            {
                //It was fun but it should be simplified...
                TValue oldValue = GetValue <TValue, T>(oldVal);
                TValue newValue = GetValue <TValue, T>(newVal);

                _changeValueFunc.Invoke(owner, oldValue, newValue);
                return;
            }

            throw new InvalidCastException();
        }
예제 #23
0
        public CompositeObject Get(Guid ownerId, Guid compositeObjectId)
        {
            var cachedObject = compositeObjectCache.Find(compositeObjectId);

            if (cachedObject != null)
            {
                return(cachedObject);
            }

            object lockHandle;

            compositeObjectCache.FindAndLock(compositeObjectId, lockTimespan, out lockHandle);

            var changeSets = changeSetStorage.GetChangeSets(compositeObjectId);

            var compositeObject = new CompositeObject(changeSets, businessObjectDefinitionProvider);

            compositeObjectCache.PutAndUnlock(compositeObject, lockHandle);

            return(compositeObject);
        }
        public void PutAndUnlock(CompositeObject compositeObject, object lockHandle)
        {
            var utcNow = DateTimeOffset.UtcNow;

            Trace.WriteLine("InMemoryCompositeObjectCache.PutAndUnlock: locking globalStorage");

            lock (globalStorage){
                if (!globalStorage.ContainsKey(compositeObject.Id))
                {
                    throw new ArgumentException("There is no such CompositeObject in cache");
                }

                var cacheObject = globalStorage[compositeObject.Id];

                if (cacheObject.LockHandle != (Guid)lockHandle)
                {
                    throw new ArgumentException("Incorrect lock");
                }

                if (cacheObject.ExpirationDateTime < utcNow)
                {
                    throw new ArgumentException("Lock expired");
                }

                var bytes = compositeObject.Serialize();
                globalStorage[compositeObject.Id] = new CacheObject(bytes, null, null);

                Trace.WriteLine("InMemoryCompositeObjectCache.PutAndUnlock: locking localStorage");

                lock (localStorage)
                {
                    localStorage[compositeObject.Id] = compositeObject;
                }

                Trace.WriteLine("InMemoryCompositeObjectCache.PutAndUnlock: localStorage lock released");
            }

            Trace.WriteLine("InMemoryCompositeObjectCache.PutAndUnlock: globalStorage lock released");
        }
예제 #25
0
 public void OnDetached(CompositeObject owner, CompositeObjectProperty prop)
 {
     Detached?.Invoke(owner, prop);
 }
예제 #26
0
 public void OnChanged(CompositeObject owner, CompositeObjectProperty prop)
 {
     Changed?.Invoke(owner, prop);
 }
예제 #27
0
 public TestClient(CompositeObject composite, TestClientOptions options)
 {
     Composite = composite;
     Options   = options;
 }
예제 #28
0
 public TestClient(Uri uri, CompositeObject composite, TestClientOptions options)
 {
     Uri       = uri;
     Composite = composite;
     Options   = options;
 }
예제 #29
0
 public IPropertyValue GetValue(CompositeObject owner,
                                CompositeObjectProperty prop)
 {
     return(_valueStorage[owner][prop]);
 }
예제 #30
0
 public bool IsSet(CompositeObject obj,
                   CompositeObjectProperty prop)
 {
     return(_valueStorage[obj][prop] is not UnsetValue);
 }