public async Task <HttpResponseMessage> Get(string format = "array") { var user = GetSessionUser(Request.Headers.GetCookies().FirstOrDefault()); JDBCEntity currentEntity = null;//当前处理的Entity信息 try { Uri uri = ParseToQueryUri(Request.RequestUri); List <JDBCEntity> findNode = (await MyCoreApi.FindNodeByUriAsync(uri)).ToList(); //根据uri查找父节点 if (findNode.Count != 1) //节点数不唯一 { throw new Exception("Please specify one Node!"); } else { currentEntity = findNode.FirstOrDefault(); } if (!await MyCoreApi.Authorization(currentEntity.Id, user, "4")) { throw new Exception("Not authorization!"); } if (currentEntity.EntityType != JDBCEntityType.Signal) { throw new Exception("The specifed node is not signal!"); } //get data ITypedSignal typedSignal = currentEntity as ITypedSignal; var result = await typedSignal.GetDataAsync(uri.Fragment, format); return(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(SerializeObjectToString(result), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } catch (Exception e) { if (currentEntity == null) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(e.InnerException != null ? e.InnerException.Message : e.Message) }); } var response = new ResponseDataMessage { Fail = new { Description = e.InnerException != null ? e.InnerException.Message : e.Message, Id = currentEntity.Id, Path = currentEntity.Path } }; return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(SerializeObjectToString(response), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } }
public async Task <HttpResponseMessage> Move() { var user = GetSessionUser(Request.Headers.GetCookies().FirstOrDefault()); List <NodeDto> successEntity = new List <NodeDto>(); //成功处理的Entity信息 JDBCEntity currentEntity = null; //当前处理的Entity信息 try { var dict = ParseToQueryDictionary(Request.RequestUri); NameValueCollection form = Request.Content.ReadAsFormDataAsync().Result; var fromNodes = await MyCoreApi.FindNodeByUriAsync(new Uri("jdbc://" + GetValueFromForm(form, "from").Replace(";", "&").Replace(",", "&").Trim("'\"()[]{}".ToCharArray()))); //获取源entity var toNodes = await MyCoreApi.FindNodeByUriAsync(new Uri("jdbc://" + GetValueFromForm(form, "to").Replace(";", "&").Replace(",", "&").Trim("'\"()[]{}".ToCharArray()))); //获取目的entity foreach (var fromNode in fromNodes) { foreach (var toNode in toNodes) { currentEntity = toNode; if (!await MyCoreApi.Authorization(currentEntity.Id, user, "1")) { throw new Exception("Not authorization!"); } var newNode = await MyCoreApi.MoveJdbcEntityAsync(toNode.Id, fromNode.Id); //迁移entity到新的父节点下 successEntity.Add(Mapper.Map <NodeDto>(toNode)); //保存处理结果 } } return(new HttpResponseMessage { Content = new StringContent(SerializeObjectToString(successEntity), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } catch (Exception e) { if (currentEntity == null) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(e.InnerException != null ? e.InnerException.Message : e.Message) }); } var response = new ResponseEntityMessage { Fail = new { Description = e.InnerException != null ? e.InnerException.Message : e.Message, Id = currentEntity.Id, Path = currentEntity.Path }, Success = successEntity }; return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(SerializeObjectToString(response), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } }
public async Task <HttpResponseMessage> Get() { JDBCEntity currentEntity = null;//当前处理的Entity信息 try { Uri uri = ParseToQueryUri(Request.RequestUri); List <JDBCEntity> findNode = (await MyCoreApi.FindNodeByUriAsync(uri)).ToList(); //根据uri查找父节点 if (findNode.Count != 1) //节点数不唯一 { throw new Exception("Please specify one Node!"); } else { currentEntity = findNode.FirstOrDefault(); } if (currentEntity.EntityType != JDBCEntityType.Signal) { throw new Exception("The specifed node is not signal!"); } var stream = new SignalDataStream((ITypedSignal)currentEntity, uri.Fragment); var response = Request.CreateResponse(); response.Content = new PushStreamContent(stream.WriteToStream, new MediaTypeHeaderValue("data/stream")); return(response); } catch (Exception e) { if (currentEntity == null) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(e.Message) }); } var response = new ResponseDataMessage { Fail = new { Description = e.Message, Id = currentEntity.Id, Path = currentEntity.Path } }; StringWriter tw = new StringWriter(); JsonSerializer jsonSerializer = new JsonSerializer(); jsonSerializer.Serialize(tw, response, response.GetType()); return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(tw.ToString(), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } }
public async Task <HttpResponseMessage> Post() { var user = GetSessionUser(Request.Headers.GetCookies().FirstOrDefault()); try { Uri uri = ParseToQueryUri(Request.RequestUri); Signal signal = (Signal)(await MyCoreApi.FindNodeByUriAsync(uri)).FirstOrDefault();//根据uri查找entity if (!await MyCoreApi.Authorization(signal.Id, user, "2")) { throw new Exception("Not authorization!"); } var re = Request; var con1 = Request.Content; var conent = Request.Content.ReadAsStringAsync().Result; Regex reg = new Regex(@"^(\[)|(\])$"); conent = reg.Replace(conent, ""); switch (signal.SampleType) { case "int": int[] ints = Array.ConvertAll <string, int>(conent.Replace(" ", "").Split(new char[] { ',', ',' }), s => int.Parse(s)); await((ITypedSignal)signal).PutDataAsync("", ints); await((FixedIntervalWaveSignal)signal).DisposeAsync(); break; case "double": double[] doubles = Array.ConvertAll <string, double>(conent.Replace(" ", "").Split(new char[] { ',', ',' }), s => double.Parse(s)); // Debug.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + " start put data"); await((ITypedSignal)signal).PutDataAsync("", doubles); // Debug.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + " finish put data"); await((FixedIntervalWaveSignal)signal).DisposeAsync(); // Debug.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + " dispose put data"); break; default: return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent("The SampleType is not supported!") }); } return(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent("Write data successfully!") }); } catch (Exception e) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(e.InnerException != null ? e.InnerException.Message : e.Message) }); } }
public async Task <HttpResponseMessage> Query(string value) { var user = GetSessionUser(Request.Headers.GetCookies().FirstOrDefault()); try { Uri uri = ParseToQueryUri(Request.RequestUri); var result = new List <NodeDto>();//根据uri查找entity foreach (var node in await MyCoreApi.FindNodeByUriAsync(uri)) { if (node.Name.Equals("expression")) { break; } else if (node.EntityType == JDBCEntityType.Experiment) { var item = Mapper.Map <ExperimentDto>(node); //item.ChildrenCount = (await MyCoreApi.FindAllChildrenIdsByParentIdAsync(item.Id)).Count(); result.Add(item); } else if (node.EntityType == JDBCEntityType.Signal) { var item = Mapper.Map <FixedIntervalWaveSignalDto>(node); result.Add(item); } } return(new HttpResponseMessage { Content = new StringContent(SerializeObjectToString(result), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } catch (Exception e) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(e.InnerException != null ? e.InnerException.Message : e.Message) }); } }
public async Task <HttpResponseMessage> Delete() { var user = GetSessionUser(Request.Headers.GetCookies().FirstOrDefault()); List <NodeDto> successEntity = new List <NodeDto>(); //成功处理的Entity信息 JDBCEntity currentEntity = null; //当前处理的Entity信息 try { if (Request.RequestUri.PathAndQuery.ToLower().Equals("/entity/all"))//清空数据库 { await MyCoreApi.clearDb(); return(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent("Clear database successfully!") }); } Uri uri = ParseToQueryUri(Request.RequestUri); var nodes = await MyCoreApi.FindNodeByUriAsync(uri);//获取被删除entity var queryDict = ParseToQueryDictionary(Request.RequestUri); if ((!queryDict.ContainsKey("recursive") || queryDict["recursive"] == "false") && nodes.Count() > 1)//递归删除查询到的所有entity { throw new Exception("Please use [recursive=true] to delete queried entities!"); } if (nodes.Count() == 0)//entity不存在 { throw new Exception("No entity is found!"); } var deleteChildren = false; if (queryDict.ContainsKey("_recursive") && queryDict["_recursive"] == "true") { deleteChildren = true; } foreach (var entity in nodes) { currentEntity = entity; if (!await MyCoreApi.Authorization(currentEntity.Id, user, "1")) { throw new Exception("Not authorization!"); } await MyCoreApi.DeletAsync(entity.Id, deleteChildren); successEntity.Add(Mapper.Map <NodeDto>(currentEntity)); } return(new HttpResponseMessage { Content = new StringContent(SerializeObjectToString(successEntity), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } catch (Exception e) { if (currentEntity == null) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(e.InnerException != null ? e.InnerException.Message : e.Message) }); } var response = new ResponseEntityMessage { Fail = new { Description = e.InnerException != null ? e.InnerException.Message : e.Message, Id = currentEntity.Id, Path = currentEntity.Path }, Success = successEntity }; return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(SerializeObjectToString(response), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } }
public async Task <HttpResponseMessage> Insert() { var user = GetSessionUser(Request.Headers.GetCookies().FirstOrDefault()); List <NodeDto> successEntity = new List <NodeDto>(); //成功处理的Entity信息 JDBCEntity currentEntity = null; //当前处理的Entity信息 try { Uri uri = ParseToQueryUri(Request.RequestUri); List <JDBCEntity> parents = (await MyCoreApi.FindNodeByUriAsync(uri)).ToList(); //根据uri查找父节点 if (uri.PathAndQuery.Equals("/path/") || uri.PathAndQuery.Equals("/id/")) //添加根节点的情形 { parents.Add(new Experiment { Id = Guid.Empty }); } else if (parents.Count() == 0)//根节点不存在 { throw new Exception("Parent node not exist!"); } NameValueCollection form = Request.Content.ReadAsFormDataAsync().Result; JDBCEntity newNode = null; var type = GetValueFromForm(form, "type"); var name = GetValueFromForm(form, "name"); var extras = GetValuesFromForm(form, "extra[]", true); if (string.IsNullOrWhiteSpace(name)) { throw new Exception("Entity name can not be empty!"); } switch (type.ToLower()) { case "experiment": { newNode = new Experiment(name); } break; case "signal": { var init = GetValueFromForm(form, "init"); var datatype = GetValueFromForm(form, "datatype"); newNode = MyCoreApi.CreateSignal(datatype, name, init.Replace(";", "&").Replace(",", "&").Trim("'\"()[]{}".ToCharArray())); } break; default: throw new Exception("Entity type is not supported!"); } if (extras != null)//添加ExtraInformation { foreach (var extra in extras) { var index = extra.IndexOf(":::"); if (index < 0) { return(new HttpResponseMessage(HttpStatusCode.Forbidden)); } var key = extra.Substring(0, index); var value = extra.Substring(index + 3); if (key.Equals("") || value.Equals("") || newNode.IfExtraInformationContainsKey(key)) { return(new HttpResponseMessage(HttpStatusCode.Forbidden)); } newNode.AddExtraInformation(key, value); } } if (newNode == null) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent("Failed to create new node!") }); } foreach (var parent in parents) { if (!await MyCoreApi.Authorization(parent.Id, user, "1")) { throw new Exception("Not authorization!"); } currentEntity = parent; newNode.Id = Guid.NewGuid(); newNode.SetUser(user.UserName); var node = await MyCoreApi.AddOneToExperimentAsync(parent.Id, newNode); //添加signal successEntity.Add(Mapper.Map <NodeDto>(node)); //保存处理结果 } return(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(SerializeObjectToString(successEntity), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } catch (Exception e) { if (currentEntity == null) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(e.Message) }); } var response = new ResponseEntityMessage { Fail = new { Description = e.InnerException != null ? e.InnerException.Message : e.Message, Id = currentEntity.Id, Path = currentEntity.Path }, Success = successEntity }; return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(SerializeObjectToString(response), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } }