void CRefTestAgentImportFile::ConstructL(const TDesC8& aMimeType, const CMetaDataArray& aMetaDataArray, const TDesC& aOutputDirectory, const TDesC& aSuggestedFileName)
	{
	TPtrC suggestedFileName(aSuggestedFileName);	
	TPtrC outputDirectory(aOutputDirectory);
	
	// make sure any suggested extension is removed
	// otherwise our recognizer won't work
	TInt pos = aSuggestedFileName.LocateF(TChar(KExtDelimiter));
	if(pos != KErrNotFound)
		{
		// set the length so the extension is not included
		suggestedFileName.Set(aSuggestedFileName.Left(pos));
		}

	// If no output directory is suggested default to "c:\\" 
	if(outputDirectory.Length() == 0)
		{
		outputDirectory.Set(KRtaDefaultOutputDirectory());
		}

	// If no file name is suggested default to "output" 
	if(suggestedFileName.Length() == 0)
		{
		suggestedFileName.Set(KRtaDefaultOutputFile());
		}
	
	//Only files containing rights, post-acquisition rights or postacquisition content need to be imported
	if(!aMimeType.CompareF(KRtaMimeRights()) || !aMimeType.CompareF(KRtaMimeContentRights()))
		{// Files containing rights
		iMimeType = ReferenceTestAgent::EMimeContentOrRights;
		}
	else if(!aMimeType.CompareF(KRtaMimePostAcquisitionRights()))
		{// Files containing post-acquisition rights
		iMimeType = ReferenceTestAgent::EMimePostAcquisitionRights;
		}
	else if(!aMimeType.CompareF(KRtaMimePostAcquisitionContent()))
		{// Files containing post-acquisition content
		iMimeType = ReferenceTestAgent::EMimePostAcquisitionContent;
		}
	else
		{//Others are not supported
		User::Leave(KErrCANotSupported);
		}

	// create buffer to store the output directory supplied by the client
	// Append a trailing slash if there is no slash present
	iOutputDirectory = HBufC::NewL(outputDirectory.Length() + 1);
	iOutputDirectory->Des().Copy(outputDirectory);
	if(outputDirectory[outputDirectory.Length() - 1] != KPathDelimiter)
		{
		iOutputDirectory->Des().Append(TChar(KPathDelimiter));
		}
	
	// Create suggested file name by combining output directory and suggested name
	// Use the length of KRtaExtensionContentRights since it is the longest one
	iSuggestedFileName = HBufC::NewL(iOutputDirectory->Des().Length() + suggestedFileName.Length() + KRtaExtensionContentRights().Length());
	iSuggestedFileName->Des().Copy(*iOutputDirectory);
	iSuggestedFileName->Des().Append(suggestedFileName);
	switch(iMimeType)
	{
	case ReferenceTestAgent::EMimeContentOrRights:
	case ReferenceTestAgent::EMimePostAcquisitionContent:
		iSuggestedFileName->Des().Append(KRtaExtensionContent());
		break;
	case ReferenceTestAgent::EMimePostAcquisitionRights:
		iSuggestedFileName->Des().Append(KRtaExtensionPostAcquisitionRights());
	};

	// Create a file handle
	User::LeaveIfError(iFs.Connect());
	
	// create importer object
	if (iAgentCreatesOutputFiles)
		{
		iImporter = ReferenceTestAgent::CRefTestAgentImport::NewL(*iSuggestedFileName, iFs, iMimeType);
		}
	else
		{
		iImporter = ReferenceTestAgent::CRefTestAgentImport::NewL(KNullDesC, iFs, iMimeType);
		}
	
	if(iMimeType == ReferenceTestAgent::EMimePostAcquisitionContent)
		{
		//In the post-acquisition case, the rights object is installed separately and the content
		//comes without a content-xml file. It means that there is no way to extract the Content Id.
		//Therefore, the Content Id is sent as a meta-data while importing a post-acquisition content. cid=<content_id>
		iImporter->SetMetaDataL(aMetaDataArray);
		}
		
	DumpMetaData(aMetaDataArray);
	
	// create input data log
	RFile inputDataFile;
	inputDataFile.Replace(iFs, KInputDataLogFile(), EFileWrite | EFileStream);
	inputDataFile.Close();
	}