private static LibraryFileLink Create(SourceLink sourceLink, Library parentLibrary)
		{
			LibraryFileLink link;
			if (sourceLink is FileLink)
				link = Create(sourceLink.Path);
			else
				link = CreateEntity<LibraryFolderLink>();
			link.Name = sourceLink.NameWithoutExtension;
			link.DataSourceId = sourceLink.RootId;
			var dataSourcePath = parentLibrary.GetDataSources().Where(ds => ds.DataSourceId == sourceLink.RootId).Select(ds => ds.Path).FirstOrDefault();
			if (dataSourcePath != null)
			{
				var relativePath = sourceLink.Path.Replace(dataSourcePath, String.Empty);
				relativePath = relativePath.StartsWith(Path.DirectorySeparatorChar.ToString(CultureInfo.InvariantCulture)) ? relativePath.Substring(1) : relativePath;
				link.RelativePath = relativePath;
			}
			return link;
		}
		public static LibraryFileLink Create(SourceLink sourceLink, LibraryFolder parentFolder)
		{
			var link = Create(sourceLink, parentFolder.Page.Library);
			link.Folder = parentFolder;
			link.AfterCreate();
			return link;
		}
		public static LibraryFileLink Create(SourceLink sourceLink, LibraryFolderLink parentFolderLink)
		{
			var link = Create(sourceLink, parentFolderLink.ParentLibrary);
			link.FolderLink = parentFolderLink;
			link.AfterCreate();
			return link;
		}
		private BaseLibraryLink InsertFileLink(SourceLink sourceLink, int position = -1)
		{
			BaseLibraryLink link = null;
			MainController.Instance.ProcessManager.Run("Adding Link...", cancelationToken =>
			{
				link = LibraryFileLink.Create(sourceLink, DataSource);
				if (position >= 0)
					((List<BaseLibraryLink>)DataSource.Links).InsertItem(link, position);
				else
					DataSource.Links.AddItem(link);
			});
			return link;
		}