public static Element CreateErrorElement(string label, string toolTip, string message)
        {
            Element errorElement = new Element(new ElementHandle("DUMMYPROVIDER", new NoSecurityEntityToken()))
            {
                VisualData = new ElementVisualizedData
                {
                    Label = label,
                    ToolTip = toolTip,
                    Icon = ResourceHandle.BuildIconFromDefaultProvider("close"),
                    OpenedIcon = ResourceHandle.BuildIconFromDefaultProvider("close"),
                    HasChildren = false
                }
            };


            errorElement.AddAction(new ElementAction(new ActionHandle(new MessageBoxActionToken(
                label,
                message,
                C1Console.Events.DialogType.Error
            )))
            {
                VisualData = new ActionVisualizedData()
                {
                    Label = label,
                    ToolTip = toolTip,
                    Icon = ResourceHandle.BuildIconFromDefaultProvider("close"),
                    ActionLocation = ActionLocation.OtherPrimaryActionLocation
                }
            });


            return errorElement;
        }
        protected override IEnumerable<Element> OnGetElements(EntityToken parentEntityToken, TreeNodeDynamicContext dynamicContext)
        {
            foreach (var kvp in GetFunctionResult())
            {
                Element element = new Element(new ElementHandle(
                    dynamicContext.ElementProviderName,
                    new TreeFunctionElementGeneratorEntityToken(this.Id.ToString(), this.Tree.TreeId, EntityTokenSerializer.Serialize(parentEntityToken), kvp.Key),
                    dynamicContext.Piggybag.PreparePiggybag(this.ParentNode, parentEntityToken)
                ));

                element.VisualData = new ElementVisualizedData
                {
                    Label = kvp.Value,
                    ToolTip = kvp.Value,
                    HasChildren = ChildNodes.Count() > 0,
                    Icon = Core.ResourceSystem.ResourceHandle.BuildIconFromDefaultProvider("folder"),
                    OpenedIcon = Core.ResourceSystem.ResourceHandle.BuildIconFromDefaultProvider("folder")
                };

                yield return element;
            }
        }
        /// <exclude />
        public static ClientElement GetRoot()
        {
                List<Element> roots = ElementFacade.GetRoots(null).ToList();

                if (roots.Count == 0)
                {
                    // user with out any access logging in - return "empty root"
                    roots = ElementFacade.GetRootsWithNoSecurity().ToList();
                    if (roots.Count == 0) throw new InvalidOperationException("No roots specified");
                    if (roots.Count > 1) throw new InvalidOperationException("More than one root specified");

                    var emptyElement = new Element(new ElementHandle("nullRoot", new NullRootEntityToken()));
                    emptyElement.VisualData = new ElementVisualizedData { HasChildren = false, Label = "nullroot", Icon = CommonElementIcons.Folder };

                    roots.Clear();
                    roots.Add(emptyElement);
                }
                else if (roots.Count > 1)
                {
                    throw new InvalidOperationException("More than one root specified");
                }

                return roots[0].GetClientElement();
        }
        private IEnumerable<Element> GetRootElements(Dictionary<string, string> piggybag)
        {
            
            var element = new Element(this.Context.CreateElementHandle(new NugetRootEntityToken()))
            {
                VisualData = new ElementVisualizedData
                {
                    Label = "Nuget Packages",
                    ToolTip = "Nuget Packages overview",
                    HasChildren = true,
                    Icon = CommonElementIcons.Folder
                }
            };             


            element.AddAction(new ElementAction(new ActionHandle(new NugetActionToken()))
            {
                VisualData = new ActionVisualizedData
                {
                    Label = "Open Package Manager",
                    ToolTip = "Open Package Manager",
                    Icon =CommonElementIcons.Advanced,
                    ActionLocation = new ActionLocation
                    {
                        ActionType = ActionType.Add,
                        IsInFolder = false,
                        IsInToolbar = true,
                        ActionGroup = PrimaryActionGroup
                    }
                }
            });

            yield return element;
        }
        private static void DoInitialize(string elementAttachingProviderName)
        {
            var sharedRootFolders = new Dictionary<string, CustomTreePerspectiveInfo>();

            var treeNodeDynamicContext = new TreeNodeDynamicContext(TreeNodeDynamicContextDirection.Down);
            treeNodeDynamicContext.Piggybag = new Dictionary<string, string>();

            foreach (var tree in TreeFacade.AllTrees)
            {
                if (!tree.ShareRootElementById) continue;

                IEnumerable<NamedAttachmentPoint> namedAttachmentPoints =
                    tree.AttachmentPoints.
                    OfType<NamedAttachmentPoint>();

                if (namedAttachmentPoints.Count() != 1) continue;

                if (tree.RootTreeNode.ChildNodes.Count() != 1) continue;

                SimpleElementTreeNode childTreeNode = tree.RootTreeNode.ChildNodes.Single() as SimpleElementTreeNode;

                if (childTreeNode == null) continue;

                NamedAttachmentPoint namedAttachmentPoint = namedAttachmentPoints.Single();


                EntityToken perspectiveEntityToken;
                if (!sharedRootFolders.ContainsKey(childTreeNode.Id))
                {
                    perspectiveEntityToken = new TreePerspectiveEntityToken(childTreeNode.Id);

                    var dynamicValuesHelperReplaceContext = new DynamicValuesHelperReplaceContext(
                        namedAttachmentPoint.AttachingPoint.EntityToken, 
                        null);

                    // MRJ: Collection actions
                    Element element = new Element(new ElementHandle(elementAttachingProviderName, perspectiveEntityToken))
                    {
                        VisualData = new ElementVisualizedData
                        {
                            Label = childTreeNode.LabelDynamicValuesHelper.ReplaceValues(dynamicValuesHelperReplaceContext),
                            ToolTip = childTreeNode.ToolTipDynamicValuesHelper.ReplaceValues(dynamicValuesHelperReplaceContext),
                            HasChildren = true,
                            Icon = childTreeNode.Icon,
                            OpenedIcon = childTreeNode.OpenIcon
                        }
                    };

                    sharedRootFolders.Add(childTreeNode.Id, new CustomTreePerspectiveInfo
                    {
                        AttachmentPoint = new NamedAttachmentPoint
                        {
                            AttachingPoint = new AttachingPoint(namedAttachmentPoint.AttachingPoint),
                            Position = namedAttachmentPoint.Position
                        },
                        Element = element,
                        Trees = new List<Tree> { tree }
                    });
                }
                else
                {
                    perspectiveEntityToken = sharedRootFolders[childTreeNode.Id].Element.ElementHandle.EntityToken;
                    sharedRootFolders[childTreeNode.Id].Trees.Add(tree);
                }

                namedAttachmentPoint.AttachingPoint = new AttachingPoint(perspectiveEntityToken);
                tree.RootTreeNode = childTreeNode;
            }
            
            _sharedRootFolders = sharedRootFolders;
        }
        private IEnumerable<Element> GetPackageSourcesFolderChildren(SearchToken seachToken)
        {
            List<IPackageServerSource> packageServerSources =
                (from a in DataFacade.GetData<IPackageServerSource>()
                 orderby a.Url
                 select a).ToList();

            foreach (IPackageServerSource packageServerSource in packageServerSources)
            {
                Element element = new Element(_context.CreateElementHandle(packageServerSource.GetDataEntityToken()));
                element.VisualData = new ElementVisualizedData
                {
                    Label = packageServerSource.Url,
                    ToolTip = packageServerSource.Url,
                    HasChildren = false,
                    Icon = PackageSourceItemClosedIcon
                };

                element.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.PackageElementProvider.DeletePackageSourceWorkflow"), new PermissionType[] { PermissionType.Administrate })))
                {
                    VisualData = new ActionVisualizedData
                    {
                        Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "DeletePackageSourceLabel"),
                        ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "DeletePackageSourceToolTip"),
                        Icon = DeletePackageSourceIcon,
                        Disabled = false,
                        ActionLocation = new ActionLocation
                        {
                            ActionType = ActionType.Delete,
                            IsInFolder = false,
                            IsInToolbar = true,
                            ActionGroup = PrimaryActionGroup
                        }

                    }
                });

                yield return element;
            }
        }
        private IEnumerable<Element> GetInstalledPackageFolderChildren(SearchToken seachToken)
        {
            bool hasLocalPackageChildren =
                (from info in PackageManager.GetInstalledPackages()
                 where info.IsLocalInstalled
                 select info.Name).FirstOrDefault() != null;

            Element localPackagesElement = new Element(_context.CreateElementHandle(new PackageElementProviderInstalledPackageLocalPackagesFolderEntityToken()));
            localPackagesElement.VisualData = new ElementVisualizedData
            {
                Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "LocalPackagesFolderLabel"),
                ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "LocalPackagesFolderToolTip"),
                HasChildren = hasLocalPackageChildren,
                Icon = LocalPackagesClosedIcon,
                OpenedIcon = LocalPackagesOpenedIcon
            };

            AddInstallLocalPackageAction(localPackagesElement);

            yield return localPackagesElement;

            IEnumerable<string> groupNames =
                (from info in PackageManager.GetInstalledPackages()
                 where info.IsLocalInstalled == false
                 orderby info.GroupName
                 select info.GroupName).Distinct();

            foreach (string groupName in groupNames)
            {
                Element element = new Element(_context.CreateElementHandle(new PackageElementProviderInstalledPackageGroupFolderEntityToken(groupName)));
                element.VisualData = new ElementVisualizedData
                {
                    Label = groupName,
                    ToolTip = groupName,
                    HasChildren = true,
                    Icon = InstalledPackagesGroupClosedIcon,
                    OpenedIcon = InstalledPackagesGroupOpenedIcon
                };

                yield return element;
            }
        }
        private IEnumerable<Element> GetAvailablePackageGroupFolderChildren(string groupName, SearchToken seachToken)
        {
            IEnumerable<PackageDescription> packageDescriptions =
                (from description in PackageSystemServices.GetFilteredAllAvailablePackages()
                 where description.GroupName == groupName
                 orderby description.Name
                 select description);

            foreach (PackageDescription packageDescription in packageDescriptions)
            {
                ResourceHandle packageIcon = (packageDescription.PriceAmmount > 0 ? AvailableCommercialPackageItemIcon : AvailablePackageItemIcon);

                Element element = new Element(_context.CreateElementHandle(new PackageElementProviderAvailablePackagesItemEntityToken(
                    packageDescription.Id.ToString(),
                    packageDescription.GroupName)));
                element.VisualData = new ElementVisualizedData
                {
                    Label = packageDescription.Name,
                    ToolTip = packageDescription.Name,
                    HasChildren = false,
                    Icon = packageIcon,
                };

                element.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.PackageElementProvider.ViewAvailablePackageInfoWorkflowWorkflow"), ActionPermissions)))
                {
                    VisualData = new ActionVisualizedData
                    {
                        Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "ViewAvailableInformationLabel"),
                        ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "ViewAvailableInformationToolTip"),
                        Icon = ViewInstalledInformationIcon,
                        Disabled = false,
                        ActionLocation = new ActionLocation
                        {
                            ActionType = ActionType.Edit,
                            IsInFolder = false,
                            IsInToolbar = true,
                            ActionGroup = PrimaryActionGroup
                        }

                    }
                });

                yield return element;
            }
        }
        public IEnumerable<Element> GetRoots(SearchToken seachToken)
        {
            Element element = new Element(_context.CreateElementHandle(new PackageElementProviderRootEntityToken()));
            element.VisualData = new ElementVisualizedData
            {
                Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "RootFolderLabel"),
                ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "RootFolderToolTip"),
                HasChildren = true,
                Icon = RootClosedIcon,
                OpenedIcon = RootOpenedIcon
            };

            AddInstallLocalPackageAction(element);

            yield return element;
        }
        private Element CreateFolderElement(NamespaceTreeBuilderFolder node)
        {
            bool hasChildren = (node.SubFolders.Count != 0) || (node.Leafs.Count != 0);

            var element = new Element(_context.CreateElementHandle(new BaseFunctionFolderElementEntityToken(CreateId(node, _context.ProviderName))))
            {
                VisualData = new ElementVisualizedData
                {
                    Label = node.Name,
                    ToolTip = node.Name,
                    HasChildren = (node.SubFolders.Count != 0) || (node.Leafs.Count != 0),
                    Icon = hasChildren ? this.FolderIcon : this.EmptyFolderIcon,
                    OpenedIcon = this.OpenFolderIcon
                },
                TreeLockBehavior = OnGetTreeLockBehavior()
            };

            IEnumerable<ElementAction> actions = OnGetFolderActions();
            if (actions != null)
            {
                foreach (ElementAction action in actions)
                {
                    element.AddAction(action);
                }
            }

            return element;
        }
        private IEnumerable<Element> GetElements(IEnumerable<PageTemplateDescriptor> pageTemplates)
        {
            List<Element> elements = new List<Element>();

            foreach (PageTemplateDescriptor pageTemplate in pageTemplates)
            {
                var entityToken = pageTemplate.GetEntityToken();

                Element element = new Element(_context.CreateElementHandle(entityToken));

                element.VisualData = new ElementVisualizedData
                                     {
                                         Label = pageTemplate.Title,
                                         ToolTip = pageTemplate.Title,
                                         HasChildren = false,
                                         Icon = pageTemplate.IsValid ? DesignTemplate : TemplateWithError,
                                     };

                IEnumerable<ElementAction> actions = pageTemplate.GetActions();

                element.AddAction(actions);

                elements.Add(element);
            }

            return elements;
        }
        public IEnumerable<Element> GetRoots(SearchToken searchToken)
        {
            Element element = new Element(_context.CreateElementHandle(new PageTemplateRootEntityToken()));

            bool hasChildren = PageTemplateFacade.GetPageTemplates().Any();

            element.VisualData = new ElementVisualizedData
                         {
                             Label = SR.GetString("Composite.Plugins.PageTemplateElementProvider", "PageTemplateElementProvider.RootLabel"),
                             ToolTip = SR.GetString("Composite.Plugins.PageTemplateElementProvider", "PageTemplateElementProvider.RootLabelToolTip"),
                             HasChildren = hasChildren,
                             Icon = PageTemplateElementProvider.RootClosed,
                             OpenedIcon = PageTemplateElementProvider.RootOpen
                         };

            const string addTemplateWorkflowType = "Composite.Plugins.Elements.ElementProviders.PageTemplateElementProvider.AddNewPageTemplateWorkflow";

            element.AddWorkflowAction(addTemplateWorkflowType, new[] { PermissionType.Add },
                                      new ActionVisualizedData
            {
                Label = SR.GetString("Composite.Plugins.PageTemplateElementProvider", "PageTemplateElementProvider.AddTemplate"),
                ToolTip = SR.GetString("Composite.Plugins.PageTemplateElementProvider", "PageTemplateElementProvider.AddTemplateToolTip"),
                Icon = PageTemplateElementProvider.AddTemplate,
                Disabled = false,
                ActionLocation = new ActionLocation
                {
                    ActionType = ActionType.Add,
                    IsInFolder = false,
                    IsInToolbar = true,
                    ActionGroup = PrimaryActionGroup
                }
            });

            foreach(var pageTemplateProviderName in PageTemplateProviderRegistry.ProviderNames)
            {
                var provider = PageTemplateProviderPluginFacade.GetProvider(pageTemplateProviderName);

                Verify.IsNotNull(provider, "Failed to get provider by name '{0}'", pageTemplateProviderName);

                IEnumerable<ElementAction> actions = provider.GetRootActions();

                element.AddAction(actions);
            }

            return new [] { element };
        }
        private Element BuildElement(IData data, 
            DynamicValuesHelperReplaceContext replaceContext,
            TreeNodeDynamicContext dynamicContext,
            bool localizationEnabled,
            List<object> itemKeys,
            ref IEnumerable<object> keysJoinedByParentFilters,
            EntityToken parentEntityToken
            )
        {
            replaceContext.CurrentDataItem = data;
            
            object keyValue = this.KeyPropertyInfo.GetValue(data, null);

            bool itemLocalizationEnabledAndForeign = localizationEnabled && !data.DataSourceId.LocaleScope.Equals(UserSettings.ActiveLocaleCultureInfo);

            if (itemLocalizationEnabledAndForeign && itemKeys.Contains(keyValue)) return null;

            var currentEntityToken = data.GetDataEntityToken();

            var element = new Element(new ElementHandle
            (
                dynamicContext.ElementProviderName,
                currentEntityToken,
                dynamicContext.Piggybag.PreparePiggybag(this.ParentNode, parentEntityToken)
            ));


            bool hasChildren;
            bool isDisabled = false;
            ResourceHandle icon, openedIcon;

            if (itemLocalizationEnabledAndForeign)
            {
                hasChildren = false;
                isDisabled = !data.IsTranslatable();

                if (this.Icon != null)
                {
                    icon = this.Icon;
                    openedIcon = this.OpenedIcon;
                }
                else
                {
                    icon = data.GetForeignIcon();
                    openedIcon = icon;
                }
            }
            else
            {
                if (this.Display != LeafDisplayMode.Auto)
                {
                    hasChildren = ChildNodes.Any();
                }
                else
                {
                    hasChildren = ChildNodes.OfType<SimpleElementTreeNode>().Any();

                    if (!hasChildren)
                    {
                        if (keysJoinedByParentFilters != null)
                        {
                            keysJoinedByParentFilters = keysJoinedByParentFilters.Evaluate();

                            hasChildren = keysJoinedByParentFilters.Contains(keyValue);
                        }
                    }

                    // Checking children filtered by FunctionFilters
                    if (!hasChildren)
                    {
                        foreach (var childNode in this.ChildNodes.OfType<DataElementsTreeNode>()
                            .Where(n => n.FilterNodes.OfType<FunctionFilterNode>().Any()))
                        {
                            var newDynamicContext = new TreeNodeDynamicContext(TreeNodeDynamicContextDirection.Down)
                            {
                                ElementProviderName = dynamicContext.ElementProviderName,
                                Piggybag = dynamicContext.Piggybag.PreparePiggybag(this.ParentNode, parentEntityToken),
                                CurrentEntityToken = currentEntityToken
                            };

                            if (childNode.GetDataset(newDynamicContext, false).DataItems.Any())
                            {
                                hasChildren = true;
                                break;
                            }
                        }
                    }
                }

                if (this.Icon != null)
                {
                    icon = this.Icon;
                    openedIcon = this.OpenedIcon;
                }
                else
                {
                    openedIcon = icon = data.GetIcon();
                }
            }

            string label = this.Label.IsNullOrEmpty()
                            ? data.GetLabel()
                            : this.LabelDynamicValuesHelper.ReplaceValues(replaceContext);

            string toolTip = this.ToolTip.IsNullOrEmpty()
                            ? label
                            : this.ToolTipDynamicValuesHelper.ReplaceValues(replaceContext);

            if (itemLocalizationEnabledAndForeign)
            {
                label = string.Format("{0} ({1})", label, DataLocalizationFacade.GetCultureTitle(UserSettings.ForeignLocaleCultureInfo));

                if (!data.IsTranslatable())
                {
                    toolTip = StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "LocalizeDataWorkflow.DisabledData");
                }
                else
                {
                    toolTip = string.Format("{0} ({1})", toolTip, DataLocalizationFacade.GetCultureTitle(UserSettings.ForeignLocaleCultureInfo));
                }
            }

            element.VisualData = new ElementVisualizedData
            {
                Label = label,
                ToolTip = toolTip,
                HasChildren = hasChildren,
                Icon = icon,
                OpenedIcon = openedIcon,
                IsDisabled = isDisabled
            };


            if (InternalUrls.DataTypeSupported(data.DataSourceId.InterfaceType))
            {
                var dataReference = data.ToDataReference();

                if (DataUrls.CanBuildUrlForData(dataReference))
                {
                    string internalUrl = InternalUrls.TryBuildInternalUrl(dataReference);

                    if (internalUrl != null)
                    {
                        element.PropertyBag.Add("Uri", internalUrl);
                    }
                }
            }


            if (itemLocalizationEnabledAndForeign)
            {
                var actionToken = new WorkflowActionToken(
                    WorkflowFacade.GetWorkflowType("Composite.C1Console.Trees.Workflows.LocalizeDataWorkflow"),
                    LocalizeDataPermissionTypes);

                element.AddAction(new ElementAction(new ActionHandle(actionToken))
                {
                    VisualData = new ActionVisualizedData
                    {
                        Label = StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "LocalizeDataWorkflow.LocalizeDataLabel"),
                        ToolTip = StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "LocalizeDataWorkflow.LocalizeDataToolTip"),
                        Icon = LocalizeDataTypeIcon,
                        Disabled = false,
                        ActionLocation = ActionLocation.OtherPrimaryActionLocation
                    }
                });
            }

            return element;
        }
        public IEnumerable<Element> GetChildren(EntityToken entityToken, SearchToken seachToken)
        {
            if ((entityToken is LocalizationElementProviderRootEntityToken) == false) throw new InvalidOperationException();

            IEnumerable<ISystemActiveLocale> locales = DataFacade.GetData<ISystemActiveLocale>().ToList();

            List<Element> elements = new List<Element>();

            foreach (ISystemActiveLocale locale in locales)
            {
                bool isDefault = LocalizationFacade.IsDefaultLocale(locale.CultureName);

                ResourceHandle iconHandle = LocaleItemIcon;
                if (isDefault)
                {
                    //lable = string.Format("{0} ({1})", lable, StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "ElementProvider.DefaultLabel"));
                    iconHandle = DefaultLocaleItemIcon;
                }

                Element element = new Element(_context.CreateElementHandle(locale.GetDataEntityToken()));
                element.VisualData = new ElementVisualizedData
                {
                    Label = DataLocalizationFacade.GetCultureTitle(new CultureInfo(locale.CultureName)),
                    ToolTip = DataLocalizationFacade.GetCultureTitle(new CultureInfo(locale.CultureName)),
                    HasChildren = false,
                    Icon = iconHandle
                };

                element.AddAction(new ElementAction(new ActionHandle(
                    new WorkflowActionToken(
                        WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.LocalizationElementProvider.EditSystemLocaleWorkflow"),
                        new PermissionType[] { PermissionType.Administrate }
                    )))
                {
                    VisualData = new ActionVisualizedData
                    {
                        Label = StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "EditSystemLocaleWorkflow.EditElementActionLabel"),
                        ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "EditSystemLocaleWorkflow.EditElementActionToolTip"),
                        Icon = EditSystemLocaleIcon,
                        Disabled = false,
                        ActionLocation = new ActionLocation
                        {
                            ActionType = ActionType.Edit,
                            IsInFolder = false,
                            IsInToolbar = true,
                            ActionGroup = PrimaryActionGroup
                        }
                    }
                });

                if (isDefault == false)
                {
                    element.AddAction(new ElementAction(new ActionHandle(
                        new WorkflowActionToken(
                            WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.LocalizationElementProvider.DefineDefaultActiveLocaleWorkflow"),
                            new PermissionType[] { PermissionType.Administrate }
                        )))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label = StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "DefineDefaultActiveLocaleWorkflow.ElementActionLabel"),
                            ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "DefineDefaultActiveLocaleWorkflow.ElementActionToolTip"),
                            Icon = SetAsDefaultIcon,
                            Disabled = false,
                            ActionLocation = new ActionLocation
                            {
                                ActionType = ActionType.Edit,
                                IsInFolder = false,
                                IsInToolbar = true,
                                ActionGroup = PrimaryActionGroup
                            }
                        }
                    });

                    element.AddAction(new ElementAction(new ActionHandle(
                        new WorkflowActionToken(
                            WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.LocalizationElementProvider.RemoveSystemLocaleWorkflow"),
                            new PermissionType[] { PermissionType.Administrate }
                        )))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label = StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "RemoveSystemLocaleWorkflow.RemoveElementActionLabel"),
                            ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "RemoveSystemLocaleWorkflow.RemoveElementActionToolTip"),
                            Icon = RemoveSystemLocaleIcon,
                            Disabled = false,
                            ActionLocation = new ActionLocation
                            {
                                ActionType = ActionType.Delete,
                                IsInFolder = false,
                                IsInToolbar = true,
                                ActionGroup = PrimaryActionGroup
                            }
                        }
                    });
                }

                elements.Add(element);
            }

            return elements.OrderBy(f => f.VisualData.Label);
        }
        public IEnumerable<Element> GetRoots(SearchToken seachToken)
        {
            Element element = new Element(_context.CreateElementHandle(new LocalizationElementProviderRootEntityToken()));
            element.VisualData = new ElementVisualizedData
            {
                Label = StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "ElementProvider.RootFolderLabel"),
                ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "ElementProvider.RootFolderToolTip"),
                HasChildren = true,
                Icon = RootClosedIcon,
                OpenedIcon = RootOpenedIcon
            };

            element.AddAction(new ElementAction(new ActionHandle(
                new WorkflowActionToken(
                    WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.LocalizationElementProvider.AddSystemLocaleWorkflow"),
                    new PermissionType[] { PermissionType.Administrate }
                )))
            {
                VisualData = new ActionVisualizedData
                {
                    Label = StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "AddSystemLocaleWorkflow.AddElementActionLabel"),
                    ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.LocalizationElementProvider", "AddSystemLocaleWorkflow.AddElementActionToolTip"),
                    Icon = AddSystemLocaleIcon,
                    Disabled = false,
                    ActionLocation = new ActionLocation
                    {
                        ActionType = ActionType.Add,
                        IsInFolder = false,
                        IsInToolbar = true,
                        ActionGroup = PrimaryActionGroup
                    }
                }
            });

            yield return element;
        }
        protected override IEnumerable<Element> OnGetElements(EntityToken parentEntityToken, TreeNodeDynamicContext dynamicContext)
        {
            var entityToken = new TreeSimpleElementEntityToken(
                this.Id, 
                this.Tree.TreeId, 
                EntityTokenSerializer.Serialize(parentEntityToken));                

            Element element = new Element(new ElementHandle(
                dynamicContext.ElementProviderName,
                entityToken,
                dynamicContext.Piggybag.PreparePiggybag(this.ParentNode, parentEntityToken)
                ));


            if (parentEntityToken is TreePerspectiveEntityToken)
            {
                element.ElementHandle.Piggyback[StringConstants.PiggybagTreeId] = Tree.TreeId;
            }

            var replaceContext = new DynamicValuesHelperReplaceContext(parentEntityToken, dynamicContext.Piggybag);

            element.VisualData = new ElementVisualizedData
            {
                Label = this.LabelDynamicValuesHelper.ReplaceValues(replaceContext),
                ToolTip = this.ToolTipDynamicValuesHelper.ReplaceValues(replaceContext),
                HasChildren = ChildNodes.Any(),
                Icon = this.Icon,
                OpenedIcon = this.OpenIcon
            };

            yield return element;
        }
        /// <exclude />
        public IEnumerable<Element> GetRoots(SearchToken searchToken)
        {
            NamespaceTreeBuilder builder = new NamespaceTreeBuilder(OnGetFunctionInfos(searchToken).Cast<INamespaceTreeBuilderLeafInfo>());

            bool hasChildren = (builder.RootFolder.SubFolders.Count != 0) || (builder.RootFolder.Leafs.Count != 0);

            Element element = new Element(_context.CreateElementHandle(new BaseFunctionFolderElementEntityToken(CreateId("", _context.ProviderName))))
                {
                    VisualData = new ElementVisualizedData()
                        {
                            Label = RootFolderLabel,
                            ToolTip = RootFolderToolTip,
                            HasChildren = hasChildren,
                            Icon = hasChildren ? this.FolderIcon : this.EmptyFolderIcon,
                            OpenedIcon = OpenFolderIcon
                        }
                };
            element.TreeLockBehavior = OnGetTreeLockBehavior();

            IEnumerable<ElementAction> actions = OnGetFolderActions();
            if (actions != null)
            {
                foreach (ElementAction action in actions)
                {
                    element.AddAction(action);
                }
            }

            return new List<Element> { element };
        }
        private Element GetSharedCodeElement()
        {
            Element element = new Element(_context.CreateElementHandle(new SharedCodeFolderEntityToken()));

            element.VisualData = new ElementVisualizedData
            {
                Label = GetResourceString("PageTemplateElementProvider.SharedCodeFolder.Title"),
                ToolTip = GetResourceString("PageTemplateElementProvider.SharedCodeFolder.ToolTip"),
                HasChildren = true,
                Icon = FolderIcon,
            };

            return element;
        }
        private Element CreateFunctionElement(IFunctionTreeBuilderLeafInfo function)
        {
            IMetaFunction functionDetails;

            if (FunctionFacade.TryGetFunction(out functionDetails, string.Format("{0}.{1}", function.Namespace, function.Name), typeof(IFunction)) == false)
            {
                FunctionFacade.TryGetFunction(out functionDetails, string.Format("{0}.{1}", function.Namespace, function.Name), typeof(IWidgetFunction));
            }

            string functionTooltip = (functionDetails == null || string.IsNullOrEmpty(functionDetails.Description) ? function.Name : StringResourceSystemFacade.ParseString(functionDetails.Description));

            var intitializationInfo = functionDetails as IFunctionInitializationInfo;
            bool functionWerentLoadedCorrectly = intitializationInfo != null && !intitializationInfo.FunctionInitializedCorrectly;

            Element element = new Element(_context.CreateElementHandle(function.EntityToken))
            {
                VisualData = new ElementVisualizedData()
                {
                    Label = function.Name,
                    ToolTip = functionTooltip,
                    HasChildren = false,
                    Icon = functionWerentLoadedCorrectly ? BaseFunctionProviderElementProvider.FunctionError : BaseFunctionProviderElementProvider.Function
                }
            };

            element.TreeLockBehavior = OnGetTreeLockBehavior();

            IEnumerable<ElementAction> actions = OnGetFunctionActions(function);
            if (actions != null)
            {
                foreach (ElementAction action in actions)
                {
                    element.AddAction(action);
                }
            }

            return element;
        }
        private IEnumerable<Element> GetSharedCodeElements(SearchToken searchToken)
        {
            var result = new List<Element>();

            foreach(SharedFile sharedFile in PageTemplateFacade.GetSharedFiles())
            {
                string relativeFilePath = sharedFile.RelativeFilePath;

                string fullPath = relativeFilePath.StartsWith("~") ? PathUtil.Resolve(relativeFilePath) : relativeFilePath;
                var websiteFile = new WebsiteFile(fullPath);

                Element element = new Element(_context.CreateElementHandle(new SharedCodeFileEntityToken(relativeFilePath)))
                {
                    VisualData = new ElementVisualizedData()
                    {
                        Label = websiteFile.FileName,
                        ToolTip = websiteFile.FileName,
                        HasChildren = false,
                        Icon = FileElementProvider.WebsiteFileIcon(websiteFile.MimeType),
                        OpenedIcon = FileElementProvider.WebsiteFileIcon(websiteFile.MimeType)
                    }
                };

                element.PropertyBag.Add("Uri", PathUtil.GetWebsitePath(websiteFile.FullPath));
                element.PropertyBag.Add("ElementType", websiteFile.MimeType);

                // Adding "Edit" action for text-editable files
                if (sharedFile.DefaultEditAction && MimeTypeInfo.IsTextFile(websiteFile.MimeType))
                {
                    element.AddWorkflowAction(
                        "Composite.Plugins.Elements.ElementProviders.PageTemplateElementProvider.EditSharedCodeFileWorkflow",
                        new[] {PermissionType.Edit},
                        new ActionVisualizedData
                            {
                                Label = GetResourceString("EditSharedCodeFile.Label"),
                                ToolTip = GetResourceString("EditSharedCodeFile.ToolTip"),
                                Icon = CommonCommandIcons.Edit,
                                Disabled = websiteFile.IsReadOnly,
                                ActionLocation = new ActionLocation
                                                        {
                                                            ActionType = ActionType.Edit,
                                                            IsInFolder = false,
                                                            IsInToolbar = true,
                                                            ActionGroup = EditCodeFileActionGroup
                                                        }
                            });
                }

                var customActions = sharedFile.GetActions();
                foreach(var action in customActions)
                {
                    element.AddAction(action);
                }

                result.Add(element);
            }

            return result;
        }
 private static void AddInstallLocalPackageAction(Element element)
 {
     element.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.PackageElementProvider.InstallLocalPackageWorkflow"), ActionPermissions)))
     {
         VisualData = new ActionVisualizedData
         {
             Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "InstallLocalPackageLabel"),
             ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "InstallLocalPackageToolTip"),
             Disabled = false,
             Icon = InstallLocalPackageIcon,
             ActionLocation = new ActionLocation
             {
                 ActionType = ActionType.Add,
                 IsInFolder = false,
                 IsInToolbar = true,
                 ActionGroup = PrimaryActionGroup
             }
         }
     });
 }
        public IEnumerable<Element> GetRoots(SearchToken seachToken)
        {
            Element rootFolderElement = new Element(_context.CreateElementHandle(new PageTemplateFeatureEntityToken(PageTemplateFeatureEntityToken.RootFolderId)))
            {
                VisualData = new ElementVisualizedData
                {
                    Label = StringResourceSystemFacade.GetString("Composite.Plugins.PageTemplateFeatureElementProvider", "ElementProvider.RootLabel"),
                    ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PageTemplateFeatureElementProvider", "ElementProvider.RootToolTip"),
                    HasChildren = this.PageTemplateFeatureFilenames.Any(),
                    Icon = PageTemplateFeatureRootIcon,
                    OpenedIcon = PageTemplateFeatureRootIconOpen
                }
            };

            rootFolderElement.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.PageTemplateFeatureElementProvider.AddPageTemplateFeatureWorkflow"), PermissionTypePredefined.Add)))
            {
                VisualData = new ActionVisualizedData
                {
                    Label = StringResourceSystemFacade.GetString("Composite.Plugins.PageTemplateFeatureElementProvider", "ElementProvider.AddTemplateFeature"),
                    ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PageTemplateFeatureElementProvider", "ElementProvider.AddTemplateFeatureToolTip"),
                    Icon = PageTemplateFeatureIconAdd,
                    Disabled = false,
                    ActionLocation = ActionLocation.AddPrimaryActionLocation
                }
            });

            yield return rootFolderElement;
        }
        private IEnumerable<Element> GetAvailablePackagesFolderChildren(SearchToken seachToken)
        {
            IEnumerable<string> groupNames =
                (from description in PackageSystemServices.GetFilteredAllAvailablePackages()
                 select description.GroupName).Distinct();

            foreach (string groupName in groupNames.OrderBy(f=>f))
            {
                Element element = new Element(_context.CreateElementHandle(new PackageElementProviderAvailablePackagesGroupFolderEntityToken(groupName)));
                element.VisualData = new ElementVisualizedData
                {
                    Label = groupName,
                    ToolTip = groupName,
                    HasChildren = true,
                    Icon = AvailablePackagesGroupClosedIcon,
                    OpenedIcon = AvailablePackagesGroupOpenedIcon
                };

                yield return element;
            }
        }
        public IEnumerable<Element> GetChildren(EntityToken entityToken, SearchToken seachToken)
        {
            if (entityToken.Id == PageTemplateFeatureEntityToken.RootFolderId)
            {
                foreach (string pageTemplateFeratureFilename in this.PageTemplateFeatureFilenames)
                {
                    string filename = Path.GetFileName(pageTemplateFeratureFilename);
                    string featureName = Path.GetFileNameWithoutExtension(filename);

                    bool isHtml = Path.GetExtension(filename) == ".html";

                    Element featureElement = new Element(_context.CreateElementHandle(
                        PageTemplateFeatureEntityToken.BuildFeatureEntityToken(featureName)))
                    {
                        VisualData = new ElementVisualizedData
                        {
                            Label = featureName,
                            ToolTip = filename,
                            Icon = PageTemplateFeatureIcon
                        }
                    };

                    featureElement.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.PageTemplateFeatureElementProvider.EditPageTemplateFeatureWorkflow"), PermissionTypePredefined.Edit)))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label = StringResourceSystemFacade.GetString("Composite.Plugins.PageTemplateFeatureElementProvider", "ElementProvider.EditTemplateFeature"),
                            ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PageTemplateFeatureElementProvider", "ElementProvider.EditTemplateFeatureToolTip"),
                            Icon = PageTemplateFeatureIconEdit,
                            Disabled = false,
                            ActionLocation = ActionLocation.EditPrimaryActionLocation
                        }
                    });

                    featureElement.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.PageTemplateFeatureElementProvider.DeletePageTemplateFeatureWorkflow"), PermissionTypePredefined.Delete)))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label = StringResourceSystemFacade.GetString("Composite.Plugins.PageTemplateFeatureElementProvider", "ElementProvider.DeleteTemplateFeature"),
                            ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PageTemplateFeatureElementProvider", "ElementProvider.DeleteTemplateFeatureToolTip"),
                            Icon = PageTemplateFeatureIconDelete,
                            Disabled = false,
                            ActionLocation = ActionLocation.DeletePrimaryActionLocation
                        }
                    });

                    featureElement.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.PageTemplateFeatureElementProvider.TogglePageTemplateFeatureEditorWorkflow"), PermissionTypePredefined.Edit)))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label = StringResourceSystemFacade.GetString("Composite.Plugins.PageTemplateFeatureElementProvider", "ElementProvider.EditVisually"),
                            ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PageTemplateFeatureElementProvider", "ElementProvider.EditVisuallyToolTip"),
                            Icon = PageTemplateFeatureIconEdit,
                            Disabled = false,
                            ActionCheckedStatus = isHtml ? ActionCheckedStatus.Checked : ActionCheckedStatus.Unchecked,
                            ActionLocation = new ActionLocation
                            {
                                ActionType = ActionType.Other,
                                IsInFolder = false,
                                IsInToolbar = false,
                                ActionGroup = PrimaryFolderToolsActionGroup
                            },

                        }
                    });

                    yield return featureElement;
                }

                yield break;
            }

            yield break;
        }
        private IEnumerable<Element> GetInstalledPackageGroupFolderChildren(string groupName, SearchToken seachToken)
        {
            IEnumerable<InstalledPackageInformation> installedPackageInformations =
                from info in PackageManager.GetInstalledPackages()
                where info.GroupName == groupName &&
                      info.IsLocalInstalled == false
                orderby info.Name
                select info;

            foreach (InstalledPackageInformation installedPackageInformation in installedPackageInformations)
            {
                Element element = new Element(_context.CreateElementHandle(new PackageElementProviderInstalledPackageItemEntityToken(
                    installedPackageInformation.Id,
                    installedPackageInformation.GroupName,
                    installedPackageInformation.IsLocalInstalled,
                    installedPackageInformation.CanBeUninstalled)));

                element.VisualData = new ElementVisualizedData
                {
                    Label = installedPackageInformation.Name,
                    ToolTip = installedPackageInformation.Name,
                    HasChildren = false,
                    Icon = GetIconForPackageItem(installedPackageInformation.Id),
                };

                element.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.PackageElementProvider.ViewInstalledPackageInfoWorkflow"), ActionPermissions)))
                {
                    VisualData = new ActionVisualizedData
                    {
                        Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "ViewInstalledInformationLabel"),
                        ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "ViewInstalledInformationToolTip"),
                        Icon = ViewInstalledInformationIcon,
                        Disabled = false,
                        ActionLocation = new ActionLocation
                        {
                            ActionType = ActionType.Edit,
                            IsInFolder = false,
                            IsInToolbar = true,
                            ActionGroup = PrimaryActionGroup
                        }

                    }
                });

                yield return element;
            }
        }
        public IEnumerable<Element> GetRoots(SearchToken seachToken)
        {
            Element element = new Element(_context.CreateElementHandle(new PackageCreatorElementProviderEntityToken()))
            {
                VisualData = new ElementVisualizedData()
                {
                    Label = PackageCreatorFacade.GetLocalization("PackageCreatorElementProviderEntityToken.Label"),
                    ToolTip = PackageCreatorFacade.GetLocalization("PackageCreatorElementProviderEntityToken.ToolTip"),
                    HasChildren = true,
                    Icon = new ResourceHandle("Composite.Icons", "blocks"),
                    OpenedIcon = new ResourceHandle("Composite.Icons", "blocks")
                }
            };

            element.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(typeof(CreatePackageWorkflow), new PermissionType[] { PermissionType.Administrate })))
            {
                VisualData = new ActionVisualizedData
                {
                    Label = PackageCreatorFacade.GetLocalization("CreatePackage.Label"),
                    ToolTip = PackageCreatorFacade.GetLocalization("CreatePackage.ToolTip"),
                    Icon = new ResourceHandle("Composite.Icons", "blocks"),
                    ActionLocation = new ActionLocation
                    {
                        ActionType = PackageCreatorFacade.ActionType,
                        IsInFolder = false,
                        IsInToolbar = true,
                        ActionGroup = new ActionGroup("Develop", ActionGroupPriority.PrimaryLow)
                    }
                }
            });

            element.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(typeof(UploadConfigWorkflow), new PermissionType[] { PermissionType.Administrate })))
            {
                VisualData = new ActionVisualizedData
                {
                    Label = PackageCreatorFacade.GetLocalization("UploadConfig.Label"),
                    ToolTip = PackageCreatorFacade.GetLocalization("UploadConfig.ToolTip"),
                    Icon = new ResourceHandle("Composite.Icons", "package-install-local-package"),
                    ActionLocation = new ActionLocation
                    {
                        ActionType = PackageCreatorFacade.ActionType,
                        IsInFolder = false,
                        IsInToolbar = false,
                        ActionGroup = new ActionGroup("Develop", ActionGroupPriority.PrimaryLow)
                    }
                }
            });

            if (UserSettings.C1ConsoleUiLanguage.Name != "en-US")
            {
                element.AddAction(new ElementAction(new ActionHandle(new CreatePackageWorkflowActionToken(string.Format("Composite.Localization.C1Console.{0}", new CultureInfo(UserSettings.C1ConsoleUiLanguage.TwoLetterISOLanguageName).EnglishName), new AddLocalizationActionToken(UserSettings.C1ConsoleUiLanguage.Name))))
                {
                    VisualData = new ActionVisualizedData
                    {
                        Label = string.Format(PackageCreatorFacade.GetLocalization("CreateLocalizationPackage.Label"), StringResourceSystemFacade.GetString("Composite.Cultures", UserSettings.C1ConsoleUiLanguage.Name)),
                        ToolTip = string.Format(PackageCreatorFacade.GetLocalization("CreateLocalizationPackage.ToolTip"), StringResourceSystemFacade.GetString("Composite.Cultures", UserSettings.C1ConsoleUiLanguage.Name)),
                        Icon = new ResourceHandle("Composite.Icons", "package-element-closed-availableitem"),
                        ActionLocation = new ActionLocation
                        {
                            ActionType = PackageCreatorFacade.ActionType,
                            IsInFolder = false,
                            IsInToolbar = false,
                            ActionGroup = new ActionGroup("Develop", ActionGroupPriority.PrimaryLow)
                        }
                    }
                });
            }

            yield return element;

            yield return GetXmlNodeElement(PCCompositeConfig.Source, string.Empty, PCCompositeConfig.Source);
            yield return GetXmlNodeElement(PCWebConfig.Source, string.Empty, PCWebConfig.Source);
        }
        private IEnumerable<Element> GetRootChildren(SearchToken seachToken)
        {
            Element availablePackagesElement = new Element(_context.CreateElementHandle(new PackageElementProviderAvailablePackagesFolderEntityToken()));
            availablePackagesElement.VisualData = new ElementVisualizedData
            {
                Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "AvailablePackagesFolderLabel"),
                ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "AvailablePackagesFolderToolTip"),
                HasChildren = true,
                Icon = AvailablePackagesClosedIcon,
                OpenedIcon = AvailablePackagesOpenedIcon
            };
            availablePackagesElement.AddAction(new ElementAction(new ActionHandle(new ClearServerCacheActionToken()))
            {
                VisualData = new ActionVisualizedData
                {
                    Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "ClearServerCacheLabel"),
                    ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "ClearServerCacheToolTip"),
                    Disabled = false,
                    Icon = ClearServerCacheIcon,
                    ActionLocation = new ActionLocation
                    {
                        ActionType = ActionType.Other,
                        IsInFolder = false,
                        IsInToolbar = false,
                        ActionGroup = PrimaryActionGroup
                    }
                }
            });
            yield return availablePackagesElement;

            Element installedPackagesElement = new Element(_context.CreateElementHandle(new PackageElementProviderInstalledPackageFolderEntityToken()));
            installedPackagesElement.VisualData = new ElementVisualizedData
            {
                Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "InstalledPackageFolderLabel"),
                ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "InstalledPackageFolderToolTip"),
                HasChildren = true,
                Icon = InstalledPackagesClosedIcon,
                OpenedIcon = InstalledPackagesOpenedIcon
            };
            yield return installedPackagesElement;

            Element packageSourcesElement = new Element(_context.CreateElementHandle(new PackageElementProviderPackageSourcesFolderEntityToken()));
            packageSourcesElement.VisualData = new ElementVisualizedData
            {
                Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "PackageSourcesFolderLabel"),
                ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "PackageSourcesFolderToolTip"),
                HasChildren = DataFacade.GetData<IPackageServerSource>().Count() > 0,
                Icon = PackageSourcesClosedIcon,
                OpenedIcon = PackageSourcesOpenedIcon
            };
            packageSourcesElement.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.PackageElementProvider.AddPackageSourceWorkflow"), new PermissionType[] { PermissionType.Administrate })))
            {
                VisualData = new ActionVisualizedData
                {
                    Label = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "AddPackageSourceLabel"),
                    ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "AddPackageSourceToolTip"),
                    Disabled = false,
                    Icon = AddPackageSourceIcon,
                    ActionLocation = new ActionLocation
                    {
                        ActionType = ActionType.Add,
                        IsInFolder = false,
                        IsInToolbar = true,
                        ActionGroup = PrimaryActionGroup
                    }
                }
            });
            yield return packageSourcesElement;
        }
 private Element GetXmlAttributeElement(string source, string xpath, string name)
 {
     var element = new Element(_context.CreateElementHandle(new XmlNodeAttributeProviderEntityToken(xpath, source)))
     {
         VisualData = new ElementVisualizedData()
         {
             Label = name,
             ToolTip = name,
             HasChildren = false,
             Icon = new ResourceHandle("Composite.Icons", "data"),
             OpenedIcon = new ResourceHandle("Composite.Icons", "data")
         }
     };
     return element;
 }
Exemple #29
0
        /// <exclude />
        public bool Equals(Element element)
        {
            if (element == null) return false;

            return element.ElementHandle.EntityToken.Equals(this.ElementHandle.EntityToken);
        }
        public IEnumerable<Element> GetChildren(EntityToken entityToken, SearchToken seachToken)
        {
            if (entityToken is PackageCreatorElementProviderEntityToken)
            {
                IEnumerable<string> packages = PackageCreatorFacade.GetPackageNames();
                foreach (var package in packages)
                {
                    bool isActivePackage = PackageCreatorFacade.ActivePackageName == package;

                    var icon = isActivePackage ? (new ResourceHandle("Composite.Icons", "inbox-green")) : new ResourceHandle("Composite.Icons", "inbox");
                    var element = new Element(_context.CreateElementHandle(new PackageCreatorPackageElementProviderEntityToken(package)))
                    {
                        VisualData = new ElementVisualizedData()
                        {
                            Label = package,
                            ToolTip = package,
                            HasChildren = true,
                            Icon = icon,
                            OpenedIcon = icon
                        }
                    };

                    element.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(typeof(EditPackageWorkflow), new[] { PermissionType.Administrate })))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label = PackageCreatorFacade.GetLocalization("EditPackage.Label"),
                            ToolTip = PackageCreatorFacade.GetLocalization("EditPackage.ToolTip"),
                            Icon = new ResourceHandle("Composite.Icons", "page-edit-page"),
                            ActionLocation = new ActionLocation
                            {
                                ActionType = ActionType.Other,
                                IsInFolder = false,
                                IsInToolbar = true,
                                ActionGroup = new ActionGroup("Develop", ActionGroupPriority.PrimaryLow)
                            }
                        }
                    });

                    if (!isActivePackage)
                    {
                        element.AddAction(new ElementAction(new ActionHandle(new SetActivePackageActionToken()))
                        {
                            VisualData = new ActionVisualizedData
                            {
                                Label = PackageCreatorFacade.GetLocalization("SetActivePackage.Label"),
                                ToolTip = PackageCreatorFacade.GetLocalization("SetActivePackage.ToolTip"),
                                Icon = new ResourceHandle("Composite.Icons", "accept"),
                                ActionLocation = new ActionLocation
                                {
                                    ActionType = ActionType.Other,
                                    IsInFolder = false,
                                    IsInToolbar = true,
                                    ActionGroup = new ActionGroup("Develop", ActionGroupPriority.PrimaryLow)
                                }
                            }
                        });
                    }

                    element.AddAction(new ElementAction(new ActionHandle(new ConfirmWorkflowActionToken("Are you sure?", typeof(DeleteConfigPackageCreatorActionToken))))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label = PackageCreatorFacade.GetLocalization("DeleteConfigPackageCreator.Label"),
                            ToolTip = PackageCreatorFacade.GetLocalization("DeleteConfigPackageCreator.ToolTip"),
                            Icon = new ResourceHandle("Composite.Icons", "generated-type-delete"),
                            ActionLocation = new ActionLocation
                            {
                                ActionType = PackageCreatorFacade.ActionType,
                                IsInFolder = false,
                                IsInToolbar = false,
                                ActionGroup = new ActionGroup("Other", ActionGroupPriority.PrimaryLow)
                            }
                        }
                    });

                    element.AddAction(new ElementAction(new ActionHandle(new DownloadPackageActionToken("package")))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label = PackageCreatorFacade.GetLocalization("DownloadPackageButton.Label"),
                            ToolTip = PackageCreatorFacade.GetLocalization("DownloadPackageButton.ToolTip"),
                            Icon = new ResourceHandle("Composite.Icons", "package-install-local-package"),
                            ActionLocation = new ActionLocation
                            {
                                ActionType = PackageCreatorFacade.ActionType,
                                IsInFolder = false,
                                IsInToolbar = true,
                                ActionGroup = new ActionGroup("Download", ActionGroupPriority.PrimaryLow)
                            }
                        }
                    });

                    element.AddAction(new ElementAction(new ActionHandle(new DownloadPackageActionToken("config")))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label = PackageCreatorFacade.GetLocalization("DownloadConfigButton.Label"),
                            ToolTip = PackageCreatorFacade.GetLocalization("DownloadConfigButton.ToolTip"),
                            Icon = new ResourceHandle("Composite.Icons", "package-install-local-package"),
                            ActionLocation = new ActionLocation
                            {
                                ActionType = PackageCreatorFacade.ActionType,
                                IsInFolder = false,
                                IsInToolbar = false,
                                ActionGroup = new ActionGroup("Download", ActionGroupPriority.PrimaryLow)
                            }
                        }
                    });

                    yield return element;
                }
            }
            else if (entityToken is PackageCreatorPackageElementProviderEntityToken)
            {
                var categories = PackageCreatorFacade.GetCategories(entityToken.Source);
                foreach (var category in categories)
                {
                    var element = new Element(_context.CreateElementHandle(new PackageCreatorCategoryElementProviderEntityToken(entityToken.Source, category.Name)))
                    {
                        VisualData = new ElementVisualizedData()
                        {
                            Label = category.GetLabel(),
                            ToolTip = category.GetLabel(),
                            HasChildren = true,
                            Icon = new ResourceHandle("Composite.Icons", "folder"),
                            OpenedIcon = new ResourceHandle("Composite.Icons", "folder-open")
                        }
                    };
                    yield return element;
                }

            }
            else if (entityToken is PackageCreatorCategoryElementProviderEntityToken)
            {
                var items = PackageCreatorFacade.GetItems(entityToken.Type, entityToken.Source);
                foreach (var item in items.OrderBy(d => d.Id))
                {
                    var element = new Element(_context.CreateElementHandle(new PackageCreatorItemElementProviderEntityToken(item.Id, entityToken.Source, entityToken.Type)))
                    {
                        VisualData = new ElementVisualizedData()
                        {
                            Label = item.GetLabel(),
                            ToolTip = item.Id,
                            HasChildren = false,
                            Icon = item.ItemIcon,
                            OpenedIcon = item.ItemIcon
                        }
                    };

                    element.AddAction(new ElementAction(new ActionHandle(new DeleteItemPackageCreatorActionToken()))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label = PackageCreatorFacade.GetLocalization("DeleteItemPackageCreator.Label"),
                            ToolTip = PackageCreatorFacade.GetLocalization("DeleteItemPackageCreator.ToolTip"),
                            Icon = new ResourceHandle("Composite.Icons", "page-delete-page"),
                            ActionLocation = new ActionLocation
                            {
                                ActionType = ActionType.Other,
                                IsInFolder = false,
                                IsInToolbar = true,
                                ActionGroup = new ActionGroup("Develop", ActionGroupPriority.PrimaryLow)
                            }
                        }
                    });

                    yield return element;
                }
            }
            else if (entityToken is XmlNodeElementProviderEntityToken)
            {
                var configuration = PackageCreatorFacade.GetConfigurationDocument(entityToken.Source);
                var xpath = (entityToken as XmlNodeElementProviderEntityToken).XPath;
                XContainer container = xpath == string.Empty ? configuration as XContainer : configuration.XPathSelectElement(xpath) as XContainer;
                var element = container as XElement;
                var counter = new Dictionary<string, int>();

                if (container != null)
                {
                    var xmlElements = new List<Element>();
                    foreach (XElement item in container.Elements())
                    {
                        string position = string.Empty;
                        string name = item.Name.ToString();
                        if (counter.ContainsKey(name))
                        {
                            position = string.Format("[{0}]", ++counter[name]);
                        }
                        else
                        {
                            counter.Add(name, 1);
                        }
                        if (item.Attribute("name") != null)
                        {
                            position = string.Format("[@name='{0}']", item.Attribute("name").Value);
                        }

                        string description = item.IndexAttributeValue();

                        xmlElements.Add(GetXmlNodeElement(entityToken.Source, string.Format("{0}/{1}{2}", xpath, name, position), name + (string.IsNullOrEmpty(description) ? string.Empty : string.Format("({0})", description))));
                    }

                    xmlElements.Sort((a, b) => string.Compare(a.VisualData.Label,
                                                              b.VisualData.Label,
                                                              StringComparison.InvariantCulture));

                    foreach (var e in xmlElements) yield return e;
                }

                if (element != null)
                {
                    var elementPath = Regex.Replace(xpath, @"\[[^\]]*\]$", "");
                    foreach (var attribute in element.Attributes())
                    {
                        string name = attribute.Name.ToString();
                        yield return GetXmlAttributeElement(entityToken.Source, string.Format("{0}[@{1}='{2}']", elementPath, name, attribute.Value), string.Format("{0}={1}", name, attribute.Value));
                    }
                }
            }
        }