Blame xmpsdk/src/XMPMeta.hpp

Packit 01d647
#ifndef __XMPMeta_hpp__
Packit 01d647
#define __XMPMeta_hpp__
Packit 01d647
Packit 01d647
// =================================================================================================
Packit 01d647
// Copyright 2002-2008 Adobe Systems Incorporated
Packit 01d647
// All Rights Reserved.
Packit 01d647
//
Packit 01d647
// NOTICE:	Adobe permits you to use, modify, and distribute this file in accordance with the terms
Packit 01d647
// of the Adobe license agreement accompanying it.
Packit 01d647
// =================================================================================================
Packit 01d647
Packit 01d647
#include "XMP_Environment.h"
Packit 01d647
#include "XMP_Const.h"
Packit 01d647
#include "XMPCore_Impl.hpp"
Packit 01d647
#include "XMLParserAdapter.hpp"
Packit 01d647
Packit 01d647
// -------------------------------------------------------------------------------------------------
Packit 01d647
Packit 01d647
#ifndef DumpXMLParseTree
Packit 01d647
	#define DumpXMLParseTree 0
Packit 01d647
#endif
Packit 01d647
Packit 01d647
extern XMP_VarString * xdefaultName;
Packit 01d647
Packit 01d647
class XMPIterator;
Packit 01d647
class XMPUtils;
Packit 01d647
Packit 01d647
// -------------------------------------------------------------------------------------------------
Packit 01d647
Packit 01d647
class XMPMeta {
Packit 01d647
public:
Packit 01d647
Packit 01d647
	static void
Packit 01d647
	GetVersionInfo ( XMP_VersionInfo * info );
Packit 01d647
	
Packit 01d647
	static bool
Packit 01d647
	Initialize();
Packit 01d647
	static void
Packit 01d647
	Terminate() RELEASE_NO_THROW;
Packit 01d647
	
Packit 01d647
	static void
Packit 01d647
	Unlock ( XMP_OptionBits options );
Packit 01d647
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
Packit 01d647
	XMPMeta();
Packit 01d647
	
Packit 01d647
	virtual ~XMPMeta() RELEASE_NO_THROW;
Packit 01d647
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	static XMP_OptionBits
Packit 01d647
	GetGlobalOptions();
Packit 01d647
	
Packit 01d647
	static void
Packit 01d647
	SetGlobalOptions ( XMP_OptionBits options );
Packit 01d647
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
Packit 01d647
	static XMP_Status
Packit 01d647
	DumpNamespaces ( XMP_TextOutputProc outProc,
Packit 01d647
					 void *				refCon );
Packit 01d647
	
Packit 01d647
	static XMP_Status
Packit 01d647
	DumpAliases ( XMP_TextOutputProc outProc,
Packit 01d647
				  void *			 refCon );
Packit 01d647
	
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	static void
Packit 01d647
	RegisterNamespace ( XMP_StringPtr	namespaceURI,
Packit 01d647
                            XMP_StringPtr	prefix );
Packit 01d647
	
Packit 01d647
	static bool
Packit 01d647
	GetNamespacePrefix ( XMP_StringPtr	 namespaceURI,
Packit 01d647
						 XMP_StringPtr * namespacePrefix,
Packit 01d647
						 XMP_StringLen * prefixSize );
Packit 01d647
	
Packit 01d647
	static bool
Packit 01d647
	GetNamespaceURI ( XMP_StringPtr	  namespacePrefix,
Packit 01d647
					  XMP_StringPtr * namespaceURI,
Packit 01d647
					  XMP_StringLen * uriSize );
Packit 01d647
	
Packit 01d647
	static void
Packit 01d647
	DeleteNamespace ( XMP_StringPtr namespaceURI );
Packit 01d647
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	static void
Packit 01d647
	RegisterAlias ( XMP_StringPtr  aliasNS,
Packit 01d647
					XMP_StringPtr  aliasProp,
Packit 01d647
					XMP_StringPtr  actualNS,
Packit 01d647
					XMP_StringPtr  actualProp,
Packit 01d647
					XMP_OptionBits arrayForm );
Packit 01d647
	
Packit 01d647
	static bool
Packit 01d647
	ResolveAlias ( XMP_StringPtr	aliasNS,
Packit 01d647
				   XMP_StringPtr	aliasProp,
Packit 01d647
				   XMP_StringPtr *	actualNS,
Packit 01d647
				   XMP_StringLen *	nsSize,
Packit 01d647
				   XMP_StringPtr *	actualProp,
Packit 01d647
				   XMP_StringLen *	propSize,
Packit 01d647
				   XMP_OptionBits * arrayForm );
Packit 01d647
	
Packit 01d647
	static void
Packit 01d647
	DeleteAlias ( XMP_StringPtr aliasNS,
Packit 01d647
				  XMP_StringPtr aliasProp );
Packit 01d647
	
Packit 01d647
	static void
Packit 01d647
	RegisterStandardAliases ( XMP_StringPtr schemaNS );
Packit 01d647
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	UnlockObject ( XMP_OptionBits options ) const;
Packit 01d647
	
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	GetProperty ( XMP_StringPtr	   schemaNS,
Packit 01d647
				  XMP_StringPtr	   propName,
Packit 01d647
				  XMP_StringPtr *  propValue,
Packit 01d647
				  XMP_StringLen *  valueSize,
Packit 01d647
				  XMP_OptionBits * options ) const;
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	GetArrayItem ( XMP_StringPtr	schemaNS,
Packit 01d647
				   XMP_StringPtr	arrayName,
Packit 01d647
				   XMP_Index		itemIndex,
Packit 01d647
				   XMP_StringPtr *	itemValue,
Packit 01d647
				   XMP_StringLen *	valueSize,
Packit 01d647
				   XMP_OptionBits * options ) const;
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	GetStructField ( XMP_StringPtr	  schemaNS,
Packit 01d647
					 XMP_StringPtr	  structName,
Packit 01d647
					 XMP_StringPtr	  fieldNS,
Packit 01d647
					 XMP_StringPtr	  fieldName,
Packit 01d647
					 XMP_StringPtr *  fieldValue,
Packit 01d647
					 XMP_StringLen *  valueSize,
Packit 01d647
					 XMP_OptionBits * options ) const;
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	GetQualifier ( XMP_StringPtr	schemaNS,
Packit 01d647
				   XMP_StringPtr	propName,
Packit 01d647
				   XMP_StringPtr	qualNS,
Packit 01d647
				   XMP_StringPtr	qualName,
Packit 01d647
				   XMP_StringPtr *	qualValue,
Packit 01d647
				   XMP_StringLen *	valueSize,
Packit 01d647
				   XMP_OptionBits * options ) const;
Packit 01d647
	
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetProperty ( XMP_StringPtr	 schemaNS,
Packit 01d647
				  XMP_StringPtr	 propName,
Packit 01d647
				  XMP_StringPtr	 propValue,
Packit 01d647
				  XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetArrayItem ( XMP_StringPtr  schemaNS,
Packit 01d647
				   XMP_StringPtr  arrayName,
Packit 01d647
				   XMP_Index	  itemIndex,
Packit 01d647
				   XMP_StringPtr  itemValue,
Packit 01d647
				   XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	AppendArrayItem ( XMP_StringPtr	 schemaNS,
Packit 01d647
					  XMP_StringPtr	 arrayName,
Packit 01d647
					  XMP_OptionBits arrayOptions,
Packit 01d647
					  XMP_StringPtr	 itemValue,
Packit 01d647
					  XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetStructField ( XMP_StringPtr	schemaNS,
Packit 01d647
					 XMP_StringPtr	structName,
Packit 01d647
					 XMP_StringPtr	fieldNS,
Packit 01d647
					 XMP_StringPtr	fieldName,
Packit 01d647
					 XMP_StringPtr	fieldValue,
Packit 01d647
					 XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetQualifier ( XMP_StringPtr  schemaNS,
Packit 01d647
				   XMP_StringPtr  propName,
Packit 01d647
				   XMP_StringPtr  qualNS,
Packit 01d647
				   XMP_StringPtr  qualName,
Packit 01d647
				   XMP_StringPtr  qualValue,
Packit 01d647
				   XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	DeleteProperty ( XMP_StringPtr schemaNS,
Packit 01d647
					 XMP_StringPtr propName );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	DeleteArrayItem ( XMP_StringPtr schemaNS,
Packit 01d647
					  XMP_StringPtr arrayName,
Packit 01d647
					  XMP_Index		itemIndex );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	DeleteStructField ( XMP_StringPtr schemaNS,
Packit 01d647
						XMP_StringPtr structName,
Packit 01d647
						XMP_StringPtr fieldNS,
Packit 01d647
						XMP_StringPtr fieldName );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	DeleteQualifier ( XMP_StringPtr schemaNS,
Packit 01d647
					  XMP_StringPtr propName,
Packit 01d647
					  XMP_StringPtr qualNS,
Packit 01d647
					  XMP_StringPtr qualName );
Packit 01d647
	
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	DoesPropertyExist ( XMP_StringPtr schemaNS,
Packit 01d647
						XMP_StringPtr propName ) const;
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	DoesArrayItemExist ( XMP_StringPtr schemaNS,
Packit 01d647
						 XMP_StringPtr arrayName,
Packit 01d647
						 XMP_Index	   itemIndex ) const;
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	DoesStructFieldExist ( XMP_StringPtr schemaNS,
Packit 01d647
						   XMP_StringPtr structName,
Packit 01d647
						   XMP_StringPtr fieldNS,
Packit 01d647
						   XMP_StringPtr fieldName ) const;
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	DoesQualifierExist ( XMP_StringPtr schemaNS,
Packit 01d647
						 XMP_StringPtr propName,
Packit 01d647
						 XMP_StringPtr qualNS,
Packit 01d647
						 XMP_StringPtr qualName ) const;
Packit 01d647
	
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	GetLocalizedText ( XMP_StringPtr	schemaNS,
Packit 01d647
					   XMP_StringPtr	altTextName,
Packit 01d647
					   XMP_StringPtr	genericLang,
Packit 01d647
					   XMP_StringPtr	specificLang,
Packit 01d647
					   XMP_StringPtr *	actualLang,
Packit 01d647
					   XMP_StringLen *	langSize,
Packit 01d647
					   XMP_StringPtr *	itemValue,
Packit 01d647
					   XMP_StringLen *	valueSize,
Packit 01d647
					   XMP_OptionBits * options ) const;
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetLocalizedText ( XMP_StringPtr  schemaNS,
Packit 01d647
					   XMP_StringPtr  altTextName,
Packit 01d647
					   XMP_StringPtr  genericLang,
Packit 01d647
					   XMP_StringPtr  specificLang,
Packit 01d647
					   XMP_StringPtr  itemValue,
Packit 01d647
					   XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	GetProperty_Bool ( XMP_StringPtr	schemaNS,
Packit 01d647
					   XMP_StringPtr	propName,
Packit 01d647
					   bool *			propValue,
Packit 01d647
					   XMP_OptionBits * options ) const;
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	GetProperty_Int ( XMP_StringPtr	   schemaNS,
Packit 01d647
					  XMP_StringPtr	   propName,
Packit 01d647
					  XMP_Int32 *	   propValue,
Packit 01d647
					  XMP_OptionBits * options ) const;
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	GetProperty_Int64 ( XMP_StringPtr	 schemaNS,
Packit 01d647
					    XMP_StringPtr	 propName,
Packit 01d647
					    XMP_Int64 *	     propValue,
Packit 01d647
					    XMP_OptionBits * options ) const;
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	GetProperty_Float ( XMP_StringPtr	 schemaNS,
Packit 01d647
						XMP_StringPtr	 propName,
Packit 01d647
						double *		 propValue,
Packit 01d647
						XMP_OptionBits * options ) const;
Packit 01d647
	
Packit 01d647
	bool
Packit 01d647
	GetProperty_Date ( XMP_StringPtr	schemaNS,
Packit 01d647
					   XMP_StringPtr	propName,
Packit 01d647
					   XMP_DateTime *	propValue,
Packit 01d647
					   XMP_OptionBits * options ) const;
Packit 01d647
	
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetProperty_Bool ( XMP_StringPtr  schemaNS,
Packit 01d647
					   XMP_StringPtr  propName,
Packit 01d647
					   bool			  propValue,
Packit 01d647
					   XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetProperty_Int ( XMP_StringPtr	 schemaNS,
Packit 01d647
					  XMP_StringPtr	 propName,
Packit 01d647
					  XMP_Int32		 propValue,
Packit 01d647
					  XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetProperty_Int64 ( XMP_StringPtr  schemaNS,
Packit 01d647
					    XMP_StringPtr  propName,
Packit 01d647
					    XMP_Int64	   propValue,
Packit 01d647
					    XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetProperty_Float ( XMP_StringPtr  schemaNS,
Packit 01d647
						XMP_StringPtr  propName,
Packit 01d647
						double		   propValue,
Packit 01d647
						XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetProperty_Date ( XMP_StringPtr		schemaNS,
Packit 01d647
					   XMP_StringPtr		propName,
Packit 01d647
					   const XMP_DateTime & propValue,
Packit 01d647
					   XMP_OptionBits		options );
Packit 01d647
	
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	GetObjectName ( XMP_StringPtr * namePtr,
Packit 01d647
					XMP_StringLen * nameLen ) const;
Packit 01d647
Packit 01d647
	void
Packit 01d647
	SetObjectName ( XMP_StringPtr name );
Packit 01d647
Packit 01d647
	XMP_OptionBits
Packit 01d647
	GetObjectOptions() const;
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SetObjectOptions ( XMP_OptionBits options );
Packit 01d647
Packit 01d647
	void
Packit 01d647
	Sort();
Packit 01d647
Packit 01d647
	void
Packit 01d647
	Erase();
Packit 01d647
Packit 01d647
	void
Packit 01d647
	Clone ( XMPMeta * clone, XMP_OptionBits options ) const;
Packit 01d647
	
Packit 01d647
	XMP_Index
Packit 01d647
	CountArrayItems ( XMP_StringPtr schemaNS,
Packit 01d647
					  XMP_StringPtr arrayName ) const;
Packit 01d647
	
Packit 01d647
	XMP_Status
Packit 01d647
	DumpObject ( XMP_TextOutputProc outProc,
Packit 01d647
				 void *				refCon ) const;
Packit 01d647
	
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	ParseFromBuffer ( XMP_StringPtr	 buffer,
Packit 01d647
					  XMP_StringLen	 bufferSize,
Packit 01d647
					  XMP_OptionBits options );
Packit 01d647
	
Packit 01d647
	void
Packit 01d647
	SerializeToBuffer ( XMP_StringPtr * rdfString,
Packit 01d647
						XMP_StringLen * rdfSize,
Packit 01d647
						XMP_OptionBits	options,
Packit 01d647
						XMP_StringLen	padding,
Packit 01d647
						XMP_StringPtr	newline,
Packit 01d647
						XMP_StringPtr	indent,
Packit 01d647
						XMP_Index		baseIndent ) const;
Packit 01d647
	
Packit 01d647
	// =============================================================================================
Packit 01d647
Packit 01d647
	// ---------------------------------------------------------------------------------------------
Packit 01d647
	// - Everything is built out of standard nodes. Each node has a name, value, option flags, a
Packit 01d647
	// vector of child nodes, and a vector of qualifier nodes.
Packit 01d647
	//
Packit 01d647
	// - The option flags are those passed to SetProperty and returned from GetProperty. They tell
Packit 01d647
	// if the node is simple, a struct or an array; whether it has qualifiers, etc.
Packit 01d647
	//
Packit 01d647
	// - The name of the node is an XML qualified name, of the form "prefix:simple-name". Since we
Packit 01d647
	// force all namespaces to be known and to have unique prefixes, this is semantically equivalent
Packit 01d647
	// to using a URI and simple name pair.
Packit 01d647
	//
Packit 01d647
	// - Although the value part is only for leaf properties and the children part is only for
Packit 01d647
	// structs and arrays, it is easier to simply have them in every node. This keeps things visible
Packit 01d647
	// so that debugging is easier
Packit 01d647
	//
Packit 01d647
	// - The top level node children are the namespaces that contain properties, the next level are
Packit 01d647
	// the top level properties, lower levels are the fields of structs or items of arrays. The name
Packit 01d647
	// of the top level nodes is just the namespace prefix, with the colon terminator. The name of
Packit 01d647
	// top level properties includes the namespace prefix.
Packit 01d647
	//
Packit 01d647
	// - Any property node, at any level, can have qualifiers. These are themselves general property
Packit 01d647
	// nodes. And could in fact themselves have qualifiers!
Packit 01d647
Packit 01d647
	// ! Expose the implementation so that file static functions can see the data.
Packit 01d647
Packit 01d647
	XMP_Int32 clientRefs;	// ! Must be signed to allow decrement from 0.
Packit 01d647
	XMP_Int32 prevTkVer;	// Previous toolkit version as MMmmuubbb (major, minor, micro, build).
Packit 01d647
	XMP_Node  tree;
Packit 01d647
Packit 01d647
	XMLParserAdapter * xmlParser;
Packit 01d647
	
Packit 01d647
	friend class XMPIterator;
Packit 01d647
	friend class XMPUtils;
Packit 01d647
Packit 01d647
private:
Packit 01d647
  
Packit 01d647
	// ! These are hidden on purpose:
Packit 01d647
	XMPMeta ( const XMPMeta & /* original */ ) : clientRefs(0), prevTkVer(0), tree(XMP_Node(0,"",0)), xmlParser(0)
Packit 01d647
		{ XMP_Throw ( "Call to hidden constructor", kXMPErr_InternalFailure ); };
Packit 01d647
	void operator= ( const XMPMeta & /* rhs */ )  
Packit 01d647
		{ XMP_Throw ( "Call to hidden operator=", kXMPErr_InternalFailure ); };
Packit 01d647
Packit 01d647
};	// class XMPMeta
Packit 01d647
Packit 01d647
Packit 01d647
// =================================================================================================
Packit 01d647
Packit 01d647
#endif	// __XMPMeta_hpp__