コード例 #1
0
ファイル: ServiceController.cs プロジェクト: RENSting/cnf.esb
        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");
            }
        }
コード例 #2
0
ファイル: ServiceController.cs プロジェクト: RENSting/cnf.esb
        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)));
        }
コード例 #3
0
ファイル: ServiceController.cs プロジェクト: RENSting/cnf.esb
        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)));
        }
コード例 #4
0
ファイル: ServiceController.cs プロジェクト: RENSting/cnf.esb
        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)));
        }
コード例 #5
0
ファイル: ServiceController.cs プロジェクト: RENSting/cnf.esb
        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));
        }
コード例 #6
0
ファイル: ServiceController.cs プロジェクト: RENSting/cnf.esb
        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)));
        }
コード例 #7
0
ファイル: ServiceController.cs プロジェクト: RENSting/cnf.esb
        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);
        }
コード例 #8
0
ファイル: ServiceController.cs プロジェクト: RENSting/cnf.esb
        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)));
        }