Ejemplo n.º 1
0
        protected virtual void ExtractBusinessObjectsIntern(Object parameter, IList <Object> targetObjects, ISet <Object> alreadyScannedSet, bool extractAlsoUnchanged)
        {
            if (parameter == null || !alreadyScannedSet.Add(parameter))
            {
                // Nothing to do
                return;
            }

            if (parameter is INotPersistedDataContainer)
            {
                IList <Object> content = ((INotPersistedDataContainer)parameter).GetNotPersistedDataRaw();
                ExtractBusinessObjectsIntern(content, targetObjects, alreadyScannedSet, extractAlsoUnchanged);
            }
            else if (parameter is AmbethIDataObject)
            {
                if (extractAlsoUnchanged || ((AmbethIDataObject)parameter).HasPendingChanges)
                {
                    targetObjects.Add(parameter);
                }
            }
            else if (parameter is IModelContainerRegistry)
            {
                IList <Object> modelContainers = ((IModelContainerRegistry)parameter).GetModelContainers();
                foreach (Object modelContainer in modelContainers)
                {
                    ExtractBusinessObjectsIntern(modelContainer, targetObjects, alreadyScannedSet, extractAlsoUnchanged);
                }
            }
            else if (parameter is IModelMultiContainer <INotPersistedDataContainer> )
            {
                IModelMultiContainer <INotPersistedDataContainer> mmc = (IModelMultiContainer <INotPersistedDataContainer>)parameter;
                foreach (INotPersistedDataContainer npdc in mmc.Values)
                {
                    ExtractBusinessObjectsIntern(npdc, targetObjects, alreadyScannedSet, extractAlsoUnchanged);
                }
            }
            else if (parameter is IModelMultiContainer)
            {
                IEnumerable multiData = ((IModelMultiContainer)parameter).ValuesData;
                foreach (Object data in multiData)
                {
                    ExtractBusinessObjectsIntern(data, targetObjects, alreadyScannedSet, extractAlsoUnchanged);
                }
            }
            else if (parameter is IModelSingleContainer)
            {
                Object data = ((IModelSingleContainer)parameter).ValueData;
                ExtractBusinessObjectsIntern(data, targetObjects, alreadyScannedSet, extractAlsoUnchanged);
            }
            else if (parameter is IEnumerable)
            {
                foreach (Object item in (IEnumerable)parameter)
                {
                    ExtractBusinessObjectsIntern(item, targetObjects, alreadyScannedSet, extractAlsoUnchanged);
                }
            }
            else
            {
                targetObjects.Add(parameter);
            }
        }
Ejemplo n.º 2
0
 protected virtual bool CanExecuteIntern(Object parameter, bool extractAlsoUnchanged = false)
 {
     if (parameter == null)
     {
         return(false);
     }
     else if (parameter is INotPersistedDataContainer)
     {
         INotPersistedDataContainer container = (INotPersistedDataContainer)parameter;
         return(container.HasNotPersisted());
     }
     else if (parameter is AmbethIDataObject)
     {
         if (extractAlsoUnchanged)
         {
             return(true);
         }
         AmbethIDataObject aio = (AmbethIDataObject)parameter;
         return(aio.HasPendingChanges);
     }
     else if (parameter is IModelContainerRegistry)
     {
         IList <Object> modelContainers = ((IModelContainerRegistry)parameter).GetModelContainers();
         foreach (Object modelContainer in modelContainers)
         {
             if (CanExecuteIntern(modelContainer, extractAlsoUnchanged))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (parameter is IModelMultiContainer <INotPersistedDataContainer> )
     {
         IModelMultiContainer <INotPersistedDataContainer> mmc = (IModelMultiContainer <INotPersistedDataContainer>)parameter;
         foreach (INotPersistedDataContainer npdc in mmc.Values)
         {
             if (CanExecuteIntern(npdc, extractAlsoUnchanged))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (parameter is IModelMultiContainer)
     {
         IEnumerable multiData = ((IModelMultiContainer)parameter).ValuesData;
         foreach (Object data in multiData)
         {
             if (CanExecuteIntern(data, extractAlsoUnchanged))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (parameter is IModelSingleContainer)
     {
         Object data = ((IModelSingleContainer)parameter).ValueData;
         return(CanExecuteIntern(data, extractAlsoUnchanged));
     }
     return(parameter != null);
 }
Ejemplo n.º 3
0
        public virtual void AfterPropertiesSet(IBeanContextFactory beanContextFactory)
        {
            ParamChecker.AssertNotNull(RevertChangesHelper, "RevertChangesHelper");
            ParamChecker.AssertNotNull(SharedData, "SharedData");
            ParamChecker.AssertNotNull(SharedDataHandOnExtendable, "SharedDataHandOnExtendable");

            //TODO: inject Uri as bean
#if SILVERLIGHT
            Uri uri = HtmlPage.Document.DocumentUri;
#else
            Uri uri = null;
            if (uri == null)
            {
                throw new NotSupportedException("This code has to be compatible with .NET first");
            }
#endif

            ISet <String> allBeanNames = new HashSet <String>();
            if (BeansToConsume != null)
            {
                allBeanNames.UnionWith(BeansToConsume.Keys);
            }

            IDictionary <String, IModelContainer> data = null;
            if (Token != null)
            {
                data = SharedData.Read(Token);
            }
            if (data == null)
            {
                // Clear token to suppress handsOn in afterStarted()
                Token = null;
                data  = new Dictionary <String, IModelContainer>();
            }
            IModelMultiContainer <Uri> uriList = (IModelMultiContainer <Uri>)DictionaryExtension.ValueOrDefault(data, SourceUriBeanName);
            if (uriList != null)
            {
                //Url-list is avaliable
                uriList.Values.Add(uri);
            }
            allBeanNames.UnionWith(data.Keys);

            if (!allBeanNames.Contains(SourceUriBeanName))
            {
                //Url-list is not avaliable
                beanContextFactory.RegisterBean <ModelMultiContainer <Uri> >(SourceUriBeanName).PropertyValue("Value", uri);
            }

            IdentityHashSet <Object> allProvidedBusinessObjects = new IdentityHashSet <Object>();
            foreach (String nameInOwnContext in allBeanNames)
            {
                //Proecess the input
                IModelContainer dataContainer = DictionaryExtension.ValueOrDefault(data, nameInOwnContext);
                if (dataContainer != null)
                {
                    if (dataContainer is IModelMultiContainer)
                    {
                        IEnumerable businessObjects = ((IModelMultiContainer)dataContainer).ValuesData;
                        if (businessObjects != null)
                        {
                            allProvidedBusinessObjects.AddAll(businessObjects.Cast <object>());
                        }
                    }
                    else if (dataContainer is IModelSingleContainer)
                    {
                        Object businessObject = ((IModelSingleContainer)dataContainer).ValueData;
                        if (businessObject != null)
                        {
                            allProvidedBusinessObjects.Add(businessObject);
                        }
                    }
                    //By copying only the data, listeners are unregistered
                    //beanContextFactory.registerBean(name, dataContainer.GetType()).propertyValue("Data", dataContainer.Data);
                    beanContextFactory.RegisterExternalBean(nameInOwnContext, dataContainer);
                    continue;
                }
                if (!BeansToConsume.ContainsKey(nameInOwnContext))
                {
                    continue;
                }
                //Process default-beans
                String aliasToDefaultBean = BeansToConsume[nameInOwnContext];
                if (aliasToDefaultBean == null)
                {
                    //Mandatory parameter was not present in data
                    throw new Exception("The new Screen has not all mandatory information: \"" + nameInOwnContext + "\" is missing.");
                }
                if (!nameInOwnContext.Equals(aliasToDefaultBean))
                {
                    beanContextFactory.RegisterAlias(nameInOwnContext, aliasToDefaultBean);
                }
            }
            if (allProvidedBusinessObjects.Count > 0)
            {
                IRevertChangesSavepoint savepoint = RevertChangesHelper.CreateSavepoint(allProvidedBusinessObjects);
                beanContextFactory.RegisterExternalBean(savepoint).Autowireable <IRevertChangesSavepoint>();
            }
        }