コード例 #1
0
        protected string DisplaySingleProperty(ObjectAndControlData controlData, IDictionary <string, string> data)
        {
            if (Request.IsAjaxRequest())
            {
                var nakedObject = controlData.GetNakedObject(Facade);
                if (controlData.SubAction == ObjectAndControlData.SubActionType.Redisplay)
                {
                    var assocs = nakedObject.Specification.Properties.Where(p => p.IsCollection && !p.Specification.IsParseable);
                    var item   = assocs.SingleOrDefault(a => data.ContainsKey(a.Id));
                    return(item == null ? null : item.Id);
                }
                if (controlData.ActionId == null)
                {
                    var assocs = nakedObject.Specification.Properties.Where(p => !p.IsCollection || p.Specification.IsParseable);
                    var item   = assocs.SingleOrDefault(a => data.ContainsKey(a.Id));
                    return(item == null ? null : item.Id);
                }
                {
                    var parms = controlData.GetAction(Facade).Parameters;
                    var item  = parms.SingleOrDefault(p => data.ContainsKey(p.Id));
                    return(item == null ? null : item.Id);
                }
            }

            return(null);
        }
コード例 #2
0
        private ActionResult SelectOnAction(ObjectAndControlData controlData)
        {
            IActionSpec  nakedObjectAction  = controlData.GetAction(NakedObjectsContext);
            INakedObject contextNakedObject = FilterCollection(controlData.GetNakedObject(NakedObjectsContext), controlData);

            return(SelectSingleItem(contextNakedObject, nakedObjectAction, controlData, controlData.DataDict));
        }
コード例 #3
0
        public virtual ActionResult EditObject(ObjectAndControlData controlData, FormCollection form)
        {
            Decrypt(form);
            controlData.Form = form;
            var nakedObject = controlData.GetNakedObject(Facade);

            SetExistingCollectionFormats(form);

            if (nakedObject.IsNotPersistent)
            {
                RefreshTransient(nakedObject, form);
            }

            switch (controlData.SubAction)
            {
            case (ObjectAndControlData.SubActionType.Action):
                SetNewCollectionFormats(controlData);
                return(ActionOnNotPersistentObject(controlData));

            case (ObjectAndControlData.SubActionType.None):
                AddAttemptedValuesNew(nakedObject, controlData);
                return(View("ObjectEdit", nakedObject.GetDomainObject()));

            case (ObjectAndControlData.SubActionType.Pager):
                SetNewCollectionFormats(controlData);
                return(AppropriateView(controlData, nakedObject));

            case (ObjectAndControlData.SubActionType.Redisplay):
                return(Redisplay(controlData));
            }
            Log.ErrorFormat("SubAction handling not implemented in EditObject for {0}", controlData.SubAction.ToString());
            throw new NotImplementedException(controlData.SubAction.ToString());
        }
コード例 #4
0
        private ActionResult ApplyEdit(ObjectAndControlData controlData)
        {
            var nakedObject = controlData.GetNakedObject(Facade);
            var viewName    = ApplyEdit(nakedObject, controlData) ? "ObjectView" : "ObjectEdit";

            return(View(viewName, nakedObject.GetDomainObject()));
        }
コード例 #5
0
        private ActionResult Find(ObjectAndControlData controlData)
        {
            string spec            = controlData.DataDict["spec"];
            string contextObjectId = controlData.DataDict["contextObjectId"];
            string propertyName    = controlData.DataDict["propertyName"];
            string contextActionId = controlData.DataDict["contextActionId"];

            var objectSet = Session.CachedObjectsOfType(Facade, Facade.GetDomainType(spec)).ToList();

            if (!objectSet.Any())
            {
                Log.InfoFormat("No Cached objects of type {0} found", spec);
                Facade.MessageBroker.AddWarning("No objects of appropriate type viewed recently");
            }
            var contextNakedObject = FilterCollection(GetNakedObjectFromId(contextObjectId), controlData);
            var contextAction      = string.IsNullOrEmpty(contextActionId) ? null : contextNakedObject.Specification.GetActionLeafNodes().Single(a => a.Id == contextActionId);

            if (objectSet.Count == 1)
            {
                var selectedItem = new Dictionary <string, string> {
                    { propertyName, GetObjectId(objectSet.Single()) }
                };
                return(SelectSingleItem(contextNakedObject, contextAction, controlData, selectedItem));
            }

            return(View(Request.IsAjaxRequest() ? "PropertyEdit" : "FormWithSelections", new FindViewModel {
                ActionResult = objectSet, ContextObject = contextNakedObject.GetDomainObject(), ContextAction = contextAction, PropertyName = propertyName
            }));
        }
コード例 #6
0
        private ActionResult ActionOnNotPersistentObject(ObjectAndControlData controlData)
        {
            string targetActionId = controlData.DataDict["targetActionId"];
            string targetObjectId = controlData.DataDict["targetObjectId"];

            INakedObject targetNakedObject = NakedObjectsContext.GetNakedObjectFromId(targetObjectId);

            if (targetNakedObject.Spec.IsCollection)
            {
                INakedObject         filteredNakedObject = FilterCollection(targetNakedObject, controlData);
                var                  metamodel           = NakedObjectsContext.MetamodelManager.Metamodel;
                IObjectSpecImmutable elementSpecImmut    =
                    filteredNakedObject.Spec.GetFacet <ITypeOfFacet>().GetValueSpec(filteredNakedObject, metamodel);

                var elementSpec = NakedObjectsContext.MetamodelManager.GetSpecification(elementSpecImmut) as IObjectSpec;
                Trace.Assert(elementSpec != null);
                var targetAction = elementSpec.GetCollectionContributedActions().Single(a => a.Id == targetActionId);

                if (!filteredNakedObject.GetAsEnumerable(NakedObjectsContext.NakedObjectManager).Any())
                {
                    NakedObjectsContext.MessageBroker.AddWarning("No objects selected");
                    return(AppropriateView(controlData, targetNakedObject, targetAction));
                }
                // force any result to not be queryable
                filteredNakedObject.SetNotQueryable(true);
                return(ExecuteAction(controlData, filteredNakedObject, targetAction));
            }
            else
            {
                var targetAction = NakedObjectsContext.GetActions(targetNakedObject).Single(a => a.Id == targetActionId);
                return(ExecuteAction(controlData, targetNakedObject, targetAction));
            }
        }
コード例 #7
0
        private ActionResult ApplyAction(ObjectAndControlData controlData)
        {
            var targetNakedObject = FilterCollection(controlData.GetNakedObject(NakedObjectsContext), controlData);
            var targetAction      = controlData.GetAction(NakedObjectsContext);

            CheckConcurrency(targetNakedObject, null, controlData, (z, x, y) => IdHelper.GetConcurrencyActionInputId(x, targetAction, y));

            if (targetNakedObject.IsNotPersistent())
            {
                RefreshTransient(targetNakedObject, controlData.Form);
            }

            // do after any parameters set by contributed action so this takes priority
            SetSelectedParameters(targetAction);
            if (ValidateParameters(targetNakedObject, targetAction, controlData))
            {
                targetNakedObject.SetNotQueryable(targetAction.IsContributedMethod);
                var parms = GetParameterValues(targetAction, controlData);
                return(AppropriateView(controlData, Execute(targetAction, targetNakedObject, parms.ToArray()), targetAction));
            }
            var property = DisplaySingleProperty(controlData, controlData.DataDict);

            return(View(property == null ? "ActionDialog" : "PropertyEdit", new FindViewModel {
                ContextObject = targetNakedObject.Object, ContextAction = targetAction, PropertyName = property
            }));
        }
コード例 #8
0
        public virtual ActionResult Details(ObjectAndControlData controlData, FormCollection form)
        {
            Decrypt(form);
            controlData.Form = form;
            Debug.Assert(controlData.SubAction == ObjectAndControlData.SubActionType.Redisplay ||
                         controlData.SubAction == ObjectAndControlData.SubActionType.Details ||
                         controlData.SubAction == ObjectAndControlData.SubActionType.Cancel ||
                         controlData.SubAction == ObjectAndControlData.SubActionType.None);
            var nakedObject = FilterCollection(controlData.GetNakedObject(Facade), controlData);

            SetExistingCollectionFormats(form);
            SetNewCollectionFormats(controlData);

            nakedObject.SetIsNotQueryableState(true);

            if (controlData.SubAction == ObjectAndControlData.SubActionType.Cancel && nakedObject.IsTransient && nakedObject.IsUserPersistable)
            {
                // remove from cache and return to last object
                Session.RemoveFromCache(Facade, nakedObject, ObjectCache.ObjectFlag.BreadCrumb);
                return(AppropriateView(controlData, null));
            }
            string property = DisplaySingleProperty(controlData, controlData.DataDict);

            return(AppropriateView(controlData, nakedObject, null, property));
        }
コード例 #9
0
 public virtual ActionResult Action(ObjectAndControlData controlData)
 {
     return(View("ActionDialog", new FindViewModel {
         ContextObject = controlData.GetNakedObject(NakedObjectsContext).Object,
         ContextAction = controlData.GetAction(NakedObjectsContext)
     }));
 }
コード例 #10
0
        internal void AddAttemptedValuesNew(IObjectFacade nakedObject, ObjectAndControlData controlData, IAssociationFacade parent = null)
        {
            foreach (var assoc in nakedObject.Specification.Properties.Where(p => p.IsUsable(nakedObject).IsAllowed&& p.IsVisible(nakedObject) || p.IsConcurrency))
            {
                string name  = GetFieldInputId(parent, nakedObject, assoc);
                string value = GetValueFromForm(controlData, name) as string;
                if (value != null)
                {
                    AddAttemptedValue(name, value);
                }
            }

            foreach (var assoc in nakedObject.Specification.Properties.Where(p => p.IsConcurrency))
            {
                string name  = GetConcurrencyFieldInputId(parent, nakedObject, assoc);
                string value = GetValueFromForm(controlData, name) as string;
                if (value != null)
                {
                    AddAttemptedValue(name, value);
                }
            }

            foreach (var assoc in (nakedObject.Specification.Properties.Where(p => p.IsInline)))
            {
                var inlineNakedObject = assoc.GetValue(nakedObject);
                AddAttemptedValuesNew(inlineNakedObject, controlData, assoc);
            }
        }
コード例 #11
0
        private ActionResult ActionOnNotPersistentObject(ObjectAndControlData controlData)
        {
            string targetActionId = controlData.DataDict["targetActionId"];
            string targetObjectId = controlData.DataDict["targetObjectId"];

            var targetNakedObject = GetNakedObjectFromId(targetObjectId);

            if (targetNakedObject.Specification.IsCollection)
            {
                var filteredNakedObject = FilterCollection(targetNakedObject, controlData);

                var elementSpec = targetNakedObject.ElementSpecification;
                Trace.Assert(elementSpec != null);
                var targetAction = elementSpec.GetCollectionContributedActions().Single(a => a.Id == targetActionId);

                if (!filteredNakedObject.ToEnumerable().Any())
                {
                    Facade.MessageBroker.AddWarning("No objects selected");
                    return(AppropriateView(controlData, targetNakedObject));
                }

                // force any result to not be queryable
                filteredNakedObject.SetIsNotQueryableState(true);

                return(ExecuteAction(controlData, filteredNakedObject, targetAction));
            }
            else
            {
                var oid          = Facade.OidTranslator.GetOidTranslation(targetNakedObject);
                var targetAction = Facade.GetObjectAction(oid, targetActionId).Action;

                //var targetAction = NakedObjectsContext.GetActions(targetNakedObject).Single(a => a.Id == targetActionId);
                return(ExecuteAction(controlData, targetNakedObject, targetAction));
            }
        }
コード例 #12
0
        private ActionResult SelectOnAction(ObjectAndControlData controlData)
        {
            var nakedObjectAction  = controlData.GetAction(Facade);
            var contextNakedObject = FilterCollection(controlData.GetNakedObject(Facade), controlData);

            return(SelectSingleItem(contextNakedObject, nakedObjectAction, controlData, controlData.DataDict));
        }
コード例 #13
0
 private static int GetPage(ObjectAndControlData controlData)
 {
     if (controlData.DataDict.ContainsKey(IdConstants.PageKey))
     {
         return(int.Parse(controlData.DataDict[IdConstants.PageKey]));
     }
     return(!string.IsNullOrEmpty(controlData.Page) ? int.Parse(controlData.Page) : 1);
 }
コード例 #14
0
 internal void SetPagingValues(ObjectAndControlData controlData, IObjectFacade nakedObject)
 {
     if (nakedObject.Specification.IsCollection)
     {
         int sink1, sink2;
         CurrentlyPaging(controlData, nakedObject.Count(), out sink1, out sink2);
     }
 }
コード例 #15
0
        internal ArgumentsContextFacade GetParameterValues(IActionFacade action, ObjectAndControlData controlData)
        {
            var values = action.Parameters.Select(parm => new { Id = IdHelper.GetParameterInputId(action, parm), Parm = parm }).ToDictionary(a => a.Parm.Id, a => GetParameterValue(a.Parm, a.Id, controlData));

            return(new ArgumentsContextFacade {
                Values = values, ValidateOnly = false
            });
        }
コード例 #16
0
        private ActionResult InitialAction(ObjectAndControlData controlData)
        {
            var nakedObject       = controlData.GetNakedObject(Facade);
            var nakedObjectAction = controlData.GetAction(Facade);

            CheckConcurrency(nakedObject, null, controlData, (z, x, y) => IdHelper.GetConcurrencyActionInputId(x, nakedObjectAction, y));
            return(ExecuteAction(controlData, nakedObject, nakedObjectAction));
        }
コード例 #17
0
        public virtual ActionResult ClearHistoryOthers(string id, ObjectAndControlData controlData)
        {
            var nakedObject = GetNakedObjectFromId(id);

            Session.RemoveOthersFromCache(Facade, nakedObject.GetDomainObject(), ObjectCache.ObjectFlag.BreadCrumb);
            SetNewCollectionFormats(controlData);
            SetControllerName(nakedObject.GetDomainObject());
            return(AppropriateView(controlData, nakedObject));
        }
コード例 #18
0
        public virtual ActionResult Details(ObjectAndControlData controlData)
        {
            Assert.AssertTrue(controlData.SubAction == ObjectAndControlData.SubActionType.Details ||
                              controlData.SubAction == ObjectAndControlData.SubActionType.None);
            INakedObject nakedObject = FilterCollection(controlData.GetNakedObject(NakedObjectsContext), controlData);

            SetNewCollectionFormats(controlData);
            return(AppropriateView(controlData, nakedObject));
        }
コード例 #19
0
        private ActionResult ApplyAction(ObjectAndControlData controlData)
        {
            var targetNakedObject = FilterCollection(controlData.GetNakedObject(Facade), controlData);
            var targetAction      = controlData.GetAction(Facade);

            CheckConcurrency(targetNakedObject, null, controlData, (z, x, y) => IdHelper.GetConcurrencyActionInputId(x, targetAction, y));

            if (targetNakedObject.IsNotPersistent)
            {
                RefreshTransient(targetNakedObject, controlData.Form);
            }

            // do after any parameters set by contributed action so this takes priority
            SetSelectedParameters(targetAction);

            var ac = GetParameterValues(targetAction, controlData);
            ActionResultContextFacade ar;

            if (targetNakedObject.Specification.IsCollection && !targetNakedObject.Specification.IsParseable)
            {
                var oids = targetNakedObject.ToEnumerable().Select(no => Facade.OidTranslator.GetOidTranslation(no)).ToArray();
                var spec = targetNakedObject.ElementSpecification;

                ar = Facade.ExecuteListAction(oids, spec, targetAction.Id, ac);
            }
            else
            {
                var oid = Facade.OidTranslator.GetOidTranslation(targetNakedObject);
                ar = Facade.ExecuteObjectAction(oid, targetAction.Id, ac);
            }

            if (!HasError(ar))
            {
                targetNakedObject.SetIsNotQueryableState(targetAction.IsContributed);
                return(AppropriateView(controlData, GetResult(ar), targetAction));
            }

            foreach (var parm in ar.ActionContext.VisibleParameters)
            {
                if (!string.IsNullOrEmpty(parm.Reason))
                {
                    ModelState.AddModelError(IdHelper.GetParameterInputId(targetAction, parm.Parameter), parm.Reason);
                }
            }

            if (!(string.IsNullOrEmpty(ar.ActionContext.Reason)))
            {
                ModelState.AddModelError("", ar.ActionContext.Reason);
            }

            var property = DisplaySingleProperty(controlData, controlData.DataDict);

            return(View(property == null ? "ActionDialog" : "PropertyEdit", new FindViewModel {
                ContextObject = targetNakedObject.GetDomainObject(), ContextAction = targetAction, PropertyName = property
            }));
        }
コード例 #20
0
        private ActionResult Redisplay(ObjectAndControlData controlData)
        {
            SetNewCollectionFormats(controlData);
            var property    = DisplaySingleProperty(controlData, controlData.DataDict);
            var isEdit      = bool.Parse(controlData.DataDict["editMode"]);
            var nakedObject = controlData.GetNakedObject(Facade);

            return(property == null?View(isEdit? "ObjectEdit" : "ObjectView", nakedObject.GetDomainObject()) :
                       View(isEdit ? "PropertyEdit" : "PropertyView", new PropertyViewModel(nakedObject.GetDomainObject(), property)));
        }
コード例 #21
0
        public virtual ActionResult Action(ObjectAndControlData controlData)
        {
            var no     = controlData.GetNakedObject(Facade);
            var action = controlData.GetAction(Facade);

            return(View("ActionDialog", new FindViewModel {
                ContextObject = no.GetDomainObject(),
                ContextAction = action
            }));
        }
コード例 #22
0
        private ActionResult ActionAsFind(ObjectAndControlData controlData)
        {
            string targetActionId  = controlData.DataDict["targetActionId"];
            string targetObjectId  = controlData.DataDict["targetObjectId"];
            string contextObjectId = controlData.DataDict["contextObjectId"];
            string propertyName    = controlData.DataDict["propertyName"];
            string contextActionId = controlData.DataDict["contextActionId"];

            var targetNakedObject  = GetNakedObjectFromId(targetObjectId);
            var contextNakedObject = FilterCollection(GetNakedObjectFromId(contextObjectId), controlData);
            var targetAction       = targetNakedObject.Specification.GetActionLeafNodes().Single(a => a.Id == targetActionId);
            var contextAction      = string.IsNullOrEmpty(contextActionId) ? null : contextNakedObject.Specification.GetActionLeafNodes().Single(a => a.Id == contextActionId);

            SetContextObjectAsParameterValue(targetAction, contextNakedObject);
            if (targetAction.ParameterCount == 0)
            {
                var oid = Facade.OidTranslator.GetOidTranslation(targetNakedObject);

                var context = Facade.ExecuteObjectAction(oid, targetAction.Id, new ArgumentsContextFacade {
                    Values       = new Dictionary <string, object>(),
                    ValidateOnly = false
                });

                var result = GetResult(context);

                IEnumerable resultAsEnumerable = GetResultAsEnumerable(result, contextAction, propertyName);

                if (resultAsEnumerable.Cast <object>().Count() == 1 && !result.IsTransient)
                {
                    var selectedItem = new Dictionary <string, string> {
                        { propertyName, GetObjectId(resultAsEnumerable.Cast <object>().Single()) }
                    };
                    return(SelectSingleItem(contextNakedObject, contextAction, controlData, selectedItem));
                }

                string view = Request.IsAjaxRequest() ? "PropertyEdit" : "FormWithSelections";
                return(View(view, new FindViewModel {
                    ActionResult = resultAsEnumerable,
                    TargetObject = targetNakedObject.GetDomainObject(),
                    ContextObject = contextNakedObject.GetDomainObject(),
                    TargetAction = (targetAction),
                    ContextAction = (contextAction),
                    PropertyName = propertyName
                }));
            }

            SetDefaults(targetNakedObject, targetAction);
            return(View(Request.IsAjaxRequest() ? "PropertyEdit" : "FormWithFinderDialog", new FindViewModel {
                TargetObject = targetNakedObject.GetDomainObject(),
                ContextObject = contextNakedObject.GetDomainObject(),
                TargetAction = (targetAction),
                ContextAction = (contextAction),
                PropertyName = propertyName
            }));
        }
コード例 #23
0
        private ActionResult InvokeActionAsSave(ObjectAndControlData controlData)
        {
            var    form            = controlData.Form;
            string targetActionId  = controlData.DataDict["targetActionId"];
            string targetObjectId  = controlData.DataDict["targetObjectId"];
            string contextObjectId = controlData.DataDict["contextObjectId"];
            string propertyName    = controlData.DataDict["propertyName"];
            string contextActionId = controlData.DataDict["contextActionId"];
            string subEditObjectId = controlData.DataDict["subEditObjectId"];

            var targetNakedObject  = GetNakedObjectFromId(targetObjectId);
            var contextNakedObject = FilterCollection(GetNakedObjectFromId(contextObjectId), controlData);
            var targetAction       = targetNakedObject.Specification.GetActionLeafNodes().Single(a => a.Id == targetActionId);
            var contextAction      = string.IsNullOrEmpty(contextActionId) ? null : contextNakedObject.Specification.GetActionLeafNodes().Single(a => a.Id == contextActionId);
            var subEditObject      = GetNakedObjectFromId(subEditObjectId);

            var oid = Facade.OidTranslator.GetOidTranslation(subEditObject);
            var ac  = ConvertForSave(subEditObject, controlData);

            var result = Facade.PutObject(oid, ac);

            foreach (var p in result.VisibleProperties)
            {
                string key = GetFieldInputId(null, subEditObject, p.Property);
                if (!string.IsNullOrEmpty(p.Reason))
                {
                    // kludge to keep ui the same
                    string reason = p.Reason == MvcUi.Mandatory ? MvcUi.Mandatory : MvcUi.InvalidEntry;
                    ModelState.AddModelError(key, reason);
                }
                AddAttemptedValue(key, p.Property.Specification.IsParseable ? p.ProposedValue : p.ProposedObjectFacade.GetDomainObject <object>());
            }

            if (!string.IsNullOrEmpty(result.Reason))
            {
                ModelState.AddModelError(string.Empty, result.Reason);
            }

            // tempting to try to associate the new object at once - however it is still transient until the end of the
            // transaction and so association may not work (possible persistent to transient). By doing this we split into two transactions
            // and so all OK.

            IEnumerable resultAsEnumerable = new List <object> {
                result.Target.GetDomainObject()
            };

            return(View(Request.IsAjaxRequest() ? "PropertyEdit" : "FormWithSelections", new FindViewModel {
                ActionResult = resultAsEnumerable,
                TargetObject = targetNakedObject.GetDomainObject(),
                ContextObject = contextNakedObject.GetDomainObject(),
                TargetAction = targetAction,
                ContextAction = contextAction,
                PropertyName = propertyName
            }));
        }
コード例 #24
0
        public virtual ActionResult Details(ObjectAndControlData controlData)
        {
            Debug.Assert(controlData.SubAction == ObjectAndControlData.SubActionType.Details ||
                         controlData.SubAction == ObjectAndControlData.SubActionType.None);

            var nakedObject = controlData.GetNakedObject(Facade);

            nakedObject = FilterCollection(nakedObject, controlData);
            SetNewCollectionFormats(controlData);
            return(AppropriateView(controlData, nakedObject));
        }
コード例 #25
0
        private static object GetValueFromForm(ObjectAndControlData controlData, string name)
        {
            var form = controlData.Form;

            if (form.GetValue(name) != null)
            {
                return(((string[])form.GetValue(name).RawValue).First());
            }

            return(controlData.Files.ContainsKey(name) ? controlData.Files[name] : null);
        }
コード例 #26
0
        internal IObjectFacade Page(IObjectFacade nakedObject, int collectionSize, ObjectAndControlData controlData)
        {
            int page, pageSize;

            if (CurrentlyPaging(controlData, collectionSize, out page, out pageSize) && !nakedObject.IsPaged)
            {
                return(nakedObject.Page(page, pageSize));
            }

            // one page of full collection
            return(nakedObject.Page(1, collectionSize));
        }
コード例 #27
0
        private ActionResult ApplyEdit(ObjectAndControlData controlData)
        {
            string viewName    = "ObjectEdit";
            var    nakedObject = controlData.GetNakedObject(NakedObjectsContext);

            if (ValidateChanges(nakedObject, controlData))
            {
                viewName = ApplyChanges(nakedObject, controlData) ? "ObjectView" : "ObjectEdit";
            }

            return(View(viewName, nakedObject.Object));
        }
コード例 #28
0
 internal void SetNewCollectionFormats(ObjectAndControlData controlData)
 {
     KeyValuePair <string, string>[] formats = controlData.DataDict.Where(kvp => IsFormat(kvp.Value)).ToArray();
     if (formats.Any())
     {
         formats.ForEach(kvp => ViewData[kvp.Key] = kvp.Value);
     }
     else if (!string.IsNullOrWhiteSpace(controlData.Format))
     {
         ViewData[IdConstants.CollectionFormat] = controlData.Format;
     }
 }
コード例 #29
0
        private ActionResult InvokeActionAsFind(ObjectAndControlData controlData)
        {
            string targetActionId  = controlData.DataDict["targetActionId"];
            string targetObjectId  = controlData.DataDict["targetObjectId"];
            string contextObjectId = controlData.DataDict["contextObjectId"];
            string propertyName    = controlData.DataDict["propertyName"];
            string contextActionId = controlData.DataDict["contextActionId"];

            INakedObject targetNakedObject  = NakedObjectsContext.GetNakedObjectFromId(targetObjectId);
            INakedObject contextNakedObject = FilterCollection(NakedObjectsContext.GetNakedObjectFromId(contextObjectId), controlData);
            IActionSpec  targetAction       = NakedObjectsContext.GetActions(targetNakedObject).Single(a => a.Id == targetActionId);
            IActionSpec  contextAction      = string.IsNullOrEmpty(contextActionId) ? null : NakedObjectsContext.GetActionFromId(contextActionId);

            SetContextObjectAsParameterValue(targetAction, contextNakedObject);

            if (ValidateParameters(targetNakedObject, targetAction, controlData))
            {
                IEnumerable <INakedObject> parms = GetParameterValues(targetAction, controlData);
                INakedObject result = targetAction.Execute(targetNakedObject, parms.ToArray());

                if (result != null)
                {
                    IEnumerable resultAsEnumerable = !result.Spec.IsCollection ? new List <object> {
                        result.Object
                    } : (IEnumerable)result.Object;

                    if (resultAsEnumerable.Cast <object>().Count() == 1)
                    {
                        var selectedItem = new Dictionary <string, string> {
                            { propertyName, NakedObjectsContext.GetObjectId(resultAsEnumerable.Cast <object>().Single()) }
                        };
                        return(SelectSingleItem(contextNakedObject, contextAction, controlData, selectedItem));
                    }
                    string view = Request.IsAjaxRequest() ? "PropertyEdit" : "FormWithSelections";
                    return(View(view, new FindViewModel {
                        ActionResult = resultAsEnumerable,
                        TargetObject = targetNakedObject.Object,
                        ContextObject = contextNakedObject.Object,
                        TargetAction = targetAction,
                        ContextAction = contextAction,
                        PropertyName = propertyName
                    }));
                }
            }
            return(View(Request.IsAjaxRequest() ? "PropertyEdit" : "FormWithFinderDialog", new FindViewModel {
                TargetObject = targetNakedObject.Object,
                ContextObject = contextNakedObject.Object,
                TargetAction = targetAction,
                ContextAction = contextAction,
                PropertyName = propertyName
            }));
        }
コード例 #30
0
        private ActionResult ApplyEditAction(ObjectAndControlData controlData)
        {
            var nakedObject = controlData.GetNakedObject(NakedObjectsContext);
            var ok          = ValidateChanges(nakedObject, controlData) && ApplyChanges(nakedObject, controlData);

            if (ok)
            {
                string      targetActionId = controlData.DataDict["targetActionId"];
                IActionSpec targetAction   = NakedObjectsContext.GetActions(nakedObject).Single(a => a.Id == targetActionId);
                return(ExecuteAction(controlData, nakedObject, targetAction));
            }
            return(View("ViewModel", nakedObject.Object));
        }