/// <summary> /// Creates a new sones GQL instance /// </summary> /// <param name="myIGraphDBInstace">The graph database instance on which the gql statements are executed</param> public SonesQueryLanguage(IGraphDB myIGraphDBInstace) { _IGraphDBInstance = myIGraphDBInstace; _settings = new GraphApplicationSettings(SonesGQLConstants.ApplicationSettingsLocation); #region plugin manager _GQLPluginManager = new GQLPluginManager(); #endregion #region create gql grammar and set extendable members _GQLGrammar = new SonesGQLGrammar(myIGraphDBInstace); SetExtendableMember(_GQLGrammar); #endregion //build parser _parser = new Parser(_GQLGrammar); //check language if (_parser.Language.ErrorLevel != GrammarErrorLevel.Warning && _parser.Language.ErrorLevel != GrammarErrorLevel.NoError) { throw new IronyInitializeGrammarException(_parser.Language.Errors, ""); } }
private void SetExtendableMember(SonesGQLGrammar myGQLGrammar) { #region aggregate List <IGQLAggregate> aggregates = new List <IGQLAggregate>(); foreach (var plugin in _GQLPluginManager.GetPluginNameForType <IGQLAggregate>()) { aggregates.Add(_GQLPluginManager.GetAndInitializePlugin <IGQLAggregate>(plugin)); } if (aggregates.Count == 0) { throw new GQLGrammarSetExtandableMemberException(typeof(IGQLAggregate), "There is no plugin found to set in GQL grammar."); } myGQLGrammar.SetAggregates(aggregates); #endregion #region functions List <IGQLFunction> functions = new List <IGQLFunction>(); foreach (var plugin in _GQLPluginManager.GetPluginNameForType <IGQLFunction>()) { functions.Add(_GQLPluginManager.GetAndInitializePlugin <IGQLFunction>(plugin) as IGQLFunction); } if (functions.Count == 0) { throw new GQLGrammarSetExtandableMemberException(typeof(IGQLFunction), "There is no plugin found to set in GQL grammar."); } myGQLGrammar.SetFunctions(functions); #endregion #region indces List <String> indices = new List <string>(); indices.AddRange(_GQLPluginManager.GetPluginNameForType <ISonesVersionedIndex>()); indices.AddRange(_GQLPluginManager.GetPluginNameForType <ISonesIndex>()); if (indices.Count < 1) { throw new GQLGrammarSetExtandableMemberException(typeof(ISonesIndex), @"There is no valid index plugin found to set in GQL grammar."); } myGQLGrammar.SetIndices(indices); #endregion #region import List <IGraphDBImport> importer = new List <IGraphDBImport>(); foreach (var plugin in _GQLPluginManager.GetPluginNameForType <IGraphDBImport>()) { importer.Add(_GQLPluginManager.GetAndInitializePlugin <IGraphDBImport>(plugin)); } if (importer.Count == 0) { throw new GQLGrammarSetExtandableMemberException(typeof(IGraphDBImport), "There is no plugin found to set in GQL grammar."); } myGQLGrammar.SetGraphDBImporter(importer); #endregion #region export List <IGraphDBExport> exporter = new List <IGraphDBExport>(); foreach (var plugin in _GQLPluginManager.GetPluginNameForType <IGraphDBExport>()) { exporter.Add(_GQLPluginManager.GetAndInitializePlugin <IGraphDBExport>(plugin)); } if (exporter.Count == 0) { throw new GQLGrammarSetExtandableMemberException(typeof(IGraphDBExport), "There is no plugin found to set in GQL grammar."); } myGQLGrammar.SetGraphDBExporter(exporter); #endregion #region additional statements List <IGQLStatementPlugin> statements = new List <IGQLStatementPlugin>(); foreach (var plugin in _GQLPluginManager.GetPluginNameForType <IGQLStatementPlugin>()) { statements.Add(_GQLPluginManager.GetAndInitializePlugin <IGQLStatementPlugin>(plugin, new Dictionary <string, object> { { "sonesGQL", myGQLGrammar }, { "graphDB", _IGraphDBInstance } })); } myGQLGrammar.SetStatements(statements); #endregion }