Ejemplo n.º 1
0
        public void Run_UpdateVirtualSpaceAppFlowTest_RenameFileName()
        {
            LOG.Debug("execute method run");

            UpdateVirtualSpaceAppFlowTestSupport.RemoveVirtualFile(1L);
            UpdateVirtualSpaceAppFlowTestSupport.RemovePhysicalFile(1L);
            UpdateVirtualSpaceAppFlowTestSupport.CopyPhysicalSpace_Kinkaku(1L);

            var aclfile = UpdateVirtualSpaceAppFlowTestSupport.CopyVirtualSpace_Kinkaku_aclgene(1L);

            aclfile.MoveTo(Path.Combine(aclfile.DirectoryName, "Kinkaku2.jpg.aclgene"));             //  新しいACLファイル名前にリネームする
            aclfile = new FileInfo(Path.Combine(aclfile.DirectoryName, "Kinkaku2.jpg.aclgene"));

            // ...
            using (var dbc = new AppDbContext())
            {
                var workspace = WorkspaceRepository.Load(dbc, 1L);
                var workflow  = new WorkflowInvoker(new UpdateVirtualSpaceAppFlow());
                workflow.Extensions.Add(new WorkflowExtention(dbc));

                var pstack = new ParameterStack();
                pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.RENAME);
                pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, "Kinkaku2.jpg.aclgene");                 // リネーム後のファイル名
                pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace);

                var results = workflow.Invoke(new Dictionary <string, object>
                {
                    { "ParameterStack", pstack }
                });

                dbc.SaveChanges();
            }

            using (var dbc = new AppDbContext())
            {
                var filemapinginfoRepository = new FileMappingInfoRepository(dbc);
                var entity = filemapinginfoRepository.Load(1L);

                var workspace = WorkspaceRepository.Load(dbc, 1L);

                // エンティティの値が変わっていることの確認
                Assert.AreEqual("Kinkaku2.jpg", entity.MappingFilePath);

                // 物理ディレクトリ空間での、ファイル名称が変更していることの確認
                var physicalFileInfo = new FileInfo(Path.Combine(workspace.PhysicalPath, "Kinkaku2.jpg"));
                Assert.IsTrue(physicalFileInfo.Exists);
            }
        }
Ejemplo n.º 2
0
        public void GetManyByIdAsync_ItemsDoNotExist_ReturnsEmptyCollection()
        {
            MongoDbContext dbContext = RepositoryTestUtils.CreateDbContext();

            dbContext.InsertAsync(DbSchema.WorkspaceContainer, DbModelUtils.GetWorkspaceDbModel()).Wait();
            dbContext.InsertAsync(DbSchema.WorkspaceContainer, DbModelUtils.GetWorkspaceDbModel()).Wait();
            dbContext.InsertAsync(DbSchema.WorkspaceContainer, DbModelUtils.GetWorkspaceDbModel()).Wait();
            IEnumerable <string> ids = new string[2] {
                "1", "2"
            };

            WorkspaceRepository            workspaceRepository = new WorkspaceRepository();
            IEnumerable <WorkspaceDbModel> result = workspaceRepository.GetManyByIdAsync(dbContext, ids).Result;

            Assert.AreEqual(0, result.Count());
        }
Ejemplo n.º 3
0
        public WorkspaceService(IServiceProvider serviceProvider, IVsSolution solution, DTE dte, IVsUIShellDocumentWindowMgr documentWindowMgr)
        {
            _solution          = solution;
            _dte               = dte;
            _serviceProvider   = serviceProvider;
            _documentWindowMgr = documentWindowMgr;

            _eventsService = new SolutionEventsService(_solution);
            _repository    = new WorkspaceRepository(_solution);
            //_nameTextChangedService = new WorkspaceNameTextChangedService();
            //_keyboardSystem = new KeyboardSystem();
            //_keyboardSystem.StartSystem();

            _eventsService.SolutionOpened += SolutionOpened;
            _eventsService.SolutionClosed += SolutionClosed;
        }
Ejemplo n.º 4
0
        public void TestItemLogRepository()
        {
            WorkspaceRepository workspace = new WorkspaceRepository(_context);

            WorkspaceItem item = new WorkspaceItem()
            {
                CreatedBy   = "*****@*****.**", // must be a valid user (foreign key validation)
                CreatedDate = DateTime.Now,
                Description = "Description...",
                EndDate     = null,
                Id          = Guid.NewGuid(),
                ItemState   = 2,
                StartDate   = null,
                Summary     = "Summary.",
                Title       = "#title#"
            };

            workspace.Create(item);

            var initial = workspace.GetLogs(item.Id);

            workspace.AppendLog(item.Id, new WorkspaceItemLog()
            {
                Id          = Guid.NewGuid(),
                CreatedBy   = item.CreatedBy,
                CreatedDate = DateTime.Now,
                Text        = "teste 1",
                Properties  = null
            });
            workspace.AppendLog(item.Id, new WorkspaceItemLog()
            {
                Id          = Guid.NewGuid(),
                CreatedBy   = item.CreatedBy,
                CreatedDate = DateTime.Now,
                Text        = "teste 2",
                Properties  = new WorkspaceItemLogProperties()
                {
                    Expenses   = 1,
                    LaborHours = 8
                }
            });

            var final = workspace.GetLogs(item.Id);

            workspace.Delete(item.Id);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 「Kinkaku.jpg.aclgene」ファイルを、仮想ディレクトリ空間に作成します
        /// </summary>
        /// <returns></returns>
        public static FileInfo CopyVirtualSpace_Kinkaku_aclgene(long loadWorkspaceId)
        {
            FileInfo virtualSpaceFileInfo;
            Assembly myAssembly = Assembly.GetExecutingAssembly();
            string   path       = Path.GetDirectoryName(myAssembly.Location);
            var      srcFile    = new FileInfo(path + "/Assets/Acl/Kinkaku.jpg.aclgene");

            using (var dbc = new AppDbContext())
            {
                var repo      = new WorkspaceRepository(dbc);
                var workspace = repo.Load(loadWorkspaceId);

                virtualSpaceFileInfo = new FileInfo(Path.Combine(workspace.WorkspacePath, srcFile.Name));
                srcFile.CopyTo(virtualSpaceFileInfo.FullName, true);
            }

            return(virtualSpaceFileInfo);
        }
Ejemplo n.º 6
0
        public void CreateWorkspaceItem()
        {
            WorkspaceRepository workspace = new WorkspaceRepository(_context);

            WorkspaceItem item = new WorkspaceItem()
            {
                CreatedBy   = "*****@*****.**", // must be a valid user (foreign key validation)
                CreatedDate = DateTime.Now,
                Description = "Description...",
                EndDate     = null,
                Id          = Guid.NewGuid(),
                ItemState   = 2,
                StartDate   = null,
                Summary     = "Summary.",
                Title       = "#title#"
            };

            workspace.Create(item);
        }
Ejemplo n.º 7
0
        public void Run_UpdateVirtualSpaceAppFlowTest_DeleteFileName()
        {
            UpdateVirtualSpaceAppFlowTestSupport.RemoveVirtualFile(1L);
            UpdateVirtualSpaceAppFlowTestSupport.RemovePhysicalFile(1L);
            UpdateVirtualSpaceAppFlowTestSupport.CopyPhysicalSpace_Kinkaku(1L);

            var aclfile = UpdateVirtualSpaceAppFlowTestSupport.CopyVirtualSpace_Kinkaku_aclgene(1L);

            aclfile.Delete();


            using (var dbc = new AppDbContext())
            {
                var workspace = WorkspaceRepository.Load(dbc, 1L);
                var workflow  = new WorkflowInvoker(new UpdateVirtualSpaceAppFlow());
                workflow.Extensions.Add(new WorkflowExtention(dbc));

                var pstack = new ParameterStack();
                pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.DELETE);
                pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, "Kinkaku.jpg.aclgene");                 // 削除したファイル
                pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace);
                pstack.SetValue("WF_DeleteAclHash", "Test");

                var results = workflow.Invoke(new Dictionary <string, object>
                {
                    { "ParameterStack", pstack }
                });

                dbc.SaveChanges();
            }

            using (var dbc = new AppDbContext())
            {
                var workspace = WorkspaceRepository.Load(dbc, 1L);

                // 物理ファイルが削除されていることを確認する
                var physicalFileInfo = new FileInfo(Path.Combine(workspace.PhysicalPath, "Kinkaku.jpg"));
                Assert.IsFalse(physicalFileInfo.Exists);

                var entity = FileMappingInfoRepository.Load(dbc, 1L);
                Assert.IsNull(entity);
            }
        }
        public void GetUserWorkspaces_WhenUserWorkspacesCached_DoesNotFetchFromRepository()
        {
            string     authUserId = Guid.NewGuid().ToString();
            string     cacheKey   = CacheKeys.UserWorkspace(authUserId);
            IDbContext dbContext  = Substitute.For <IDbContext>();
            IEnumerable <WorkspaceViewModel>?cachedViewModel = new WorkspaceViewModel[] { new WorkspaceViewModel() };

            UserRepository      userRepository      = Substitute.For <UserRepository>();
            WorkspaceRepository workspaceRepository = Substitute.For <WorkspaceRepository>();

            IMemoryCacheWrapper memoryCache = Substitute.For <IMemoryCacheWrapper>();

            memoryCache.Get <IEnumerable <WorkspaceViewModel> >(cacheKey).Returns(cachedViewModel);

            UserWorkspaceViewService         userWorkspaceViewService = new UserWorkspaceViewService(dbContext, memoryCache, Substitute.For <IMapper>(), userRepository, workspaceRepository);
            IEnumerable <WorkspaceViewModel> result = userWorkspaceViewService.GetUserWorkspaces(authUserId).Result;

            // assert
            memoryCache.DidNotReceive().Set <IEnumerable <WorkspaceViewModel> >(Arg.Any <string>(), Arg.Any <IEnumerable <WorkspaceViewModel> >(), Arg.Any <TimeSpan>());
            workspaceRepository.DidNotReceive().GetManyByIdAsync(Arg.Any <IDbContext>(), Arg.Any <IEnumerable <string> >());
            userRepository.DidNotReceive().GetByAuthIdAsync(Arg.Any <IDbContext>(), Arg.Any <string>());
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 仮想ディレクトリ空間のすべてのファイルを削除します
        /// </summary>
        /// <param name="loadWorkspaceId">ワークスペース</param>
        public static void RemoveVirtualFile(long loadWorkspaceId)
        {
            using (var dbc = new AppDbContext())
            {
                var repo      = new WorkspaceRepository(dbc);
                var workspace = repo.Load(loadWorkspaceId);

                var dirInfo = new DirectoryInfo(workspace.WorkspacePath);
                while (dirInfo.Exists)
                {
                    Directory.Delete(workspace.WorkspacePath, true);
                    dirInfo = new DirectoryInfo(workspace.WorkspacePath);
                    Thread.Sleep(100);
                }

                while (!dirInfo.Exists)
                {
                    Directory.CreateDirectory(workspace.WorkspacePath);
                    dirInfo = new DirectoryInfo(workspace.WorkspacePath);
                    Thread.Sleep(100);
                }
            }
        }
Ejemplo n.º 10
0
        public void GetManyByIdAsync_ItemsExist_ReturnsCollection()
        {
            MongoDbContext   dbContext         = RepositoryTestUtils.CreateDbContext();
            WorkspaceDbModel workspaceDbModel1 = DbModelUtils.GetWorkspaceDbModel();

            dbContext.InsertAsync(DbSchema.WorkspaceContainer, workspaceDbModel1).Wait();
            WorkspaceDbModel workspaceDbModel2 = DbModelUtils.GetWorkspaceDbModel();

            dbContext.InsertAsync(DbSchema.WorkspaceContainer, workspaceDbModel2).Wait();

            dbContext.InsertAsync(DbSchema.WorkspaceContainer, DbModelUtils.GetWorkspaceDbModel()).Wait();
            dbContext.InsertAsync(DbSchema.WorkspaceContainer, DbModelUtils.GetWorkspaceDbModel()).Wait();

            IEnumerable <string> ids = new string[2] {
                workspaceDbModel1.Id, workspaceDbModel2.Id
            };

            WorkspaceRepository     workspaceRepository = new WorkspaceRepository();
            List <WorkspaceDbModel> result = workspaceRepository.GetManyByIdAsync(dbContext, ids).Result.ToList();

            Assert.AreEqual(2, result.Count());
            Assert.IsNotNull(result.SingleOrDefault(x => x.Id == workspaceDbModel1.Id));
            Assert.IsNotNull(result.SingleOrDefault(x => x.Id == workspaceDbModel2.Id));
        }
Ejemplo n.º 11
0
        public ResponseWorkspaceLoadList WorkspaceLoadList(RequestWorkspaceLoadList reqparam)
        {
            var resp = new ResponseWorkspaceLoadList();

            try
            {
                using (var dbc = new AppDbContext())
                {
                    var repo = new WorkspaceRepository(dbc);

                    resp.Datas = new List <SVP.CIL.Domain.Workspace>();

                    foreach (var c in repo.GetAll())
                    {
                        var domainWorkspace = Mapper.Map <SVP.CIL.Domain.Workspace>(c);
                        resp.Datas.Add(domainWorkspace);
                    }

                    resp.Success = true;
                }
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (DbEntityValidationResult entityErr in dbEx.EntityValidationErrors)
                {
                    foreach (DbValidationError error in entityErr.ValidationErrors)
                    {
                        Console.WriteLine("Error Property Name {0} : Error Message: {1}",
                                          error.PropertyName, error.ErrorMessage);
                        resp.Success = false;
                    }
                }
            }

            return(resp);
        }
        /// <summary>
        /// 定期的に、ファイル操作があったファイルに対するVFS処理を行う
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        async void OnIndexTimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (this.IsSuspendIndex)
            {
                return;                                  // サスペンド時はインデックス生成処理はスキップする
            }
            // インデックス生成処理中は、このメソッドを呼び出すタイマーは停止しておきます。
            var timer = sender as System.Timers.Timer;

            timer.Enabled = false;

            LOG.Info("タイマー処理の実行");


            // ディレクトリ削除イベントが発生している場合、
            // 削除したディレクトリに含まれていたファイルを、削除したパスから見つけ出して削除処理を行うキューに追加する
            lock (sameDirectoryOperation_Locker)
            {
                if (sameDirectoryOperation_Name != "")
                {
                    sameDirectoryOperation_Name = "";
                    var relativeDirPath = _Workspace.TrimWorekspacePath(sameDirectoryOperation_FullPath, false);

                    /*
                     * using (var dbc = new AppDbContext())
                     * {
                     *      var repo = new FileMappingInfoRepository(dbc);
                     *      foreach (var prop in repo.FindBy(p => p.MappingFilePath.StartsWith(relativeDirPath)))
                     *      {
                     *              var fileUpdateQueueItem = new FileUpdateQueueItem { Target = new FileInfo(Path.Combine(_Workspace.WorkspacePath, prop.MappingFilePath + ".aclgene")) };
                     *              fileUpdateQueueItem.Recents.Add(new RecentInfo { EventType = WatcherChangeTypes.Deleted });
                     *              _UpdatesWatchFiles.AddOrUpdate(prop.MappingFilePath, fileUpdateQueueItem, (_key, _value) => fileUpdateQueueItem);
                     *      }
                     * }
                     */
                }
            }

            //
            foreach (var @pair in _UpdatesWatchFiles.ToList())
            {
                // 最後のファイル監視状態から、一定時間経過している場合のみ処理を行う。
                var @diff = DateTime.Now - @pair.Value.LastUpdate;

                if (@diff.Seconds >= 10)                 // 10秒 以上経過
                {
                    FileUpdateQueueItem item;            // work
                    if (_UpdatesWatchFiles.TryRemove(@pair.Key, out item))
                    {
                        var @lastItem = item.Recents.LastOrDefault();

                        // NOTE: UpdateVirtualSpaceFlowワークフローを呼び出す
                        LOG.InfoFormat("ワークフロー実行 [{1}] 対象ファイルパス={0}", item.Target.FullName, @lastItem.EventType);

                        // ワークフロー処理中に発生するファイル更新イベントにより、更新キューに項目が追加されてしまうことを防ぐため、
                        // 処理中のファイルを更新キューから除外するための除外リストに、処理中のファイルを追加する。
                        //
                        // ※処理中のファイルがACLファイル以外の場合、対象ファイルのACLファイル名も除外リストに追加する
                        _IgnoreUpdateFiles.Enqueue(item.Target.FullName);
                        if (item.Target.Extension != ".aclgene")
                        {
                            _IgnoreUpdateFiles.Enqueue(item.Target.FullName + ".aclgene");
                        }

                        try
                        {
                            using (var dbc = new AppDbContext())
                            {
                                var workspace = WorkspaceRepository.Load(dbc, _Workspace.Id);
                                if (workspace == null)
                                {
                                    workspace = _Workspace;
                                }

                                // 処理対象のファイルがACLファイルか、物理ファイルかで処理を切り分けます
                                // ■ACLファイルの場合
                                //    リネーム更新イベントに対応します。
                                // ■物理ファイルの場合
                                //    リネーム更新イベントも、UPDATEイベントとして処理します。
                                if (item.Target.Extension == ".aclgene")
                                {
                                    var fileNameWithputExtension = item.Target.Name.Replace(item.Target.Extension, "");
                                    switch (@lastItem.EventType)
                                    {
                                    case WatcherChangeTypes.Renamed:
                                        file_rename_acl(dbc, item, workspace);
                                        break;

                                    case WatcherChangeTypes.Changed:
                                    case WatcherChangeTypes.Created:
                                        file_create_acl(dbc, item, workspace);
                                        break;

                                    case WatcherChangeTypes.Deleted:
                                        file_remove_acl(dbc, item, workspace);
                                        break;
                                    }
                                }
                                else
                                {
                                    if (File.Exists(item.Target.FullName))
                                    {
                                        switch (@lastItem.EventType)
                                        {
                                        case WatcherChangeTypes.Renamed:
                                        case WatcherChangeTypes.Changed:
                                        case WatcherChangeTypes.Created:
                                            file_create_normal(dbc, item, workspace);
                                            break;

                                        case WatcherChangeTypes.Deleted:
                                            break;
                                        }
                                    }
                                    else
                                    {
                                        LOG.InfoFormat("「{0}」は存在しない物理ファイルのため、処理をスキップします。", item.Target.FullName);
                                    }
                                }

                                dbc.SaveChanges();
                            }
                        }
                        catch (Exception expr)
                        {
                            LOG.ErrorFormat("タイマー処理時エラー = {0}", expr.Message);
                        }

                        // 処理を終了したファイルを、除外リストから削除します
                        string ignoreUpdateFile;
                        _IgnoreUpdateFiles.TryDequeue(out ignoreUpdateFile);
                        if (item.Target.Extension != ".aclgene")
                        {
                            _IgnoreUpdateFiles.TryDequeue(out ignoreUpdateFile);
                        }
                    }
                }

                // [CPU使用率に対するループ遅延を行う]
                var cpuPer = _CpuCounter.NextValue();
                if (cpuPer > 90.0)
                {
                    await Task.Delay(100);                     // 100msec待機
                }
                else if (cpuPer > 30.0)
                {
                    //await Task.Delay(10); // 10msec待機
                }
            }

            timer.Enabled = true;
        }
Ejemplo n.º 13
0
 public WorkspacesFacade(WorkspaceRepository workspaceRepository, FileRepository fileRepository, Mapper mapper)
 {
     mWorkspaceRepository = workspaceRepository;
     mFileRepository      = fileRepository;
     mMapper = mapper;
 }
Ejemplo n.º 14
0
 public WorkspaceController(WorkspaceRepository repo, AuthenticationHandler auth)
 {
     _repo = repo;
     _auth = auth;
 }
Ejemplo n.º 15
0
 public WorkspaceController(SessionContext sessionContext, WorkspaceRepository workspaceRepository, FileSystem fileSystem)
 {
     _fileSystem          = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));
     _sessionContext      = sessionContext ?? throw new ArgumentNullException(nameof(sessionContext));
     _workspaceRepository = workspaceRepository ?? throw new ArgumentNullException(nameof(workspaceRepository));
 }
 public UserWorkspaceViewService(IDbContext dbContext, IMemoryCacheWrapper memoryCache, IMapper mapper, UserRepository userRepository, WorkspaceRepository workspaceRepository)
 {
     this._dbContext           = dbContext;
     this._memoryCache         = memoryCache;
     this._mapper              = mapper;
     this._userRepository      = userRepository;
     this._workspaceRepository = workspaceRepository;
 }
Ejemplo n.º 17
0
 public WorkspaceController(WorkspaceRepository wr) => this.wr = wr;
Ejemplo n.º 18
0
        public static void ClassInitialize(TestContext testContext)
        {
            //
            // This is called from other tests e.g. DynamicServicesInvokerTest
            //
            lock (InitLock)
            {
                if (_isInitialized)
                {
                    return;
                }

                Directory.SetCurrentDirectory(testContext.TestDir);
                _testDir = testContext.TestDir;

                var workspaceID = Guid.NewGuid();

                #region Copy server services to file system

                var workspacePath = Path.Combine(GlobalConstants.WorkspacePath, workspaceID.ToString());

                #region Initialize services

                _servicesPath = Path.Combine(workspacePath, "Services");
                var servicesVersionControlPath = Path.Combine(_servicesPath, "VersionControl");
                var serverServicesPath         = Path.Combine(_testDir, "Services");

                Directory.CreateDirectory(_servicesPath);
                Directory.CreateDirectory(servicesVersionControlPath);
                Directory.CreateDirectory(serverServicesPath);

                var xml = XmlResource.Fetch(ServiceName);
                xml.Save(Path.Combine(_servicesPath, ServiceName + ".xml"));
                xml.Save(Path.Combine(servicesVersionControlPath, ServiceName + ".V" + VersionNo + ".xml"));
                xml.Save(Path.Combine(serverServicesPath, ServiceName + ".xml"));

                xml = XmlResource.Fetch(ServiceNameUnsigned);
                xml.Save(Path.Combine(_servicesPath, ServiceNameUnsigned + ".xml"));
                xml.Save(Path.Combine(servicesVersionControlPath, ServiceNameUnsigned + ".V" + VersionNo + ".xml"));
                xml.Save(Path.Combine(serverServicesPath, ServiceNameUnsigned + ".xml"));

                _testServiceDefinition = xml.ToString();

                #endregion

                #region Initialize sources

                _sourcesPath = Path.Combine(workspacePath, "Sources");
                var sourcesVersionControlPath = Path.Combine(_sourcesPath, "VersionControl");
                var serverSourcesPath         = Path.Combine(_testDir, "Sources");

                Directory.CreateDirectory(_sourcesPath);
                Directory.CreateDirectory(sourcesVersionControlPath);
                Directory.CreateDirectory(serverSourcesPath);

                xml = XmlResource.Fetch(SourceName);
                xml.Save(Path.Combine(_sourcesPath, SourceName + ".xml"));
                xml.Save(Path.Combine(sourcesVersionControlPath, SourceName + ".V" + VersionNo + ".xml"));
                xml.Save(Path.Combine(serverSourcesPath, SourceName + ".xml"));

                _testSourceDefinition = xml.ToString();

                xml = XmlResource.Fetch(ServerConnection1Name);
                xml.Save(Path.Combine(_sourcesPath, ServerConnection1ResourceName + ".xml"));
                xml.Save(Path.Combine(_sourcesPath, ServerConnection1ResourceName + ".xml"));
                xml.Save(Path.Combine(sourcesVersionControlPath, ServerConnection1ResourceName + ".V" + VersionNo + ".xml"));
                xml.Save(Path.Combine(serverSourcesPath, ServerConnection1ResourceName + ".xml"));

                xml = XmlResource.Fetch(ServerConnection2Name);
                xml.Save(Path.Combine(_sourcesPath, ServerConnection2ResourceName + ".xml"));
                xml.Save(Path.Combine(sourcesVersionControlPath, ServerConnection2ResourceName + ".V" + VersionNo + ".xml"));
                xml.Save(Path.Combine(serverSourcesPath, ServerConnection2ResourceName + ".xml"));

                #endregion

                #endregion

                _workspace    = WorkspaceRepository.Instance.Get(workspaceID);
                _testInstance = WorkspaceRepository.Instance;

                _isInitialized = true;
            }
        }
Ejemplo n.º 19
0
        /// <summary>
        /// InMemoryデータベース用のユニットテストデータを作成する
        /// </summary>
        void ImportInitializeData(int threadId, SimpleInjector.Container container)
        {
            var @dbc = (AppDbContext)container.GetInstance <IAppDbContext>();

            // Category
            var repo_Category = new CategoryRepository(@dbc);

            repo_Category.Add(new Category
            {
                Id   = 2,
                Name = "テストカテゴリA"
            });
            repo_Category.Add(new Category
            {
                Id   = 3,
                Name = "テストカテゴリA2"
            });
            repo_Category.Add(new Category
            {
                Id   = 4,
                Name = "テストカテゴリA3"
            });

            // Label
            var repo_Label = new LabelRepository(@dbc);

            repo_Label.Add(new Label
            {
                Id   = 1,
                Name = "テストラベル"
            });
            repo_Label.Add(new Label
            {
                Id       = 2,
                Name     = "テストラベル_2",
                Category = (Category)repo_Category.Load(1)
            });

            // Content
            var repo_Content = new ContentRepository(@dbc);

            repo_Content.Add(new Content
            {
                Id          = 1,
                Name        = "Content1",
                IdentifyKey = "IDEN_Content1"
            });
            repo_Content.Add(new Content
            {
                Id          = 2,
                Name        = "Content2",
                IdentifyKey = "IDEN_Content2",
            });
            repo_Content.Add(new Content
            {
                Id          = 3,
                Name        = "Content3",
                IdentifyKey = "IDEN_Content3"
            });

            // Workspace
            var repo_Workspace = new WorkspaceRepository(@dbc);
            var workspace1     = new Workspace
            {
                Id           = 1,
                Name         = "UT_Workspace",
                PhysicalPath = Path.Combine(TESTDATADIRECTORY, "PixstockSrvUT_" + threadId)
            };

            repo_Workspace.Add(workspace1);

            // FileMappingInfo
            var repo_FileMappingInfo = new FileMappingInfoRepository(@dbc);

            repo_FileMappingInfo.Add(new FileMappingInfo
            {
                Id        = 1,
                AclHash   = "ABC1",
                Workspace = workspace1
            });

            @dbc.SaveChanges();

            var label2 = repo_Label.Load(2L);

            label2.Contents.Add(new Label2Content
            {
                ContentId = 1L,
                Content   = (Content)repo_Content.Load(1L),
                LabelId   = 2L,
                Label     = label2
            });

            @dbc.SaveChanges();
        }
Ejemplo n.º 20
0
 public AdminNotifyHub(KeycloakFacade keycloakFacade, WorkspaceRepository workspaceRepository, ILogger auditLogger)
 {
     mKeycloakFacade      = keycloakFacade;
     mWorkspaceRepository = workspaceRepository;
     mAuditLogger         = auditLogger;
 }
 public AdministratorController(KeycloakFacade keycloakFacade, WorkspaceRepository workspaceRepository, ILogger auditLogger)
 {
     mKeycloakFacade      = keycloakFacade;
     mWorkspaceRepository = workspaceRepository;
     mAuditLogger         = auditLogger;
 }
Ejemplo n.º 22
0
        /// <summary>
        /// インデックス作成処理を一定間隔で行います
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        async void OnIndexTimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (this.IsSuspendIndex)
            {
                return;                                  // サスペンド時はインデックス生成処理はスキップする
            }
            // インデックス生成処理中は、このメソッドを呼び出すタイマーは停止しておきます。
            var timer = sender as System.Timers.Timer;

            timer.Enabled = false;

            LOG.Info("タイマー処理の実行");

            // ディレクトリ削除イベントが発生している場合、
            // 削除したディレクトリに含まれていたファイルを、削除したパスから見つけ出して削除処理を行うキューに追加する
            lock (sameDirectoryOperation_Locker)
            {
                if (sameDirectoryOperation_Name != "")
                {
                    sameDirectoryOperation_Name = "";
                    var relativeDirPath = _Workspace.TrimWorekspacePath(sameDirectoryOperation_FullPath, false);
                    using (var dbc = new AppDbContext())
                    {
                        var repo = new FileMappingInfoRepository(dbc);
                        foreach (var prop in repo.FindBy(p => p.MappingFilePath.StartsWith(relativeDirPath)))
                        {
                            var fileUpdateQueueItem = new FileUpdateQueueItem {
                                Target = new FileInfo(Path.Combine(_Workspace.WorkspacePath, prop.MappingFilePath + ".aclgene"))
                            };
                            fileUpdateQueueItem.Recents.Add(new RecentInfo {
                                EventType = WatcherChangeTypes.Deleted
                            });
                            _UpdatesWatchFiles.AddOrUpdate(prop.MappingFilePath, fileUpdateQueueItem, (_key, _value) => fileUpdateQueueItem);
                        }
                    }
                }
            }

            //
            foreach (var @pair in _UpdatesWatchFiles.ToList())
            {
                // 最後のファイル監視状態から、一定時間経過している場合のみ処理を行う。
                var @diff = DateTime.Now - @pair.Value.LastUpdate;

                if (@diff.Seconds >= 10)                 // 10秒 以上経過
                {
                    FileUpdateQueueItem item;            // work
                    if (_UpdatesWatchFiles.TryRemove(@pair.Key, out item))
                    {
                        var @lastItem = item.Recents.LastOrDefault();

                        // NOTE: UpdateVirtualSpaceFlowワークフローを呼び出す
                        LOG.InfoFormat("ワークフロー実行 [{1}] 対象ファイルパス={0}", item.Target.FullName, @lastItem.EventType);

                        // ワークフロー処理中に発生するファイル更新イベントにより、更新キューに項目が追加されてしまうことを防ぐため、
                        // 処理中のファイルを更新キューから除外するための除外リストに、処理中のファイルを追加する。
                        //
                        // ※処理中のファイルがACLファイル以外の場合、対象ファイルのACLファイル名も除外リストに追加する
                        _IgnoreUpdateFiles.Enqueue(item.Target.FullName);
                        if (item.Target.Extension != ".aclgene")
                        {
                            _IgnoreUpdateFiles.Enqueue(item.Target.FullName + ".aclgene");
                        }

                        try
                        {
                            using (var dbc = new AppDbContext())
                            {
                                var workspace = WorkspaceRepository.Load(dbc, _Workspace.Id);
                                var workflow  = new WorkflowInvoker(new UpdateVirtualSpaceAppFlow());
                                workflow.Extensions.Add(new WorkflowExtention(dbc));
                                var pstack = new ParameterStack();

                                // 処理対象のファイルがACLファイルか、物理ファイルかで処理を切り分けます
                                // ■ACLファイルの場合
                                //    リネーム更新イベントに対応します。
                                // ■物理ファイルの場合
                                //    リネーム更新イベントも、UPDATEイベントとして処理します。
                                if (item.Target.Extension == ".aclgene")
                                {
                                    var fileNameWithputExtension = item.Target.Name.Replace(item.Target.Extension, "");
                                    switch (@lastItem.EventType)
                                    {
                                    case WatcherChangeTypes.Renamed:
                                        pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.RENAME);
                                        pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEINFO, item.Target);
                                        pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, item.Target.Name);                                                 // リネーム後のファイル名
                                        pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace);

                                        var results_renamed = workflow.Invoke(new Dictionary <string, object>
                                        {
                                            { "ParameterStack", pstack },
                                            //{"EventType", UpdateVirtualStatusEventType.RENAME},
                                            //{"Target", item.Target},
                                            //{"BeforeRenameName",item.OldRenameNamePath},
                                            //{"Workspace", workspace}
                                        });
                                        break;

                                    case WatcherChangeTypes.Changed:
                                    case WatcherChangeTypes.Created:
                                        var aclfileLocalPath = workspace.TrimWorekspacePath(item.Target.FullName, false);
                                        pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.UPDATE);
                                        pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEINFO, item.Target);
                                        pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, aclfileLocalPath);                                                 // 移動後のファイルパス
                                        pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace);
                                        var results_changed = workflow.Invoke(new Dictionary <string, object>
                                        {
                                            { "ParameterStack", pstack },
                                            //{"EventType", UpdateVirtualStatusEventType.UPDATE},
                                            //{"Target", item.Target},
                                            //{"Workspace", workspace}
                                        });
                                        break;

                                    case WatcherChangeTypes.Deleted:
                                        var aclfileLocalPath_Delete = workspace.TrimWorekspacePath(item.Target.FullName, false);
                                        pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.DELETE);
                                        pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEINFO, item.Target);
                                        pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, aclfileLocalPath_Delete);                                                 // 削除したファイル
                                        pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace);
                                        pstack.SetValue("WF_DeleteAclMappingFilePath", fileNameWithputExtension);

                                        var results_deleted = workflow.Invoke(new Dictionary <string, object>
                                        {
                                            { "ParameterStack", pstack },
                                            //{"EventType", UpdateVirtualStatusEventType.DELETE},
                                            //{"Target", item.Target},
                                            //{"DeleteAclHash", @pair.Key},
                                            //{"Workspace", workspace}
                                        });
                                        break;
                                    }
                                }
                                else
                                {
                                    if (File.Exists(item.Target.FullName))
                                    {
                                        switch (@lastItem.EventType)
                                        {
                                        case WatcherChangeTypes.Renamed:
                                        case WatcherChangeTypes.Changed:
                                        case WatcherChangeTypes.Created:
                                            var aclfileLocalPath_Update = workspace.TrimWorekspacePath(item.Target.FullName, false);
                                            pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.UPDATE);
                                            pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEINFO, item.Target);
                                            pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, aclfileLocalPath_Update);                                                     // 削除したファイル
                                            pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace);

                                            var results_changed = workflow.Invoke(new Dictionary <string, object>
                                            {
                                                { "ParameterStack", pstack },
                                                //{"EventType", UpdateVirtualStatusEventType.UPDATE},
                                                //{"Target", item.Target},
                                                //{"Workspace", workspace}
                                            });
                                            break;

                                        case WatcherChangeTypes.Deleted:
                                            var aclfileLocalPath_Delete = workspace.TrimWorekspacePath(item.Target.FullName, false);
                                            pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.DELETE);
                                            pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEINFO, item.Target);
                                            pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, aclfileLocalPath_Delete);                                                     // 削除したファイル
                                            pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace);

                                            var results_deleted = workflow.Invoke(new Dictionary <string, object>
                                            {
                                                { "ParameterStack", pstack },
                                                //{"EventType", UpdateVirtualStatusEventType.DELETE},
                                                //{"Target", item.Target},
                                                //{"Workspace", workspace}
                                            });
                                            break;
                                        }
                                    }
                                    else
                                    {
                                        LOG.InfoFormat("「{0}」は存在しない物理ファイルのため、処理をスキップします。", item.Target.FullName);
                                    }
                                }

                                dbc.SaveChanges();
                            }
                        }
                        catch (Exception expr)
                        {
                            LOG.ErrorFormat("タイマー処理時エラー = {0}", expr.Message);
                        }

                        // 処理を終了したファイルを、除外リストから削除します
                        string ignoreUpdateFile;
                        _IgnoreUpdateFiles.TryDequeue(out ignoreUpdateFile);
                        if (item.Target.Extension != ".aclgene")
                        {
                            _IgnoreUpdateFiles.TryDequeue(out ignoreUpdateFile);
                        }
                    }
                }

                // [CPU使用率に対するループ遅延を行う]
                var cpuPer = _CpuCounter.NextValue();
                if (cpuPer > 90.0)
                {
                    await Task.Delay(100);                     // 100msec待機
                }
                else if (cpuPer > 30.0)
                {
                    //await Task.Delay(10); // 10msec待機
                }
            }

            timer.Enabled = true;
        }