1 // PackagePropertiesPart.cs created with MonoDevelop
2 // User: alan at 11:07 04/11/2008
4 // To change standard headers go to Edit->Preferences->Coding->Standard Headers
10 namespace System.IO.Packaging
12 class PackagePropertiesPart : PackageProperties
14 const string NSDc = "http://purl.org/dc/elements/1.1/";
15 const string NSDcTerms = "http://purl.org/dc/terms/";
16 const string NSXsi = "http://www.w3.org/2001/XMLSchema-instance";
27 string lastModifiedBy;
28 DateTime? lastPrinted;
35 public PackagePropertiesPart ()
40 public override string Category {
45 Package.CheckIsReadOnly ();
49 public override string ContentStatus {
54 Package.CheckIsReadOnly ();
55 contentStatus = value;
58 public override string ContentType {
63 Package.CheckIsReadOnly ();
67 public override DateTime? Created {
72 Package.CheckIsReadOnly ();
76 public override string Creator {
81 Package.CheckIsReadOnly ();
85 public override string Description {
90 Package.CheckIsReadOnly ();
94 public override string Identifier {
99 Package.CheckIsReadOnly ();
103 public override string Keywords {
108 Package.CheckIsReadOnly ();
112 public override string Language {
117 Package.CheckIsReadOnly ();
121 public override string LastModifiedBy {
123 return lastModifiedBy;
126 Package.CheckIsReadOnly ();
127 lastModifiedBy = value;
130 public override DateTime? LastPrinted {
135 Package.CheckIsReadOnly ();
139 public override DateTime? Modified {
144 Package.CheckIsReadOnly ();
148 public override string Revision {
153 Package.CheckIsReadOnly ();
157 public override string Subject {
162 Package.CheckIsReadOnly ();
166 public override string Title {
171 Package.CheckIsReadOnly ();
175 public override string Version {
180 Package.CheckIsReadOnly ();
185 internal override void LoadFrom (Stream stream)
187 XmlDocument doc = new XmlDocument ();
190 XmlNamespaceManager manager = new XmlNamespaceManager (doc.NameTable);
191 manager.AddNamespace ("prop", NSPackageProperties);
192 manager.AddNamespace ("dc", NSDc);
193 manager.AddNamespace ("dcterms", NSDcTerms);
194 manager.AddNamespace ("xsi", NSXsi);
197 if ((node = doc.SelectSingleNode ("prop:coreProperties/prop:category", manager)) != null)
198 category = node.InnerXml;
199 if ((node = doc.SelectSingleNode ("prop:coreProperties/prop:contentStatus", manager)) != null)
200 ContentStatus = node.InnerXml;
201 if ((node = doc.SelectSingleNode ("prop:coreProperties/prop:contentType", manager)) != null)
202 ContentType = node.InnerXml;
203 if ((node = doc.SelectSingleNode ("prop:coreProperties/dcterms:created", manager)) != null)
204 Created = DateTime.Parse (node.InnerXml);
205 if ((node = doc.SelectSingleNode ("prop:coreProperties/dc:creator", manager)) != null)
206 Creator = node.InnerXml;
207 if ((node = doc.SelectSingleNode ("prop:coreProperties/dc:description", manager)) != null)
208 Description = node.InnerXml;
209 if ((node = doc.SelectSingleNode ("prop:coreProperties/dc:identifier", manager)) != null)
210 Identifier = node.InnerXml;
211 if ((node = doc.SelectSingleNode ("prop:coreProperties/prop:keywords", manager)) != null)
212 Keywords = node.InnerXml;
213 if ((node = doc.SelectSingleNode ("prop:coreProperties/dc:language", manager)) != null)
214 Language = node.InnerXml;
215 if ((node = doc.SelectSingleNode ("prop:coreProperties/prop:lastModifiedBy", manager)) != null)
216 LastModifiedBy = node.InnerXml;
217 if ((node = doc.SelectSingleNode ("prop:coreProperties/prop:lastPrinted", manager)) != null)
218 LastPrinted = DateTime.Parse (node.InnerXml);
219 if ((node = doc.SelectSingleNode ("prop:coreProperties/dcterms:modified", manager)) != null)
220 Modified = DateTime.Parse (node.InnerXml);
221 if ((node = doc.SelectSingleNode ("prop:coreProperties/prop:revision", manager)) != null)
222 Revision = node.InnerXml;
223 if ((node = doc.SelectSingleNode ("prop:coreProperties/dc:subject", manager)) != null)
224 Subject = node.InnerXml;
225 if ((node = doc.SelectSingleNode ("prop:coreProperties/dc:title", manager)) != null)
226 Title = node.InnerXml;
227 if ((node = doc.SelectSingleNode ("prop:coreProperties/prop:version", manager)) != null)
228 Version = node.InnerXml;
231 internal override void WriteTo(XmlTextWriter writer)
233 XmlDocument doc = new XmlDocument ();
234 XmlNamespaceManager manager = new XmlNamespaceManager (doc.NameTable);
235 manager.AddNamespace ("prop", NSPackageProperties);
236 manager.AddNamespace ("dc", NSDc);
237 manager.AddNamespace ("dcterms", NSDcTerms);
238 manager.AddNamespace ("xsi", NSXsi);
240 // Create XML declaration
241 doc.AppendChild (doc.CreateXmlDeclaration ("1.0", "UTF-8", null));
243 // Create root node with required namespace declarations
244 XmlNode coreProperties = doc.AppendChild (doc.CreateNode (XmlNodeType.Element, "coreProperties", NSPackageProperties));
245 coreProperties.Attributes.Append (doc.CreateAttribute ("xmlns:dc")).Value = NSDc;
246 coreProperties.Attributes.Append (doc.CreateAttribute ("xmlns:dcterms")).Value = NSDcTerms;
247 coreProperties.Attributes.Append (doc.CreateAttribute ("xmlns:xsi")).Value = NSXsi;
249 // Create the children
250 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "category", NSPackageProperties)).InnerXml = Category ?? "";
251 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "contentStatus", NSPackageProperties)).InnerXml = ContentStatus ?? "";
252 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "contentType", NSPackageProperties)).InnerXml = ContentType ?? "";
253 if (Created.HasValue)
254 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dcterms", "created", NSDcTerms)).InnerXml = Created.Value.ToString ();
255 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dc", "creator", NSDc)).InnerXml = Creator ?? "";
256 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dc", "description", NSDc)).InnerXml = Description ?? "";
257 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dc", "identifier", NSDc)).InnerXml = Identifier ?? "";
258 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "keywords", NSPackageProperties)).InnerXml = Keywords ?? "";
259 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dc", "language", NSDc)).InnerXml = Language ?? "";
260 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "lastModifiedBy", NSPackageProperties)).InnerXml = LastModifiedBy ?? "";
261 if (LastPrinted.HasValue)
262 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "lastPrinted", NSPackageProperties)).InnerXml = LastPrinted.Value.ToString ();
263 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "revision", NSPackageProperties)).InnerXml = Revision ?? "";
264 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dc", "subject", NSDc)).InnerXml = Subject ?? "";
265 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dc", "title", NSDc)).InnerXml = Title ?? "";
266 coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "version", NSPackageProperties)).InnerXml = Version ?? "";
268 if (Modified.HasValue)
270 XmlAttribute att = doc.CreateAttribute("xsi", "type", NSXsi);
271 att.Value = "dcterms:W3CDTF";
273 XmlNode modified = coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dcterms", "modified", NSDcTerms));
274 modified.Attributes.Append (att);
275 modified.InnerXml = Modified.Value.ToString ();
278 doc.WriteContentTo (writer);