示例#1
0
 public void InvokeOnModifiedHandlers()
 {
     if (IsModified())
     {
         OnEntityModified?.Invoke(this);
     }
 }
示例#2
0
        public async Task <object> Modify(string token, dynamic data, string json = "")
        {
            try
            {
                data = data ?? JsonConvert.DeserializeObject <dynamic>(json);
                if (data == null)
                {
                    throw new Exception("解析Json对象失败");
                }
                PropertyInfo[] pis = EntityTool.GetKeyProperty <T>();
                if (data.GetType() == typeof(JObject))
                {
                    string str = data.ToString();
                    T      t   = JsonConvert.DeserializeObject <T>(str);
                    if (t is BaseEntity)
                    {
                        (t as BaseEntity).Modifier = new UserService().GetByToken(token).Name;
                    }
                    JObject       jObject = data as JObject;
                    List <object> ids     = new List <object>();
                    foreach (var p in pis)
                    {
                        PropertyInfo tp = t.GetType().GetProperty(p.Name, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
                        if (tp == null)
                        {
                            throw new Exception("实体未包含主键:" + p.Name);
                        }
                        ids.Add(tp.GetValue(t));
                    }
                    T model = await Get(ids.ToArray());

                    if (model == null)
                    {
                        throw new Exception("查找修改对象失败");
                    }
                    foreach (var item in jObject)
                    {
                        PropertyInfo mp = model.GetType().GetProperty(item.Key, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
                        if (mp != null)
                        {
                            PropertyInfo tp = t.GetType().GetProperty(item.Key, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
                            mp.SetValue(model, tp.GetValue(t));
                        }
                    }
                    List <T> list = new List <T>()
                    {
                        model
                    };
                    OnEntityModifing?.Invoke(ref list);
                    int r = await Put(model);

                    OnEntityModified?.Invoke(ref list);
                    return(r);
                }
                else if (data.GetType() == typeof(JArray))
                {
                    string   str       = data.ToString();
                    JArray   jarray    = JsonConvert.DeserializeObject(str) as JArray;
                    List <T> list      = JsonConvert.DeserializeObject <List <T> >(str);
                    List <T> modellist = new List <T>();
                    for (int i = 0; i < list.Count; i++)
                    {
                        var           t       = list[i];
                        JObject       jObject = jarray[i] as JObject;
                        List <object> ids     = new List <object>();
                        if (t is BaseEntity)
                        {
                            (t as BaseEntity).Modifier = new UserService().GetByToken(token).Name;
                        }
                        foreach (var p in pis)
                        {
                            PropertyInfo tp = t.GetType().GetProperty(p.Name, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
                            if (tp == null)
                            {
                                throw new Exception("实体未包含主键:" + p.Name);
                            }
                            ids.Add(tp.GetValue(t));
                        }
                        T model = await Get(ids.ToArray());

                        if (model == null)
                        {
                            throw new Exception("查找修改对象失败");
                        }
                        foreach (var item in jObject)
                        {
                            PropertyInfo mp = model.GetType().GetProperty(item.Key, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
                            if (mp != null)
                            {
                                PropertyInfo tp = t.GetType().GetProperty(item.Key, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
                                mp.SetValue(model, tp.GetValue(t));
                            }
                        }
                        modellist.Add(model);
                    }
                    OnEntityModifing?.Invoke(ref modellist);
                    int r = await PutList(modellist);

                    OnEntityModified?.Invoke(ref modellist);
                    return(r);
                }
                throw new Exception("解析Json对象失败");
            }
            catch (Exception e)
            {
                throw e;
            }
        }
示例#3
0
        public override Tuple <Option <IEntityWrapper>, IEnumerable <ValidationRule> > Bootstrap(IReadableAtom <EA.Repository> eaRepository)
        {
            var entityWrapper    = new AdEntityWrapper();
            var entityRepository = new AdRepository(eaRepository, entityWrapper);
            var migrator         = new Migrator(technology);

            var tvClipboard = new Atom <TaggedValuesClipboard>(new TaggedValuesClipboard());

            var updateMetadataCommand            = new UpdateMetadataOfNewElementsCommand(entityRepository);
            var updateStateOnAlternativesChanged = new UpdateProblemOccurrenceStateOnAlternativesChanged(entityRepository);
            var updateStateOnAlternativesAdded   = new UpdateProblemOccurrenceStateOnAlternativesAdded(entityRepository);
            var updateStateOnRemoveAlternative   = new UpdateProblemOccurrenceStateOnAlternativeRemoved(entityRepository);
            var populateDependenciesCommand      = new PopulateDependenciesCommand(
                entityRepository, new DependencySelectorForm(entityRepository));
            var instantiateProblemSpace = new InstantiateProblemSpaceCommand(entityRepository, new InstantiateSolutionForm());
            var exportProblemSpace      = new ExportProblemSpaceCommand(
                entityRepository, new TailorPackageExportForm(), new XmlExporter.Factory(entityRepository, eaRepository), new SelectExportPathDialog());

            Register(new Menu(AddInName,
                              new MenuItem("Copy Tagged Values",
                                           new CopyTaggedValuesCommand(tvClipboard).ToMenuHandler()),
                              new MenuItem("Paste Tagged Values",
                                           new PasteTaggedValuesCommand(tvClipboard, entityRepository).ToMenuHandler()),
                              new MenuItem("Paste Tagged Values into Descendant Elements",
                                           new PasteTaggedValuesIntoChildrenCommand(tvClipboard, entityRepository).ToMenuHandler()),
                              new Separator(),
                              new MenuItem("Choose Selected and Neglect not chosen Alternatives",
                                           new ChooseOptionOccurrenceCommand <Unit>(entityRepository, updateStateOnAlternativesChanged).ToMenuHandler()),
                              new MenuItem("Neglect all Alternatives",
                                           new NeglectAllOptionsCommand(entityRepository).ToMenuHandler()),
                              new Separator(),
                              new MenuItem("Tailor Problem Space",
                                           exportProblemSpace.ToMenuHandler()),
                              new MenuItem("Create Solution Space from Problem Space",
                                           instantiateProblemSpace.ToMenuHandler()),
                              new MenuItem("Locate Option/Problem",
                                           new GoToClassifierCommand(entityRepository).ToMenuHandler()),
                              new MenuItem("Establish Dependencies from Problem Space",
                                           populateDependenciesCommand.ToMenuHandler()),
                              new MenuItem("Migrate Element(s) to Current Model Version",
                                           new MigrateModelEntitiesCommand(migrator).ToMenuHandler()),
                              new Separator(),
                              new MenuItem("Package Metrics",
                                           new AnalysePackageCommand(entityRepository, new DisplayMetricsForm()).ToMenuHandler())));

            OnEntityCreated.Add(updateMetadataCommand.ToEntityCreatedHandler());
            OnEntityCreated.Add(updateStateOnAlternativesAdded.ToEntityCreatedHandler());

            OnEntityModified.Add(updateStateOnAlternativesChanged.ToEntityModifiedHandler());

            OnDeleteEntity.Add(updateStateOnRemoveAlternative.AsOnDeleteEntityHandler());

            var rules = new[] {
                ValidationRule.FromCommand(AddInName, new ValidateProblemOptionCompositionCommand(entityRepository)),
                ValidationRule.FromCommand(AddInName, new ValidateProblemOccurrenceStateCommand(entityRepository)),
                ValidationRule.FromCommand(AddInName, new ValidateConflictingOptionsCommand(entityRepository)),
                ValidationRule.FromCommand(AddInName, new MultipleProblemsAddressedByAnOptionCommand(entityRepository)),
                ValidationRule.FromCommand(AddInName, migrator.GetValidator()),
                new ElementNotUsedDiagramRule(AddInName, entityRepository)
            };

            return(Tuple.Create(
                       Options.Some(entityWrapper as IEntityWrapper),
                       rules.AsEnumerable()));
        }