public UriMtHelper(IOidStrategy oidStrategy, HttpRequestMessage req, PropertyTypeContextFacade propertyContext) : this(oidStrategy ,req) { assoc = propertyContext.Property; spec = propertyContext.OwningSpecification; cachedId = ""; CachedType = spec.DomainTypeName(oidStrategy); }
public UriMtHelper(IOidStrategy oidStrategy, HttpRequestMessage req, PropertyContextFacade propertyContext) : this(oidStrategy ,req) { assoc = propertyContext.Property; objectFacade = propertyContext.Target; spec = objectFacade.Specification; IOidTranslation oid = oidStrategy.FrameworkFacade.OidTranslator.GetOidTranslation(objectFacade); cachedId = oid.InstanceId; CachedType = oid.DomainType; }
public UriMtHelper(IOidStrategy oidStrategy, HttpRequestMessage req, PropertyContextFacade propertyContext) : this(oidStrategy, req) { assoc = propertyContext.Property; objectFacade = propertyContext.Target; spec = objectFacade.Specification; if (objectFacade.Specification.IsParseable) { throw new ArgumentException($"Cannot build URI for parseable specification : {objectFacade.Specification.FullName}"); } IOidTranslation oid = oidStrategy.FrameworkFacade.OidTranslator.GetOidTranslation(objectFacade); cachedId = propertyContext.Target.IsTransient ? "" : oid.InstanceId; CachedType = oid.DomainType; }
internal void AddErrorAndAttemptedValue(IObjectFacade nakedObject, string newValue, IAssociationFacade assoc, string errorText, IAssociationFacade parent = null) { string key = GetFieldInputId(parent, nakedObject, assoc); ModelState.AddModelError(key, errorText); AddAttemptedValue(key, assoc.Specification.IsParseable ? (object)newValue : GetNakedObjectFromId(newValue)); }
protected void GetUsableAndVisibleFields(IObjectFacade nakedObject, ObjectAndControlData controlData, IAssociationFacade parent, out List <IAssociationFacade> usableAndVisibleFields, out List <Tuple <IAssociationFacade, object> > fieldsAndMatchingValues) { usableAndVisibleFields = nakedObject.Specification.Properties.Where(p => p.IsUsable(nakedObject).IsAllowed&& p.IsVisible(nakedObject)).ToList(); fieldsAndMatchingValues = GetFieldsAndMatchingValues(nakedObject, parent, usableAndVisibleFields, controlData, GetFieldInputId).ToList(); }
public override object GetPropertyValue(IOidStrategy oidStrategy, HttpRequest req, IAssociationFacade property, IObjectFacade target, RestControlFlags flags, bool valueOnly, bool useDateOverDateTime) => Representation.GetPropertyValue(oidStrategy, req, property, target, flags, valueOnly, useDateOverDateTime);
public string GetFieldId(IObjectFacade owner, IAssociationFacade assocFacade) { IAssociationSpec assoc = assocFacade.WrappedSpec(); return(GetObjectId(owner) + Sep + assoc.Id); }
public string GetInlineFieldId(IAssociationFacade parentFacade, IObjectFacade owner, IAssociationFacade assocFacade) { IAssociationSpec parent = parentFacade.WrappedSpec(); IAssociationSpec assoc = assocFacade.WrappedSpec(); return parent.Id + Sep + GetObjectId(owner) + Sep + assoc.Id; }
public override object GetPropertyValue(IOidStrategy oidStrategy, HttpRequestMessage req, IAssociationFacade property, IObjectFacade target, RestControlFlags flags, bool valueOnly, bool useDateOverDateTime) { // todo minimise this return Representation.GetPropertyValue(oidStrategy, req, property, target, flags, valueOnly, useDateOverDateTime); }
public static string SafeGetTitle(IAssociationFacade property, IObjectFacade valueNakedObject) { return valueNakedObject == null ? "" : property.GetTitle(valueNakedObject); }
internal void CheckConcurrency(IObjectFacade nakedObject, IAssociationFacade parent, ObjectAndControlData controlData, Func<IAssociationFacade, IObjectFacade, IAssociationFacade, string> idFunc) { var objectSpec = nakedObject.Specification; var concurrencyFields = objectSpec == null ? new List<IAssociationFacade>() : objectSpec.Properties.Where(p => p.IsConcurrency).ToList(); if (!nakedObject.IsTransient && concurrencyFields.Any()) { IEnumerable<Tuple<IAssociationFacade, object>> fieldsAndMatchingValues = GetFieldsAndMatchingValues(nakedObject, parent, concurrencyFields, controlData, idFunc); foreach (var pair in fieldsAndMatchingValues) { if (pair.Item1.Specification.IsParseable) { var currentValue = pair.Item1.GetValue(nakedObject); var concurrencyValue = pair.Item2 as string; if (concurrencyValue != null && currentValue != null) { if (concurrencyValue != currentValue.InvariantString) { throw new PreconditionFailedNOSException(nakedObject); } } else if (concurrencyValue == null && currentValue == null) { // OK } else { throw new PreconditionFailedNOSException(nakedObject); } } } } }
public string GetConcurrencyActionInputId(IObjectFacade owner, IActionFacade action, IAssociationFacade assocFacade) { IAssociationSpec assoc = assocFacade.WrappedSpec(); return(GetActionId(owner, action) + Sep + assoc.Id + Sep + ConcurrencyName); }
public ValueRelType(IAssociationFacade property, UriMtHelper helper) : this(helper) { member = property; }
public string GetInlineConcurrencyFieldInputId(IAssociationFacade parent, IObjectFacade owner, IAssociationFacade assoc) { return(GetInlineFieldId(parent, owner, assoc) + Sep + ConcurrencyName); }
public string GetConcurrencyFieldInputId(IObjectFacade owner, IAssociationFacade assoc) { return(GetFieldId(owner, assoc) + Sep + ConcurrencyName); }
public string GetInlineFieldInputId(IAssociationFacade parent, IObjectFacade owner, IAssociationFacade assocFacade) { IAssociationSpec assoc = assocFacade.WrappedSpec(); return(GetInlineFieldId(parent, owner, assocFacade) + Sep + InputOrSelect(assoc.ReturnSpec)); }
internal void RefreshTransient(IObjectFacade nakedObject, FormCollection form, IAssociationFacade parent = null) { if (nakedObject.IsTransient) { var ac = Convert(form); Facade.RefreshObject(nakedObject, ac); } }
protected void GetUsableAndVisibleFields(IObjectFacade nakedObject, ObjectAndControlData controlData, IAssociationFacade parent, out List<IAssociationFacade> usableAndVisibleFields, out List<Tuple<IAssociationFacade, object>> fieldsAndMatchingValues) { usableAndVisibleFields = nakedObject.Specification.Properties.Where(p => p.IsUsable(nakedObject).IsAllowed && p.IsVisible(nakedObject)).ToList(); fieldsAndMatchingValues = GetFieldsAndMatchingValues(nakedObject, parent, usableAndVisibleFields, controlData, GetFieldInputId).ToList(); }
private bool ApplyEdit(IObjectFacade nakedObject, ObjectAndControlData controlData, IAssociationFacade parent = null) { var oid = Facade.OidTranslator.GetOidTranslation(nakedObject); var usableAndVisibleFields = nakedObject.Specification.Properties.Where(p => p.IsVisible(nakedObject) && p.IsUsable(nakedObject).IsAllowed); var fieldsAndMatchingValues = GetFieldsAndMatchingValues(nakedObject, parent, usableAndVisibleFields, controlData, GetFieldInputId).ToList(); CheckConcurrency(nakedObject, null, controlData, GetConcurrencyFieldInputId); fieldsAndMatchingValues.ForEach(pair => AddAttemptedValue(GetFieldInputId(parent, nakedObject, pair.Item1), pair.Item2)); var ac = new ArgumentsContextFacade { Values = fieldsAndMatchingValues.ToDictionary(f => f.Item1.Id, f => GetObjectValue(f.Item1, nakedObject, f.Item2)), ValidateOnly = false }; // check mandatory fields first to emulate WPF UI behaviour where no validation takes place until // all mandatory fields are set. foreach (var pair in fieldsAndMatchingValues) { var result = pair.Item2; var stringResult = result as string; if (pair.Item1.IsMandatory && (result == null || (result is string && string.IsNullOrEmpty(stringResult)))) { AddErrorAndAttemptedValue(nakedObject, stringResult, pair.Item1, MvcUi.Mandatory); } } if (!ModelState.IsValid) { return false; } ApplyInlineEdit(nakedObject, controlData, usableAndVisibleFields); if (!ModelState.IsValid) { return false; } var res = Facade.PutObject(oid, ac); if (HasError(res)) { foreach (var parm in res.VisibleProperties) { if (!string.IsNullOrEmpty(parm.Reason)) { ModelState.AddModelError(GetFieldInputId(parent, nakedObject, parm.Property), parm.Reason); } } if (!(string.IsNullOrEmpty(res.Reason))) { ModelState.AddModelError("", res.Reason); } return false; } return true; }
protected static IEnumerable<Tuple<IAssociationFacade, object>> GetFieldsAndMatchingValues(IObjectFacade nakedObject, IAssociationFacade parent, IEnumerable<IAssociationFacade> associations, ObjectAndControlData controlData, Func<IAssociationFacade, IObjectFacade, IAssociationFacade, string> idFunc) { foreach (var assoc in associations.Where(a => !a.IsInline)) { string name = idFunc(parent, nakedObject, assoc); object newValue = GetValueFromForm(controlData, name); yield return new Tuple<IAssociationFacade, object>(assoc, newValue); } }
private object GetValue(string[] values, IAssociationFacade propertySpec, ITypeFacade spec) { object domainObject; return GetValue(values, spec, false, out domainObject) ? domainObject : Facade.GetTypedCollection(propertySpec, values); }
internal void AddErrorAndAttemptedValue(IObjectFacade nakedObject, string newValue, IAssociationFacade assoc, string errorText, IAssociationFacade parent = null) { string key = GetFieldInputId(parent, nakedObject, assoc); ModelState.AddModelError(key, errorText); AddAttemptedValue(key, assoc.Specification.IsParseable ? (object) newValue : GetNakedObjectFromId(newValue)); }
public string GetCollectionItemId(IObjectFacade owner, IAssociationFacade assocFacade) { IAssociationSpec assoc = assocFacade.WrappedSpec(); return GetObjectId(owner) + Sep + assoc.Id + Sep + "Item"; }
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); } }
public string GetFieldAutoCompleteId(string id, IObjectFacade owner, IAssociationFacade assocFacade) { IAssociationSpec assoc = assocFacade.WrappedSpec(); return(assoc.ReturnSpec.IsParseable ? id : id + Sep + AutoCompleteName); }
protected ParameterRepresentation GetParameter(IAssociationFacade assoc) { var objectFacade = ActionContext.Target; return(ParameterRepresentation.Create(OidStrategy, Req, objectFacade, assoc, ActionContext, Flags)); }
protected string GetConcurrencyFieldInputId(IAssociationFacade parent, IObjectFacade nakedObject, IAssociationFacade assoc) { return parent == null ? IdHelper.GetConcurrencyFieldInputId(nakedObject, assoc) : IdHelper.GetInlineConcurrencyFieldInputId(parent, nakedObject, assoc); }
public override object GetPropertyValue(IOidStrategy oidStrategy, HttpRequestMessage req, IAssociationFacade property, IObjectFacade target, RestControlFlags flags, bool valueOnly, bool useDateOverDateTime) { // todo minimise this return(Representation.GetPropertyValue(oidStrategy, req, property, target, flags, valueOnly, useDateOverDateTime)); }
internal void ValidateAssociation(IObjectFacade nakedObject, IAssociationFacade oneToOneAssoc, object attemptedValue, IAssociationFacade parent = null) { string key = GetFieldInputId(parent, nakedObject, oneToOneAssoc); try { var oid = Facade.OidTranslator.GetOidTranslation(nakedObject); var ac = new ArgumentContextFacade { Value = attemptedValue, ValidateOnly = true }; var pcs = Facade.PutProperty(oid, oneToOneAssoc.Id, ac); if (!string.IsNullOrEmpty(pcs.Reason)) { ModelState.AddModelError(key, pcs.Reason); } } catch (NakedObjectsFacadeException) { ModelState.AddModelError(key, MvcUi.InvalidEntry); } finally { AddAttemptedValue(key, attemptedValue); } }
protected static IEnumerable <Tuple <IAssociationFacade, object> > GetFieldsAndMatchingValues(IObjectFacade nakedObject, IAssociationFacade parent, IEnumerable <IAssociationFacade> associations, ObjectAndControlData controlData, Func <IAssociationFacade, IObjectFacade, IAssociationFacade, string> idFunc) { foreach (var assoc in associations.Where(a => !a.IsInline)) { string name = idFunc(parent, nakedObject, assoc); object newValue = GetValueFromForm(controlData, name); yield return(new Tuple <IAssociationFacade, object>(assoc, newValue)); } }
public ChoiceRelType(IAssociationFacade property, UriMtHelper helper) : this(helper) { member = property; }
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); } }
public static object GetChoiceValue(IOidStrategy oidStrategy, HttpRequest req, IObjectFacade item, IAssociationFacade property, RestControlFlags flags) { return(GetChoiceValue(oidStrategy, item, () => new ChoiceRelType(property, new UriMtHelper(oidStrategy, req, item)), flags)); }
protected string GetFieldInputId(IAssociationFacade parent, IObjectFacade nakedObject, IAssociationFacade assoc) { return(parent == null?IdHelper.GetFieldInputId(nakedObject, assoc) : IdHelper.GetInlineFieldInputId(parent, nakedObject, assoc)); }
public static string SafeGetTitle(IAssociationFacade property, IObjectFacade valueNakedObject) => valueNakedObject == null ? "" : property.GetTitle(valueNakedObject);
public static object GetChoiceValue(IOidStrategy oidStrategy, HttpRequestMessage req, IObjectFacade item, IAssociationFacade property, RestControlFlags flags) { return GetChoiceValue(oidStrategy, item, () => new ChoiceRelType(property, new UriMtHelper(oidStrategy, req, item)), flags); }
public static object GetPropertyValue(IOidStrategy oidStrategy, HttpRequestMessage req, IAssociationFacade property, IObjectFacade target, RestControlFlags flags, bool valueOnly, bool useDateOverDateTime) { IObjectFacade valueNakedObject = property.GetValue(target); if (valueNakedObject == null) { return(null); } if (target.IsTransient && property.IsUsable(target).IsAllowed&& property.IsVisible(target) && property.IsSetToImplicitDefault(target)) { return(null); } if (property.Specification.IsParseable || property.Specification.IsCollection) { return(RestUtils.ObjectToPredefinedType(valueNakedObject.Object, useDateOverDateTime)); } if (valueOnly) { return(RefValueRepresentation.Create(oidStrategy, new ValueRelType(property, new UriMtHelper(oidStrategy, req, valueNakedObject)), flags)); } string title = RestUtils.SafeGetTitle(property, valueNakedObject); var helper = new UriMtHelper(oidStrategy, req, property.IsInline ? target : valueNakedObject); var optionals = new List <OptionalProperty> { new OptionalProperty(JsonPropertyNames.Title, title) }; if (property.IsEager(target)) { optionals.Add(new OptionalProperty(JsonPropertyNames.Value, ObjectRepresentation.Create(oidStrategy, valueNakedObject, req, flags))); } return(LinkRepresentation.Create(oidStrategy, new ValueRelType(property, helper), flags, optionals.ToArray())); }
public FieldFacadeAdapter(IAssociationFacade association) { this.association = association; }
public static ParameterRepresentation Create(IOidStrategy oidStrategy, HttpRequestMessage req, IObjectFacade objectFacade, IAssociationFacade assoc, ActionContextFacade actionContext, RestControlFlags flags) { var optionals = new List<OptionalProperty>(); if (assoc.IsChoicesEnabled != Choices.NotEnabled && !assoc.GetChoicesParameters().Any()) { IObjectFacade[] choices = assoc.GetChoices(objectFacade, null); object[] choicesArray = choices.Select(c => RestUtils.GetChoiceValue(oidStrategy, req, c, assoc, flags)).ToArray(); optionals.Add(new OptionalProperty(JsonPropertyNames.Choices, choicesArray)); } var adapter = new FieldFacadeAdapter(assoc); IObjectFacade defaultNakedObject = assoc.GetValue(objectFacade); if (defaultNakedObject != null) { string title = defaultNakedObject.TitleString; object value = RestUtils.ObjectToPredefinedType(defaultNakedObject.Object, true); var isValue = defaultNakedObject.Specification.IsParseable || (defaultNakedObject.Specification.IsCollection && defaultNakedObject.ElementSpecification.IsParseable); object defaultValue = isValue ? value : CreateDefaultLinks(oidStrategy, req, adapter, actionContext.Action, defaultNakedObject, title, flags); optionals.Add(new OptionalProperty(JsonPropertyNames.Default, defaultValue)); } if (optionals.Count == 0) { return new ParameterRepresentation(oidStrategy, req, objectFacade, adapter, flags); } return CreateWithOptionals<ParameterRepresentation>(new object[] { oidStrategy, req, objectFacade, adapter, flags }, optionals); }
protected ParameterRepresentation GetParameter(IAssociationFacade assoc) { IObjectFacade objectFacade = ActionContext.Target; return ParameterRepresentation.Create(OidStrategy, Req, objectFacade, assoc, ActionContext, Flags); }
public UriMtHelper(IOidStrategy oidStrategy, HttpRequestMessage req, IAssociationFacade assoc) : this(oidStrategy ,req) { cachedId = ""; if (assoc.IsCollection) { CachedType = assoc.IsASet ? PredefinedType.Set.ToRoString() : PredefinedType.List.ToRoString(); } else { CachedType = assoc.Specification.DomainTypeName(oidStrategy); } }
public string GetAggregateFieldInputId(IObjectFacade objectFacade, IAssociationFacade propertyFacade) { string fieldId; INakedObjectAdapter nakedObject = objectFacade.WrappedAdapter(); var aoid = nakedObject.Oid as IAggregateOid; if (aoid != null) { IAssociationSpec parent = ((IObjectSpec) aoid.ParentOid.Spec).Properties.SingleOrDefault(p => p.Id == aoid.FieldName); fieldId = parent.Id + Sep + GetObjectId(objectFacade) + Sep + propertyFacade.Id + Sep + InputOrSelect(propertyFacade.WrappedSpec().ReturnSpec); } else { fieldId = GetFieldInputId(objectFacade, propertyFacade); } return fieldId; }
public string GetInlineFieldInputId(IAssociationFacade parent, IObjectFacade owner, IAssociationFacade assocFacade) { IAssociationSpec assoc = assocFacade.WrappedSpec(); return GetInlineFieldId(parent, owner, assocFacade) + Sep + InputOrSelect(assoc.ReturnSpec); }
public string GetFieldId(IObjectFacade owner, IAssociationFacade assocFacade) { IAssociationSpec assoc = assocFacade.WrappedSpec(); return GetObjectId(owner) + Sep + assoc.Id; }
public string GetInlineConcurrencyFieldInputId(IAssociationFacade parent, IObjectFacade owner, IAssociationFacade assoc) { return GetInlineFieldId(parent, owner, assoc) + Sep + ConcurrencyName; }
public string GetFieldAutoCompleteId(string id, IObjectFacade owner, IAssociationFacade assocFacade) { IAssociationSpec assoc = assocFacade.WrappedSpec(); return assoc.ReturnSpec.IsParseable ? id : id + Sep + AutoCompleteName; }
public string GetInlineFieldId(IAssociationFacade parentFacade, IObjectFacade owner, IAssociationFacade assocFacade) { IAssociationSpec parent = parentFacade.WrappedSpec(); IAssociationSpec assoc = assocFacade.WrappedSpec(); return(parent.Id + Sep + GetObjectId(owner) + Sep + assoc.Id); }
public string GetConcurrencyFieldInputId(IObjectFacade owner, IAssociationFacade assoc) { return GetFieldId(owner, assoc) + Sep + ConcurrencyName; }
public static IAssociationSpec WrappedSpec(this IAssociationFacade associationFacade) { return(associationFacade == null ? null : ((AssociationFacade)associationFacade).WrappedSpec); }
public string GetConcurrencyActionInputId(IObjectFacade owner, IActionFacade action, IAssociationFacade assocFacade) { IAssociationSpec assoc = assocFacade.WrappedSpec(); return GetActionId(owner, action) + Sep + assoc.Id + Sep + ConcurrencyName; }
public string GetCollectionItemId(IObjectFacade owner, IAssociationFacade assocFacade) { IAssociationSpec assoc = assocFacade.WrappedSpec(); return(GetObjectId(owner) + Sep + assoc.Id + Sep + "Item"); }