os/security/contentmgmt/referencedrmagent/RefTestAgent/RTAParser/drmfilecontainer.cpp
Update contrib.
2 * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of the License "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
19 #include <caf/caftypes.h>
20 #include <caf/embeddedobject.h>
21 #include "drmfilecontainer.h"
22 #include "drmfilecontent.h"
24 using namespace ReferenceTestAgent;
25 using namespace ContentAccess;
27 CDrmFileContainer* CDrmFileContainer::NewL(CDrmFileContainer* aParent)
29 CDrmFileContainer* self = new (ELeave) CDrmFileContainer(aParent);
33 CDrmFileContainer::CDrmFileContainer(CDrmFileContainer* aParent) : iParentContainer(aParent)
37 CDrmFileContainer::~CDrmFileContainer()
41 iContainers.ResetAndDestroy();
43 iContents.ResetAndDestroy();
48 EXPORT_C void CDrmFileContainer::GetEmbeddedObjectsL(RStreamablePtrArray<CEmbeddedObject>& aArray)
50 GetEmbeddedObjectsL(aArray, EContainerObject);
51 GetEmbeddedObjectsL(aArray, EContentObject);
54 EXPORT_C void CDrmFileContainer::GetEmbeddedObjectsL(RStreamablePtrArray<CEmbeddedObject>& aArray, TEmbeddedType aType)
56 if(aType == EContentObject)
58 for(TInt i = 0; i < iContents.Count(); i++)
60 CDrmFileContent* content = iContents[i];
61 CEmbeddedObject* object = CEmbeddedObject::NewL(content->UniqueId(), content->Name(), content->MimeType(), EContentObject);
62 CleanupStack::PushL(object);
63 aArray.AppendL(object);
64 CleanupStack::Pop(object);
68 else if(aType == EContainerObject)
70 for(TInt i = 0; i < iContainers.Count(); i++)
72 CDrmFileContainer* container = iContainers[i];
73 CEmbeddedObject* object = CEmbeddedObject::NewL(container->UniqueId(), container->Name(), KNullDesC8(), EContainerObject);
74 CleanupStack::PushL(object);
75 aArray.AppendL(object);
76 CleanupStack::Pop(object);
82 EXPORT_C TInt CDrmFileContainer::Search(RStreamablePtrArray<CEmbeddedObject>& aArray, const TDesC8& aMimeType, TBool aRecursive)
84 TRAPD( err, SearchL(aArray, aMimeType, aRecursive) );
88 void CDrmFileContainer::SearchL(RStreamablePtrArray<CEmbeddedObject>& aArray, const TDesC8& aMimeType, TBool aRecursive)
91 TInt searchResult = KErrNotFound;
93 for(i = 0; i < iContents.Count(); i++)
95 CDrmFileContent* content = iContents[i];
97 // Only add contents if the mime type matches the type we are searching for
98 if(content->MimeType().CompareF(aMimeType) == 0)
100 CEmbeddedObject* object = CEmbeddedObject::NewL(content->UniqueId(), content->Name(), content->MimeType(), EContentObject);
101 CleanupStack::PushL(object);
102 aArray.AppendL(object);
103 CleanupStack::Pop(object);
105 // At least one content object has been found
106 searchResult = KErrNone;
112 // Search within embedded containers
114 for(i = 0; i < iContainers.Count(); i++)
116 err = iContainers[i]->Search(aArray, aMimeType, aRecursive);
117 if(err != KErrNotFound)
121 // at least one object has been found
122 searchResult = KErrNone;
126 // some other unexpected error occurred
132 User::LeaveIfError(searchResult);
136 CDrmFileContainer* CDrmFileContainer::ParentContainer()
138 return iParentContainer;
141 RPointerArray <CDrmFileContainer>& CDrmFileContainer::Containers()
146 RPointerArray <CDrmFileContent>& CDrmFileContainer::Contents()
151 void CDrmFileContainer::ListAllContentL(RPointerArray <CDrmFileContent>& aContentArray)
154 // add content from this container
155 for(i = 0; i < iContents.Count(); i++)
157 User::LeaveIfError(aContentArray.Append(iContents[i]));
160 // traverse embedded containers
161 for(i = 0; i < iContainers.Count(); i++)
163 iContainers[i]->ListAllContentL(aContentArray);
167 const TDesC& CDrmFileContainer::UniqueId()
172 const TDesC& CDrmFileContainer::Name()
177 CDrmFileContainer& CDrmFileContainer::AddContainerL()
179 CDrmFileContainer *newContainer = CDrmFileContainer::NewL(this);
180 CleanupStack::PushL(newContainer);
181 User::LeaveIfError(iContainers.Append(newContainer));
182 CleanupStack::Pop(newContainer);
183 return *(iContainers[iContainers.Count() - 1]);
187 void CDrmFileContainer::SetNameL(const TDesC& aName)
191 User::Leave(KErrCorrupt);
193 iName = aName.AllocL();
196 void CDrmFileContainer::SetUniqueIdL(const TDesC& aUniqueId )
200 User::Leave(KErrCorrupt);
202 iUniqueId= aUniqueId.AllocL();
205 void CDrmFileContainer::AddContentL(const TDesC8& aCid, const TDesC& aName, const TDesC& aUniqueId, const TDesC& aFileName, RAttributeSet& aAttributeSet, RStringAttributeSet& aStringAttributeSet)
207 CDrmFileContent *newContent = CDrmFileContent::NewL(aCid, aName, aUniqueId, aFileName, aAttributeSet, aStringAttributeSet);
208 CleanupStack::PushL(newContent);
209 User::LeaveIfError(iContents.Append(newContent));
210 CleanupStack::Pop(newContent);