/// <summary> /// OpenXMLConnector constructor. Allows to manage a .PNP OpenXML package file through a supporting persistence connector. /// </summary> /// <param name="packageFileName">The name of the .PNP package file. If the .PNP extension is missing, it will be added</param> /// <param name="persistenceConnector">The FileConnector object that will be used for physical persistence of the file</param> /// <param name="author">The Author of the .PNP package file, if any. Optional</param> /// <param name="signingCertificate">The X.509 certificate to use for digital signature of the template, optional</param> public OpenXMLConnector(string packageFileName, FileConnectorBase persistenceConnector, String author = null, X509Certificate2 signingCertificate = null) : base() { if (String.IsNullOrEmpty(packageFileName)) { throw new ArgumentException("packageFileName"); } else if (!packageFileName.EndsWith(".pnp", StringComparison.InvariantCultureIgnoreCase)) { // Check for file extension packageFileName = packageFileName.EndsWith(".") ? (packageFileName + "pnp") : (packageFileName + ".pnp"); } this.packageFileName = packageFileName; if (persistenceConnector == null) { throw new ArgumentException("persistenceConnector"); } this.persistenceConnector = persistenceConnector; // Try to load the .PNP package file var packageStream = persistenceConnector.GetFileStream(packageFileName); if (packageStream != null) { // If the .PNP package exists unpack it into PnP OpenXML package info object using (StreamReader sr = new StreamReader(packageStream)) { Byte[] buffer = new Byte[packageStream.Length]; // TODO: Handle large files with chunking packageStream.Read(buffer, 0, (Int32)packageStream.Length); this.pnpInfo = buffer.UnpackTemplate(); } } else { // Otherwsie initialize a fresh new PnP OpenXML package info object this.pnpInfo = new PnPInfo() { Manifest = new PnPManifest() { Type = PackageType.Full }, Properties = new PnPProperties() { Generator = PnPCoreUtilities.PnPCoreVersionTag, Author = !String.IsNullOrEmpty(author) ? author : String.Empty, }, }; } }