Esempio n. 1
0
        public ItemDefinition Clone()
        {
            var id = new ItemDefinition(ItemType);

            id.AllowedChildFilters  = AllowedChildFilters.ToList();
            id.AllowedIn            = AllowedIn;
            id.AllowedParentFilters = AllowedParentFilters.ToList();
            id.AllowedZoneNames     = AllowedZoneNames.ToList();
            id.AuthorizedRoles      = AuthorizedRoles != null?AuthorizedRoles.ToList() : AuthorizedRoles;

            id.AvailableZones    = AvailableZones.ToList();
            id.Containers        = Containers.ToList();
            id.Description       = Description;
            id.Discriminator     = Discriminator;
            id.Displayables      = Displayables.ToList();
            id.Editables         = Editables.ToList();
            id.Enabled           = Enabled;
            id.IconUrl           = IconUrl;
            id.Installer         = Installer;
            id.IsDefined         = IsDefined;
            id.EditableModifiers = EditableModifiers.ToList();
            id.ContentModifiers  = ContentModifiers.ToList();
            id.NumberOfItems     = 0;
            id.RelatedTo         = RelatedTo;
            id.SortOrder         = SortOrder;
            id.Template          = Template;
            id.Title             = Title;
            id.ToolTip           = ToolTip;
            //id.ReloadRoot();
            return(id);
        }
Esempio n. 2
0
 /// <summary>Adds an enumeration of containable editor or container to existing editors and to a container.</summary>
 /// <param name="containables">The editables to add.</param>
 public void AddRange(IEnumerable <IUniquelyNamed> containables)
 {
     foreach (var containable in containables)
     {
         if (containable is IEditable)
         {
             Editables.AddOrReplace(containable as IEditable);
         }
         if (containable is IEditableContainer)
         {
             Containers.AddOrReplace(containable as IEditableContainer);
         }
         if (containable is EditorModifierAttribute)
         {
             EditableModifiers.Add(containable as EditorModifierAttribute);
         }
         if (containable is IDisplayable)
         {
             Displayables.AddOrReplace(containable as IDisplayable);
         }
         if (containable is IContentModifier)
         {
             ContentModifiers.Add(containable as IContentModifier);
         }
     }
     //ReloadRoot();
 }
Esempio n. 3
0
        public ItemDefinition Clone()
        {
            var id = new ItemDefinition(ItemType);

            id.AllowedChildFilters  = AllowedChildFilters.ToList();
            id.AllowedIn            = AllowedIn;
            id.AllowedParentFilters = AllowedParentFilters.ToList();
            id.Attributes           = Attributes.ToList();
            id.AllowedZoneNames     = AllowedZoneNames.ToList();
            id.AuthorizedRoles      = AuthorizedRoles != null?AuthorizedRoles.ToArray() : AuthorizedRoles;

            id.AvailableZones      = AvailableZones.ToList();
            id.Containers          = new ContentList <IEditableContainer>(Containers.Select(ec => ec.TryClone()));
            id.ContentTransformers = ContentTransformers.ToList();
            id.Description         = Description;
            id.Discriminator       = Discriminator;
            id.Displayables        = new ContentList <IDisplayable>(Displayables.Select(d => d.TryClone()));
            id.Editables           = new ContentList <IEditable>(Editables.Select(e => e.TryClone()));
            id.Enabled             = Enabled;
            id.EditableModifiers   = EditableModifiers.ToList();
            id.IconUrl             = IconUrl;
            id.Installer           = Installer;
            id.IsDefined           = IsDefined;
            id.NumberOfItems       = 0;
            id.Metadata            = Metadata.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
            id.AdditionalFlags     = AdditionalFlags.ToList();
            id.RemovedFlags        = RemovedFlags.ToList();
            id.Properties          = Properties.ToDictionary(p => p.Key, p => p.Value.Clone());
            id.RelatedTo           = RelatedTo;
            id.SortOrder           = SortOrder;
            id.TemplateKey         = TemplateKey;
            id.Title   = Title;
            id.ToolTip = ToolTip;
            return(id);
        }
Esempio n. 4
0
 public IEnumerable <IUniquelyNamed> GetNamed(string name)
 {
     return(Editables.Where(e => e.Name == name).OfType <IUniquelyNamed>()
            .Union(Containers.Where(c => c.Name == name).OfType <IUniquelyNamed>())
            .Union(Displayables.Where(d => d.Name == name).OfType <IUniquelyNamed>())
            .ToList());
 }
        protected string GetBestSelection(string column)
        {
            var bestSelection = Editables.Select(editable => new { editable, similarity = ComputeLevenshteinDistance(editable.Name, column) })
                                .OrderBy(x => x.similarity).FirstOrDefault();

            if (bestSelection.similarity <= 2)
            {
                return(bestSelection.editable.Name);
            }

            return("");
        }
Esempio n. 6
0
        /// <summary>
        /// Add ports based on attributes on the class fields.
        ///
        /// This iterates through fields of a class and adds ports, editable fields, etc
        /// based on the attributes attached to each field.
        /// </summary>
        public void AddFieldsFromClass(Type type)
        {
            Fields.AddRange(type.GetFields(
                                BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance
                                ));

            // Extract port and editable metadata from each tagged field
            for (int i = 0; i < Fields.Count; i++)
            {
                var attribs = Fields[i].GetCustomAttributes(true);
                for (int j = 0; j < attribs.Length; j++)
                {
                    if (attribs[j] is InputAttribute input)
                    {
                        Ports.Add(new PortReflectionData()
                        {
                            Name              = input.Name ?? Fields[i].Name,
                            Field             = Fields[i],
                            Type              = Fields[i].FieldType,
                            Direction         = PortDirection.Input,
                            Capacity          = input.Multiple ? PortCapacity.Multiple : PortCapacity.Single,
                            HasControlElement = input.Editable,
                            IsUsingFieldName  = input.Name != null
                        });
                    }
                    else if (attribs[j] is OutputAttribute output)
                    {
                        Ports.Add(new PortReflectionData()
                        {
                            Name              = output.Name ?? Fields[i].Name,
                            Field             = Fields[i],
                            Type              = Fields[i].FieldType,
                            Direction         = PortDirection.Output,
                            Capacity          = output.Multiple ? PortCapacity.Multiple : PortCapacity.Single,
                            HasControlElement = false,
                            IsUsingFieldName  = output.Name != null
                        });
                    }
                    else if (attribs[j] is EditableAttribute editable)
                    {
                        Editables.Add(new EditableReflectionData()
                        {
                            Name  = editable.Name ?? Fields[i].Name,
                            Field = Fields[i]
                        });
                    }
                }
            }
        }
Esempio n. 7
0
        private void AddRangeInternal(IEnumerable <IUniquelyNamed> containables)
        {
            var list = new List <IUniquelyNamed>(containables);

            list.Sort((f, s) =>
            {
                if (f is IComparable <IUniquelyNamed> )
                {
                    return((f as IComparable <IUniquelyNamed>).CompareTo(s));
                }
                if (s is IComparable <IUniquelyNamed> )
                {
                    return(-(s as IComparable <IUniquelyNamed>).CompareTo(f));
                }
                return(0);
            });

            foreach (var containable in list)
            {
                if (containable is IEditable)
                {
                    Editables.AddOrReplace(containable as IEditable);
                }
                if (containable is IEditableContainer)
                {
                    Containers.AddOrReplace(containable as IEditableContainer);
                }
                if (containable is EditorModifierAttribute)
                {
                    EditableModifiers.Add(containable as EditorModifierAttribute);
                }
                if (containable is IDisplayable)
                {
                    Displayables.AddOrReplace(containable as IDisplayable);
                }
                if (containable is IContentTransformer)
                {
                    ContentTransformers.Add(containable as IContentTransformer);
                }

                NamedOperators.Add(containable);
            }
        }
Esempio n. 8
0
 public void RemoveRange(IEnumerable <IUniquelyNamed> containables)
 {
     foreach (var containable in containables)
     {
         if (containable is IEditable)
         {
             Editables.Remove(containable as IEditable);
         }
         if (containable is IEditableContainer)
         {
             Containers.Remove(containable as IEditableContainer);
         }
         if (containable is IDisplayable)
         {
             Displayables.Remove(containable as IDisplayable);
         }
         if (containable is IContentTransformer)
         {
             ContentTransformers.Remove(containable as IContentTransformer);
         }
     }
 }
Esempio n. 9
0
 public IContainable GetContainable(string containableName)
 {
     return(Editables.Where(e => e.Name == containableName).OfType <IContainable>().FirstOrDefault()
            ?? Containers.Where(c => c.Name == containableName).FirstOrDefault());
 }