protected virtual bool PrepareImpl(StreamSerializer stream, ref PageData dataToPopulate)
{
//now do the real loading
if (stream.ReadChunkBegin(CHUNK_ID, CHUNK_VERSION, "Page") == null)
{
return(false);
}
// pageID check (we should know the ID we're expecting)
int storedID = -1;
stream.Read(out storedID);
if (this.mID.Value != storedID)
{
LogManager.Instance.Write("Error: Tried to populate Page ID {0} with data corresponding to page ID {1}",
this.mID.Value,
storedID);
stream.UndoReadChunk(CHUNK_ID);
return(false);
}
PageManager mgr = Manager;
while (stream.NextChunkId == Page.CHUNK_CONTENTCOLLECTION_DECLARATION_ID)
{
Chunk collChunk = stream.ReadChunkBegin();
string factoryName;
stream.Read(out factoryName);
stream.ReadChunkEnd(CHUNK_CONTENTCOLLECTION_DECLARATION_ID);
//Supported type?
IPageContentCollectionFactory collFact = mgr.GetContentCollectionFactory(factoryName);
if (collFact != null)
{
PageContentCollection collInst = collFact.CreateInstance();
if (collInst.Prepare(stream))
{
dataToPopulate.collectionsToAdd.Add(collInst);
}
else
{
LogManager.Instance.Write("Error preparing PageContentCollection type: {0} in {1}", factoryName, ToString());
collFact.DestroyInstance(ref collInst);
}
}
else
{
LogManager.Instance.Write("Unsupported PageContentCollection type: {0} in {1}", factoryName, ToString());
//skip
stream.ReadChunkEnd(collChunk.id);
}
}
this.mModified = false;
return(true);
}