* WindowsBase/WindowsBase.dll.sources:
[mono.git] / mcs / class / WindowsBase / System.IO.Packaging / PackagePropertiesPart.cs
1 // PackagePropertiesPart.cs created with MonoDevelop
2 // User: alan at 11:07 04/11/2008
3 //
4 // To change standard headers go to Edit->Preferences->Coding->Standard Headers
5 //
6
7 using System;
8 using System.Xml;
9
10 namespace System.IO.Packaging
11 {
12         class PackagePropertiesPart : PackageProperties
13         {
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";
17                 
18                 string category;
19                 string contentStatus;
20                 string contentType;
21                 DateTime? created;
22                 string creator;
23                 string description;
24                 string identifier;
25                 string keywords;
26                 string language;
27                 string lastModifiedBy;
28                 DateTime? lastPrinted;
29                 DateTime? modified;
30                 string revision;
31                 string subject;
32                 string title;
33                 string version;
34
35                 public PackagePropertiesPart ()
36                 {
37                         
38                 }
39
40                 public override string Category {
41                         get {
42                                 return category;
43                         }
44                         set {
45                                 Package.CheckIsReadOnly ();
46                                 category = value;
47                         }
48                 }
49                 public override string ContentStatus {
50                         get {
51                                 return contentStatus;
52                         }
53                         set {
54                                 Package.CheckIsReadOnly ();
55                                 contentStatus = value;
56                         }
57                 }
58                 public override string ContentType {
59                         get {
60                                 return contentType;
61                         }
62                         set {
63                                 Package.CheckIsReadOnly ();
64                                 contentType = value;
65                         }
66                 }
67                 public override DateTime? Created {
68                         get {
69                                 return created;
70                         }
71                         set {
72                                 Package.CheckIsReadOnly ();
73                                 created = value;
74                         }
75                 }
76                 public override string Creator {
77                         get {
78                                 return creator;
79                         }
80                         set {
81                                 Package.CheckIsReadOnly ();
82                                 creator = value;
83                         }
84                 }
85                 public override string Description {
86                         get {
87                                 return description;
88                         }
89                         set {
90                                 Package.CheckIsReadOnly ();
91                                 description = value;
92                         }
93                 }
94                 public override string Identifier {
95                         get {
96                                 return identifier;
97                         }
98                         set {
99                                 Package.CheckIsReadOnly ();
100                                 identifier = value;
101                         }
102                 }
103                 public override string Keywords {
104                         get {
105                                 return keywords;
106                         }
107                         set {
108                                 Package.CheckIsReadOnly ();
109                                 keywords = value;
110                         }
111                 }
112                 public override string Language {
113                         get {
114                                 return language;
115                         }
116                         set {
117                                 Package.CheckIsReadOnly ();
118                                 language = value;
119                         }
120                 }
121                 public override string LastModifiedBy {
122                         get {
123                                 return lastModifiedBy;
124                         }
125                         set {
126                                 Package.CheckIsReadOnly ();
127                                 lastModifiedBy = value;
128                         }
129                 }
130                 public override DateTime? LastPrinted {
131                         get {
132                                 return lastPrinted;
133                         }
134                         set {
135                                 Package.CheckIsReadOnly ();
136                                 lastPrinted = value;
137                         }
138                 }
139                 public override DateTime? Modified {
140                         get {
141                                 return modified;
142                         }
143                         set {
144                                 Package.CheckIsReadOnly ();
145                                 modified = value;
146                         }
147                 }
148                 public override string Revision {
149                         get {
150                                 return revision;
151                         }
152                         set {
153                                 Package.CheckIsReadOnly ();
154                                 revision = value;
155                         }
156                 }
157                 public override string Subject {
158                         get {
159                                 return subject;
160                         }
161                         set {
162                                 Package.CheckIsReadOnly ();
163                                 subject = value;
164                         }
165                 }
166                 public override string Title {
167                         get {
168                                 return title;
169                         }
170                         set {
171                                 Package.CheckIsReadOnly ();
172                                 title = value;
173                         }
174                 }
175                 public override string Version {
176                         get {
177                                 return version;
178                         }
179                         set {
180                                 Package.CheckIsReadOnly ();
181                                 version = value;
182                         }
183                 }
184                 
185                 internal override void LoadFrom (Stream stream)
186                 {
187                         XmlDocument doc = new XmlDocument ();
188                         doc.Load (stream);
189                         
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);
195
196                         XmlNode node;
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;
229                 }
230
231                 internal override void WriteTo(XmlTextWriter writer)
232                 {
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);
239                         
240                         // Create XML declaration
241                         doc.AppendChild (doc.CreateXmlDeclaration ("1.0", "UTF-8", null));
242
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;
248
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 ?? "";
267
268                         if (Modified.HasValue)
269                         {
270                                 XmlAttribute att = doc.CreateAttribute("xsi", "type", NSXsi);
271                                 att.Value = "dcterms:W3CDTF";
272                                 
273                                 XmlNode modified = coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dcterms", "modified", NSDcTerms));
274                                 modified.Attributes.Append (att);
275                                 modified.InnerXml = Modified.Value.ToString ();
276                         }
277                         
278                         doc.WriteContentTo (writer);
279                 }
280         }
281 }