예제 #1
0
        /// <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));
        }
예제 #2
0
 /// <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);
     }
 }
예제 #3
0
        /// <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);
                }
            }
        }
예제 #4
0
        /// <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);
            }
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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());
        }