Exemple #1
0
        public void ShowView()
        {
            foreach (IWorkList worklist in GetWorklists())
            {
                // after Pro start up there is no view yet
                if (!_viewsByWorklistName.ContainsKey(worklist.Name))
                {
                    WorklistItem item = ProjectItemUtils.Get <WorklistItem>(worklist.Name);
                    Assert.NotNull(item);

                    _viewsByWorklistName.Add(worklist.Name, new WorkListObserver(worklist, item));
                }

                IWorkListObserver view = _viewsByWorklistName[worklist.Name];

                if (_layersByWorklistName.TryGetValue(worklist.Name, out FeatureLayer layer))
                {
                    view.Show(layer.Name);
                }
                else
                {
                    view.Show();
                }
            }
        }
Exemple #2
0
        private async Task OnProjectOpendedAsync(ProjectEventArgs e)
        {
            // 1) Check all existing project items.
            // 2) Add a work list factory to registry for every work list project item found in custom project items
            //	  (Use work list factory because we do not want to create a work list for EVERY work list project item.
            //	   Only create a work list (from a work list factory / work list custom project item) if a layer requests a work
            //	   list as a data source
            // order of method calls:
            // 1. Module.Initialize
            // 2. OnProjectOpenedAsync
            // 3. OnProjectOpened
            // 4. Pluggable Datasource Open()

            await Task.Run(() =>
            {
                foreach (var item in ProjectItemUtils.Get <WorklistItem>())
                {
                    var factory = new XmlBasedWorkListFactory(item.Path, item.WorklistName);

                    if (_registry.TryAdd(factory))
                    {
                        _msg.Debug($"Add work list {item.WorklistName} from file {item.Path}");
                    }
                }
            });
        }
Exemple #3
0
        public string ShowWorklist([NotNull] WorkEnvironmentBase environment, [NotNull] string path)
        {
            Assert.ArgumentNotNull(environment, nameof(environment));
            Assert.ArgumentNotNullOrEmpty(path, nameof(path));

            IWorkList worklist;

            string name = WorkListUtils.GetName(path).ToLower();

            if (_registry.Exists(name))
            {
                worklist = _registry.Get(name);
            }
            else
            {
                var factory = new XmlBasedWorkListFactory(path, name);

                if (_registry.TryAdd(factory))
                {
                    _msg.Debug($"Add work list {name} from file {path}");
                }

                worklist = _registry.Get(name);
            }

            Assert.NotNull(worklist);

            if (!_viewsByWorklistName.ContainsKey(worklist.Name))
            {
                var item = ProjectItemUtils.Get <WorklistItem>(Path.GetFileName(path));

                if (item == null)
                {
                    Assert.True(ProjectItemUtils.TryAdd(path, out item), $"Cannot add item {path}");
                    Assert.NotNull(item);
                }

                _viewsByWorklistName.Add(worklist.Name, new WorkListObserver(worklist, item));

                Uri uri = WorkListUtils.GetDatasource(GetProject().HomeFolderPath, name,
                                                      environment.FileSuffix);
                FeatureLayer layer = AddLayer(uri, name, item.Name);

                // use item name as layer name (and as view display name as well)
                LayerUtils.ApplyRenderer(layer, environment.GetLayerDocument());
            }

            return(Assert.NotNullOrEmpty(worklist.Name));
        }
Exemple #4
0
        public async Task CreateWorkListAsync([NotNull] WorkEnvironmentBase environment,
                                              [NotNull] string name)
        {
            Assert.ArgumentNotNull(environment, nameof(environment));
            Assert.ArgumentNotNullOrEmpty(name, nameof(name));

            Assert.False(_registry.Exists(name), $"work list {name} already exists");

            Uri uri = WorkListUtils.GetDatasource(GetProject().HomeFolderPath, name,
                                                  environment.FileSuffix);

            IWorkList worklist = await environment.CreateWorkListAsync(uri.LocalPath, name);

            if (worklist == null)
            {
                return;
            }

            // after creation go to nearest item
            worklist.GoNearest(MapView.Active.Extent);

            // Commit writes work list definition to disk.
            // Necessary for adding project item.
            worklist.Commit();

            // wiring work list events, etc. is done in OnDrawComplete
            // register work list before creating the layer
            _registry.TryAdd(worklist);

            Assert.True(ProjectItemUtils.TryAdd(uri.LocalPath, out WorklistItem item),
                        $"cannot add item {worklist.Name}");

            if (!_viewsByWorklistName.ContainsKey(worklist.Name))
            {
                _viewsByWorklistName.Add(worklist.Name, new WorkListObserver(worklist, item));
            }

            FeatureLayer layer = AddLayer(uri, name, worklist.DisplayName);

            LayerUtils.ApplyRenderer(layer, environment.GetLayerDocument());
        }
Exemple #5
0
 // Returns the relative path of the folder selected in Visual Studio or an empty
 // string if no folder is selected.
 protected string GetSelectionRelativePath()
 {
     return(Context.ActiveProjectItem == null ? String.Empty : ProjectItemUtils.GetProjectRelativePath(Context.ActiveProjectItem));
 }
Exemple #6
0
        public override void GenerateCode()
        {
            if (_moduleViewModel == null)
            {
                throw new InvalidOperationException("需要先调用ShowUIAndValidate方法。");
            }

            Cursor currentCursor = Mouse.OverrideCursor;

            try
            {
                Mouse.OverrideCursor = Cursors.Wait;

                var project          = Context.ActiveProject;
                var entity           = _moduleViewModel.ModelType.CodeType;
                var entityName       = entity.Name;
                var entityNamespace  = entity.Namespace.FullName;
                var entityFolerName  = ProjectItemUtils.GetModuleName(entityNamespace);
                var puralEntityName  = VmUtils.ToPlural(entityName);
                var projectNamespace = ProjectItemUtils.GetProjectName(entityNamespace);
                var overwrite        = _moduleViewModel.OverwriteFiles;
                Dictionary <string, object> templateParams = new Dictionary <string, object>()
                {
                    { "AppName", projectNamespace }
                    , { "EntityNamespace", entityNamespace }
                    , { "EntityFolerName", entityFolerName }
                    , { "PluralEntityName", puralEntityName }
                    , { "EntityName", entityName }
                    , { "DtoNamespace", _moduleViewModel.DtoNamespace }
                    , { "FunctionName", _moduleViewModel.FunctionName }
                    , { "DtoMetaTable", _moduleViewModel.DtoClassMetadataViewModel.DataModel }
                    , { "ItemMetaTable", _moduleViewModel.ItemClassMetadataViewModel.DataModel }
                };

                var templates = new[]
                {
                    @"{AppName}.Web\Areas\{Module}\Controllers\{PluralEntityName}Controller.cs",
                    @"{AppName}.Web\Areas\{Module}\Models\{PluralEntityName}\CreateOrEdit{Entity}ModalViewModel.cs",
                    @"{AppName}.Web\Areas\{Module}\Views\{PluralEntityName}\_CreateOrEditModal.cshtml",
                    @"{AppName}.Web\Areas\{Module}\Views\{PluralEntityName}\Index.cshtml",
                    @"{AppName}.Web\wwwroot\view-resources\Areas\{Module}\Views\{PluralEntityName}\_CreateOrEditModal.js",
                    @"{AppName}.Web\wwwroot\view-resources\Areas\{Module}\Views\{PluralEntityName}\Index.js",
                    @"{AppName}.Web\wwwroot\view-resources\Areas\{Module}\Views\{PluralEntityName}\index.less",
                    @"{AppName}.Common\{PluralEntityName}PageNames.cs",
                };
                foreach (var template in templates)
                {
                    string outputPath = Path.GetFileNameWithoutExtension(Path.Combine(@"_GeneratedCode\",
                                                                                      template.Replace("{AppName}", projectNamespace)
                                                                                      .Replace("{Module}", "Admin")
                                                                                      .Replace("{PluralEntityName}", puralEntityName)
                                                                                      .Replace("{Entity}", entityName)));

                    string templatePath = Path.Combine(template);

                    AddFileFromTemplate(project, outputPath, templatePath, templateParams, !overwrite);
                }
            }
            finally
            {
                Mouse.OverrideCursor = currentCursor;
            }
        }
Exemple #7
0
        public override void GenerateCode()
        {
            if (_moduleViewModel == null)
            {
                throw new InvalidOperationException("需要先调用ShowUIAndValidate方法。");
            }

            Cursor currentCursor = Mouse.OverrideCursor;

            try
            {
                Mouse.OverrideCursor = Cursors.Wait;
                var project = Context.ActiveProject;
                var entity  = _moduleViewModel.ModelType.CodeType;

                var entityPrimaryKeyType = "int";
                entityPrimaryKeyType = GetEntityPrimaryKeyType(entity);
                var entityName      = entity.Name;
                var entityNamespace = entity.Namespace.FullName;

                var projectNamespace = ProjectItemUtils.GetProjectName(entityNamespace);
                var functionName     = _moduleViewModel.FunctionName;
                var pluralEntityName = VmUtils.ToPlural(entityName);
                var entityFolerName  = ProjectItemUtils.GetModuleName(entityNamespace);
                var overwrite        = _moduleViewModel.OverwriteFiles;

                Dictionary <string, object> templateParams = new Dictionary <string, object>()
                {
                    { "AppName", projectNamespace }
                    ,
                    { "EntityNamespace", entityNamespace }
                    ,
                    { "EntityName", entityName }
                    ,
                    { "EntityPrimaryKeyType", entityPrimaryKeyType }
                    ,
                    { "EntityFolerName", entityFolerName }
                    ,
                    { "PluralEntityName", pluralEntityName }
                    ,
                    { "FunctionName", functionName }
                    ,
                    { "DtoMetaTable", _moduleViewModel.DtoClassMetadataViewModel.DataModel }
                };

                var templates = new[]
                {
                    @"{AppName}.Application\{EntityFolerName}\Dto\{Entity}EditDto.cs",
                    @"{AppName}.Application\{EntityFolerName}\Dto\{Entity}ListDto.cs",
                    @"{AppName}.Application\{EntityFolerName}\Dto\CreateOrUpdate{Entity}Input.cs",
                    @"{AppName}.Application\{EntityFolerName}\Dto\Get{Entity}ForEditOutput.cs",
                    @"{AppName}.Application\{EntityFolerName}\Dto\Get{Entity}ListInput.cs",
                    @"{AppName}.Application\{EntityFolerName}\{Entity}AppService.cs",
                    @"{AppName}.Application\{EntityFolerName}\I{Entity}AppService.cs",
                    @"{AppName}.Common\{Entity}Common.cs",
                    @"{AppName}.Core\IRepositories\I{Entity}Repository.cs",
                    @"{AppName}.EntityFramework\EntityFramework\Repositories\{Entity}Repository.cs"
                };
                foreach (var template in templates)
                {
                    string outputPath = Path.GetFileNameWithoutExtension(Path.Combine(@"_GeneratedCode\", template.Replace("{AppName}", projectNamespace)
                                                                                      .Replace("{EntityFolerName}", entityFolerName)
                                                                                      .Replace("{Entity}", entityName)));

                    string templatePath = Path.Combine(template);

                    AddFileFromTemplate(project, outputPath, templatePath, templateParams, !overwrite);
                }
            }
            finally
            {
                Mouse.OverrideCursor = currentCursor;
            }
        }