public override object InvokeMember(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { if (name == "Xml") { if (args.Positional.Count() == 0) { dynamic dself = self; // Build an XElement var x = new XElement( (string)dself.Stereotype(), XContents(dself) ); return x; } else { // Deserialize foreach (var p in args.Positional) { if (p is string) { var x = XElement.Parse((string)p); MeldXml(self,x); } else if (p is XElement) { MeldXml(self, (XElement)p); } } return self; } } return proceed(); }
public async Task <object> InvokeAsync(string name, INamedEnumerable <object> parameters) { if (!string.IsNullOrEmpty(name)) { return(await ShapeTypeExecuteAsync(name, parameters)); } if (parameters.Positional.Count() == 1) { return(await ShapeExecuteAsync(parameters.Positional.First())); } if (parameters.Positional.Any()) { var htmlContents = await ShapeExecuteAsync(parameters.Positional); var htmlContentBuilder = new HtmlContentBuilder(); foreach (var htmlContent in htmlContents) { htmlContentBuilder.AppendHtml(htmlContent); } } // zero args - no display to execute return(null); }
public override object InvokeMember(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { // Call to Json function // Stuff.Json() -> serialize to string // Stuff.Json(string foo) -> meld from Json string if (name == "Json") { if (args.Positional.Count() == 0) { // Serialize var serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new[] { new ClayJavaScriptConverter() }); dynamic dself = self; return serializer.Serialize(dself.Get()); } else { var serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new[] { new ClayJavaScriptConverter() }); dynamic stuff = self; // TODO: Accept some named parameters? foreach (var p in args.Positional) { // Deserialize and meld each Json string // TODO: Throw parameter error if p is not a string stuff.Meld(serializer.Deserialize((String)p, typeof(Stuff))); } return self; } } return proceed(); }
private static void MergeAttributes(INamedEnumerable <object> args, IDictionary <string, string> attributes) { var arg = args.Positional.SingleOrDefault(); if (arg != null) { if (arg is IDictionary) { var dictionary = arg as IDictionary; foreach (var key in dictionary.Keys) { attributes[Convert.ToString(key)] = Convert.ToString(dictionary[key]); } } else { foreach (var prop in arg.GetType().GetProperties()) { attributes[TranslateIdentifier(prop.Name)] = Convert.ToString(prop.GetValue(arg, null)); } } } foreach (var named in args.Named) { attributes[named.Key] = Convert.ToString(named.Value); } }
public static async ValueTask <IShape> CreateAsync <T>( this IShapeFactory factory, string shapeType, INamedEnumerable <T> parameters) { if (parameters == null ! || parameters == Arguments.Empty) { return(await factory.CreateAsync(shapeType, NewShape)); } var shape = (Shape)await factory.CreateAsync(shapeType, NewShape); var initializer = parameters.Positional.SingleOrDefault(); // If only one non-Type, use it as the source object to copy. if (initializer != null) { // Use the Arguments class to optimize reflection code. var arguments = Arguments.From(initializer); foreach (var prop in arguments.Named) { shape.Properties[prop.Key] = prop.Value; } } else { foreach (var(key, value) in parameters.Named) { shape.Properties[key] = value !; } } return(shape); }
public static IShape Create(this IShapeFactory factory, string shapeType, INamedEnumerable <object> parameters) { return(factory.Create(shapeType, () => { var shape = new Shape(); // If only one non-Type, use it as the source object to copy if (parameters != null) { var initializer = parameters.Positional.SingleOrDefault(); if (initializer != null) { foreach (var prop in initializer.GetType().GetProperties()) { shape.Properties[prop.Name] = prop.GetValue(initializer, null); } } else { foreach (var kv in parameters.Named) { shape.Properties[kv.Key] = kv.Value; } } } return shape; })); }
public override object InvokeMember(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { switch (name) { case "ContainsKey": if (args.Positional.Count() == 1 && args.Positional.First().GetType() == typeof(String)) { return ((dynamic)self)[args.Positional.First()] != null; } break; } return proceed(); }
public override object InvokeMember(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { if (name == "Meld") { // Perform meld foreach (var o in args.Positional) { Meld(self, o); } return null; } return proceed(); }
public override object InvokeMember(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { // Intercept Add() and inject the prefix into the incoming shape if (name == "Add" && (args.Positional.Count() == 1 || args.Positional.Count() == 2) && (typeof(IShape).IsInstanceOfType(args.Positional.First()))) { dynamic added = args.Positional.First(); if (added.Prefix != null) { added.Prefix = _prefix + "." + ((string)added.Prefix); } } return proceed(); }
public override object InvokeMember(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { if (name == "Invert") { if (args.Count() == 0) { Inverted = true; } else { Inverted = (bool)(args.First()); } return null; } return proceed(); }
public IShape Create(string shapeType, INamedEnumerable<object> parameters, Func<dynamic> createShape) { dynamic shape = createShape(); if (parameters != null) { foreach (KeyValuePair<string, object> parameter in parameters.Named) { shape.Data[parameter.Key] = parameter.Value; } } return shape; }
/// <summary> /// 调用。 /// </summary> /// <param name="name">名称。</param> /// <param name="parameters">参数。</param> /// <returns>结果。</returns> public object Invoke(string name, INamedEnumerable <object> parameters) { if (!string.IsNullOrEmpty(name)) { return(ShapeTypeExecute(name, parameters)); } if (parameters.Positional.Count() == 1) { return(ShapeExecute(parameters.Positional.Single())); } return(parameters.Positional.Any() ? new Combined(ShapeExecute(parameters.Positional)) : null); }
public object Invoke(string name, INamedEnumerable<object> parameters) { if (!string.IsNullOrEmpty(name)) { return ShapeTypeExecute(name, parameters); } if (parameters.Positional.Count() == 1) { return ShapeExecute(parameters.Positional.Single()); } if (parameters.Positional.Any()) { return new Combined(ShapeExecute(parameters.Positional)); } // zero args - no display to execute return null; }
public override object InvokeMember(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { if (name == "Supertype") { if (args.Count() == 0) { return _superType; } if (args.Positional.Count()==1) { var param = args.Positional.First(); if (param is Type) { _superType = ((Type)param).Name; } else { _superType = param.ToString(); } return self; } } if (name == "Stereotype") { if (args.Count() == 0) { return _stereoType; } if (args.Positional.Count() == 1) { var param = args.Positional.First(); if (param is Type) { _stereoType = ((Type)param).Name; } else { _stereoType = param.ToString(); } return self; } } // TODO: Slow lookup, convert to a dict // Converts to Array supertype if we use any of the array manipulation methods if (_arrayMethods.Contains(name)) { dynamic dself = self; dself.Supertype("Array"); } return proceed(); }
public Task <IHtmlContent> InvokeAsync(string name, INamedEnumerable <object> parameters) { if (!String.IsNullOrEmpty(name)) { return(ShapeTypeExecuteAsync(name, parameters)); } if (parameters.Positional.Count == 1) { return(ShapeExecuteAsync(parameters.Positional.First() as IShape)); } if (parameters.Positional.Count > 0) { return(ShapeExecuteAsync(parameters.Positional.Cast <IShape>())); } // zero args - no display to execute return(Task.FromResult <IHtmlContent>(null)); }
public Task <IHtmlContent> InvokeAsync(string name, INamedEnumerable <object> parameters) { if (!string.IsNullOrEmpty(name)) { return(ShapeTypeExecuteAsync(name, parameters)); } if (parameters.Positional.Count() == 1) { return(ShapeExecuteAsync(parameters.Positional.First())); } if (parameters.Positional.Any()) { return(ShapeExecuteAsync(parameters.Positional)); } // zero args - no display to execute return(null); }
public async Task<object> InvokeAsync(string name, INamedEnumerable<object> parameters) { if (!string.IsNullOrEmpty(name)) { return await ShapeTypeExecuteAsync(name, parameters); } if (parameters.Positional.Count() == 1) { return await ShapeExecuteAsync(parameters.Positional.First()); } if (parameters.Positional.Any()) { return new Combined(await ShapeExecuteAsync(parameters.Positional)); } // zero args - no display to execute return null; }
public override object InvokeMember(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { // Add a header row if (name == "Header") { var row = _rowFactory(); } // This function adds a row if (name == "Row") { var row = _rowFactory(); foreach (var p in args.Positional) { row.Cell(p); } foreach (var n in args.Named) { row.Cell(n.Key, n.Value); } ((dynamic)self).Rows.Add(row); return row; } return proceed(); }
private static void MergeClasses(INamedEnumerable <object> args, IList <string> classes) { foreach (var arg in args) { // look for string first, because the "string" type is also an IEnumerable of char if (arg is string) { classes.Add(arg as string); } else if (arg is IEnumerable) { foreach (var item in arg as IEnumerable) { classes.Add(Convert.ToString(item)); } } else { classes.Add(Convert.ToString(arg)); } } }
private static void MergeItems(INamedEnumerable <object> args, dynamic shape) { foreach (var arg in args) { // look for string first, because the "string" type is also an IEnumerable of char if (arg is string) { shape.Add(arg as string); } else if (arg is IEnumerable) { foreach (var item in arg as IEnumerable) { shape.Add(item); } } else { shape.Add(Convert.ToString(arg)); } } }
public IShape Create(string shapeType, INamedEnumerable<object> parameters) { dynamic shape; Func<dynamic> factory; if (_mocks.TryGetValue(shapeType, out factory)) { shape = factory(); } else { shape = new ShapeMock(shapeType); } if (parameters != null) { foreach (KeyValuePair<string, object> parameter in parameters.Named) { shape.Data[parameter.Key] = parameter.Value; } } return shape; }
private object ShapeTypeExecute(string name, INamedEnumerable <object> parameters) { var shape = _shapeFactory.Create(name, parameters); return(ShapeExecute(shape)); }
public IShape Create(string shapeType, INamedEnumerable <object> parameters) { return(Create(shapeType, parameters, () => new Shape())); }
private Task<IHtmlContent> ShapeTypeExecuteAsync(string name, INamedEnumerable<object> parameters) { var shape = _shapeFactory.Create(name, parameters); return ShapeExecuteAsync(shape); }
private object ShapeTypeExecute(string name, INamedEnumerable<object> parameters) { var shape = _shapeFactory.Create(name, parameters); return ShapeExecute(shape); }
public override object InvokeMember(Func <object> proceed, object target, string name, INamedEnumerable <object> args) { return(((DefaultShapeFactory)target).Create(name, args)); }
public override object InvokeMember(Func <object> proceed, object self, string name, INamedEnumerable <object> args) { var argsCount = args.Count(); if (name == "Add" && (argsCount == 1 || argsCount == 2)) { // pszmyd: Ignore null shapes if (args.First() == null) { return(_parent); } dynamic parent = _parent; dynamic zone = _zoneFactory(); zone.Parent = _parent; zone.ZoneName = _potentialZoneName; parent[_potentialZoneName] = zone; if (argsCount == 1) { return(zone.Add(args.Single())); } return(zone.Add(args.First(), (string)args.Last())); } return(proceed()); }
private static void MergeAttributes(INamedEnumerable<object> args, IDictionary<string, string> attributes) { var arg = args.Positional.SingleOrDefault(); if (arg != null) { if (arg is IDictionary) { var dictionary = arg as IDictionary; foreach (var key in dictionary.Keys) { attributes[System.Convert.ToString(key)] = System.Convert.ToString(dictionary[key]); } } else { foreach (var prop in arg.GetType().GetProperties()) { attributes[TranslateIdentifier(prop.Name)] = System.Convert.ToString(prop.GetValue(arg, null)); } } } foreach (var named in args.Named) { attributes[named.Key] = System.Convert.ToString(named.Value); } }
public override object InvokeMember(Func<object> proceed, dynamic self, string name, INamedEnumerable<object> args) { if (name.Equals("Id")) { // need to mutate the actual type var s = self as Shape; if (s != null) { s.Id = System.Convert.ToString(args.FirstOrDefault()); } return self; } if (name.Equals("Classes") && !args.Named.Any()) { MergeClasses(args, self.Classes); return self; } if (name.Equals("Attributes") && args.Positional.Count() <= 1) { MergeAttributes(args, self.Attributes); return self; } if (name.Equals("Items")) { MergeItems(args, self); return self; } return proceed(); }
public override object InvokeMemberMissing(Func <object> proceed, object self, string name, INamedEnumerable <object> args) { Trace.WriteLine("Returning length of " + name); return(name.Length); }
public IShape Create(string shapeType, INamedEnumerable <object> parameters, Func <dynamic> createShape) { throw new NotImplementedException(); }
public override object InvokeMember(Func <object> proceed, object self, string name, INamedEnumerable <object> args) { // Add a header row if (name == "Header") { var row = _rowFactory(); } // This function adds a row if (name == "Row") { var row = _rowFactory(); foreach (var p in args.Positional) { row.Cell(p); } foreach (var n in args.Named) { row.Cell(n.Key, n.Value); } ((dynamic)self).Rows.Add(row); return(row); } return(proceed()); }
public IShape Create(string shapeType, INamedEnumerable <object> parameters, IEnumerable <IClayBehavior> behaviors) { var defaultShapeTable = _shapeTableLocator.Value.Lookup(null); ShapeDescriptor shapeDescriptor; defaultShapeTable.Descriptors.TryGetValue(shapeType, out shapeDescriptor); var creatingContext = new ShapeCreatingContext { New = this, ShapeFactory = this, ShapeType = shapeType, OnCreated = new List <Action <ShapeCreatedContext> >() }; var positional = parameters.Positional; creatingContext.BaseType = positional.Take(1).OfType <Type>().SingleOrDefault(); if (creatingContext.BaseType == null) { // default to common base class creatingContext.BaseType = typeof(Shape); } else { // consume the first argument positional = positional.Skip(1); } if (creatingContext.BaseType == typeof(Array)) { // array is a hint - not an intended base class creatingContext.BaseType = typeof(Shape); creatingContext.Behaviors = new List <IClayBehavior> { new ClaySharp.Behaviors.InterfaceProxyBehavior(), new ClaySharp.Behaviors.PropBehavior(), new ClaySharp.Behaviors.ArrayBehavior(), new ClaySharp.Behaviors.NilResultBehavior(), }; } else { creatingContext.Behaviors = new List <IClayBehavior> { new ClaySharp.Behaviors.InterfaceProxyBehavior(), new ClaySharp.Behaviors.PropBehavior(), new ClaySharp.Behaviors.NilResultBehavior(), new Shape.ShapeBehavior(), }; } if (behaviors != null && behaviors.Any()) { // include behaviors passed in by caller, if any creatingContext.Behaviors = creatingContext.Behaviors.Concat(behaviors).ToList(); } // "creating" events may add behaviors and alter base type) foreach (var ev in _events) { ev.Value.Creating(creatingContext); } if (shapeDescriptor != null) { foreach (var ev in shapeDescriptor.Creating) { ev(creatingContext); } } // create the new instance var createdContext = new ShapeCreatedContext { New = creatingContext.New, ShapeType = creatingContext.ShapeType, Shape = ClayActivator.CreateInstance(creatingContext.BaseType, creatingContext.Behaviors) }; var shapeMetadata = new ShapeMetadata { Type = shapeType }; createdContext.Shape.Metadata = shapeMetadata; if (shapeDescriptor != null) { shapeMetadata.Wrappers = shapeMetadata.Wrappers.Concat(shapeDescriptor.Wrappers).ToList(); } // "created" events provides default values and new object initialization foreach (var ev in _events) { ev.Value.Created(createdContext); } if (shapeDescriptor != null) { foreach (var ev in shapeDescriptor.Created) { ev(createdContext); } } foreach (var ev in creatingContext.OnCreated) { ev(createdContext); } // other properties passed with call overlay any defaults, so are after the created events // only one non-Type, non-named argument is allowed var initializer = positional.SingleOrDefault(); if (initializer != null) { foreach (var prop in initializer.GetType().GetProperties()) { createdContext.Shape[prop.Name] = prop.GetValue(initializer, null); } } foreach (var kv in parameters.Named) { createdContext.Shape[kv.Key] = kv.Value; } return(createdContext.Shape); }
public IShape Create(string shapeType, INamedEnumerable <object> parameters) { return(Create(shapeType, parameters, Enumerable.Empty <IClayBehavior>())); }
private static void MergeItems(INamedEnumerable<object> args, dynamic shape) { foreach (var arg in args) { // look for string first, because the "string" type is also an IEnumerable of char if (arg is string) { shape.Add(arg as string); } else if (arg is IEnumerable) { foreach (var item in arg as IEnumerable) { shape.Add(item); } } else { shape.Add(System.Convert.ToString(arg)); } } }
public static Task <IShape> CreateAsync <T>(this IShapeFactory factory, string shapeType, INamedEnumerable <T> parameters = null) { return(factory.CreateAsync(shapeType, NewShape, null, createdContext => { var shape = (Shape)createdContext.Shape; // If only one non-Type, use it as the source object to copy if (parameters != null && parameters != Arguments.Empty) { var initializer = parameters.Positional.SingleOrDefault(); if (initializer != null) { // Use the Arguments class to optimize reflection code var arguments = Arguments.From(initializer); foreach (var prop in arguments.Named) { shape.Properties[prop.Key] = prop.Value; } } else { foreach (var kv in parameters.Named) { shape.Properties[kv.Key] = kv.Value; } } } })); }
public override object InvokeMember(Func<object> proceed, dynamic self, string name, INamedEnumerable<object> args) { if (args.Count() == 1 && args.Named.Count() == 0) Patch(self, name, args.Single()); return proceed(); }
public override object InvokeMember(Func <object> proceed, object self, string name, INamedEnumerable <object> args) { Stuff stuff = ((dynamic)_parent)[_parentName] = new Stuff(); return((stuff as IClayBehaviorProvider).Behavior.InvokeMember(proceed, self, name, args)); }
public override object InvokeMember(Func <object> proceed, object self, string name, INamedEnumerable <object> args) { return(string.Format("[name:{0}] [count:{1}]", name ?? "<null>", args.Count())); }
public override object InvokeMember(Func<object> proceed, object target, string name, INamedEnumerable<object> args) { return ((DisplayHelper)target).Invoke(name, args); }
public IShape Create(string shapeType, INamedEnumerable<object> parameters, Func<dynamic> createShape) { var defaultShapeTable = _shapeTableLocator.Value.Lookup(null); ShapeDescriptor shapeDescriptor; defaultShapeTable.Descriptors.TryGetValue(shapeType, out shapeDescriptor); parameters = parameters ?? Arguments.Empty(); var creatingContext = new ShapeCreatingContext { New = this, ShapeFactory = this, ShapeType = shapeType, OnCreated = new List<Action<ShapeCreatedContext>>() }; IEnumerable<object> positional = parameters.Positional.ToList(); var baseType = positional.FirstOrDefault() as Type; if (baseType == null) { creatingContext.Create = createShape ?? (() => new Shape()); } else { positional = positional.Skip(1); creatingContext.Create = () => Activator.CreateInstance(baseType); } foreach (var ev in _events) { ev.Value.Creating(creatingContext); } if (shapeDescriptor != null) { foreach (var ev in shapeDescriptor.Creating) { ev(creatingContext); } } var createdContext = new ShapeCreatedContext { New = creatingContext.New, ShapeType = creatingContext.ShapeType, Shape = creatingContext.Create() }; if (!(createdContext.Shape is IShape)) { throw new InvalidOperationException("无限的形状基本类型: " + createdContext.Shape.GetType().ToString()); } ShapeMetadata shapeMetadata = createdContext.Shape.Metadata; createdContext.Shape.Metadata.Type = shapeType; if (shapeDescriptor != null) shapeMetadata.Wrappers = shapeMetadata.Wrappers.Concat(shapeDescriptor.Wrappers).ToList(); foreach (var ev in _events) { ev.Value.Created(createdContext); } if (shapeDescriptor != null) { foreach (var ev in shapeDescriptor.Created) { ev(createdContext); } } foreach (var ev in creatingContext.OnCreated) { ev(createdContext); } var initializer = positional.SingleOrDefault(); if (initializer != null) { foreach (var prop in initializer.GetType().GetProperties()) { createdContext.Shape[prop.Name] = prop.GetValue(initializer, null); } } foreach (var kv in parameters.Named) { createdContext.Shape[kv.Key] = kv.Value; } return createdContext.Shape; }
public override object InvokeMember(Func<object> proceed, object target, string name, INamedEnumerable<object> args) { return ((DefaultShapeFactory)target).Create(name, args); }
public override object InvokeMember(Func <object> proceed, object self, string name, INamedEnumerable <object> args) { if (args.Any()) { return(proceed()); } return(proceed() ?? Nil.Instance); }
public override object InvokeMember(Func <object> proceed, object self, string name, INamedEnumerable <object> args) { return(name == "Sample" ? "Data" : proceed()); }
public IShape Create(string shapeType, INamedEnumerable<object> parameters, IEnumerable<IClayBehavior> behaviors) { var defaultShapeTable = _shapeTableLocator.Value.Lookup(null); ShapeDescriptor shapeDescriptor; defaultShapeTable.Descriptors.TryGetValue(shapeType, out shapeDescriptor); var creatingContext = new ShapeCreatingContext { New = this, ShapeFactory = this, ShapeType = shapeType, OnCreated = new List<Action<ShapeCreatedContext>>() }; var positional = parameters.Positional; creatingContext.BaseType = positional.Take(1).OfType<Type>().SingleOrDefault(); if (creatingContext.BaseType == null) { // default to common base class creatingContext.BaseType = typeof(Shape); } else { // consume the first argument positional = positional.Skip(1); } if (creatingContext.BaseType == typeof(Array)) { // array is a hint - not an intended base class creatingContext.BaseType = typeof(Shape); creatingContext.Behaviors = new List<IClayBehavior> { new ClaySharp.Behaviors.InterfaceProxyBehavior(), new ClaySharp.Behaviors.PropBehavior(), new ClaySharp.Behaviors.ArrayBehavior(), new ClaySharp.Behaviors.NilResultBehavior(), }; } else { creatingContext.Behaviors = new List<IClayBehavior> { new ClaySharp.Behaviors.InterfaceProxyBehavior(), new ClaySharp.Behaviors.PropBehavior(), new ClaySharp.Behaviors.NilResultBehavior(), new Shape.ShapeBehavior(), }; } if (behaviors != null && behaviors.Any()) { // include behaviors passed in by caller, if any creatingContext.Behaviors = creatingContext.Behaviors.Concat(behaviors).ToList(); } // "creating" events may add behaviors and alter base type) foreach (var ev in _events) { ev.Value.Creating(creatingContext); } if (shapeDescriptor != null) { foreach (var ev in shapeDescriptor.Creating) { ev(creatingContext); } } // create the new instance var createdContext = new ShapeCreatedContext { New = creatingContext.New, ShapeType = creatingContext.ShapeType, Shape = ClayActivator.CreateInstance(creatingContext.BaseType, creatingContext.Behaviors) }; var shapeMetadata = new ShapeMetadata { Type = shapeType }; createdContext.Shape.Metadata = shapeMetadata; if (shapeDescriptor != null) shapeMetadata.Wrappers = shapeMetadata.Wrappers.Concat(shapeDescriptor.Wrappers).ToList(); // "created" events provides default values and new object initialization foreach (var ev in _events) { ev.Value.Created(createdContext); } if (shapeDescriptor != null) { foreach (var ev in shapeDescriptor.Created) { ev(createdContext); } } foreach (var ev in creatingContext.OnCreated) { ev(createdContext); } // other properties passed with call overlay any defaults, so are after the created events // only one non-Type, non-named argument is allowed var initializer = positional.SingleOrDefault(); if (initializer != null) { foreach (var prop in initializer.GetType().GetProperties()) { createdContext.Shape[prop.Name] = prop.GetValue(initializer, null); } } foreach (var kv in parameters.Named) { createdContext.Shape[kv.Key] = kv.Value; } return createdContext.Shape; }
public override object InvokeMember(Func <object> proceed, object self, string name, INamedEnumerable <object> args) { return(proceed() + "-"); }
public IShape Create(string shapeType, INamedEnumerable<object> parameters) { return Create(shapeType, parameters, Enumerable.Empty<IClayBehavior>()); }
public override object InvokeMemberMissing(Func <object> proceed, object self, string name, INamedEnumerable <object> args) { if (name == "Foo") { return("Bar"); } return(proceed()); }
public virtual object InvokeMember(Func <object> proceed, object self, string name, INamedEnumerable <object> args) { return(proceed()); }
public override object InvokeMember(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { Stuff stuff = ((dynamic)_parent)[_parentName] = new Stuff(); return (stuff as IClayBehaviorProvider).Behavior.InvokeMember(proceed, self, name, args); }
private void BindObject(object obj, TreeNode root) { int index = 0; if (obj is DataRow) { // DataRow source, bind column names DataRow dr = (DataRow)obj; // Create tree structure foreach (DataColumn col in dr.Table.Columns) { // Stop on max nodes if (index++ >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the column object childObj = dr[col.ColumnName]; AppendChild(root, col.ColumnName, childObj, false); } } else if (obj is DataRowView) { // DataRowView source, bind column names DataRowView dr = (DataRowView)obj; // Create tree structure foreach (DataColumn col in dr.DataView.Table.Columns) { // Stop on max nodes if (index++ >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the column object childObj = dr[col.ColumnName]; AppendChild(root, col.ColumnName, childObj, false); } } else if (obj is AbstractContext) { AbstractContext context = (AbstractContext)obj; // Create tree structure foreach (string col in context.Properties) { // Stop on max nodes if (index >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the property object childObj = context.GetProperty(col); AppendChild(root, col, childObj, false); } } else if (obj is IHierarchicalObject) { // Data container source IHierarchicalObject hc = (IHierarchicalObject)obj; // Create tree structure foreach (string col in hc.Properties) { // Stop on max nodes if (index++ >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the property object childObj = null; try { hc.TryGetProperty(col, out childObj); } catch { } AppendChild(root, col, childObj, false); } } else if (obj is IDataContainer) { // Data container source IDataContainer dc = (IDataContainer)obj; // Create tree structure foreach (string col in dc.ColumnNames) { // Stop on max nodes if (index++ >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the column object childObj = null; dc.TryGetValue(col, out childObj); AppendChild(root, col, childObj, false); } } // Enumerable objects if ((obj is IEnumerable) && !(obj is string)) { IEnumerable collection = (IEnumerable)obj; IEnumerator enumerator = null; bool indexByName = false; INamedEnumerable namedCol = null; if (obj is INamedEnumerable) { // Collection with name enumerator namedCol = (INamedEnumerable)collection; if (namedCol.ItemsHaveNames) { enumerator = namedCol.GetNamedEnumerator(); indexByName = true; } } if (!indexByName) { // Standard collection enumerator = collection.GetEnumerator(); } int i = 0; while (enumerator.MoveNext()) { // Stop on max nodes if (index++ >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the item object item = SqlHelperClass.EncapsulateObject(enumerator.Current); if (indexByName) { // Convert the name with dot to indexer string name = namedCol.GetObjectName(item); if (!ValidationHelper.IsIdentifier(name)) { name = "[\"" + name + "\"]"; } AppendChild(root, name, item, false); } else { // Indexed item AppendChild(root, i.ToString(), item, true); } i++; } } }
private void BindObject(object obj, TreeNode root, bool isPriorityTree) { int index = 0; try { if (obj is DataRow) { // DataRow source, bind column names DataRow dr = (DataRow)obj; // Create tree structure foreach (DataColumn col in dr.Table.Columns) { // Stop on max nodes if (index++ >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the column object childObj = dr[col.ColumnName]; AppendChild(root, col.ColumnName, childObj, false, isPriorityTree); } } else if (obj is DataRowView) { // DataRowView source, bind column names DataRowView dr = (DataRowView)obj; // Create tree structure foreach (DataColumn col in dr.DataView.Table.Columns) { // Stop on max nodes if (index++ >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the column object childObj = dr[col.ColumnName]; AppendChild(root, col.ColumnName, childObj, false, isPriorityTree); } } else if (obj is IHierarchicalObject) { // Data container source IHierarchicalObject hc = (IHierarchicalObject)obj; // Create tree structure foreach (string col in hc.Properties) { // Stop on max nodes if (index++ >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the property object childObj = null; try { ContextResolver.GetObjectValue(hc, col, ref childObj); // Append the child value AppendChild(root, col, childObj, false, isPriorityTree); } catch (Exception ex) { EventLogProvider.LogException("MacroTree", "EXPAND", ex); // Append the exception as child value AppendChild(root, col, ex, false, isPriorityTree); } } } else if (obj is IDataContainer) { // Data container source IDataContainer dc = (IDataContainer)obj; // Create tree structure foreach (string col in dc.ColumnNames) { // Stop on max nodes if (index++ >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the column object childObj = null; dc.TryGetValue(col, out childObj); AppendChild(root, col, childObj, false, isPriorityTree); } } // Enumerable objects if ((obj is IEnumerable) && !(obj is string)) { IEnumerable collection = (IEnumerable)obj; IEnumerator enumerator = null; bool indexByName = false; INamedEnumerable namedCol = null; if (obj is INamedEnumerable) { // Collection with name enumerator namedCol = (INamedEnumerable)collection; if (namedCol.ItemsHaveNames) { enumerator = namedCol.GetNamedEnumerator(); indexByName = true; } } if (!indexByName) { // Standard collection enumerator = collection.GetEnumerator(); } int i = 0; List <string> addedItems = new List <string>(); addedItems.Add("trees"); addedItems.Add("documents"); while (enumerator.MoveNext()) { // Stop on max nodes if (index++ >= MacroResolver.MaxMacroNodes) { AppendMore(root); break; } // Add the item object item = SqlHelperClass.EncapsulateObject(enumerator.Current); if (indexByName) { // Convert the name with dot to indexer string name = namedCol.GetObjectName(item); if (!ValidationHelper.IsIdentifier(name)) { name = "[\"" + name + "\"]"; } string nameToLower = name.ToLowerCSafe(); if (!addedItems.Contains(nameToLower)) { addedItems.Add(nameToLower); AppendChild(root, name, item, false, isPriorityTree); } } else { // Indexed item AppendChild(root, i.ToString(), item, true, isPriorityTree); } i++; } } } catch (Exception ex) { EventLogProvider.LogException("MacroTree", "EXPAND", ex); throw ex; } }
public IShape Create(string shapeType, INamedEnumerable <object> parameters, Func <dynamic> createShape) { var defaultShapeTable = _shapeTableLocator.Value.Lookup(null); ShapeDescriptor shapeDescriptor; defaultShapeTable.Descriptors.TryGetValue(shapeType, out shapeDescriptor); parameters = parameters ?? Arguments.Empty(); var creatingContext = new ShapeCreatingContext { New = this, ShapeFactory = this, ShapeType = shapeType, OnCreated = new List <Action <ShapeCreatedContext> >() }; IEnumerable <object> positional = parameters.Positional.ToList(); var baseType = positional.FirstOrDefault() as Type; if (baseType == null) { // default to common base class creatingContext.Create = createShape ?? (() => new Shape()); } else { // consume the first argument positional = positional.Skip(1); creatingContext.Create = () => Activator.CreateInstance(baseType); } // "creating" events may add behaviors and alter base type) foreach (var ev in _events) { ev.Value.Creating(creatingContext); } if (shapeDescriptor != null) { foreach (var ev in shapeDescriptor.Creating) { ev(creatingContext); } } // create the new instance var createdContext = new ShapeCreatedContext { New = creatingContext.New, ShapeType = creatingContext.ShapeType, Shape = creatingContext.Create() }; if (!(createdContext.Shape is IShape)) { throw new InvalidOperationException("Invalid base type for shape: " + createdContext.Shape.GetType().ToString()); } ShapeMetadata shapeMetadata = createdContext.Shape.Metadata; createdContext.Shape.Metadata.Type = shapeType; if (shapeDescriptor != null) { shapeMetadata.Wrappers = shapeMetadata.Wrappers.Concat(shapeDescriptor.Wrappers).ToList(); } // "created" events provides default values and new object initialization foreach (var ev in _events) { ev.Value.Created(createdContext); } if (shapeDescriptor != null) { foreach (var ev in shapeDescriptor.Created) { ev(createdContext); } } foreach (var ev in creatingContext.OnCreated) { ev(createdContext); } // other properties passed with call overlay any defaults, so are after the created events // only one non-Type, non-named argument is allowed var initializer = positional.SingleOrDefault(); if (initializer != null) { foreach (var prop in initializer.GetType().GetProperties()) { createdContext.Shape[prop.Name] = prop.GetValue(initializer, null); } } foreach (var kv in parameters.Named) { createdContext.Shape[kv.Key] = kv.Value; } return(createdContext.Shape); }
private static void MergeClasses(INamedEnumerable<object> args, IList<string> classes) { foreach (var arg in args) { // look for string first, because the "string" type is also an IEnumerable of char if (arg is string) { classes.Add(arg as string); } else if (arg is IEnumerable) { foreach (var item in arg as IEnumerable) { classes.Add(System.Convert.ToString(item)); } } else { classes.Add(System.Convert.ToString(arg)); } } }
public override object InvokeMemberMissing(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { Trace.WriteLine("Returning length of " + name); return name.Length; }
public override object InvokeMember(Func<object> proceed, object self, string name, INamedEnumerable<object> args) { var argsCount = args.Count(); if (name == "Add" && (argsCount == 1 || argsCount == 2)) { // pszmyd: Ignore null shapes if (args.First() == null) return _parent; dynamic parent = _parent; dynamic zone = _zoneFactory(); zone.Parent = _parent; zone.ZoneName = _potentialZoneName; parent[_potentialZoneName] = zone; if (argsCount == 1) return zone.Add(args.Single()); return zone.Add(args.First(), (string)args.Last()); } return proceed(); }
public IShape Create(string shapeType, INamedEnumerable<object> parameters, Func<dynamic> createShape) { var defaultShapeTable = _shapeTableManager.GetShapeTable(null); ShapeDescriptor shapeDescriptor; defaultShapeTable.Descriptors.TryGetValue(shapeType, out shapeDescriptor); parameters = parameters ?? Arguments.Empty(); var creatingContext = new ShapeCreatingContext { New = this, ShapeFactory = this, ShapeType = shapeType, OnCreated = new List<Action<ShapeCreatedContext>>() }; IEnumerable<object> positional = parameters.Positional.ToList(); var baseType = positional.FirstOrDefault() as Type; if (baseType == null) { // default to common base class creatingContext.Create = createShape ?? (() => new Shape()); } else { // consume the first argument positional = positional.Skip(1); creatingContext.Create = () => Activator.CreateInstance(baseType); } // "creating" events may add behaviors and alter base type) foreach (var ev in _events) { ev.Creating(creatingContext); } if (shapeDescriptor != null) { foreach (var ev in shapeDescriptor.Creating) { ev(creatingContext); } } // create the new instance var createdContext = new ShapeCreatedContext { New = creatingContext.New, ShapeType = creatingContext.ShapeType, Shape = creatingContext.Create() }; if (!(createdContext.Shape is IShape)) { throw new InvalidOperationException("Invalid base type for shape: " + createdContext.Shape.GetType().ToString()); } ShapeMetadata shapeMetadata = createdContext.Shape.Metadata; createdContext.Shape.Metadata.Type = shapeType; if (shapeDescriptor != null) shapeMetadata.Wrappers = shapeMetadata.Wrappers.Concat(shapeDescriptor.Wrappers).ToList(); // "created" events provides default values and new object initialization foreach (var ev in _events) { ev.Created(createdContext); } if (shapeDescriptor != null) { foreach (var ev in shapeDescriptor.Created) { ev(createdContext); } } foreach (var ev in creatingContext.OnCreated) { ev(createdContext); } // other properties passed with call overlay any defaults, so are after the created events // only one non-Type, non-named argument is allowed var initializer = positional.SingleOrDefault(); if (initializer != null) { foreach (var prop in initializer.GetType().GetProperties()) { createdContext.Shape[prop.Name] = prop.GetValue(initializer, null); } } foreach (var kv in parameters.Named) { createdContext.Shape[kv.Key] = kv.Value; } return createdContext.Shape; }
private Task <IHtmlContent> ShapeTypeExecuteAsync(string name, INamedEnumerable <object> parameters) { var shape = _shapeFactory.Create(name, parameters); return(ShapeExecuteAsync(shape)); }
public IShape Create(string shapeType, INamedEnumerable<object> parameters) { return Create(shapeType, parameters, () => new Shape()); }
public async Task<object> InvokeAsync(string name, INamedEnumerable<object> parameters) { if (!string.IsNullOrEmpty(name)) { return await ShapeTypeExecuteAsync(name, parameters); } if (parameters.Positional.Count() == 1) { return await ShapeExecuteAsync(parameters.Positional.First()); } if (parameters.Positional.Any()) { var htmlContents = await ShapeExecuteAsync(parameters.Positional); var htmlContentBuilder = new HtmlContentBuilder(); foreach (var htmlContent in htmlContents) { htmlContentBuilder.AppendHtml(htmlContent); } } // zero args - no display to execute return null; }