Blob Blame History Raw
// =================================================================================================
// ADOBE SYSTEMS INCORPORATED
// Copyright 2010 Adobe Systems Incorporated
// All Rights Reserved
//
// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms
// of the Adobe license agreement accompanying it.
// =================================================================================================

#include "XMPFiles/source/NativeMetadataSupport/IMetadata.h"

//-----------------------------------------------------------------------------
// 
// IMetadata::IMetadata(...)
// 
// Purpose: ctor/dtor
// 
//-----------------------------------------------------------------------------

IMetadata::IMetadata() 
: mDirty(false) 
{
}

IMetadata::~IMetadata() 
{
	for( ValueMap::iterator iter = mValues.begin(); iter != mValues.end(); iter++ )
	{
		delete iter->second;
	}
}

//-----------------------------------------------------------------------------
// 
// IMetadata::parse(...)
// 
// Purpose: Parses the given memory block and creates a data model representation
//			We assume that any metadata block is < 4GB so that we can savely use 
//			32bit sizes.
//			Throws exceptions if parsing is not possible
// 
//-----------------------------------------------------------------------------

void IMetadata::parse( const XMP_Uns8* input, XMP_Uns64 size )
{
	XMP_Throw ( "Method not implemented", kXMPErr_Unimplemented );
}

//-----------------------------------------------------------------------------
// 
// IMetadata::parse(...)
// 
// Purpose: Parses the given file and creates a data model representation
//			Throws exceptions if parsing is not possible
// 
//-----------------------------------------------------------------------------

void IMetadata::parse( XMP_IO* input )
{
	XMP_Throw ( "Method not implemented", kXMPErr_Unimplemented );
}

//-----------------------------------------------------------------------------
// 
// IMetadata::serialize(...)
// 
// Purpose: Serializes the data model to a memory block. 
//			The method creates a buffer and pass it to the parameter 'buffer'. 
//			The callee of the method is responsible to delete the buffer later on.
//			We assume that any metadata block is < 4GB so that we can savely use 
//			32bit sizes.
//			Throws exceptions if serializing is not possible
// 
//-----------------------------------------------------------------------------

XMP_Uns64 IMetadata::serialize( XMP_Uns8** buffer )
{
	XMP_Throw ( "Method not implemented", kXMPErr_Unimplemented );
}

//-----------------------------------------------------------------------------
// 
// IMetadata::hasChanged(...)
// 
// Purpose: Return true if any values of this container was modified
// 
//-----------------------------------------------------------------------------

bool IMetadata::hasChanged() const
{
	bool isDirty = mDirty;

	for( ValueMap::const_iterator iter=mValues.begin(); ! isDirty && iter != mValues.end(); iter++ )
	{
		isDirty = iter->second->hasChanged();
	}

	return isDirty;
}

//-----------------------------------------------------------------------------
// 
// IMetadata::resetChanges(...)
// 
// Purpose: Reset dirty flag
// 
//-----------------------------------------------------------------------------

void IMetadata::resetChanges()
{
	mDirty = false;

	for( ValueMap::iterator iter=mValues.begin(); iter != mValues.end(); iter++ )
	{
		iter->second->resetChanged();
	}
}

//-----------------------------------------------------------------------------
// 
// IMetadata::isEmpty(...)
// 
// Purpose: Return true if the no metadata are available in this container
// 
//-----------------------------------------------------------------------------

bool IMetadata::isEmpty() const
{
	return mValues.empty();
}

//-----------------------------------------------------------------------------
// 
// IMetadata::deleteValue(...)
// 
// Purpose: Remove value for passed identifier
// 
//-----------------------------------------------------------------------------

void IMetadata::deleteValue( XMP_Uns32 id )
{
	ValueMap::iterator iterator = mValues.find( id );

	if( iterator != mValues.end() )
	{
		delete iterator->second;
		mValues.erase( iterator );

		mDirty = true;
	}
}

//-----------------------------------------------------------------------------
// 
// IMetadata::deleteAll(...)
// 
// Purpose: Remove all stored values
// 
//-----------------------------------------------------------------------------

void IMetadata::deleteAll()
{
	mDirty = ( mValues.size() > 0 );

	for( ValueMap::iterator iter = mValues.begin(); iter != mValues.end(); iter++ )
	{
		delete iter->second;
	}

	mValues.clear();
}

//-----------------------------------------------------------------------------
// 
// IMetadata::valueExists(...)
// 
// Purpose: Return true if an value for the passed identifier exists
// 
//-----------------------------------------------------------------------------

bool IMetadata::valueExists( XMP_Uns32 id ) const
{
	ValueMap::const_iterator iterator = mValues.find( id );

	return ( iterator != mValues.end() );
}

//-----------------------------------------------------------------------------
// 
// IMetadata::valueChanged(...)
// 
// Purpose: Return true if the value for the passed identifier was changed
// 
//-----------------------------------------------------------------------------

bool IMetadata::valueChanged( XMP_Uns32 id ) const
{
	ValueMap::const_iterator iterator = mValues.find( id );

	if( iterator != mValues.end() )
	{
		return iterator->second->hasChanged();
	}

	return false;
}

//-----------------------------------------------------------------------------
//
// IMetadata::valueValid(...)
//
// Purpose: Return true if the value for the passed identifier is valid
//
//-----------------------------------------------------------------------------

bool IMetadata::valueValid( XMP_Uns32 id, ValueObject *value )
{
	return true;
}

//-----------------------------------------------------------------------------
//
// IMetadata::valueValid(...)
//
// Purpose: Return true if the value for the passed identifier is valid
//
//-----------------------------------------------------------------------------
void IMetadata::valueModify(XMP_Uns32 id, ValueObject *value)
{
	return;
}