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); }
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; }