/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_chart2.hxx"
#include "MediaDescriptorHelper.hxx"

using namespace ::com::sun::star;

namespace apphelper
{


const short FLAG_DEPRECATED	=1;
const short FLAG_MODEL		=2;

#define WRITE_PROPERTY( MediaName, nFlags )				\
if(rProp.Name.equals(::rtl::OUString::createFromAscii(#MediaName)))	\
{														\
	if( rProp.Value >>= MediaName )						\
		ISSET_##MediaName = sal_True;					\
	if(nFlags & FLAG_DEPRECATED)						\
	{													\
		m_aDeprecatedProperties[nDeprecatedCount]=rProp;\
		nDeprecatedCount++;								\
	}													\
	else												\
	{													\
		m_aRegularProperties[nRegularCount]=rProp;		\
		nRegularCount++;								\
		if( nFlags & FLAG_MODEL)						\
		{												\
			m_aModelProperties[nModelCount]=rProp;		\
			nModelCount++;								\
		}												\
	}													\
}

MediaDescriptorHelper::MediaDescriptorHelper( const uno::Sequence<
						beans::PropertyValue > & rMediaDescriptor )
{
	impl_init();

	m_aRegularProperties.realloc(0);
	m_aRegularProperties.realloc(rMediaDescriptor.getLength());
	sal_Int32 nRegularCount = 0;

	m_aDeprecatedProperties.realloc(0);
	m_aDeprecatedProperties.realloc(rMediaDescriptor.getLength());
	sal_Int32 nDeprecatedCount = 0;

	m_aAdditionalProperties.realloc(0);
	m_aAdditionalProperties.realloc(rMediaDescriptor.getLength());
	sal_Int32 nAdditionalCount = 0;

	m_aModelProperties.realloc(0);
	m_aModelProperties.realloc(rMediaDescriptor.getLength());
	sal_Int32 nModelCount = 0;


	//read given rMediaDescriptor and store in internal structures:
	for( sal_Int32 i= rMediaDescriptor.getLength();i--;)
	{
		const beans::PropertyValue& rProp = rMediaDescriptor[i];
		WRITE_PROPERTY( AsTemplate, FLAG_MODEL )
		else WRITE_PROPERTY( Author, FLAG_MODEL )
		else WRITE_PROPERTY( CharacterSet, FLAG_MODEL )
		else WRITE_PROPERTY( Comment, FLAG_MODEL )
		else WRITE_PROPERTY( ComponentData, FLAG_MODEL )
		else WRITE_PROPERTY( FileName, FLAG_DEPRECATED )
		else WRITE_PROPERTY( FilterData, FLAG_MODEL )
		else WRITE_PROPERTY( FilterName, FLAG_MODEL )
		else WRITE_PROPERTY( FilterFlags, FLAG_DEPRECATED)
		else WRITE_PROPERTY( FilterOptions, FLAG_MODEL )
		else WRITE_PROPERTY( FrameName, FLAG_MODEL )
		else WRITE_PROPERTY( Hidden, FLAG_MODEL )
        else WRITE_PROPERTY( HierarchicalDocumentName, FLAG_MODEL )
        else WRITE_PROPERTY( OutputStream, 0 )
		else WRITE_PROPERTY( InputStream, 0 )
		else WRITE_PROPERTY( InteractionHandler, 0 )
		else WRITE_PROPERTY( JumpMark, 0 )
		else WRITE_PROPERTY( MediaType, FLAG_MODEL )
		else WRITE_PROPERTY( OpenFlags, FLAG_DEPRECATED )
		else WRITE_PROPERTY( OpenNewView, 0 )
		else WRITE_PROPERTY( Overwrite, FLAG_MODEL )
		else WRITE_PROPERTY( Password, FLAG_MODEL )
		else WRITE_PROPERTY( PosSize, 0 )
		else WRITE_PROPERTY( PostData, 0 )
		else WRITE_PROPERTY( PostString, FLAG_DEPRECATED )
		else WRITE_PROPERTY( Preview, FLAG_MODEL )
		else WRITE_PROPERTY( ReadOnly, 0 )
		else WRITE_PROPERTY( Referer, FLAG_MODEL )
		else WRITE_PROPERTY( SetEmbedded, 0 )
		else WRITE_PROPERTY( Silent, 0 )
		else WRITE_PROPERTY( StatusIndicator, 0 )
		else WRITE_PROPERTY( Storage, FLAG_MODEL )
		else WRITE_PROPERTY( Stream, FLAG_MODEL )
		else WRITE_PROPERTY( TemplateName, FLAG_DEPRECATED )
		else WRITE_PROPERTY( TemplateRegionName, FLAG_DEPRECATED )
		else WRITE_PROPERTY( Unpacked, FLAG_MODEL )
		else WRITE_PROPERTY( URL, FLAG_MODEL )
		else WRITE_PROPERTY( Version, FLAG_MODEL )
		else WRITE_PROPERTY( ViewData, FLAG_MODEL )
		else WRITE_PROPERTY( ViewId, FLAG_MODEL )
		else WRITE_PROPERTY( WinExtent, FLAG_DEPRECATED )
		else
		{
			m_aAdditionalProperties[nAdditionalCount]=rProp;
			nAdditionalCount++;
		}
	}

	m_aRegularProperties.realloc(nRegularCount);
	m_aDeprecatedProperties.realloc(nDeprecatedCount);
	m_aAdditionalProperties.realloc(nAdditionalCount);
	m_aModelProperties.realloc(nModelCount);
}

void MediaDescriptorHelper::impl_init()
{
	AsTemplate = sal_False;
	ISSET_AsTemplate = sal_False;

	ISSET_Author = sal_False;
	ISSET_CharacterSet = sal_False;
	ISSET_Comment = sal_False;

//	::com::sun::star::uno::Any	ComponentData;
	ISSET_ComponentData = sal_False;
	ISSET_FileName = sal_False;

//	::com::sun::star::uno::Any	FilterData;
	ISSET_FilterData = sal_False;
	ISSET_FilterName = sal_False;
	ISSET_FilterFlags = sal_False;
	ISSET_FilterOptions = sal_False;
	ISSET_FrameName = sal_False;

    Hidden = sal_False;
	ISSET_Hidden = sal_False;
    ISSET_HierarchicalDocumentName = sal_False;
    ISSET_OutputStream = sal_False;
	ISSET_InputStream = sal_False;
	ISSET_InteractionHandler = sal_False;
	ISSET_JumpMark = sal_False;
	ISSET_MediaType = sal_False;
	ISSET_OpenFlags = sal_False;
	OpenNewView = sal_False;
	ISSET_OpenNewView = sal_False;
	Overwrite = sal_False;
	ISSET_Overwrite = sal_False;
	ISSET_Password = sal_False;

//	::com::sun::star::awt::Rectangle PosSize;
	ISSET_PosSize = sal_False;

//	::com::sun::star::uno::Sequence< sal_Int8 > PostData;
	ISSET_PostData = sal_False;
	ISSET_PostString = sal_False;
    Preview = sal_False;
	ISSET_Preview = sal_False;
	ReadOnly = sal_False;
	ISSET_ReadOnly = sal_False;
	ISSET_Referer = sal_False;
	ISSET_StatusIndicator = sal_False;
    Silent = sal_False;
	ISSET_Silent = sal_False;
	ISSET_TemplateName = sal_False;
	ISSET_TemplateRegionName = sal_False;
	Unpacked = sal_False;
	ISSET_Unpacked = sal_False;
	ISSET_URL = sal_False;
	Version = 0;
	ISSET_Version = sal_False;

//	::com::sun::star::uno::Any ViewData;
	ISSET_ViewData = sal_False;
	ViewId = 0;
	ISSET_ViewId = sal_False;

    ISSET_WinExtent = sal_False;

    ISSET_Storage = sal_False;
    ISSET_Stream = sal_False;
}

MediaDescriptorHelper::~MediaDescriptorHelper()
{

}

	uno::Sequence< beans::PropertyValue > MediaDescriptorHelper
::getReducedForModel()
{
	return m_aModelProperties;
}
}