private object GetPropertyValue(IModelProperty prop, IEnumerable values) { object result = null; if (prop.IsEnumerable) { result = values; } else if (prop.IsArray) { result = prop.ToArray(values); } else if (prop.IsCollection) { var tempValues = (IEnumerable)resolver.ResolveInstance(prop.PropertyType); foreach (var val in values) { prop.AddToCollection(tempValues, val); } result = tempValues; } else //it's a single value, just return the first one (should really only be one thing) { result = values.Cast <object>().FirstOrDefault(); } return(result); }
public override IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory) { // escape if (modelData == null) { return(null); } ITemplate template = null; if (modelData is IComponentPresentation) { template = ((IComponentPresentation)modelData).ComponentTemplate; } else if (modelData is IPage) { template = ((IPage)modelData).PageTemplate; } // Run away run away if (template == null) { return(null); } var renderData = new RenderData(); // TODO reuse logic from page rendering var view = Regex.Replace(template.Title, @"\[.*\]|\s", String.Empty); //Todo: make it configurable var action = DefaultControllerAction; var controller = DefaultController; var viewFieldName = "view"; var actionFieldName = "action"; var controllerFieldName = "controller"; var fields = template.MetadataFields; if (fields != null) { if (fields.ContainsKey(viewFieldName)) { view = fields[viewFieldName].Value; } if (fields.ContainsKey(controllerFieldName)) { controller = fields[controllerFieldName].Value; } if (fields.ContainsKey(actionFieldName)) { action = fields[actionFieldName].Value; } } renderData.View = view; renderData.Action = action; renderData.Controller = controller; return(new[] { renderData }); }
public void SetPropertyValue(object model, IModel data, IModelProperty property) { if (property == null) { throw new ArgumentNullException("property"); } if (model != null && data != null && property.PropertyAttribute != null) { var propertyValue = GetPropertyValue(property, property.PropertyAttribute.GetPropertyValues(data, property, this)); if (propertyValue != null) { try { property.Set(model, propertyValue); } catch (Exception e) { if (e is TargetException || e is InvalidCastException) { throw new PropertyTypeMismatchException(property, property.PropertyAttribute, propertyValue); } else { throw e; } } } } }
protected override Type GetModelType(IModel data, IViewModelFactory factory, IModelProperty property) { if (KeywordType == null) { return(property.ModelType); } return(KeywordType); }
public void Add(IModelProperty modelProperty) { if (modelProperties.Keys.Contains(modelProperty.Pid)) { modelProperties.Remove(modelProperty.Pid); } modelProperties.Add(modelProperty.Pid, modelProperty); }
//Example of using the BaseData object public override IEnumerable GetPropertyValues(IComponent component, IModelProperty property, ITemplate template, IViewModelFactory factory) { IMultimedia[] result = null; if (component != null && component.Multimedia != null) { result = new IMultimedia[] { component.Multimedia }; } return(result); }
public override IEnumerable GetFieldValues(IField field, IModelProperty property, ITemplate template, IViewModelFactory factory) { string pageId = null; if (_contextModel != null) pageId = _contextModel.PageId.ToString(); return field.Values .Select(v => new MvcHtmlString(factory.RichTextResolver.Resolve(v, pageId).ToString())); }
public DateTimeValidator(ValidationResultHelper <TModel> helper, IModelProperty <DateTime?> property) { _helper = helper; _property = property; if (_property.Value < (DateTime)SqlDateTime.MinValue) { Failed = true; } }
protected override Type GetModelType(IModel data, IViewModelFactory factory, IModelProperty property) { if (EmbeddedModelType == null) { return property.ModelType; } return EmbeddedModelType; }
public override IEnumerable GetPropertyValues(IViewModelData modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData is IPageData) { var cpModels = (modelData as IPageData).ComponentPresentations; result = GetPresentationValues(cpModels, property, factory); } return result; }
public override IEnumerable GetFieldValues(IField field, IModelProperty property, ITemplate template, IViewModelFactory factory) { IEnumerable fieldValue = null; var values = field.Values; if (IsBooleanValue) fieldValue = values.Select(v => { bool b; return bool.TryParse(v, out b) && b; }); else fieldValue = values; return fieldValue; }
public override IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData != null && modelData is IKeyword) { result = new IKeyword[] { modelData as IKeyword }; } return(result); }
public override IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData is IPage) { var pageModel = modelData as IPage; result = this.GetPropertyValues(pageModel, property.ModelType, factory); } return(result); }
public override IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData is IPage) { var cpModels = (modelData as IPage).ComponentPresentations; result = GetPresentationValues(cpModels, property, factory); } return(result); }
private HtmlString XpmMarkupFor(IFieldSet fields, IModelProperty fieldProp, int index) { try { return(new HtmlString(GenerateSiteEditTag(GetField(fields, fieldProp), index))); } catch (NullReferenceException) { return(null); } }
private IField GetField(IFieldSet fields, IModelProperty fieldProp) { IField result = null; if (fieldProp.PropertyAttribute is IFieldAttribute) { var fieldName = ((IFieldAttribute)fieldProp.PropertyAttribute).FieldName; result = fields.ContainsKey(fieldName) ? fields[fieldName] : null; } return(result); }
/// <summary> /// Builds a new Model Property object. Uses Reflection (GetCustomAttributes) /// </summary> /// <param name="propertyInfo"></param> /// <returns></returns> private IModelProperty BuildModelProperty(PropertyInfo propertyInfo) { IModelProperty result = null; var propAttribute = propertyInfo.GetCustomAttributes(typeof(IPropertyAttribute), true).FirstOrDefault() as IPropertyAttribute; if (propAttribute != null) //only add properties that have the custom attribute { result = GetModelProperty(propertyInfo, propAttribute); } return(result); }
private IModelProperty FindOrBuildModelProperty(IList <IModelProperty> allModelProperties, PropertyInfo propertyInfo) { IModelProperty result = null; result = allModelProperties.FirstOrDefault(x => x.Name == propertyInfo.Name); if (result == null) { result = BuildModelProperty(propertyInfo); allModelProperties.Add(result); } return(result); }
public override IEnumerable GetFieldValues(IField field, IModelProperty property, ITemplate template, IViewModelFactory factory) { string pageId = null; if (_contextModel != null) { pageId = _contextModel.PageId.ToString(); } return(field.Values .Select(v => new MvcHtmlString(factory.RichTextResolver.Resolve(v, pageId).ToString()))); }
public override IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData != null && modelData is IComponentPresentation && (modelData as IComponentPresentation).ComponentTemplate != null) { ITemplate templateData = (modelData as IComponentPresentation).ComponentTemplate; result = this.GetPropertyValues(templateData, property.ModelType, factory); } return(result); }
public override IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory) { // escape if (modelData == null) return null; ITemplate template = null; if (modelData is IComponentPresentation) { template = ((IComponentPresentation)modelData).ComponentTemplate; } else if (modelData is IPage) { template = ((IPage)modelData).PageTemplate; } // Run away run away if (template == null) return null; var fields = template.MetadataFields; var renderData = new RenderData(); // TODO reuse logic from page rendering var view = Regex.Replace(template.Title, @"\[.*\]|\s", String.Empty); //Todo: make it configurable var action = DefaultControllerAction; var controller = DefaultController; var viewFieldName = "view"; var actionFieldName = "action"; var controllerFieldName = "controller"; if (fields.ContainsKey(viewFieldName)) { view = fields[viewFieldName].Value; } if (fields.ContainsKey(controllerFieldName)) { controller = fields[controllerFieldName].Value; } if (fields.ContainsKey(actionFieldName)) { action = fields[actionFieldName].Value; } renderData.View = view; renderData.Action = action; renderData.Controller = controller; return new[] { renderData }; }
public override IEnumerable GetFieldValues(IField field, IModelProperty property, ITemplate template, IViewModelFactory factory) { var result = new List <object>(); foreach (var value in field.Values) { object parsed; if (EnumTryParse(property.ModelType, value, out parsed)) { result.Add(parsed); } } return(result); }
protected override Type GetModelType(IModel data, IViewModelFactory factory, IModelProperty property) { return(property.ModelType); //Type result = null; //try //{ // result = factory.FindViewModelByAttribute<IContentModelAttribute>(data, LinkedComponentTypes); //} //catch (ViewModelTypeNotFoundException) //{ // result = null; //} //return result; }
/// <summary> /// The Key of a Keyword field. /// </summary> /// <param name="fieldName">Tridion schema field name</param> //public KeywordKeyFieldAttribute(string fieldName) : base(fieldName) { } public override IEnumerable GetFieldValues(IField field, IModelProperty property, ITemplate template, IViewModelFactory factory) { IEnumerable value = null; var values = field.Keywords; if (IsBooleanValue) { value = values.Select(k => { bool b; return(bool.TryParse(k.Title, out b) && b); }); } else { value = values.Select(k => k.Title); } return(value); }
protected virtual object BuildModel(IViewModelFactory factory, IModel data, IModelProperty property) { object result = null; if (ComplexTypeMapping != null) { result = factory.BuildMappedModel(data, ComplexTypeMapping); } else { var modelType = GetModelType(data, factory, property); result = modelType != null?factory.BuildViewModel(modelType, data) : null; } return(result); }
private int IndexOf <T>(IModelProperty fieldProp, object model, T item) { int index = -1; object value = fieldProp.Get(model); if (value is IEnumerable <T> ) { IEnumerable <T> list = (IEnumerable <T>)value; index = IndexOf(list, item); } else { throw new FormatException(String.Format("Generic type of property type {0} does not match generic type of item {1}", value.GetType().Name, typeof(T).Name)); } return(index); }
public override IEnumerable GetFieldValues(IField field, IModelProperty property, ITemplate template, IViewModelFactory factory) { IEnumerable fieldValue = null; var values = field.Values; if (IsBooleanValue) { fieldValue = values.Select(v => { bool b; return(bool.TryParse(v, out b) && b); }); } else { fieldValue = values; } return(fieldValue); }
private object GetPropertyValue(IModelProperty prop, IEnumerable values) { object result = null; if (prop.IsEnumerable) { result = values; } else if (prop.IsArray) { result = prop.ToArray(values); } else if (prop.IsCollection) { var tempValues = (IEnumerable)_resolver.ResolveInstance(prop.PropertyType); Type elementType; if (_resolver.ReflectionHelper.IsGenericCollection(prop.PropertyType, out elementType)) { foreach (var val in values) { if (elementType.IsAssignableFrom(val.GetType())) { prop.AddToCollection(tempValues, val); } } } result = tempValues; } else //it's a single value, just return the first one (should really only be one thing) { foreach (var val in values) { if (val == null) { continue; } if (prop.PropertyType.IsAssignableFrom(val.GetType())) { result = val; break; } } } return(result); }
protected override Type GetModelType(IModel data, IViewModelFactory factory, IModelProperty property) { if (LinkedComponentTypes == null || LinkedComponentTypes.Count() == 0) { return(property.ModelType); } Type result = null; try { result = factory.FindViewModelByAttribute <IContentModelAttribute>(data, LinkedComponentTypes); } catch (ViewModelTypeNotFoundException) { result = null; } return(result); }
private HtmlString SiteEditable <TProp>(IViewModel model, IFieldSet fields, IModelProperty fieldProp, int index) { string markup = string.Empty; object value = null; string propValue = string.Empty; try { var field = GetField(fields, fieldProp); markup = IsSiteEditEnabled(model) ? GenerateSiteEditTag(field, index) : string.Empty; value = fieldProp.Get(model); propValue = value == null ? string.Empty : value.ToString(); } catch (NullReferenceException) { return(null); } return(new HtmlString(markup + propValue)); }
protected override Type GetModelType(IModel data, IViewModelFactory factory, IModelProperty property) { if (LinkedComponentTypes == null || LinkedComponentTypes.Count() == 0) { if (!property.ModelType.IsInterface && !property.ModelType.IsAbstract) { return(property.ModelType); } //setting it to null in case the list initiated and contains 0 items. LinkedComponentTypes = null; } Type result = null; //throw any exception if occured. there no point to handling it over here result = factory.FindViewModelByAttribute <IContentModelAttribute>(data, LinkedComponentTypes); return(result); }
public IModelProperty GetModelProperty(PropertyInfo propertyInfo) { IModelProperty result = null; IList <IModelProperty> allModelProperties; if (modelProperties.TryGetValue(propertyInfo.DeclaringType, out allModelProperties)) { result = FindOrBuildModelProperty(allModelProperties, propertyInfo); } else { lock (modelProperties) { allModelProperties = GetModelProperties(propertyInfo.DeclaringType); result = FindOrBuildModelProperty(allModelProperties, propertyInfo); } } return(result); }
public override IEnumerable GetFieldValues(IField field, IModelProperty property, ITemplate template, IViewModelFactory factory = null) { IEnumerable fieldValue = null; var values = GetRawValues(field); if (values != null) { if (ComplexTypeMapping == null && ReturnRawData) { fieldValue = values; } else { fieldValue = values.Cast <object>() .Select(value => BuildModel(factory, BuildModelData(value, field, template), property)) .Where(value => value != null); } } return(fieldValue); }
//public ResolvedUrlFieldAttribute(string fieldName) : base(fieldName) { } public override IEnumerable GetFieldValues(IField field, IModelProperty property, ITemplate template, IViewModelFactory factory) { string pageId = string.Empty; if (_contextModel != null) { pageId = _contextModel.PageId.ToString(); } return(field.LinkedComponentValues .Select(x => { if (IncludePage && !string.IsNullOrEmpty(pageId)) { return factory.LinkResolver.ResolveUrl(x, pageId); } else { return factory.LinkResolver.ResolveUrl(x); } })); }
public override IEnumerable GetPropertyValues(IViewModelData modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData != null) { if (modelData is IComponentPresentationData) { var cpData = modelData as IComponentPresentationData; if (cpData != null) { result = GetPropertyValues(cpData.Component, property, cpData.Template, factory); } } else if (modelData is IComponentData) //Not all components come with Templates { result = GetPropertyValues(modelData as IComponentData, property, null, factory); } } return result; }
public static ModelViewProperty CreateInstance(IModelType parent, string name) { if (parent == null) { return(null); } if (string.IsNullOrWhiteSpace(name)) { return(null); } name = name.Trim(); IModelProperty modelProperty = parent.GetProperty(name); if (modelProperty == null) { throw new EtkException($"Cannot find property '{name}' for model type {parent.Name}"); } return(new ModelViewProperty(parent, modelProperty)); }
public override IEnumerable GetPropertyValues(IComponentData component, IModelProperty property, ITemplateData template, IViewModelFactory factory) { IEnumerable result = null; if (component != null && component.MultimediaData != null) { result = new string[] { component.MultimediaData.Url }; } return result; }
public override IEnumerable GetPropertyValues(IComponentData component, IModelProperty property, ITemplateData template, IViewModelFactory factory) { IMultimediaData result = null; if (component != null && component.MultimediaData != null) { result = component.MultimediaData; } return new IMultimediaData[] { result }; }
/// <summary> /// The Key of a Keyword field. /// </summary> /// <param name="fieldName">Tridion schema field name</param> //public KeywordKeyFieldAttribute(string fieldName) : base(fieldName) { } public override IEnumerable GetFieldValues(IFieldData field, IModelProperty property, ITemplateData template, IViewModelFactory factory) { IEnumerable value = null; var values = field.Values.Cast<Dynamic.IKeyword>(); if (IsBooleanValue) value = values.Select(k => { bool b; return bool.TryParse(k.Key, out b) && b; }); else value = values.Select(k => k.Key); return value; }
public override IEnumerable GetPropertyValues(IViewModelData modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData != null && modelData is IKeywordData) { result = new IKeywordData[] { modelData as IKeywordData }; } return result; }
public override IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData != null && modelData is IComponentPresentation && (modelData as IComponentPresentation).ComponentTemplate != null) { ITemplate templateData = (modelData as IComponentPresentation).ComponentTemplate; result = this.GetPropertyValues(templateData, property.ModelType, factory); } return result; }
public override System.Collections.IEnumerable GetPresentationValues(IList<IComponentPresentationData> cps, IModelProperty property, IViewModelFactory factory) { return cps.Where(cp => { bool result = false; if (cp.Template != null && cp.Template.Metadata != null && cp.Template.Metadata.ContainsKey("view")) { var view = cp.Template.Metadata["view"].Values.Cast<string>().FirstOrDefault(); if (view != null && view.StartsWith(ViewPrefix)) { result = true; } } return result; }) .Select(cp => { object model = null; if (ComplexTypeMapping != null) { model = factory.BuildMappedModel(cp, ComplexTypeMapping); } else model = factory.BuildViewModel((cp)); return model; }); }
public override IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData != null) { //need null checks on Template IFieldSet fields = null; ITemplate template = null; if (IsTemplateMetadata) { if (modelData is IComponentPresentation) { var templateData = modelData as IComponentPresentation; template = templateData.ComponentTemplate; } else if (modelData is IPage) { var templateData = modelData as IPage; template = templateData.PageTemplate; } fields = template != null ? template.MetadataFields : null; } else if (IsMetadata) { if (modelData is IComponentPresentation) { fields = (modelData as IComponentPresentation).Component.MetadataFields; } else if (modelData is IComponent) { fields = (modelData as IComponent).MetadataFields; } else if (modelData is IPage) { fields = (modelData as IPage).MetadataFields; } else if (modelData is ITemplate) { fields = (modelData as ITemplate).MetadataFields; } else if (modelData is IKeyword) { fields = (modelData as IKeyword).MetadataFields; } //Any other things with MetadataFields? } else if (modelData is IComponentPresentation) { fields = (modelData as IComponentPresentation).Component.Fields; } else if (modelData is IEmbeddedFields) { fields = (modelData as IEmbeddedFields).Fields; } if (String.IsNullOrEmpty(FieldName)) FieldName = GetFieldName(property.Name); //Convention over configuration by default -- Field name = Property name if (fields != null && fields.ContainsKey(FieldName)) { result = this.GetFieldValues(fields[FieldName], property, template, factory); } } return result; }
protected abstract Type GetModelType(IModel data, IViewModelFactory factory, IModelProperty property);
protected virtual object BuildModel(IViewModelFactory factory, IModel data, IModelProperty property) { object result = null; if (ComplexTypeMapping != null) { result = factory.BuildMappedModel(data, ComplexTypeMapping); } else { var modelType = GetModelType(data, factory, property); result = modelType != null ? factory.BuildViewModel(modelType, data, _contextModel) : null; } return result; }
public override IEnumerable GetFieldValues(IField field, IModelProperty property, ITemplate template,IViewModelFactory factory = null) { IEnumerable fieldValue = null; var values = GetRawValues(field); if (values != null) { if (ComplexTypeMapping == null && ReturnRawData) fieldValue = values; else fieldValue = values.Cast<object>() .Select(value => BuildModel(factory, BuildModelData(value, field, template), property)) .Where(value => value != null); } return fieldValue; }
public override IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData is IPage) { var cpModels = (modelData as IPage).ComponentPresentations; var contextModel = factory.ContextResolver.ResolveContextModel(modelData); result = GetPresentationValues(cpModels, property, factory, contextModel); } return result; }
//public NumericKeywordKeyFieldAttribute(string fieldName) : base(fieldName) { } public override IEnumerable GetFieldValues(IFieldData field, IModelProperty property, ITemplateData template, IViewModelFactory factory) { return field.Values.Cast<Dynamic.IKeyword>() .Select(k => { double i; double.TryParse(k.Key, out i); return i; }); }
public override IEnumerable GetPropertyValues(IComponentData component, IModelProperty property, ITemplateData template, IViewModelFactory factory) { return component == null ? null : new string[] { component.Title }; }
//public RichTextFieldAttribute(string fieldName) : base(fieldName) { } public override IEnumerable GetFieldValues(IFieldData field, IModelProperty property, ITemplateData template, IViewModelFactory factory) { return field.Values.Cast<string>() .Select(v => v.ResolveRichText()); //Hidden dependency on DD4T implementation }
//public ResolvedUrlFieldAttribute(string fieldName) : base(fieldName) { } public override IEnumerable GetFieldValues(IFieldData field, IModelProperty property, ITemplateData template, IViewModelFactory factory) { return field.Values.Cast<Dynamic.IComponent>() .Select(x => x.GetResolvedUrl()); }
//Example of using the BaseData object public override IEnumerable GetPropertyValues(IComponentData component, IModelProperty property, ITemplateData template, IViewModelFactory factory) { Dynamic.IMultimedia[] result = null; if (component != null && component.MultimediaData != null) { result = new Dynamic.IMultimedia[] { component.MultimediaData.BaseData as Dynamic.IMultimedia }; } return result; }
//public DateFieldAttribute(string fieldName) : base(fieldName) { } public override IEnumerable GetFieldValues(IFieldData field, IModelProperty property, ITemplateData template, IViewModelFactory factory) { return field.Values.Cast<DateTime>(); }
public override IEnumerable GetFieldValues(IFieldData field, IModelProperty property, ITemplateData template, IViewModelFactory factory) { var result = new List<object>(); foreach (var value in field.Values) { object parsed; if (EnumTryParse(property.ModelType, value, out parsed)) { result.Add(parsed); } } return result; }
public abstract IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory);
/// <summary> /// When overriden in a derived class, this gets the value of the Property for a given Component /// </summary> /// <param name="component">Component for the View Model</param> /// <param name="propertyType">Actual return type for the Property</param> /// <param name="template">Component Template</param> /// <param name="factory">View Model factory</param> /// <returns>The Property value</returns> public abstract IEnumerable GetPropertyValues(IComponent component, IModelProperty property, ITemplate template, IViewModelFactory factory);
public override IEnumerable GetFieldValues(IField field, IModelProperty property, ITemplate template, IViewModelFactory factory) { return field.LinkedComponentValues .Select(x => x.GetResolvedUrl()); }
public override IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory factory) { IEnumerable result = null; if (modelData is IPage) { var pageModel = modelData as IPage; result = this.GetPropertyValues(pageModel, property.ModelType, factory); } return result; }
public IEnumerable GetPropertyValues(IModel modelData, IModelProperty property, IViewModelFactory builder, IContextModel contextModel) { _contextModel = contextModel; return base.GetPropertyValues(modelData, property, builder); }
//Really leaving the bulk of the work to implementer -- they must both find out if the CP matches this attribute and then construct an object with it /// <summary> /// When overriden in a derived class, this gets a set of values representing Component Presentations of a Page /// </summary> /// <param name="cps">Component Presentations for the Page Model</param> /// <param name="propertyType">Actual return type of the Property</param> /// <param name="factory">A View Model factory</param> /// <returns>The Property value</returns> public abstract IEnumerable GetPresentationValues(IList<IComponentPresentation> cps, IModelProperty property, IViewModelFactory factory, IContextModel contextModel);