private bool PatternResolvable(IAbsoluteKeyAssignable schemaPattern) { if (SchemaSource == SchemaSource.Global || SchemaSource == SchemaSource.Literal) { return(true); } if ((schemaPattern.SchemaSource != SchemaSource) && (schemaPattern.SchemaSource != SchemaSource.Global && schemaPattern.SchemaSource != SchemaSource.Literal)) { return(false); } if (IntermediateKeys.Count == 0) { return(true); } if (UseGlobalParameter) { return(true); } string ownIntermediateSchema = IntermediateKeyString; //AbsoluteKey.Split('.').WithoutLast().Aggregate( //(a, b) => a + "." + b); string patternIntermediateSchema = schemaPattern.AbsoluteKey.TrimEnd(("." + LastKey).ToCharArray()); //schemaPattern.AbsoluteKey.Split('.').WithoutLast().Aggregate( //(a, b) => a + "." + b); if (ownIntermediateSchema.Length > patternIntermediateSchema.Length) { return(false); } if (patternIntermediateSchema.Substring(0, ownIntermediateSchema.Length) != ownIntermediateSchema) { return(false); } return(true); }
private bool ParentResolvable(IAbsoluteKeyAssignable schemaParent) { if (SchemaSource == SchemaSource.Global || SchemaSource == SchemaSource.Literal) { return(true); } if ((schemaParent.SchemaSource != SchemaSource) && (schemaParent.SchemaSource != SchemaSource.Global || schemaParent.SchemaSource != SchemaSource.Literal)) { return(false); } if (IntermediateKeys.Count == 0) { return(true); } string ownIntermediateSchema = IntermediateKeys.Aggregate((a, b) => a + "." + b); string patternIntermediateSchema = schemaParent.AbsoluteKey.Contains('.')? schemaParent.AbsoluteKey.Substring(0, schemaParent.AbsoluteKey.LastIndexOf('.')) :""; if (ownIntermediateSchema.Length < patternIntermediateSchema.Length) { return(false); } if (ownIntermediateSchema.Substring(0, patternIntermediateSchema.Length) != patternIntermediateSchema) { return(false); } return(true); }