protected override bool InheritMetaMetadataHelper(InheritanceHandler inheritanceHandler)
{
inheritanceHandler.Push(this);
bool inhertedIsInheriting = false;
// init
MetaMetadataRepository repository = Repository;
// determine the structure we should inherit from
MetaMetadata inheritedMmd = FindOrGenerateInheritedMetaMetadata(repository, inheritanceHandler);
if (inheritedMmd != null)
{
if (inheritedMmd.InheritInProcess)
{
inhertedIsInheriting = true;
// if inheriting from the root mmd, we need to clone and keep the environment right now.
InheritanceHandler inheritanceHandlerToUse = inheritanceHandler.clone();
inheritanceHandler.Pop(this);
//inheritedMmd.InheritFinished += (sender, e) => InheritFromTopLevelMetaMetadata(inheritedMmd, repository);
this.AddInheritanceFinishHandler(inheritedMmd, InheritMetaMetadataFinished, inheritanceHandlerToUse);
}
else
{
inheritedMmd.InheritMetaMetadata(null); //edit
InheritFromTopLevelMetaMetadata(inheritedMmd, repository, inheritanceHandler);
}
}
if (!inhertedIsInheriting)
{
inhertedIsInheriting = InheritFromSuperField(repository, inheritanceHandler);
}
// for the root meta-metadata, this may happend
if (inheritedMmd == null && SuperField == null)
InheritFrom(repository, null, inheritanceHandler);
return !inhertedIsInheriting;
}