1/*****************************************************************************/
2// Copyright 2006-2012 Adobe Systems Incorporated
3// All Rights Reserved.
4//
5// NOTICE:  Adobe permits you to use, modify, and distribute this file in
6// accordance with the terms of the Adobe license agreement accompanying it.
7/*****************************************************************************/
8
9/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_xmp_sdk.h#2 $ */
10/* $DateTime: 2012/05/31 09:29:29 $ */
11/* $Change: 832505 $ */
12/* $Author: tknoll $ */
13
14/*****************************************************************************/
15
16#ifndef __dng_xmp_sdk__
17#define __dng_xmp_sdk__
18
19/*****************************************************************************/
20
21#include "dng_auto_ptr.h"
22#include "dng_classes.h"
23#include "dng_flags.h"
24#include "dng_types.h"
25
26#if qDNGUseXMP
27
28/*****************************************************************************/
29
30extern const char *XMP_NS_TIFF;
31extern const char *XMP_NS_EXIF;
32extern const char *XMP_NS_PHOTOSHOP;
33extern const char *XMP_NS_XAP;
34extern const char *XMP_NS_XAP_RIGHTS;
35extern const char *XMP_NS_DC;
36extern const char *XMP_NS_XMP_NOTE;
37extern const char *XMP_NS_MM;
38
39extern const char *XMP_NS_CRS;
40extern const char *XMP_NS_CRSS;
41
42extern const char *XMP_NS_LCP;
43
44extern const char *XMP_NS_AUX;
45
46extern const char *XMP_NS_IPTC;
47extern const char *XMP_NS_IPTC_EXT;
48
49extern const char *XMP_NS_CRX;
50
51extern const char *XMP_NS_DNG;
52
53/*****************************************************************************/
54
55class dng_xmp_private;
56
57/*****************************************************************************/
58
59typedef bool (IteratePathsCallback) (const char *ns,
60			  				   	     const char *path,
61			  				         void *callbackData);
62
63/*****************************************************************************/
64
65struct dng_xmp_namespace
66	{
67	const char * fullName;
68	const char * shortName;
69	};
70
71/*****************************************************************************/
72
73class dng_xmp_sdk
74	{
75
76	private:
77
78		dng_xmp_private *fPrivate;
79
80	public:
81
82		dng_xmp_sdk ();
83
84		dng_xmp_sdk (const dng_xmp_sdk &sdk);
85
86		virtual ~dng_xmp_sdk ();
87
88		static void InitializeSDK (dng_xmp_namespace * extraNamespaces = NULL,
89								   const char *software = NULL);
90
91		static void TerminateSDK ();
92
93		bool HasMeta () const;
94
95		void * GetPrivateMeta ();
96
97		void Parse (dng_host &host,
98					const char *buffer,
99				    uint32 count);
100
101		bool Exists (const char *ns,
102					 const char *path) const;
103
104		void AppendArrayItem (const char *ns,
105							  const char *arrayName,
106							  const char *itemValue,
107							  bool isBag = true,
108							  bool propIsStruct = false);
109
110		int32 CountArrayItems (const char *ns,
111		                       const char *path) const;
112
113		bool HasNameSpace (const char *ns) const;
114
115		void Remove (const char *ns,
116				     const char *path);
117
118		void RemoveProperties (const char *ns);
119
120		bool IsEmptyString (const char *ns,
121					        const char *path);
122
123		bool IsEmptyArray (const char *ns,
124					       const char *path);
125
126		void ComposeArrayItemPath (const char *ns,
127								   const char *arrayName,
128								   int32 itemNumber,
129								   dng_string &s) const;
130
131		void ComposeStructFieldPath (const char *ns,
132								     const char *structName,
133								     const char *fieldNS,
134									 const char *fieldName,
135								     dng_string &s) const;
136
137		bool GetNamespacePrefix (const char *uri,
138								 dng_string &s) const;
139
140		bool GetString (const char *ns,
141				   		const char *path,
142				   		dng_string &s) const;
143
144		void ValidateStringList (const char *ns,
145								 const char *path);
146
147		bool GetStringList (const char *ns,
148							const char *path,
149							dng_string_list &list) const;
150
151		bool GetAltLangDefault (const char *ns,
152								const char *path,
153								dng_string &s) const;
154
155		bool GetStructField (const char *ns,
156							 const char *path,
157							 const char *fieldNS,
158							 const char *fieldName,
159							 dng_string &s) const;
160
161		void Set (const char *ns,
162				  const char *path,
163				  const char *text);
164
165		void SetString (const char *ns,
166				  		const char *path,
167				  		const dng_string &s);
168
169		void SetStringList (const char *ns,
170				  		    const char *path,
171				  		    const dng_string_list &list,
172				  		    bool isBag);
173
174		void SetAltLangDefault (const char *ns,
175								const char *path,
176								const dng_string &s);
177
178		void SetStructField (const char *ns,
179							 const char *path,
180							 const char *fieldNS,
181							 const char *fieldName,
182							 const char *text);
183
184		void DeleteStructField (const char *ns,
185								const char *structName,
186								const char *fieldNS,
187								const char *fieldName);
188
189		dng_memory_block * Serialize (dng_memory_allocator &allocator,
190									  bool asPacket,
191									  uint32 targetBytes,
192									  uint32 padBytes,
193									  bool forJPEG,
194									  bool compact) const;
195
196		void PackageForJPEG (dng_memory_allocator &allocator,
197							 AutoPtr<dng_memory_block> &stdBlock,
198							 AutoPtr<dng_memory_block> &extBlock,
199							 dng_string &extDigest) const;
200
201		void MergeFromJPEG (const dng_xmp_sdk *xmp);
202
203		void ReplaceXMP (dng_xmp_sdk *xmp);
204
205		bool IteratePaths (IteratePathsCallback *callback,
206						   void *callbackData = NULL,
207						   const char *startNS = 0,
208						   const char *startingPath = 0);
209
210		#if qDNGXMPDocOps
211
212		void DocOpsOpenXMP (const char *srcMIMI);
213
214		void DocOpsPrepareForSave (const char *srcMIMI,
215								   const char *dstMIMI,
216								   bool newPath = true);
217
218		void DocOpsUpdateMetadata (const char *srcMIMI);
219
220		#endif
221
222	private:
223
224		void ClearMeta ();
225
226		void MakeMeta ();
227
228		void NeedMeta ();
229
230		// Hidden assignment operator.
231
232		dng_xmp_sdk & operator= (const dng_xmp_sdk &sdk);
233
234	};
235
236#endif
237/*****************************************************************************/
238
239#endif
240
241/*****************************************************************************/
242