/// <summary> /// Adds template into the system /// </summary> /// <param name="package">template zip package</param> /// <returns></returns> public static IGalleryTemplate AddTemplate(ZipArchivePackage package) { CuratedGalleryTemplate output = null; DirectoryInfo extractdir = null; try { extractdir = ExtractPackage(package, Path.Combine(TemporaryDirectory, Guid.NewGuid().ToString())); #region Get package descriptor and validate package if (extractdir.GetFiles("*.html.xslt").Count() != 1) throw new Exception("Package does not have entry point file (*.html.xslt)"); var xfiles = extractdir.GetFiles("*.xml"); if (xfiles.Length == 0) throw new Exception("Template descriptor was not found"); if (xfiles.Length != 1) throw new Exception("Template package has several xml files. Template descriptor resolving problem"); GalleryTemplateDescriptor descriptor = LoadTemplateDescriptor(xfiles[0]); #endregion Get package descriptor and validate package #region Add template into application storage and make some actions with file system //add the template into the app storage var template = ObjectMapper.DoMapping<GalleryTemplateInfo>(descriptor); template.Package = package; OperationResult<OperationResults, GalleryTemplate> rslt = null; try { rslt = GalleryRuntime.GalleryRepository.AddTemplate(template); } catch (Exception ex) { Logger.WriteError(ex); throw; } extractdir.CopyTo(GetTemplatePath(rslt.Output.ID)); output = new CuratedGalleryTemplate(); ObjectMapper.DoMapping(descriptor, output); ObjectMapper.DoMapping(rslt.Output, output); #endregion Add template into application storage } finally { if (extractdir != null && extractdir.Exists) { try { extractdir.Remove(); } catch (Exception ex) { Logger.WriteInfo(ex.ToString()); } } } //add template into registered template list lock (m_TemplatesSyncRoot) { if (m_Templates == null) m_Templates = LoadTemplates(); m_Templates.Add(output); } return output; }
/// <summary> /// Loads registered templates /// </summary> /// <returns></returns> protected static List<IGalleryTemplate> LoadTemplates() { var output = new List<IGalleryTemplate>(); var root = new DirectoryInfo(TemplateDirectory); //TODO: Temporary I delete only folders due to this folders can have Web.config or othe configuration files foreach (var item in root.GetDirectories()) item.Remove(); var templates = GalleryRepository.GetTemplates().Output; foreach (var item in templates) { var extractdir = new DirectoryInfo(item.GetFolderPath()); ExtractPackage(item.Package, extractdir.FullName); var xdecr = extractdir.GetFiles("*.xml").FirstOrDefault(); GalleryTemplateDescriptor descriptor = LoadTemplateDescriptor(xdecr); var template = new CuratedGalleryTemplate(); ObjectMapper.DoMapping(descriptor, template); ObjectMapper.DoMapping(item, template); template.DescriptorFilepath = xdecr.Name; output.Add(template); } return output; }