/// <summary>
        /// 즐겨찾기를 위한 질의 객체 (<see cref="DetachedCriteria"/>)를 빌드합니다.
        /// </summary>
        /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param>
        /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param>
        /// <param name="ownerCode">소유자 코드, null이면 검색조건에서 제외합니다.</param>
        /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param>
        /// <param name="registerCode">등록자 코드</param>
        /// <param name="registTimeRange">등록일 검색 범위</param>
        /// <returns></returns>
        public virtual QueryOver<Favorite, Favorite> BuildQueryOverOfFavorite(Product product,
                                                                              Company company,
                                                                              string ownerCode,
                                                                              ActorKinds? ownerKind = null,
                                                                              string registerCode = null,
                                                                              ITimePeriod registTimeRange = null)
        {
            if(IsDebugEnabled)
                log.Debug(@"즐겨찾기 조회를 위한 QueryOver를 생성합니다... " +
                          @"company={0}, product={1}, ownerCode={2}, ownerKind={3}, registerCode={4}, registTimeRange={5}",
                          company, product, ownerCode, ownerKind, registerCode, registTimeRange);

            var query = QueryOver.Of<Favorite>();

            if(product != null)
                query.AddWhere(f => f.ProductCode == product.Code);

            if(company != null)
                query.AddWhere(f => f.CompanyCode == company.Code);

            if(ownerCode.IsNotWhiteSpace())
                query.AddWhere(f => f.OwnerCode == ownerCode);

            if(ownerKind.HasValue)
                query.AddWhere(f => f.OwnerKind == ownerKind.Value);

            if(registerCode.IsNotWhiteSpace())
                query.AddWhere(f => f.RegisterCode == registerCode);

            if(registTimeRange != null && registTimeRange.IsAnytime == false)
                query.AddBetween(f => f.RegistDate, registTimeRange.StartAsNullable, registTimeRange.EndAsNullable);

            return query;
        }
 /// <summary>
 /// 권한관련 정보를 가진 <see cref="ResourceActor"/>정보를 조회하기 위한 Criteria를 빌드합니다.
 /// </summary>
 /// <param name="resource">리소스 종류</param>
 /// <param name="resourceInstanceId">대상 리소스 ID</param>
 /// <param name="companyCode">회사 코드</param>
 /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param>
 /// <param name="actorKind">접근자 종류</param>
 /// <param name="authorityKind">권한 종류</param>
 /// <returns>접근 권한을 나타내는 <see cref="ResourceActor"/>를 조회하기 위한 Criteria</returns>
 public DetachedCriteria BuildCriteriaOfResourceActor(Resource resource,
                                                      string resourceInstanceId,
                                                      string companyCode,
                                                      string actorCode,
                                                      ActorKinds? actorKind,
                                                      AuthorityKinds? authorityKind)
 {
     return BuildQueryOverOfResourceActor(resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind).DetachedCriteria;
 }
示例#3
0
 /// <summary>
 /// <see cref="File"/> 정보를 조회하기 위한 Criteria를 빌드합니다.
 /// </summary>
 /// <param name="fileMapping">파일 매핑 정보</param>
 /// <param name="resourceId">리소스 Id</param>
 /// <param name="resourceKind">리소스 종류</param>
 /// <param name="ownerCode">소유자 (부서|사원|그룹) 의 코드</param>
 /// <param name="ownerKind">소유자의 종류 (부서|사원|그룹 등)</param>
 /// <param name="category">분류</param>
 /// <param name="fileName">파일명</param>
 /// <param name="fileType">파일 종류</param>
 /// <param name="fileGroup">파일 그룹</param>
 /// <param name="fileFloor">파일 Floor</param>
 /// <returns></returns>
 public DetachedCriteria BuildCriteriaOfFile(FileMapping fileMapping, string resourceId, string resourceKind,
                                             string ownerCode, ActorKinds? ownerKind,
                                             string category, string fileName, string fileType,
                                             int? fileGroup, int? fileFloor)
 {
     return
         BuildQueryOverOfFile(fileMapping, resourceId, resourceKind,
                              ownerCode, ownerKind, category,
                              fileName, fileType, fileGroup, fileFloor)
             .DetachedCriteria;
 }
示例#4
0
        public GroupActorIdentity(string companyCode, string groupCode, string actorCode, ActorKinds actorKind = ActorKinds.User)
        {
            companyCode.ShouldNotBeWhiteSpace("companyCode");
            groupCode.ShouldNotBeWhiteSpace("groupCode");
            actorCode.ShouldNotBeWhiteSpace("actorCode");

            CompanyCode = companyCode;
            GroupCode = groupCode;
            ActorCode = actorCode;
            ActorKind = actorKind;
        }
示例#5
0
        /// <summary>
        /// <see cref="File"/> 정보를 조회하기 위한 QueryOver를 빌드합니다.
        /// </summary>
        /// <param name="fileMapping">파일 매핑 정보</param>
        /// <param name="resourceId">리소스 Id</param>
        /// <param name="resourceKind">리소스 종류</param>
        /// <param name="ownerCode">소유자 (부서|사원|그룹) 의 코드</param>
        /// <param name="ownerKind">소유자의 종류 (부서|사원|그룹 등)</param>
        /// <param name="category">분류</param>
        /// <param name="fileName">파일명</param>
        /// <param name="fileType">파일 종류</param>
        /// <param name="fileGroup">파일 그룹</param>
        /// <param name="fileFloor">파일 Floor</param>
        /// <returns></returns>
        public QueryOver<File, File> BuildQueryOverOfFile(FileMapping fileMapping, string resourceId, string resourceKind,
                                                          string ownerCode, ActorKinds? ownerKind,
                                                          string category, string fileName, string fileType,
                                                          int? fileGroup, int? fileFloor)
        {
            if(IsDebugEnabled)
                log.Debug(@"파일 정보를 조회하기 위한 QueryOver를 빌드합니다... " +
                          @"fileMapping={0}, resourceId={1}, resourceKind={2}, ownerCode={3}, ownerKind={4}, " +
                          @"category={5}, fileName={6}, fileType={7}, fileGroup={8}, fileFloor={9}",
                          fileMapping, resourceId, resourceKind, ownerCode, ownerKind,
                          category, fileName, fileType, fileGroup, fileFloor);

            var query = QueryOver.Of<File>();

            query.AddEqOrNull(f => f.FileMapping, fileMapping);

            if(resourceId.IsNotWhiteSpace())
                query.AddWhere(f => f.ResourceId == resourceId);

            if(resourceKind.IsNotWhiteSpace())
                query.AddWhere(f => f.ResourceKind == resourceKind);

            if(ownerCode.IsNotWhiteSpace())
                query.AddWhere(f => f.OwnerCode == ownerCode);

            if(ownerKind.HasValue)
                query.AddWhere(f => f.OwnerKind == ownerKind.Value);

            if(category.IsNotWhiteSpace())
                query.AddWhere(f => f.Category == category);

            if(fileName.IsNotWhiteSpace())
                query.AddWhere(f => f.FileName == fileName);

            if(fileType.IsNotWhiteSpace())
                query.AddWhere(f => f.FileType == fileType);

            if(fileGroup.HasValue)
                query.AddWhere(f => f.FileGroup == fileGroup);
            if(fileFloor.HasValue)
                query.AddWhere(f => f.FileFloor == fileFloor);

            return query;
        }
示例#6
0
        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="productCode">제품 코드</param>
        /// <param name="resourceCode">리소스 종류 코드</param>
        /// <param name="resourceInstanceId">리소스 인스턴스의 Id</param>
        /// <param name="companyCode">회사 코드</param>
        /// <param name="actorCode">접근자 Id (회사,부서,그룹,사용자)</param>
        /// <param name="actorKind">접근자 종류</param>
        public ResourceActorIdentity(string productCode,
                                     string resourceCode,
                                     string resourceInstanceId,
                                     string companyCode,
                                     string actorCode,
                                     ActorKinds actorKind = ActorKinds.User)
        {
            productCode.ShouldNotBeWhiteSpace("productCode");
            resourceCode.ShouldNotBeWhiteSpace("resourceCode");
            resourceInstanceId.ShouldNotBeWhiteSpace("resourceInstanceId");
            companyCode.ShouldNotBeWhiteSpace("companyCode");
            actorCode.ShouldNotBeWhiteSpace("actorCode");

            ProductCode = productCode;
            ResourceCode = resourceCode;
            ResourceInstanceId = resourceInstanceId;

            CompanyCode = companyCode;
            ActorCode = actorCode;
            ActorKind = actorKind;
        }
        /// <summary>
        /// 권한관련 정보를 가진 <see cref="ResourceActor"/>정보를 조회하기 위한 QueryOver 를 빌드합니다.
        /// </summary>
        /// <param name="resource">리소스 종류</param>
        /// <param name="resourceInstanceId">대상 리소스 ID</param>
        /// <param name="companyCode">회사 코드</param>
        /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param>
        /// <param name="actorKind">접근자 종류</param>
        /// <param name="authorityKind">권한 종류</param>
        /// <returns>접근 권한을 나타내는 <see cref="ResourceActor"/>를 조회하기 위한 QueryOver</returns>
        public QueryOver<ResourceActor, ResourceActor> BuildQueryOverOfResourceActor(Resource resource,
                                                                                     string resourceInstanceId,
                                                                                     string companyCode = null,
                                                                                     string actorCode = null,
                                                                                     ActorKinds? actorKind = null,
                                                                                     AuthorityKinds? authorityKind = null)
        {
            if(resource == null)
                return BuildQueryOverOfResourceActor(null, null, resourceInstanceId,
                                                     companyCode, actorCode, actorKind,
                                                     authorityKind);

            if(resource.ProductCode == null)
                return BuildQueryOverOfResourceActor(null, resource.Code, resourceInstanceId,
                                                     companyCode, actorCode, actorKind,
                                                     authorityKind);

            return BuildQueryOverOfResourceActor(resource.ProductCode, resource.Code, resourceInstanceId,
                                                 companyCode, actorCode, actorKind,
                                                 authorityKind);
        }
        /// <summary>
        /// 지정한 접근자의 리소스 접근 권한 정보를 모두 조회합니다.
        /// </summary>
        /// <param name="companyCode">접근자 소속 회사 코드</param>
        /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param>
        /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류</param>
        /// <param name="firstResult">첫번째 결과 셋의 인덱스 (0부터 시작. null이면 0으로 간주)</param>
        /// <param name="maxResults">결과 셋의 최대 레코드 수 (null 또는 0 이하의 값은 무시된다)</param>
        /// <param name="orders">정렬 순서</param>
        /// <returns></returns>
        public IList<ResourceActor> FindAllResourceActorByActor(string companyCode, string actorCode, ActorKinds? actorKind,
                                                                int? firstResult, int? maxResults, params INHOrder<ResourceActor>[] orders)
        {
            if(IsDebugEnabled)
                log.Debug(@"리소스 접근 권한 정보를 조회합니다... " +
                          @"companyCode={0}, actorCode={1}, actorKind={2}, firstResult={3}, maxResults={4}, orders={5}",
                          companyCode, actorCode, actorKind, firstResult, maxResults, orders.CollectionToString());

            var query = BuildQueryOverOfResourceActor(null, null, companyCode, actorCode, actorKind, null).AddOrders(orders);

            return Repository<ResourceActor>.FindAll(query,
                                                     firstResult.GetValueOrDefault(),
                                                     maxResults.GetValueOrDefault());
        }
 /// <summary>
 /// 지정한 접근자의 리소스 접근 권한 정보를 모두 조회합니다.
 /// </summary>
 /// <param name="companyCode">접근자 소속 회사 코드</param>
 /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param>
 /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류</param>
 /// <returns></returns>
 public IList<ResourceActor> FindAllResourceActorByActor(string companyCode, string actorCode, ActorKinds? actorKind)
 {
     return FindAllResourceActorByActor(companyCode, actorCode, actorKind, null, null);
 }
        /// <summary>
        /// 권한관련 정보를 가진 <see cref="ResourceActor"/>정보를 조회하기 위한 QueryOver 를 빌드합니다.
        /// </summary>
        /// <param name="productCode">제품 코드</param>
        /// <param name="resourceCode">리소스 종류 코드</param>
        /// <param name="resourceInstanceId">대상 리소스 ID</param>
        /// <param name="companyCode">회사 코드</param>
        /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param>
        /// <param name="actorKind">접근자 종류</param>
        /// <param name="authorityKind">권한 종류</param>
        /// <returns>접근 권한을 나타내는 <see cref="ResourceActor"/>를 조회하기 위한 QueryOver</returns>
        public QueryOver<ResourceActor, ResourceActor> BuildQueryOverOfResourceActor(string productCode,
                                                                                     string resourceCode,
                                                                                     string resourceInstanceId,
                                                                                     string companyCode,
                                                                                     string actorCode,
                                                                                     ActorKinds? actorKind,
                                                                                     AuthorityKinds? authorityKind)
        {
            if(IsDebugEnabled)
                log.Debug(@"권한관련 정보를 가진 ResourceActor 정보를 조회하기 위한 QueryOver를 빌드합니다..." + Environment.NewLine +
                          @"productCode={0}, resourceCode={1}, resourceInstanceId={2}, companyCode={3}, actorCode={4}, actorKind={5}, authorityKind={6}",
                          productCode, resourceCode, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind);

            var query = QueryOver.Of<ResourceActor>();

            if(productCode.IsNotWhiteSpace())
                query.AddWhere(ra => ra.Id.ProductCode == productCode);

            if(resourceCode.IsNotWhiteSpace())
                query.AddWhere(ra => ra.Id.ResourceCode == resourceCode);

            if(resourceInstanceId.IsNotWhiteSpace())
                query.AddWhere(ra => ra.Id.ResourceInstanceId == resourceInstanceId);

            if(companyCode.IsNotWhiteSpace())
                query.AddWhere(ra => ra.Id.CompanyCode == companyCode);

            if(actorCode.IsNotWhiteSpace())
                query.AddWhere(ra => ra.Id.ActorCode == actorCode);

            if(actorKind.HasValue)
                query.AddWhere(ra => ra.Id.ActorKind == actorKind.Value);

            if(authorityKind.HasValue)
                query.AddWhere(ra => ra.AuthorityKind == authorityKind.Value);

            return query;
        }
        /// <summary>
        /// 새로운 리소스에 대한 접근 권한 정보를 생성합니다.
        /// </summary>
        /// <param name="resource">접근 대상 리소스 종류</param>
        /// <param name="resourceInstanceId">접근 대상 리소스 Id</param>
        /// <param name="companyCode">회사 코드</param>
        /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param>
        /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류</param>
        /// <param name="authorityKind">접근 권한 종류</param>
        /// <returns>새로 생성한 리소스 접근 권한 정보</returns>
        public ResourceActor CreateResourceActor(Resource resource,
                                                 string resourceInstanceId,
                                                 string companyCode,
                                                 string actorCode,
                                                 ActorKinds actorKind,
                                                 AuthorityKinds authorityKind)
        {
            resource.ShouldNotBeNull("resource");
            resourceInstanceId.ShouldNotBeWhiteSpace("resourceInstanceId");
            companyCode.ShouldNotBeWhiteSpace("companyCode");

            if(IsDebugEnabled)
                log.Debug(@"새로운 리소스 접근 권한 정보를 생성합니다... " +
                          @"resource={0}, resourceInstanceId={1}, companyCode={2}, actorCode={3}, actorKind={4}, authorityKind={5}",
                          resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind);

            var resourceActor = new ResourceActor(resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind);
            return Repository<ResourceActor>.SaveOrUpdate(resourceActor);
        }
        /// <summary>
        /// 즐겨찾기 조회
        /// </summary>
        public Favorite FindOneFavorite(Product product, Company company, string ownerCode, ActorKinds ownerKind)
        {
            if(IsDebugEnabled)
                log.Debug(@"새로운 즐겨찾기(Favorite) 정보를 조회합니다... product={0}, company={1}, ownerCode={2}, ownerKind={3}",
                          product, company, ownerCode, ownerKind);

            return Repository<Favorite>.FindOne(BuildQueryOverOfFavorite(product, company, ownerCode, ownerKind));
        }
        /// <summary>
        /// 소유자의 즐겨찾기 정보를 Paging 처리해서 로드합니다.
        /// </summary>
        /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param>
        /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param>
        /// <param name="ownerCode">소유자 Id, null이면 검색조건에서 제외합니다.</param>
        /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param>
        /// <param name="pageIndex">페이지 인덱스 (0부터 시작)</param>
        /// <param name="pageSize">페이지 크기 (0보다 커야 한다. 보통 10)</param>
        /// <param name="orders">정렬 순서</param>
        /// <returns></returns>
        public IPagingList<Favorite> GetPageOfFavoriteByOwner(Product product, Company company, string ownerCode, ActorKinds ownerKind,
                                                              int pageIndex, int pageSize, params INHOrder<Favorite>[] orders)
        {
            if(IsDebugEnabled)
                log.Debug(@"소유자의 즐겨찾기 정보를 Paging 처리해서 로드합니다... " +
                          @"product={0}, company={1}, ownerCode={2}, ownerKind={3}, pageIndex={4}, pageSize={5}, orders={6}",
                          product, company, ownerCode, ownerKind, pageIndex, pageSize, orders.CollectionToString());

            var query = BuildQueryOverOfFavorite(product, company, ownerCode, ownerKind);

            return Repository<Favorite>.GetPage(pageIndex, pageSize, query, orders);
        }
 /// <summary>
 /// 그룹구성원 정보를 조회하기 위한 Criteria를 빌드합니다. (null 이거나 empty string인 경우에는 검색 조건에서 제외됩니다.)
 /// </summary>
 /// <param name="companyCode">회사코드</param>
 /// <param name="groupCode">그룹 코드</param>
 /// <param name="actorCode">소속원 코드</param>
 /// <param name="actorKind">소속원 종류 (회사|부서|사용자 등)</param>
 /// <returns></returns>
 public static DetachedCriteria BuildCriteriaOfGroupActor(string companyCode, string groupCode, string actorCode, ActorKinds? actorKind)
 {
     return BuildQueryOverOfGroupActor(companyCode, groupCode, actorCode, actorKind).DetachedCriteria;
 }
        /// <summary>
        /// 새로운 리소스에 대한 접근 권한 정보를 추가합니다. (NOTE: StatelessSession을 사용하여 추가하므로 성능이 빠릅니다.)
        /// </summary>
        /// <param name="resource">접근 대상 리소스 종류</param>
        /// <param name="resourceInstanceId">접근 대상 리소스 Id</param>
        /// <param name="companyCode">회사 코드</param>
        /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param>
        /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류</param>
        /// <param name="authorityKind">접근 권한 종류</param>
        /// <returns>새로 생성한 리소스 접근 권한 정보</returns>
        public void InsertResourceActor(Resource resource,
                                        string resourceInstanceId,
                                        string companyCode,
                                        string actorCode,
                                        ActorKinds actorKind,
                                        AuthorityKinds authorityKind)
        {
            resource.ShouldNotBeNull("resource");
            resourceInstanceId.ShouldNotBeWhiteSpace("resourceInstanceId");
            companyCode.ShouldNotBeWhiteSpace("companyCode");

            if(IsDebugEnabled)
                log.Debug(@"새로운 리소스 접근 권한 정보를 IStatelessSession을 사용하여 추가합니다... " +
                          @"resource={0}, resourceInstanceId={1}, companyCode={2}, actorCode={3}, actorKind={4}, authorityKind={5}",
                          resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind);

            var resourceActor = new ResourceActor(resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind);

            //Guard.Assert(SessionFactory.IsSQLite() == false, "StatelessSession는 SQLite 메모리 DB는 지원하지 않습니다.");
            resourceActor.InsertStateless();
        }
 /// <summary>
 /// <see cref="GroupActor"/>를 조회합니다.
 /// </summary>
 public GroupActor FindOneGroupActor(Group group, string actorCode, ActorKinds actorKind)
 {
     return Repository<GroupActor>.FindOne(BuildQueryOverOfGroupActor(group, actorCode, actorKind));
 }
        /// <summary>
        /// GroupActor를 조회합니다. 없으면 새로 생성해서 반환합니다.
        /// </summary>
        public GroupActor GetOrCreateGroupActor(Group group, string actorCode, ActorKinds actorKind)
        {
            group.ShouldNotBeNull("group");

            var groupActor = FindOneGroupActor(group, actorCode, actorKind);

            if(groupActor != null)
                return groupActor;

            lock(_syncLock)
                new GroupActor(group, actorCode, actorKind).InsertStateless();

            groupActor = FindOneGroupActor(group, actorCode, actorKind);
            groupActor.AssertExists("groupActor");

            return groupActor;
        }
        /// <summary>
        /// 지정한 구성원이 속한 그룹구성원 정보를 조회합니다.
        /// </summary>
        /// <param name="company">그룹이 소속된 회사</param>
        /// <param name="actorCode">그룹 소속원 코드 (Actor 코드 : 회사|부서|그룹|사용자 코드)</param>
        /// <param name="actorKind">그룹 소속원 종류 (사용자|부서| 타 그룹)</param>
        /// <param name="firstResult">첫번째 결과 셋의 인덱스 (0부터 시작. null이면 0으로 간주)</param>
        /// <param name="maxResults">결과 셋의 최대 레코드 수 (null 또는 0 이하의 값은 무시된다)</param>
        /// <param name="orders">정렬 순서</param>
        /// <returns></returns>
        public IList<GroupActor> FindAllGroupActorByActor(Company company, string actorCode, ActorKinds? actorKind,
                                                          int? firstResult, int? maxResults, params INHOrder<GroupActor>[] orders)
        {
            company.ShouldNotBeNull("company");

            if(log.IsDebugEnabled)
                log.Debug(@"지정한 구성원이 속한 그룹-구성원 정보를 조회합니다... " +
                          @"actorCode={0}, actorKind={1}, company={2}, firstResult={3}, maxResults={4}, orders={5}",
                          actorCode, actorKind, company, firstResult, maxResults, orders);

            var query = BuildQueryOverOfGroupActor(company.Code, null, actorCode, actorKind).AddOrders(orders);

            return Repository<GroupActor>.FindAll(query,
                                                  firstResult.GetValueOrDefault(),
                                                  maxResults.GetValueOrDefault());
        }
        /// <summary>
        /// 새로운 그룹을 만듭니다.
        /// </summary>
        /// <param name="group">그룹 정보</param>
        /// <param name="actorCode">그룹 소속원 코드 (Actor 코드 : 회사|부서|그룹|사용자 코드)</param>
        /// <param name="actorKind">그룹 소속원 종류 (사용자|부서| 타 그룹)</param>
        /// <returns></returns>
        public GroupActor CreateGroupActor(Group group, string actorCode, ActorKinds actorKind)
        {
            group.ShouldNotBeNull("group");
            actorCode.ShouldNotBeWhiteSpace("actorCode");

            if(IsDebugEnabled)
                log.Debug(@"새로운 그룹-구성원 정보를 생성합니다... group={0}, actorCode={1}, actorKind={2}", group, actorCode, actorKind);

            return Repository<GroupActor>.SaveOrUpdate(new GroupActor(group, actorCode, actorKind));
        }
        /// <summary>
        /// 즐겨찾기 생성
        /// </summary>
        /// <param name="product">제품</param>
        /// <param name="company">소유자 회사</param>
        /// <param name="ownerCode">소유자 코드</param>
        /// <param name="ownerKind">소유자 종류</param>
        /// <param name="content">즐겨찾기 내용</param>
        /// <returns></returns>
        public Favorite CreateFavorite(Product product, Company company, string ownerCode, ActorKinds ownerKind, string content)
        {
            product.ShouldNotBeNull("product");
            company.ShouldNotBeNull("company");
            ownerCode.ShouldNotBeWhiteSpace("owernCode");

            if(IsDebugEnabled)
                log.Debug(@"새로운 즐겨찾기 정보를 생성합니다... product={0}, company={1}, ownerCode={2}, ownerKind={3}, content={4}",
                          product, company, ownerCode, ownerKind, content);

            var favorite = new Favorite(product, company, ownerCode, ownerKind, content);
            return Repository<Favorite>.SaveOrUpdate(favorite);
        }
        /// <summary>
        /// 리소스 접근 권한 정보(ResourceActor) 를 Paging 처리해서 로드합니다...
        /// </summary>
        /// <param name="companyCode">접근자 소속 회사 코드 (not null)</param>
        /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드) (null 이면 검색 조건에서 제외)</param>
        /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류 (null이면 검색 조건에서 제외)</param>
        /// <param name="pageIndex">페이지 인덱스 (0부터 시작)</param>
        /// <param name="pageSize">페이지 크기 (0보다 커야 한다. 보통 10)</param>
        /// <param name="orders">정렬 순서</param>
        /// <returns></returns>
        public IPagingList<ResourceActor> GetPageOfResourceActorByActor(string companyCode,
                                                                        string actorCode,
                                                                        ActorKinds? actorKind,
                                                                        int pageIndex,
                                                                        int pageSize,
                                                                        params INHOrder<ResourceActor>[] orders)
        {
            if(IsDebugEnabled)
                log.Debug(@"리소스 접근 권한 정보(ResourceActor) 를 Paging 처리해서 로드합니다... " +
                          @"companyCode={0}, actorCode={1}, actorKind={2}, pageIndex={3}, pageSize={4}, orders={5}",
                          companyCode, actorCode, actorKind, pageIndex, pageSize, orders.CollectionToString());

            var query = BuildQueryOverOfResourceActor(null, null, companyCode, actorCode, actorKind, null);

            return Repository<ResourceActor>.GetPage(pageIndex, pageSize, query, orders);
        }
示例#22
0
        /// <summary>
        /// 소유자로 파일을 찾습니다.
        /// </summary>
        /// <param name="ownerCode">소유자 (부서|사원|그룹) 의 코드</param>
        /// <param name="ownerKind">소유자의 종류 (부서|사원|그룹 등)</param>
        /// <returns></returns>
        public IList<File> FindAllFileByOwner(string ownerCode, ActorKinds? ownerKind)
        {
            if(IsDebugEnabled)
                log.Debug(@"Owner에 의한 File 정보를 조회합니다. ownerCode={0}, ownerKind={1}", ownerCode, ownerKind);

            var query = BuildQueryOverOfFile(null, null, null, ownerCode, ownerKind, null, null, null, null, null);

            return Repository<File>.FindAll(query);
        }
        /// <summary>
        /// 소유자의 즐겨찾기 정보를 조회합니다.
        /// </summary>
        /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param>
        /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param>
        /// <param name="ownerCode">소유자 Id, null이면 검색조건에서 제외합니다.</param>
        /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param>
        /// <param name="firstResult">첫번째 레코드 인덱스</param>
        /// <param name="maxResults">최대 레코드 수</param>
        /// <param name="orders">정렬 방식</param>
        /// <returns></returns>
        public IList<Favorite> FindAllFavoriteByOwner(Product product, Company company, string ownerCode, ActorKinds ownerKind,
                                                      int? firstResult, int? maxResults, params INHOrder<Favorite>[] orders)
        {
            if(IsDebugEnabled)
                log.Debug(@"소유자의 모든 즐겨찾기 정보를 조회합니다... " +
                          @"ownerCode={0}, ownerKind={1}, company={2}, product={3}, firstResult={4}, maxResults={5}, orders={6}",
                          ownerCode, ownerKind, company, product, firstResult, maxResults, orders.CollectionToString());

            var query = BuildQueryOverOfFavorite(product, company, ownerCode, ownerKind).AddOrders(orders);

            return Repository<Favorite>.FindAll(query,
                                                firstResult.GetValueOrDefault(),
                                                maxResults.GetValueOrDefault());
        }
 /// <summary>
 /// 소유자의 즐겨찾기 정보를 조회합니다.
 /// </summary>
 /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param>
 /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param>
 /// <param name="ownerCode">소유자 Id, null이면 검색조건에서 제외합니다.</param>
 /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param>
 /// <returns></returns>
 public IList<Favorite> FindAllFavoriteByOwner(Product product, Company company, string ownerCode, ActorKinds ownerKind)
 {
     return FindAllFavoriteByOwner(product, company, ownerCode, ownerKind, null, null);
 }
 /// <summary>
 /// 그룹구성원 정보를 조회하기 위한 Criteria를 빌드합니다. (null 이거나 empty string인 경우에는 검색 조건에서 제외됩니다.)
 /// </summary>
 /// <param name="group">그룹</param>
 /// <param name="actorCode">소속원 코드</param>
 /// <param name="actorKind">소속원 종류 (회사|부서|사용자 등)</param>
 /// <returns></returns>
 public static DetachedCriteria BuildCriteriaOfGroupActor(Group group, string actorCode, ActorKinds? actorKind)
 {
     return BuildQueryOverOfGroupActor(group, actorCode, actorKind).DetachedCriteria;
 }
 /// <summary>
 /// 즐겨찾기를 위한 질의 객체 (<see cref="DetachedCriteria"/>)를 빌드합니다.
 /// </summary>
 /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param>
 /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param>
 /// <param name="ownerCode">소유자 코드, null이면 검색조건에서 제외합니다.</param>
 /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param>
 /// <param name="registerCode">등록자 코드</param>
 /// <param name="registTimeRange">등록일 검색 범위</param>
 /// <returns></returns>
 public virtual DetachedCriteria BuildCriteriaOfFavorite(Product product, Company company,
                                                         string ownerCode, ActorKinds? ownerKind, string registerCode, ITimePeriod registTimeRange)
 {
     return BuildQueryOverOfFavorite(product, company, ownerCode, ownerKind, registerCode, registTimeRange).DetachedCriteria;
 }
示例#27
0
        /// <summary>
        /// 지정한 소유자의 모든 File을 Paging 처리해서 로드합니다.
        /// </summary>
        /// <param name="ownerCode">소유자 (부서|사원|그룹) 의 코드</param>
        /// <param name="ownerKind">소유자의 종류 (부서|사원|그룹 등)</param>
        /// <param name="pageIndex">페이지 인덱스 (0부터 시작)</param>
        /// <param name="pageSize">페이지 크기 (0보다 커야 한다. 보통 10)</param>
        /// <param name="orders">정렬 순서</param>
        /// <returns></returns>
        public IPagingList<File> GetPageOfFileByOwner(string ownerCode, ActorKinds? ownerKind, int pageIndex, int pageSize, params INHOrder<File>[] orders)
        {
            ownerCode.ShouldNotBeWhiteSpace("ownerCode");

            if(IsDebugEnabled)
                log.Debug(@"지정한 소유자의 모든 File을 Paging 처리해서 로드합니다... ownerCode={0}, ownerKind={1}, pageIndex={2}, pageSize={3}, orders={4}",
                          ownerCode, ownerKind, pageIndex, pageSize, orders);

            var query = BuildQueryOverOfFile(null, null, null, ownerCode, ownerKind, null, null, null, null, null);

            return Repository<File>.GetPage(pageIndex, pageSize, query, orders);
        }
        /// <summary>
        /// 그룹-구성원(GroupActor) 정보를 조회하기 위한 QueryOver를 빌드합니다
        /// </summary>
        /// <param name="companyCode">회사코드</param>
        /// <param name="groupCode">그룹 코드</param>
        /// <param name="actorCode">소속원 코드</param>
        /// <param name="actorKind">소속원 종류 (회사|부서|사용자 등)</param>		
        public static QueryOver<GroupActor, GroupActor> BuildQueryOverOfGroupActor(string companyCode, string groupCode, string actorCode, ActorKinds? actorKind)
        {
            if(IsDebugEnabled)
                log.Debug(@"그룹-구성원(GroupActor) 정보를 조회하기 위한 QueryOver를 빌드합니다... companyCode={0}, groupCode={1}, actorCode={2}, actorKind={3}",
                          companyCode, groupCode, actorCode, actorKind);

            var query = QueryOver.Of<GroupActor>();

            if(companyCode.IsNotWhiteSpace())
                query.AddWhere(ga => ga.Id.CompanyCode == companyCode);

            if(groupCode.IsNotWhiteSpace())
                query.AddWhere(ga => ga.Id.GroupCode == groupCode);

            if(actorCode.IsNotWhiteSpace())
                query.AddWhere(ga => ga.Id.ActorCode == actorCode);

            if(actorKind.HasValue)
                query.AddWhere(ga => ga.Id.ActorKind == actorKind);

            return query;
        }
        /// <summary>
        /// 지정된 그룹에 지정한 actor가 구성원으로 등록되어 있는지 검사한다.
        ///	NOTE: 현재로서는 직접적인 매핑정보만을 수집한다. 즉 그룹에 부서가 구성원이고, 그 부서의 구성원으로서의 직원은 검출하지 못한다.
        /// </summary>
        /// <param name="group">그룹 정보</param>
        /// <param name="actorCode">그룹 소속원 코드 (Actor 코드 : 회사|부서|그룹|사용자 코드)</param>
        /// <param name="actorKind">그룹 소속원 종류 (사용자|부서| 타 그룹)</param>
        /// <returns></returns>
        public bool IsGroupMember(Group group, string actorCode, ActorKinds actorKind)
        {
            group.ShouldNotBeNull("group");

            if(IsDebugEnabled)
                log.Debug(@"그룹에 소속된 구성원인지 검사합니다... groupCode={0}, actorCode={1}, actorKind={2}", group.Code, actorCode, actorKind);

            var isMember = Repository<GroupActor>.Exists(BuildQueryOverOfGroupActor(group, actorCode, actorKind));

            if(IsDebugEnabled)
                log.Debug(@"그룹에 소속된 구성원인가요? IsGroupMember=" + isMember);

            return isMember;
        }
        /// <summary>
        /// 즐겨찾기를 조회합니다. DB에 존재하지 않으면 새로 생성합니다.
        /// </summary>
        /// <param name="product"></param>
        /// <param name="company"></param>
        /// <param name="ownerCode"></param>
        /// <param name="ownerKind"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public Favorite GetOrCreateFavorite(Product product, Company company, string ownerCode, ActorKinds ownerKind, string content)
        {
            var favorite = FindOneFavorite(product, company, ownerCode, ownerKind);

            if(favorite != null)
                return favorite;

            lock(_syncLock)
            {
                using(UnitOfWork.Start(UnitOfWorkNestingOptions.CreateNewOrNestUnitOfWork))
                {
                    CreateFavorite(product, company, ownerCode, ownerKind, content);
                    UnitOfWork.Current.TransactionalFlush();
                }
            }

            favorite = FindOneFavorite(product, company, ownerCode, ownerKind);
            favorite.AssertExists("favorite");

            if(log.IsInfoEnabled)
                log.Info(@"새로운 즐겨찾기 정보를 생성했습니다. New Favorite = " + favorite);

            return favorite;
        }