/// <summary> /// 通过query查找Node实例 /// </summary> /// <param name="uri"></param> /// <returns></returns> public async Task <IEnumerable <JDBCEntity> > FindNodeByUriAsync(Uri uri) { IQueryPlugIn queryPlugIn = GetBestQueryPlugin(uri); //通过queryPathPlugIn查找JDBCEntity实例 return(await queryPlugIn.FindJdbcEntityAsync(uri.PathAndQuery)); }
/// <summary> /// 添加一个QueryPlugin /// </summary> /// <param name="plugIn"></param> public void AddQueryPlugin(IQueryPlugIn plugIn) { if (!instance.QueryPlugins.Keys.Contains(plugIn.Name)) { instance.QueryPlugins.Add(plugIn.Name, plugIn); } }
/// <summary> /// 从动态库文件加载QueryPlugin,review 这个应该还没测试吧,写个todo家测试的 /// </summary> /// <param name="assemblyFile"></param> public void LoadQueryPlugin(string assemblyFile) { string ext = assemblyFile.Substring(assemblyFile.LastIndexOf(".")); Assembly dll; if (ext != ".dll") { throw new Exception(ErrorMessages.NotValidFileError); } try { dll = Assembly.LoadFile(assemblyFile); } catch (Exception) { throw new Exception(ErrorMessages.FileNotFoundError); } Type[] types = dll.GetTypes(); foreach (Type type in types) { if (typeof(IQueryPlugIn).IsAssignableFrom(type)) { IQueryPlugIn queryPlugIn = (IQueryPlugIn)Activator.CreateInstance(type, myCoreService); AddQueryPlugin(queryPlugIn); } } }
/// <summary> /// 查询得到数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <param name="format"></param> /// <returns></returns> public async Task <object> GetDataByUriAsync(Uri uri, string format) { IQueryPlugIn queryPathPlugIn = GetBestQueryPlugin(uri); ITypedSignal signal = (await queryPathPlugIn.FindJdbcEntityAsync(uri.PathAndQuery)).FirstOrDefault() as ITypedSignal; if (signal != null) { return(await signal.GetDataAsync(uri.Fragment, format)); } else { throw new Exception(ErrorMessages.ExperimentOrSignalNotFoundError); } }
public void IdQueryTest() { IDQueryPlugIn idQueryPlugIn = new IDQueryPlugIn(myCoreApi.MyCoreService); myCoreApi.AddQueryPlugin(idQueryPlugIn); IQueryPlugIn queryPlugin = null; IEnumerable <JDBCEntity> result = null; Uri uri = null; //0 uri = new Uri("jdbc:///idx"); try { queryPlugin = myCoreApi.GetBestQueryPlugin(uri); } catch (Exception e) { Assert.AreEqual(ErrorMessages.NotValidURI, e.Message); } //1 uri = new Uri("jdbc:///id/"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(0, result.Count()); //2 uri = new Uri("jdbc:///id/?name=*"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(2, result.Count()); //3 uri = new Uri("jdbc:///id/?name=exp1"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(exp1.Id, result.FirstOrDefault().Id); //4 uri = new Uri("jdbc:///id/?name=*&recursive=true"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(8, result.Count()); //5 uri = new Uri("jdbc:///id/?name=exp2-1&recursive=true"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(0, result.Count()); //6 uri = new Uri("jdbc:///id/?name=exp1-2&recursive=true"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(2, result.Count()); //7 uri = new Uri("jdbc:///id/" + exp1.Id + "?name=*"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(3, result.Count()); //8 uri = new Uri("jdbc:///id/" + exp1.Id + "?name=*&recursive=true"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(4, result.Count()); //9 uri = new Uri("jdbc:///id/" + exp1.Id + "?name=sig1"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(sig11.Id, result.FirstOrDefault().Id); //10 uri = new Uri("jdbc:///id/" + exp1.Id + "?name=sig1&recursive=true"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(2, result.Count()); //11 uri = new Uri("jdbc:///id/" + exp1.Id); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(idQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(exp1.Id, result.FirstOrDefault().Id); }
public void LoadPlugInTest() { JDBCEntity exp1 = new Experiment("exp1"); JDBCEntity sig11 = new Signal("sig1-1"); JDBCEntity exp11 = new Experiment("exp1-1"); JDBCEntity exp12 = new Experiment("exp1-2"); JDBCEntity sig121 = new Signal("sig1-2-1"); JDBCEntity exp2 = new Experiment("exp2"); JDBCEntity exp21 = new Experiment("exp1-2"); JDBCEntity sig21 = new Signal("sig2-1"); myCoreApi.AddOneToExperimentAsync(Guid.Empty, exp1).Wait(); myCoreApi.AddOneToExperimentAsync(exp1.Id, sig11).Wait(); myCoreApi.AddOneToExperimentAsync(exp1.Id, exp11).Wait(); myCoreApi.AddOneToExperimentAsync(exp1.Id, exp12).Wait(); myCoreApi.AddOneToExperimentAsync(exp12.Id, sig121).Wait(); myCoreApi.AddOneToExperimentAsync(Guid.Empty, exp2).Wait(); myCoreApi.AddOneToExperimentAsync(exp2.Id, exp21).Wait(); myCoreApi.AddOneToExperimentAsync(exp2.Id, sig21).Wait(); // 1 测试加载IDQueryPlugIn string IdQueryPlugInPath = @"F:\JTEXTSVN\JtextDBCloud\Code\JDBC\IDQueryPlugInTestDll\bin\Debug\IDQueryPlugInTestDll.dll"; myCoreApi.LoadQueryPlugin(IdQueryPlugInPath); IQueryPlugIn queryPlugin = null; IEnumerable <JDBCEntity> result = null; Uri uri = null; uri = new Uri("jdbc:///idx"); try { queryPlugin = myCoreApi.GetBestQueryPlugin(uri); } catch (Exception e) { Assert.AreEqual(ErrorMessages.NotValidURIError, e.Message); } uri = new Uri("jdbc:///id/" + exp1.Id + "?name=*"); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(3, result.Count()); try { uri = new Uri("jdbc:///path/?name=*"); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(2, result.Count()); } catch (Exception e) { Assert.AreEqual(ErrorMessages.NotValidURIError, e.InnerException.Message); } // 2 测试加载PathQueryPlugIn string PathQueryPlugInPath = @"F:\JTEXTSVN\JtextDBCloud\Code\JDBC\PathQueryPlugInTestDll\bin\Debug\PathQueryPlugInTestDll.dll"; myCoreApi.LoadQueryPlugin(PathQueryPlugInPath); uri = new Uri("jdbc:///path/?name=*"); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(2, result.Count()); uri = new Uri("jdbc:///id/" + exp1.Id + "?name=*"); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(3, result.Count()); // 3 测试加载DataPlugIn string DataPlugInPath = @"F:\JTEXTSVN\JtextDBCloud\Code\JDBC\FixedWaveDataTypePluginTestDll\bin\Debug\FixedWaveDataTypePluginTestDll.dll"; myCoreApi.LoadDataTypePlugin(DataPlugInPath); var waveSignal = (FixedIntervalWaveSignal)myCoreApi.CreateSignal("FixedWave-int", "ws1", @"StartTime=-2&SampleInterval=0.5"); myCoreApi.AddOneToExperimentAsync(exp1.Id, waveSignal).Wait(); //act int[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; waveSignal.PutDataAsync("", data).Wait(); waveSignal.PutDataAsync("", data).Wait(); waveSignal.PutDataAsync("", data).Wait(); var readBack = ((List <int>)waveSignal.GetDataAsync("", "array").Result).ToArray(); int[] expectedData = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; CollectionAssert.AreEqual(expectedData, readBack); }
public void PathQueryTest() { JDBCEntity exp1 = new Experiment("exp1"); JDBCEntity sig11 = new Signal("sig1"); JDBCEntity exp11 = new Experiment("exp1-1"); JDBCEntity exp12 = new Experiment("exp1-2"); JDBCEntity sig121 = new Signal("sig1"); JDBCEntity exp2 = new Experiment("exp2"); JDBCEntity exp21 = new Experiment("exp1-2"); JDBCEntity sig21 = new Signal("sig2-1"); myCoreApi.AddOneToExperimentAsync(Guid.Empty, exp1).Wait(); myCoreApi.AddOneToExperimentAsync(exp1.Id, sig11).Wait(); myCoreApi.AddOneToExperimentAsync(exp1.Id, exp11).Wait(); myCoreApi.AddOneToExperimentAsync(exp1.Id, exp12).Wait(); myCoreApi.AddOneToExperimentAsync(exp12.Id, sig121).Wait(); myCoreApi.AddOneToExperimentAsync(Guid.Empty, exp2).Wait(); myCoreApi.AddOneToExperimentAsync(exp2.Id, exp21).Wait(); myCoreApi.AddOneToExperimentAsync(exp2.Id, sig21).Wait(); // exp1 // ===sig1 // ===exp1-1 // ===exp1-2 // ======sig1-2-1 // exp2 // ===exp2-1 // ===sig2-1 PathQueryPlugIn pathQueryPlugIn = new PathQueryPlugIn(myCoreApi.CoreService); myCoreApi.AddQueryPlugin(pathQueryPlugIn); IQueryPlugIn queryPlugin = null; IEnumerable <JDBCEntity> result = null; Uri uri = null; //0 uri = new Uri("jdbc:///pathx"); try { queryPlugin = myCoreApi.GetBestQueryPlugin(uri); } catch (Exception e) { Assert.AreEqual(ErrorMessages.NotValidURIError, e.Message); } //1 uri = new Uri("jdbc:///path/"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(pathQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(0, result.Count()); //2 uri = new Uri("jdbc:///path/?name=*"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(pathQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(2, result.Count()); //3 uri = new Uri("jdbc:///path/?name=exp1"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(pathQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(exp1.Id, result.FirstOrDefault().Id); //4 uri = new Uri("jdbc:///path/?name=*&recursive=true"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(pathQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(8, result.Count()); //5 uri = new Uri("jdbc:///path/?name=exp2-1&recursive=true"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(pathQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(0, result.Count()); //6 uri = new Uri("jdbc:///path/?name=exp1-2&recursive=true"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(pathQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(2, result.Count()); //7 uri = new Uri("jdbc:///path/exp1?name=*"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(pathQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(3, result.Count()); //8 uri = new Uri("jdbc:///path/exp1?name=*&recursive=true"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(pathQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(4, result.Count()); //9 uri = new Uri("jdbc:///path/exp1?name=sig1"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(pathQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(sig11.Id, result.FirstOrDefault().Id); //10 uri = new Uri("jdbc:///path/exp1?name=sig1&recursive=true"); queryPlugin = myCoreApi.GetBestQueryPlugin(uri); Assert.AreEqual(pathQueryPlugIn, queryPlugin); result = myCoreApi.FindNodeByUriAsync(uri).Result; Assert.AreEqual(2, result.Count()); }