public IActionResult SaveJsonAndReturnService(EditServiceJsonViewModel viewModel) { var crossActionData = Models.EditServiceJson.CreateFrom(viewModel); ProcessBeforeJump(ref crossActionData, ref viewModel); crossActionData.UpdateWholeJson(); object serviceDescriptor = crossActionData.DeserializeServiceDescriptor(); if (crossActionData.ServiceType == ServiceType.SimpleRESTful) { ((SimpleRestfulDescriptorViewModel)serviceDescriptor).SelectedTab = "nav-json"; TempData.Put(EDIT_SERVICE_CROSS_ACTION_DATA_KEY, serviceDescriptor); return(RedirectToAction(nameof(EditSimpleRestfulService))); } else if (crossActionData.ServiceType == ServiceType.NCWebService) { TempData.Put(EDIT_SERVICE_CROSS_ACTION_DATA_KEY, serviceDescriptor); return(RedirectToAction(nameof(EditNCWebService))); } else if (crossActionData.ServiceType == ServiceType.PrimetonService) { TempData.Put(EDIT_SERVICE_CROSS_ACTION_DATA_KEY, serviceDescriptor); return(RedirectToAction(nameof(EditPrimetonService))); } else { throw new Exception("not implemented service type"); } }
public IActionResult EditProperty(EditServiceJsonViewModel viewModel, string propertyName) { var crossActionData = Models.EditServiceJson.CreateFrom(viewModel); var originalTemplate = ProcessBeforeJump(ref crossActionData, ref viewModel); if (originalTemplate.ValueType != Models.ValueType.Object) { crossActionData.ErrorMessage = "当前编辑的JSON模板不是对象类型"; } else if (originalTemplate.ObjectProperties == null || !originalTemplate.ObjectProperties.ContainsKey(propertyName)) { crossActionData.ErrorMessage = $"JSON模板不包含要编辑的属性成员{propertyName}"; } if (string.IsNullOrWhiteSpace(crossActionData.ErrorMessage)) { //Edit属性会导致CurrentJson整个对象发生改变,也就是CurrentPath发生改变, // 因此需要首先将当前的CurrentJson更新到WholeJson crossActionData.UpdateWholeJson(); crossActionData.CurrentPath = string.IsNullOrWhiteSpace(crossActionData.CurrentPath) ? propertyName : crossActionData.CurrentPath + '.' + propertyName; crossActionData.CurrentJson = JsonConvert.SerializeObject(originalTemplate.ObjectProperties[propertyName]); } TempData.Put(EDIT_JSON_CROSS_ACTION_DATA_KEY, crossActionData); return(RedirectToAction(nameof(EditServiceJson))); }
public IActionResult DeleteProperty(EditServiceJsonViewModel viewModel, string propertyName) { var crossActionData = Models.EditServiceJson.CreateFrom(viewModel); var originalTemplate = JsonConvert.DeserializeObject <Models.JsonTemplate>(viewModel.CurrentJson); originalTemplate.IsArray = viewModel.CurrentTemplate.IsArray; if (originalTemplate.ValueType != Models.ValueType.Object) { crossActionData.ErrorMessage = "当前编辑的JSON模板不是对象类型"; } else if (originalTemplate.ObjectProperties == null || !originalTemplate.ObjectProperties.ContainsKey(propertyName)) { crossActionData.ErrorMessage = "JSON模板不包含要删除的属性成员"; } if (string.IsNullOrWhiteSpace(crossActionData.ErrorMessage)) { originalTemplate.ObjectProperties.Remove(propertyName); } crossActionData.CurrentJson = JsonConvert.SerializeObject(originalTemplate); TempData.Put(EDIT_JSON_CROSS_ACTION_DATA_KEY, crossActionData); return(RedirectToAction(nameof(EditServiceJson))); }
public IActionResult SaveJson(EditServiceJsonViewModel viewModel) { var crossActionData = Models.EditServiceJson.CreateFrom(viewModel); ProcessBeforeJump(ref crossActionData, ref viewModel); crossActionData.UpdateWholeJson(); TempData.Put(EDIT_JSON_CROSS_ACTION_DATA_KEY, crossActionData); TempData[nameof(SaveJson)] = nameof(SaveJson); return(RedirectToAction(nameof(EditServiceJson))); }
public IActionResult EditServiceJson() { if (!TempData.ContainsKey(EDIT_JSON_CROSS_ACTION_DATA_KEY)) { throw new Exception("资源不可以直接访问"); } EditServiceJson postedJson = TempData.Get <Models.EditServiceJson>(EDIT_JSON_CROSS_ACTION_DATA_KEY); var model = new EditServiceJsonViewModel(postedJson); ViewBag.ErrorMessage = postedJson.ErrorMessage; return(View(model)); }
public IActionResult AddProperty(EditServiceJsonViewModel viewModel) { var crossActionData = Models.EditServiceJson.CreateFrom(viewModel); var originalTemplate = JsonConvert.DeserializeObject <Models.JsonTemplate>(viewModel.CurrentJson); if (originalTemplate.ValueType != Models.ValueType.Object) { originalTemplate = new JsonTemplate(); originalTemplate.ValueType = Models.ValueType.Object; } originalTemplate.IsArray = viewModel.CurrentTemplate.IsArray; if (string.IsNullOrWhiteSpace(viewModel.NewPropertyName)) { crossActionData.ErrorMessage = "必须为JSON成员指定有效的属性名称"; } else { var duplics = from key in originalTemplate.ObjectProperties.Keys where key.Equals(viewModel.NewPropertyName.Trim(), StringComparison.OrdinalIgnoreCase) select key; if (duplics.Count() > 0) { crossActionData.ErrorMessage = "当前JSON对象已经包含了同名成员,属性名称是大小写不敏感的"; } } if (string.IsNullOrWhiteSpace(crossActionData.ErrorMessage)) { var newProperty = new JsonTemplate(); newProperty.ValueType = viewModel.NewPropertyValue; newProperty.IsArray = viewModel.NewPropertyIsArray; originalTemplate.ObjectProperties.Add(viewModel.NewPropertyName, newProperty); } crossActionData.CurrentJson = JsonConvert.SerializeObject(originalTemplate); TempData.Put(EDIT_JSON_CROSS_ACTION_DATA_KEY, crossActionData); return(RedirectToAction(nameof(EditServiceJson))); }
JsonTemplate ProcessBeforeJump(ref EditServiceJson tempData, ref EditServiceJsonViewModel viewModel) { var processedTemplate = JsonConvert.DeserializeObject <Models.JsonTemplate>(viewModel.CurrentJson); bool uiChanged = false; if (processedTemplate.IsArray != viewModel.CurrentTemplate.IsArray) { //用户修改了IsArray。 processedTemplate.IsArray = viewModel.CurrentTemplate.IsArray; uiChanged = true; } if (processedTemplate.ValueType != viewModel.CurrentTemplate.ValueType) { processedTemplate = new JsonTemplate(); processedTemplate.ValueType = viewModel.CurrentTemplate.ValueType; processedTemplate.IsArray = viewModel.CurrentTemplate.IsArray; uiChanged = true; } if (uiChanged) { tempData.CurrentJson = JsonConvert.SerializeObject(processedTemplate); } return(processedTemplate); }
public IActionResult SaveJsonAndGoBack(EditServiceJsonViewModel viewModel) { var crossActionData = Models.EditServiceJson.CreateFrom(viewModel); ProcessBeforeJump(ref crossActionData, ref viewModel); crossActionData.UpdateWholeJson(); if (!string.IsNullOrWhiteSpace(crossActionData.CurrentPath)) { object wholeDescriptor = crossActionData.DeserializeServiceDescriptor(); int lastIndexOfDot = crossActionData.CurrentPath.LastIndexOf('.'); if (lastIndexOfDot < 0) { //返回到了根 crossActionData.CurrentPath = string.Empty; switch (crossActionData.CurrentName) { case JsonTemplateNames.RESTParameter: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((SimpleRestfulDescriptorViewModel)wholeDescriptor).JsonBodyTemplate); break; case JsonTemplateNames.RESTReturnValue: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((SimpleRestfulDescriptorViewModel)wholeDescriptor).ReturnJsonTemplate); break; case JsonTemplateNames.NCParameter: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((NCDescriptorViewModel)wholeDescriptor).ParameterBody); break; case JsonTemplateNames.NCReturn: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((NCDescriptorViewModel)wholeDescriptor).ReturnBody); break; case JsonTemplateNames.PrimetonParameter: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((PrimetonDescriptorViewModel)wholeDescriptor).InputBody); break; case JsonTemplateNames.PrimetonReturn: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((PrimetonDescriptorViewModel)wholeDescriptor).ReturnBody); break; default: throw new Exception("not implemented json part for this service"); } } else { //返回到上一级 crossActionData.CurrentPath = crossActionData.CurrentPath.Substring(0, lastIndexOfDot); switch (crossActionData.CurrentName) { case JsonTemplateNames.RESTParameter: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((SimpleRestfulDescriptorViewModel)wholeDescriptor) .JsonBodyTemplate.FindTemplate(crossActionData.CurrentPath)); break; case JsonTemplateNames.RESTReturnValue: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((SimpleRestfulDescriptorViewModel)wholeDescriptor) .ReturnJsonTemplate.FindTemplate(crossActionData.CurrentPath)); break; case JsonTemplateNames.NCParameter: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((NCDescriptorViewModel)wholeDescriptor) .ParameterBody.FindTemplate(crossActionData.CurrentPath)); break; case JsonTemplateNames.NCReturn: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((NCDescriptorViewModel)wholeDescriptor) .ReturnBody.FindTemplate(crossActionData.CurrentPath)); break; case JsonTemplateNames.PrimetonParameter: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((PrimetonDescriptorViewModel)wholeDescriptor) .InputBody.FindTemplate(crossActionData.CurrentPath)); break; case JsonTemplateNames.PrimetonReturn: crossActionData.CurrentJson = JsonConvert.SerializeObject( ((PrimetonDescriptorViewModel)wholeDescriptor) .ReturnBody.FindTemplate(crossActionData.CurrentPath)); break; default: throw new Exception("not implemented json part for this service"); } } } TempData.Put(EDIT_JSON_CROSS_ACTION_DATA_KEY, crossActionData); return(RedirectToAction(nameof(EditServiceJson))); }