public Map(string extension, WebresourceType type, int crmValue, string label)
 {
     Extension = extension;
     Type      = type;
     CrmValue  = crmValue;
     Label     = label;
 }
        public Webresource(string name, string filePath, WebresourceType type, MyPluginControl parent) : this()
        {
            Map extMap = null;

            if (type == WebresourceType.Auto)
            {
                var extension = Path.GetExtension(filePath);

                extMap = WebresourceMapper.Instance.Items.FirstOrDefault(i => i.Extension == extension?.Remove(0, 1).ToLower());
                if (extMap != null)
                {
                    type = extMap.Type;
                }
            }

            record = new Entity("webresource")
            {
                ["name"]            = name,
                ["webresourcetype"] = new OptionSetValue((int)type),
            };

            if (filePath == null)
            {
                StringContent = string.Empty;
            }
            else
            {
                record["content"] = Convert.ToBase64String(File.ReadAllBytes(filePath));
                StringContent     = GetPlainText();
            }

            var map = extMap ?? WebresourceMapper.Instance.Items.FirstOrDefault(i => i.CrmValue == (int)type);

            if (map != null)
            {
                record.FormattedValues["webresourcetype"] = map.Label;
            }

            this.filePath = filePath;
            loadedOn      = DateTime.Now;
            Plugin        = parent;

            if (Plugin.WebresourcesCache.All(w => w.Name != Name))
            {
                Plugin.WebresourcesCache.Add(this);
            }

            State = filePath != null && Settings.Instance.LocalFilesOutOfDateOnLoad ? WebresourceState.Saved : WebresourceState.None;

            LoadAssociatedResources();
        }
        internal void AddNewWebresource(FolderNode parentNode, WebresourceType type)
        {
            var map = WebresourceMapper.Instance.Items.First(i => i.Type == type);

            var nwrDialog = new NewWebResourceDialog(map.Extension, OrganizationMajorVersion);

            if (nwrDialog.ShowDialog(mainControl) == DialogResult.OK)
            {
                var name = $"{parentNode.ResourceFullPath}/{nwrDialog.WebresourceName}";

                var resource = new Webresource(name, null, type, mainControl);
                mainControl.WebresourcesCache.Add(resource);

                AddSingleNode(resource, name.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries), parentNode);

                parentNode.Expand();
            }
        }
        public WebresourceNode AddSingleNode(Webresource resource, string[] nameParts, FolderNode folder = null)
        {
            var             fileName = nameParts.Last();
            WebresourceType type     = WebresourceType.Auto;

            if (resource.Type != 0)
            {
                type = (WebresourceType)resource.Type;
            }

            if (type == WebresourceType.Auto)
            {
                if (fileName.IndexOf(".", StringComparison.Ordinal) < 0)
                {
                    if (resource.Type == 0)
                    {
                        return(null);
                    }

                    type = (WebresourceType)resource.Type;
                }
                else
                {
                    type = Webresource.GetTypeFromExtension(fileName
                                                            .Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last());
                }
            }

            WebresourceNode node = null;

            switch (type)
            {
            case WebresourceType.WebPage:
                node = new WebpageNode(resource, Settings);
                break;

            case WebresourceType.Css:
                node = new CssNode(resource, Settings);
                break;

            case WebresourceType.Data:
                node = new DataNode(resource, Settings);
                break;

            case WebresourceType.Gif:
                node = new GifNode(resource, Settings);
                break;

            case WebresourceType.Ico:
                node = new IcoNode(resource, Settings);
                break;

            case WebresourceType.Jpg:
                node = new JpgNode(resource, Settings);
                break;

            case WebresourceType.Png:
                node = new PngNode(resource, Settings);
                break;

            case WebresourceType.Resx:
                node = new ResxNode(resource, Settings);
                break;

            case WebresourceType.Script:
                node = new JavaScriptNode(resource, Settings);
                break;

            case WebresourceType.Silverlight:
                node = new SilverlightNode(resource, Settings);
                break;

            case WebresourceType.Vector:
                node = new VectorNode(resource, Settings);
                break;

            case WebresourceType.Xsl:
                node = new XslNode(resource, Settings);
                break;
            }

            resource.Node = node;

            if (folder != null && node != null)
            {
                node.ForeColor = resource.State == WebresourceState.Saved ? Color.Blue :
                                 resource.State == WebresourceState.Draft ? Color.Red : Color.Black;

                folder.Nodes.Add(node);

                (node.Parent as FolderNode)?.SetFolderColor();
            }

            return(node);
        }