public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors,
                                      IList <IBytecodeBehavior> cascadePendingBehaviors)
 {
     // NotifyPropertyChangedBehavior executes in this cascade
     // add IPropertyChanged
     visitor = new InterfaceAdder(visitor, typeof(INotifyPropertyChanged), typeof(INotifyPropertyChangedSource),
                                  typeof(IPropertyChangedEventHandler), typeof(INotifyCollectionChangedListener), typeof(IPropertyChangeConfigurable));
     visitor = BeanContext.RegisterWithLifecycle(new NotifyPropertyChangedClassVisitor(visitor, MetaData, null)).Finish();
     return(visitor);
 }
Esempio n. 2
0
            public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors,
                                                 IList <IBytecodeBehavior> cascadePendingBehaviors)
            {
                visitor = new InterfaceAdder(visitor, typeof(IDataObject), typeof(INotifyCollectionChangedListener));
                visitor = new DataObjectVisitor(visitor, metaData, PropertyInfoProvider);
                visitor = new SetCacheModificationMethodCreator(visitor);

                // ToBeUpdated & ToBeDeleted have to fire PropertyChange-Events by themselves
                String[] properties = { DataObjectVisitor.template_p_toBeUpdated.Name, DataObjectVisitor.template_p_toBeDeleted.Name };

                CascadeBehavior2 cascadeBehavior2 = BeanContext.RegisterWithLifecycle(new CascadeBehavior2(metaData, properties)).Finish();

                cascadePendingBehaviors.Add(cascadeBehavior2);

                return(visitor);
            }
Esempio n. 3
0
        public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors,
                                             IList <IBytecodeBehavior> cascadePendingBehaviors)
        {
            if (state.GetContext <EntityEnhancementHint>() == null)
            {
                return(visitor);
            }

            bool lastBehaviorStanding = remainingPendingBehaviors.Remove(this);

            Type currentType = state.CurrentType;

            if (!typeof(INotifyPropertyChanged).IsAssignableFrom(currentType))
            {
                if (remainingPendingBehaviors.Count == 0 && lastBehaviorStanding)
                {
                    // The type is not being PropertyChange enhanced.
                    return(visitor);
                }
                if (remainingPendingBehaviors.Count == 0 && cascadePendingBehaviors.Count == 0)
                {
                    // Mark "last behavior standing" to avoid infinite loop
                    cascadePendingBehaviors.Add(this);
                }
                cascadePendingBehaviors.Add(this);
                return(visitor);
            }
            IEntityMetaData metaData = EntityMetaDataProvider.GetMetaData(state.OriginalType);

            visitor = new GetIdMethodCreator(visitor, metaData);
            visitor = new SetBeanContextMethodCreator(visitor);

            CascadeBehavior cascadeBehavior = BeanContext.RegisterWithLifecycle(new CascadeBehavior(metaData)).Finish();

            cascadePendingBehaviors.Add(cascadeBehavior);
            return(visitor);
        }
Esempio n. 4
0
 public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors,
                                      IList <IBytecodeBehavior> cascadePendingBehaviors)
 {
     visitor = BeanContext.RegisterWithLifecycle(new NotifyPropertyChangedClassVisitor(visitor, metaData, properties)).Finish();
     return(visitor);
 }