当前位置: 首页 > news >正文

Windchill开发-WTContainer相关API整理

Windchill开发-WTContainer相关API整理

  • 概述
  • 各容器对象相关方法
    • 站点容器
    • 组织容器
    • 产品容器/存储库容器
      • 上下文团队
        • 角色
      • 文件夹
  • 方法汇总

概述

Windchill 的环境由一组容器组成,容器分为三级:第一级为站点容器,第二级为组织容器,第三极为产品容器和存储库容器。产品容器/存储库容器又由上下文团队、文件夹、业务层级对象等构成,其中上下文团队包含角色、组、用户等,业务层级对象包含部件、文档、CAD文档、升级请求等,文件夹分为默认文件夹和子文件夹。本文主要记录了各容器对象获取、上下文团队操作等方法。

各容器对象相关方法

站点容器

    /**
     * 获取站点
     *
     * @return 站点
     * @throws WTException
     */
    public static ExchangeContainer getExchangeContainer() throws WTException {
        return WTContainerHelper.service.getExchangeContainer();
    }

组织容器

    /**
     * 查询组织(按创建时间排序)
     *
     * @return 组织结果集
     * @throws WTException
     */
    public static QueryResult queryWTOrganizations() throws WTException {
        QuerySpec querySpec = new QuerySpec(WTOrganization.class);
        ClassAttribute name = new ClassAttribute(WTOrganization.class, WTOrganization.NAME);
        SearchCondition searchCondition = new SearchCondition(name, SearchCondition.NOT_NULL);
        querySpec.appendWhere(searchCondition, new int[1]);
        ClassAttribute createTime = new ClassAttribute(WTOrganization.class, WTOrganization.CREATE_TIMESTAMP);
        OrderBy orderBy = new OrderBy(createTime, false);
        querySpec.appendOrderBy(orderBy, new int[1]);
        QueryResult queryResult = PersistenceHelper.manager.find(querySpec);
        if (queryResult == null) {
            queryResult = new QueryResult();
        }
        return queryResult;
    }

    /**
     * 获取默认组织
     *
     * @return 组织
     * @throws WTException
     */
    public static WTOrganization getDefaultWTOrganization() throws WTException {
        WTOrganization organization = null;
        QueryResult queryResult = queryWTOrganizations();
        if (queryResult.hasMoreElements()) {
            organization = (WTOrganization) queryResult.nextElement();
        }
        return organization;
    }

    /**
     * 获取组织
     *
     * @param orgName 组织名
     * @return 组织
     * @throws WTException
     */
    public static WTOrganization getWTOrganization(String orgName) throws WTException {
        WTOrganization organization = null;
        if (StringUtils.hasText(orgName)) {
            QuerySpec querySpec = new QuerySpec(WTOrganization.class);
            SearchCondition searchCondition = new SearchCondition(WTOrganization.class, WTOrganization.NAME,
                    SearchCondition.EQUAL, orgName);
            querySpec.appendWhere(searchCondition, new int[1]);
            QueryResult queryResult = PersistenceHelper.manager.find(querySpec);
            if (queryResult != null && queryResult.hasMoreElements()) {
                organization = (WTOrganization) queryResult.nextElement();
            }
        }
        return organization;
    }

    /**
     * 获取组织所在的组织容器
     *
     * @param organization 组织
     * @return 组织容器
     * @throws WTException
     */
    public static OrgContainer getOrgContainer(WTOrganization organization) throws WTException {
        OrgContainer orgContainer = null;
        if (organization != null) {
            orgContainer = WTContainerHelper.service.getOrgContainer(organization);
        }
        return orgContainer;
    }

    /**
     * 获取容器对象所在的组织容器
     *
     * @param contained 容器对象(部件、文档等对象)
     * @return 组织容器
     * @throws WTException
     */
    public static OrgContainer getOrgContainer(WTContained contained) throws WTException {
        OrgContainer orgContainer = null;
        if (contained != null) {
            orgContainer = WTContainerHelper.service.getOrgContainer(contained);
        }
        return orgContainer;
    }

    /**
     * 获取用户所在的组织容器
     *
     * @param user 用户
     * @return 组织容器
     * @throws WTException
     */
    public static OrgContainer getOrgContainer(WTUser user) throws WTException {
        OrgContainer orgContainer = null;
        if (user != null) {
            orgContainer = WTContainerHelper.service.getOrgContainer(user);
        }
        return orgContainer;
    }

说明:容器对象包含组、部件、文档、CAD文档等

产品容器/存储库容器

    /**
     * 查询容器(产品/存储库)
     *
     * @param containerName 容器名
     * @return 容器(产品/存储库)结果集
     * @throws Exception
     */
    public static QueryResult queryWTContainer(String containerName) throws Exception {
        QueryResult queryResult = null;
        if (StringUtils.hasText(containerName)) {
            QuerySpec querySpec = new QuerySpec(WTContainer.class);
            SearchCondition searchCondition = new SearchCondition(WTContainer.class, WTContainer.NAME,
                    SearchCondition.EQUAL, containerName);
            querySpec.appendWhere(searchCondition, new int[1]);
            querySpec.setAdvancedQueryEnabled(true);
            querySpec.setDescendantQuery(true);
            queryResult = PersistenceHelper.manager.find(querySpec);
        }
        if (queryResult == null) {
            queryResult = new QueryResult();
        }
        return queryResult;
    }

    /**
     * 获取容器(产品/存储库)(默认容器名称唯一)
     *
     * @param containerName 容器名
     * @return 容器(产品/存储库)
     * @throws Exception
     */
    public static WTContainer getWTContainer(String containerName) throws Exception {
        WTContainer container = null;
        QueryResult queryResult = queryWTContainer(containerName);
        if (queryResult.hasMoreElements()) {
            container = (WTContainer) queryResult.nextElement();
        }
        return container;
    }

    /**
     * 获取产品
     *
     * @param productName 产品名
     * @return 产品
     * @throws WTException
     */
    public static PDMLinkProduct getPDMLinkProduct(String productName) throws WTException {
        PDMLinkProduct product = null;
        if (StringUtils.hasText(productName)) {
            QuerySpec querySpec = new QuerySpec(PDMLinkProduct.class);
            SearchCondition searchCondition = new SearchCondition(PDMLinkProduct.class, PDMLinkProduct.NAME,
                    SearchCondition.EQUAL, productName);
            querySpec.appendWhere(searchCondition, new int[1]);
            QueryResult queryResult = PersistenceHelper.manager.find(querySpec);
            if (queryResult != null && queryResult.hasMoreElements()) {
                product = (PDMLinkProduct) queryResult.nextElement();
            }
        }
        return product;
    }

    /**
     * 获取存储库
     *
     * @param libraryName 存储库名
     * @return 存储库
     * @throws WTException
     */
    public static WTLibrary getWTLibrary(String libraryName) throws WTException {
        WTLibrary library = null;
        if (StringUtils.hasText(libraryName)) {
            QuerySpec querySpec = new QuerySpec(WTLibrary.class);
            SearchCondition searchCondition = new SearchCondition(WTLibrary.class, WTLibrary.NAME,
                    SearchCondition.EQUAL, libraryName);
            querySpec.appendWhere(searchCondition, new int[1]);
            QueryResult queryResult = PersistenceHelper.manager.find(querySpec);
            if (queryResult != null && queryResult.hasMoreElements()) {
                library = (WTLibrary) queryResult.nextElement();
            }
        }
        return library;
    }
    
    /**
     * 查询容器中的成品部件(最新且非工作副本)
     *
     * @param container 容器
     * @return 成品部件结果集
     * @throws WTException
     */
    public static QueryResult queryEndItems(WTContainer container) throws WTException {
        QuerySpec querySpec = new QuerySpec(WTPart.class);
        querySpec.appendWhere(WTContainerHelper.getWhereContainerIn(
                new WTContainerRef[]{WTContainerRef.newWTContainerRef(container)}), new int[1]);
        querySpec.appendAnd();
        querySpec.appendWhere(new SearchCondition(WTPart.class, WTPart.END_ITEM, SearchCondition.IS_TRUE), new int[1]);
        querySpec.appendAnd();
        querySpec.appendNot();
        querySpec.appendWhere(WorkInProgressHelper.getSearchCondition_CO(WTPart.class), new int[1]);
        querySpec.appendAnd();
        querySpec.appendWhere(VersionControlHelper.getSearchCondition(WTPart.class, true), new int[1]);
        querySpec.appendOrderBy(new OrderBy(new ClassAttribute(WTPart.class, WTPart.NUMBER), false), new int[1]);
        LatestConfigSpec latestConfigSpec = new LatestConfigSpec();
        QueryResult queryResult = ConfigHelper.service.queryIterations(querySpec, latestConfigSpec);
        return queryResult;
    }

    /**
     * 移动容器对象到目标容器(默认文件夹)
     *
     * @param contained 容器对象(部件、文档等对象)
     * @param container 目标容器
     * @return 容器对象集合
     * @throws WTException
     */
    public static WTCollection move(WTContained contained, WTContainer container) throws WTException {
        WTContainerRef containerRef = WTContainerRef.newWTContainerRef(container);
        Folder folder = FolderHelper.service.getFolder("/Default", containerRef);
        return move(contained, folder);
    }

    /**
     * 查询用户时间段创建的容器
     *
     * @param user  用户
     * @param start 开始时间(可为null)
     * @param end   结束时间(可为null)
     * @return 查询结果集
     * @throws WTException
     */
    public QueryResult queryCreatedContainers(WTUser user, Timestamp start, Timestamp end) throws WTException {
        QuerySpec querySpec = new QuerySpec(WTContainer.class);
        long userId = user.getPersistInfo().getObjectIdentifier().getId();
        SearchCondition searchCondition = new SearchCondition(WTContainer.class,
                WTContainer.CREATOR_REFERENCE.concat(".key.id"), SearchCondition.EQUAL, userId);
        querySpec.appendWhere(searchCondition, new int[1]);
        if (start != null) {
            querySpec.appendAnd();
            searchCondition = new SearchCondition(WTContainer.class,
                    WTContainer.PERSIST_INFO.concat(".createStamp"), SearchCondition.GREATER_THAN_OR_EQUAL, start);
            querySpec.appendWhere(searchCondition, new int[1]);
        }
        if (end != null) {
            querySpec.appendAnd();
            searchCondition = new SearchCondition(WTContainer.class,
                    WTContainer.PERSIST_INFO.concat(".createStamp"), SearchCondition.LESS_THAN_OR_EQUAL, end);
            querySpec.appendWhere(searchCondition, new int[1]);
        }
        QueryResult queryResult = PersistenceHelper.manager.find(querySpec);
        return queryResult;
    }

上下文团队

    /**
     * 获取容器的上下文团队
     *
     * @param managed 容器团队管理(常指容器本身)
     * @return 上下文团队
     * @throws WTException
     */
    public static ContainerTeam getContainerTeam(ContainerTeamManaged managed) throws WTException {
        ContainerTeam containerTeam = null;
        if (managed != null) {
            containerTeam = ContainerTeamHelper.service.getContainerTeam(managed);
        }
        return containerTeam;
    }

    /**
     * 获取容器的角色集合
     *
     * @param managed 容器团队管理(常指容器本身)
     * @return 角色集合
     * @throws WTException
     */
    public static Set<Role> getRoles(ContainerTeamManaged managed) throws WTException {
        Set<Role> roles = new HashSet<>();
        ContainerTeam team = getContainerTeam(managed);
        Vector teamRoles = team.getRoles();
        roles.addAll(teamRoles);
        if (hasSharedTeam(managed)) {
            ContainerTeamReference reference = managed.getSharedTeamReference();
            if (reference != null) {
                ContainerTeam shared = (ContainerTeam) reference.getObject();
                if (shared != null) {
                    Vector sharedRoles = shared.getRoles();
                    roles.addAll(sharedRoles);
                }
            }
        }
        return roles;
    }

    /**
     * 判断容器是否存在共享团队
     *
     * @param managed 容器团队管理(常指容器本身)
     * @return true代表存在
     * @throws WTException
     */
    public static boolean hasSharedTeam(ContainerTeamManaged managed) {
        boolean flag = false;
        ContainerTeamManagedInfo info = managed.getContainerTeamManagedInfo();
        ContainerTeamReference sharedTeamId = info.getSharedTeamId();
        if (sharedTeamId != null) {
            QueryKey queryKey = sharedTeamId.getKey();
            if (queryKey != null) {
                String classname = queryKey.getClassname();
                if (classname != null) {
                    flag = true;
                }
            }
        }
        return flag;
    }

    /**
     * 获取上下文团队角色下的用户
     *
     * @param managed  容器团队管理(常指容器本身)
     * @param roleName 角色内部名
     * @return 用户集合
     * @throws WTException
     */
    public static WTSet getRoleUsers(ContainerTeamManaged managed, String roleName) throws WTException {
        boolean enforced = SessionServerHelper.manager.setAccessEnforced(false);
        try {
            WTHashSet set = new WTHashSet();
            WTGroup group = ContainerTeamHelper.service.findContainerTeamGroup(managed, ContainerTeamHelper.ROLE_GROUPS, roleName);
            if (group != null) {
                Enumeration members = group.members();
                while (members.hasMoreElements()) {
                    Object nextElement = members.nextElement();
                    if (nextElement != null && nextElement instanceof WTUser) {
                        set.add(nextElement);
                    }
                }
            }
            return set;
        } finally {
            SessionServerHelper.manager.setAccessEnforced(enforced);
        }
    }

    /**
     * 获取上下文团队角色下的用户
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return 用户集合
     * @throws WTException
     */
    public static WTSet getRoleUsers(ContainerTeamManaged managed, Role role) throws WTException {
        WTSet set = new WTHashSet();
        if (role != null) {
            set = getRoleUsers(managed, role.toString());
        }
        return set;
    }
    
    /**
     * 获取上下文团队角色下的参与者
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return 参与者集合
     * @throws WTException
     */
    public static WTSet getRolePrincipals(ContainerTeamManaged managed, Role role) throws WTException {
        ContainerTeam team = getContainerTeam(managed);
        return getRolePrincipals(team, role);
    }
    
    /**
     * 判断参与者是否为团队成员
     *
     * @param container 容器
     * @param principal 参与者(常指用户/组)
     * @return true代表是团队成员
     * @throws WTException
     */
    public static boolean isTeamMember(WTContainer container, WTPrincipal principal) throws WTException {
        boolean flag = false;
        if (container != null && principal != null) {
            ContainerTeamManaged managed = (ContainerTeamManaged) container;
            WTGroup group = ContainerTeamHelper.service.findContainerTeamGroup(managed,
                    ContainerTeamHelper.TEAM_MEMBERS, ContainerTeamHelper.TEAM_MEMBERS);
            if (group != null) {
                flag = isGroupMember(group, principal);
            }
        }
        return flag;
    }
    
    /**
     * 添加上下文团队角色
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged addRole(ContainerTeamManaged managed, Role role) throws WTException {
        Set<Role> roles = new HashSet<>();
        if (role != null) {
            roles.add(role);
        }
        return addRoles(managed, roles);
    }

    /**
     * 添加上下文团队角色
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param roles   角色集合
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged addRoles(ContainerTeamManaged managed, Set<Role> roles) throws WTException {
        if (managed != null && roles != null && !roles.isEmpty()) {
            ContainerTeam team = getContainerTeam(managed);
            for (Role role : roles) {
                if (role != null) {
                    ContainerTeamHelper.validateRoleName(role.toString());
                    ContainerTeamHelper.service.addMember(team, role, null);
                }
            }
            managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        }
        return managed;
    }

    /**
     * 移除上下文团队角色
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged removeRole(ContainerTeamManaged managed, Role role) throws WTException {
        if (managed != null && role != null) {
            managed = clearRoleMember(managed, role);
            ContainerTeam team = getContainerTeam(managed);
            ContainerTeamHelper.service.removeRole(team, role);
            managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        }
        return managed;
    }

    /**
     * 移除上下文团队角色
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param roles   角色集合
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged removeRoles(ContainerTeamManaged managed, Set<Role> roles) throws WTException {
        if (managed != null && roles != null && !roles.isEmpty()) {
            for (Role role : roles) {
                managed = removeRole(managed, role);
            }
            managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        }
        return managed;
    }

    /**
     * 复制参与者(将源上下文团队角色的参与者复制到目标上下文团队角色)
     *
     * @param sourceManaged 源容器团队管理(常指容器本身)
     * @param sourceRole    源角色
     * @param targetManaged 目标容器团队管理(常指容器本身)
     * @param targetRole    目标角色
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged copyPrincipals(ContainerTeamManaged sourceManaged, Role sourceRole,
                                                      ContainerTeamManaged targetManaged, Role targetRole) throws WTException {
        if (sourceManaged != null && sourceRole != null && targetManaged != null && targetRole != null) {
            if (!PersistenceHelper.isEquivalent(sourceManaged, targetManaged) || !sourceRole.equals(targetRole)) {
                WTSet sourcePrincipals = getRolePrincipals(sourceManaged, sourceRole);
                Set<WTPrincipal> targetPrincipals = new HashSet<>();
                targetPrincipals.addAll(sourcePrincipals.persistableCollection());
                targetManaged = addRoleMembers(targetManaged, targetRole, targetPrincipals);
            }
        }
        return targetManaged;
    }
角色
    /**
     * 获取角色参与者
     *
     * @param holder 角色载体(常指上下文团队)
     * @param role   角色
     * @return 参与者集合
     * @throws WTException
     */
    public static WTSet getRolePrincipals(WTRoleHolder2 holder, Role role) throws WTException {
        WTHashSet set = new WTHashSet();
        if (holder != null && role != null) {
            Enumeration<WTPrincipalReference> enumeration = holder.getPrincipalTarget(role);
            while (enumeration.hasMoreElements()) {
                WTPrincipalReference reference = enumeration.nextElement();
                if (reference != null && !reference.isDisabled()) {
                    WTPrincipal principal = reference.getPrincipal();
                    set.add(principal);
                }
            }
        }
        return set;
    }
    
    /**
     * 获取空角色集合
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param roles   目标角色集合
     * @return 空角色集合
     * @throws WTException
     */
    public static Set<Role> getEmptyRoles(ContainerTeamManaged managed, Collection<Role> roles) throws WTException {
        Set<Role> emptyRoles = new HashSet<>();
        if (managed != null && roles != null && !roles.isEmpty()) {
            ContainerTeam team = getContainerTeam(managed);
            for (Role role : roles) {
                boolean hasWTUsers = hasWTUsers(team, role);
                if (!hasWTUsers) {
                    emptyRoles.add(role);
                }
            }
        }
        return emptyRoles;
    }
    
    /**
     * 判断角色是否存在用户
     *
     * @param holder 角色载体(常指上下文团队)
     * @param role   角色
     * @return true代表存在
     * @throws WTException
     */
    public static boolean hasWTUsers(WTRoleHolder2 holder, Role role) throws WTException {
        boolean flag = false;
        WTSet users = getRolePrincipals(holder, role);
        if (!users.isEmpty()) {
            flag = true;
        }
        return flag;
    }
    
    /**
     * 判断角色是否为空
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return true代表为空角色
     * @throws WTException
     */
    public static boolean isEmptyRole(ContainerTeamManaged managed, Role role) throws WTException {
        boolean flag = true;
        Collection<Role> roles = new ArrayList<>();
        if (role != null) {
            roles.add(role);
        }
        Set<Role> emptyRoles = getEmptyRoles(managed, roles);
        if (emptyRoles.isEmpty()) {
            flag = false;
        }
        return flag;
    }
    
    /**
     * 判断参与者是否为角色参与者
     *
     * @param managed   容器团队管理(常指容器本身)
     * @param role      角色
     * @param principal 参与者(常指用户/组)
     * @return true代表是角色参与者
     * @throws WTException
     */
    public static boolean isRolePrincipal(ContainerTeamManaged managed, Role role, WTPrincipal principal) throws WTException {
        ContainerTeam team = getContainerTeam(managed);
        return isRolePrincipal(team, role, principal);
    }
    
    /**
     * 判断参与者是否为角色的参与者
     *
     * @param holder    角色载体(常指上下文团队)
     * @param role      角色
     * @param principal 参与者(常指用户/组)
     * @return true代表是角色参与者
     * @throws WTException
     */
    public static boolean isRolePrincipal(WTRoleHolder2 holder, Role role, WTPrincipal principal) throws WTException {
        boolean flag = false;
        if (principal != null) {
            if (principal instanceof WTUser) {
                WTUser user = (WTUser) principal;
                flag = isRolePrincipal(holder, role, user);
            } else if (principal instanceof WTGroup) {
                WTGroup group = (WTGroup) principal;
                flag = isRolePrincipal(holder, role, group);
            }
        }
        return flag;
    }

    /**
     * 判断用户是否为角色的参与者
     *
     * @param holder 角色载体(常指上下文团队)
     * @param role   角色
     * @param user   用户
     * @return true代表是角色参与者
     * @throws WTException
     */
    public static boolean isRolePrincipal(WTRoleHolder2 holder, Role role, WTUser user) throws WTException {
        boolean flag = false;
        if (holder != null && role != null && user != null) {
            WTSet users = getRolePrincipals(holder, role);
            if (users.contains(user)) {
                flag = true;
            }
        }
        return flag;
    }

    /**
     * 判断组是否为角色的参与者
     *
     * @param holder 角色载体(常指上下文团队)
     * @param role   角色
     * @param group  组
     * @return true代表是角色参与者
     * @throws WTException
     */
    public static boolean isRolePrincipal(WTRoleHolder2 holder, Role role, WTGroup group) throws WTException {
        boolean flag = false;
        if (holder != null && role != null && group != null) {
            Enumeration<WTPrincipalReference> enumeration = holder.getPrincipalTarget(role);
            while (enumeration.hasMoreElements()) {
                WTPrincipalReference reference = enumeration.nextElement();
                if (reference != null && !reference.isDisabled()) {
                    WTPrincipal principal = reference.getPrincipal();
                    if (principal instanceof WTGroup) {
                        WTGroup teamGroup = (WTGroup) principal;
                        if (PersistenceHelper.isEquivalent(group, teamGroup)) {
                            flag = true;
                            break;
                        }
                        WTSet groups = getChildGroups(teamGroup);
                        if (groups.contains(group)) {
                            flag = true;
                            break;
                        }
                    }
                }
            }
        }
        return flag;
    }
    
    /**
     * 添加角色参与者(单个)
     *
     * @param managed   容器团队管理(常指容器本身)
     * @param role      角色
     * @param principal 参与者(常指用户/组)
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged addRoleMember(ContainerTeamManaged managed, Role role,
                                                     WTPrincipal principal) throws WTException {
        Set<WTPrincipal> principals = new HashSet<>();
        if (principal != null) {
            principals.add(principal);
        }
        return addRoleMembers(managed, role, principals);
    }

    /**
     * 添加角色参与者(批量)
     *
     * @param managed    容器团队管理(常指容器本身)
     * @param role       角色
     * @param principals 参与者集合(常指用户/组)
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged addRoleMembers(ContainerTeamManaged managed, Role role,
                                                      Set<WTPrincipal> principals) throws WTException {
        ContainerTeam team = getContainerTeam(managed);
        List<WTPrincipal> list = new ArrayList<>();
        if (principals != null && !principals.isEmpty()) {
            list.addAll(principals);
            ContainerTeamHelper.service.addMembers(team, role, list);
        }
        managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        return managed;
    }

    /**
     * 移除角色参与者(单个)
     *
     * @param managed   容器团队管理(常指容器本身)
     * @param role      角色
     * @param principal 参与者(常指用户/组)
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged removeRoleMember(ContainerTeamManaged managed, Role role,
                                                        WTPrincipal principal) throws WTException {
        Set<WTPrincipal> principals = new HashSet<>();
        if (principal != null) {
            principals.add(principal);
        }
        return removeRoleMembers(managed, role, principals);
    }

    /**
     * 移除角色参与者(批量)
     *
     * @param managed    容器团队管理(常指容器本身)
     * @param role       角色
     * @param principals 参与者集合(常指用户/组)
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged removeRoleMembers(ContainerTeamManaged managed, Role role,
                                                         Set<WTPrincipal> principals) throws WTException {
        ContainerTeam team = getContainerTeam(managed);
        List<WTPrincipal> list = new ArrayList<>();
        if (principals != null && !principals.isEmpty()) {
            list.addAll(principals);
            ContainerTeamHelper.service.removeMembers(team, role, list);
        }
        managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        return managed;
    }

    /**
     * 清空角色成员
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged clearRoleMember(ContainerTeamManaged managed, Role role) throws WTException {
        if (managed != null && role != null) {
            WTSet set = getRolePrincipals(managed, role);
            Set<WTPrincipal> principals = new HashSet<>();
            principals.addAll(set.persistableCollection());
            managed = removeRoleMembers(managed, role, principals);
            managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        }
        return managed;
    }

    /**
     * 清空角色成员
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param roles   角色集合
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged clearRoleMember(ContainerTeamManaged managed, Set<Role> roles) throws WTException {
        if (roles != null && !roles.isEmpty()) {
            for (Role role : roles) {
                managed = clearRoleMember(managed, role);
            }
            managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        }
        return managed;
    }
    /**
     * 判断用户是否为组成员
     *
     * @param group 组
     * @param user  用户
     * @return true代表是组成员
     * @throws WTException
     */
    public static boolean isGroupMember(WTGroup group, WTUser user) throws WTException {
        boolean flag = false;
        if (group != null && user != null) {
            flag = OrganizationServicesHelper.manager.isMember(group, user);
            if (!flag) {
                WTSet users = getChildUsers(group);
                if (users.contains(user)) {
                    flag = true;
                }
            }
        }
        return flag;
    }

    /**
     * 判断目标组是否为源组成员
     *
     * @param source 源组
     * @param target 目标组
     * @return true代表是源组成员
     * @throws WTException
     */
    public static boolean isGroupMember(WTGroup source, WTGroup target) throws WTException {
        boolean flag = false;
        if (source != null && target != null) {
            flag = OrganizationServicesHelper.manager.isMember(source, target);
            if (!flag) {
                WTSet groups = getChildGroups(source);
                if (groups.contains(target)) {
                    flag = true;
                }
            }
        }
        return flag;
    }

    /**
     * 判断参与者是否为组成员
     *
     * @param group     组
     * @param principal 参与者(常指用户/组)
     * @return true代表是组成员
     * @throws WTException
     */
    public static boolean isGroupMember(WTGroup group, WTPrincipal principal) throws WTException {
        boolean flag = false;
        if (group != null && principal != null) {
            if (principal instanceof WTGroup) {
                WTGroup target = (WTGroup) principal;
                flag = isGroupMember(group, target);
            } else if (principal instanceof WTUser) {
                WTUser user = (WTUser) principal;
                flag = isGroupMember(group, user);
            } else {
                flag = OrganizationServicesHelper.manager.isMember(group, principal);
            }
        }
        return flag;
    }
    
    /**
     * 获取组的直系成员集合(单层)
     *
     * @param group 组
     * @return 成员集合
     * @throws WTException
     */
    public static WTSet getImmediateMembers(WTGroup group) throws WTException {
        WTHashSet set = new WTHashSet();
        if (group != null) {
            Enumeration enumeration = OrganizationServicesHelper.manager.members(group, false);
            if (enumeration != null) {
                while (enumeration.hasMoreElements()) {
                    Object nextElement = enumeration.nextElement();
                    set.add(nextElement);
                }
            }
        }
        return set;
    }

    /**
     * 获取组的所有子组集合
     *
     * @param group 组
     * @return 子组集合
     * @throws WTException
     */
    public static WTSet getChildGroups(WTGroup group) throws WTException {
        WTHashSet set = new WTHashSet();
        if (group != null) {
            WTSet members = getImmediateMembers(group);
            Iterator iterator = members.persistableIterator();
            while (iterator.hasNext()) {
                Object next = iterator.next();
                if (next != null && next instanceof WTGroup) {
                    WTGroup child = (WTGroup) next;
                    set.add(child);
                    WTSet temp = getChildGroups(child);
                    set.addAll(temp);
                }
            }
        }
        return set;
    }

    /**
     * 获取组的所有子用户集合
     *
     * @param group 组
     * @return 子用户集合
     * @throws WTException
     */
    public static WTSet getChildUsers(WTGroup group) throws WTException {
        WTHashSet set = new WTHashSet();
        if (group != null) {
            Enumeration enumeration = OrganizationServicesHelper.manager.members(group, true);
            if (enumeration != null) {
                while (enumeration.hasMoreElements()) {
                    Object nextElement = enumeration.nextElement();
                    set.add(nextElement);
                }
            }
        }
        return set;
    }

文件夹

    /**
     * 获取容器的默认文件夹(Default)
     *
     * @param container 容器
     * @return 默认文件夹(Default)
     * @throws WTException
     */
    public static Cabinet getDefaultFolder(WTContainer container) throws WTException {
        Cabinet cabinet = null;
        if (container != null) {
            WTContainerRef containerRef = WTContainerRef.newWTContainerRef(container);
            Folder folder = FolderHelper.service.getFolder("/Default", containerRef);
            if (folder != null && folder instanceof Cabinet) {
                cabinet = (Cabinet) folder;
            }
        }
        return cabinet;
    }

    /**
     * 获取容器的子文件夹
     *
     * @param container  容器
     * @param folderPath 文件夹路径
     * @return 子文件夹
     * @throws WTException
     */
    public static SubFolder getSubFolder(WTContainer container, String folderPath) throws WTException {
        SubFolder subFolder = null;
        if (container != null && StringUtils.hasText(folderPath)) {
            WTContainerRef containerRef = WTContainerRef.newWTContainerRef(container);
            Folder folder = FolderHelper.service.getFolder(folderPath, containerRef);
            if (folder != null && folder instanceof SubFolder) {
                subFolder = (SubFolder) folder;
            }
        }
        return subFolder;
    }

    /**
     * 查询文件夹内容(默认包含共享的)
     *
     * @param folder 文件夹
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderContents(Folder folder) throws WTException {
        return queryFolderContents(folder, true);
    }

    /**
     * 查询文件夹内容
     *
     * @param folder        文件夹
     * @param includeShared 是否包含共享
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderContents(Folder folder, boolean includeShared) throws WTException {
        QueryResult queryResult = new QueryResult();
        if (folder != null) {
            WTHashSet set = new WTHashSet();
            set.add(folder);
            WTKeyedMap map = FolderHelper.service.getFolderToContentsMap(set, FolderEntry.class, includeShared);
            WTSet entrySet = (WTSet) map.get(folder);
            if (entrySet != null) {
                ObjectVectorIfc vectorIfc = WTObjectHelper.parseWTCollection2ObjectVector(entrySet);
                queryResult = new QueryResult(vectorIfc);
            }
        }
        return queryResult;
    }

    /**
     * 查询文件夹所有内容(递归所有层子文件夹)(默认包含共享的)
     *
     * @param folder 文件夹
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderAllContents(Folder folder) throws WTException {
        return queryFolderAllContents(folder, true);
    }

    /**
     * 查询文件夹所有内容(递归所有层子文件夹)
     *
     * @param folder        文件夹
     * @param includeShared 是否包含共享
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderAllContents(Folder folder, boolean includeShared) throws WTException {
        QueryResult queryResult = queryFolderContents(folder, includeShared);
        QueryResult subFolders = FolderHelper.service.findSubFolders(folder);
        while (subFolders != null && subFolders.size() > 0) {
            WTHashSet set = new WTHashSet();
            set.addAll(subFolders);
            WTKeyedMap map = FolderHelper.service.getFolderToContentsMap(set, FolderEntry.class, includeShared);
            queryResult = WTObjectHelper.append2QueryResult(queryResult, map);
            subFolders = querySubFolders(set);
        }
        if (queryResult == null) {
            queryResult = new QueryResult();
        }
        return queryResult;
    }

    /**
     * 查询对象下的子文件夹结果集
     *
     * @param set 对象集合
     * @return 子文件夹结果集
     * @throws WTException
     */
    public static QueryResult querySubFolders(WTSet set) throws WTException {
        QueryResult queryResult = new QueryResult();
        Iterator<Persistable> iterator = set.persistableIterator();
        while (iterator.hasNext()) {
            Persistable persistable = iterator.next();
            if (persistable != null && persistable instanceof Folder) {
                Folder folder = (Folder) persistable;
                QueryResult subFolders = FolderHelper.service.findSubFolders(folder);
                if (subFolders != null && subFolders.size() > 0) {
                    ObjectVectorIfc vectorIfc = subFolders.getObjectVectorIfc();
                    queryResult.append(vectorIfc);
                }
            }
        }
        return queryResult;
    }

    /**
     * 查询文件夹最新内容(默认包含共享的)
     *
     * @param folder 文件夹
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderLatestContents(Folder folder) throws WTException {
        return queryFolderLatestContents(folder, true);
    }

    /**
     * 查询文件夹最新内容
     *
     * @param folder        文件夹
     * @param includeShared 是否包含共享
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderLatestContents(Folder folder, boolean includeShared) throws WTException {
        QueryResult queryResult = new QueryResult();
        if (folder != null) {
            WTHashSet set = new WTHashSet();
            set.add(folder);
            WTKeyedMap map = FolderHelper.service.getFolderToContentsMap(set, RevisionControlled.class, includeShared);
            WTSet entrySet = (WTSet) map.get(folder);
            if (entrySet != null) {
                ObjectVectorIfc vectorIfc = WTObjectHelper.parseWTCollection2ObjectVector(entrySet);
                queryResult.append(vectorIfc);
                LatestConfigSpec latestConfigSpec = new LatestConfigSpec();
                queryResult = latestConfigSpec.process(queryResult);
            }
        }
        return queryResult;
    }

    /**
     * 查询文件夹所有最新内容(递归所有层子文件夹)(默认包含共享的)
     *
     * @param folder 文件夹
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderAllLatestContents(Folder folder) throws WTException {
        return queryFolderAllLatestContents(folder, true);
    }

    /**
     * 查询文件夹所有最新内容(递归所有层子文件夹)
     *
     * @param folder        文件夹
     * @param includeShared 是否包含共享
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderAllLatestContents(Folder folder, boolean includeShared) throws WTException {
        QueryResult queryResult = queryFolderLatestContents(folder, includeShared);
        QueryResult subFolders = FolderHelper.service.findSubFolders(folder);
        while (subFolders != null && subFolders.size() > 0) {
            WTHashSet set = new WTHashSet();
            set.addAll(subFolders);
            WTKeyedMap map = FolderHelper.service.getFolderToContentsMap(set, RevisionControlled.class, includeShared);
            queryResult = WTObjectHelper.append2QueryResult(queryResult, map);
            subFolders = querySubFolders(set);
        }
        if (queryResult == null) {
            queryResult = new QueryResult();
        }
        return queryResult;
    }
    
    /**
     * 移动容器对象到文件夹(所有版本)
     *
     * @param contained 容器对象(部件、文档等对象)
     * @param folder    文件夹
     * @return 容器对象集合
     * @throws WTException
     */
    public static WTCollection move(WTContained contained, Folder folder) throws WTException {
        WTValuedHashMap map = new WTValuedHashMap();
        map.put(contained, folder);
        return ContainerMoveHelper.service.moveAllVersions(map);
    }
    
    /**
     * WTCollection转化为ObjectVector
     *
     * @param collection 集合
     * @return
     */
    public static ObjectVectorIfc parseWTCollection2ObjectVector(WTCollection collection) {
        Vector<Persistable> vector = new Vector<>(collection.persistableCollection());
        ObjectVectorIfc vectorIfc = new ObjectVector(vector);
        return vectorIfc;
    }

    /**
     * 将对象添加到结果集
     *
     * @param queryResult 结果集
     * @param map         对象map
     * @return 结果集
     */
    public static QueryResult append2QueryResult(QueryResult queryResult, WTKeyedMap map) {
        if (queryResult == null) {
            queryResult = new QueryResult();
        }
        if (map != null) {
            for (Object key : map.keySet()) {
                Object value = map.get(key);
                if (value != null && value instanceof WTCollection) {
                    WTCollection collection = (WTCollection) value;
                    ObjectVectorIfc vectorIfc = parseWTCollection2ObjectVector(collection);
                    queryResult.append(vectorIfc);
                }
            }
        }
        return queryResult;
    }

方法汇总

import org.springframework.util.StringUtils;
import wt.dataops.containermove.ContainerMoveHelper;
import wt.enterprise.RevisionControlled;
import wt.fc.*;
import wt.fc.collections.*;
import wt.folder.*;
import wt.inf.container.*;
import wt.inf.library.WTLibrary;
import wt.inf.team.*;
import wt.org.*;
import wt.part.WTPart;
import wt.pdmlink.PDMLinkProduct;
import wt.project.Role;
import wt.query.*;
import wt.session.SessionServerHelper;
import wt.team.WTRoleHolder2;
import wt.util.WTException;
import wt.vc.VersionControlHelper;
import wt.vc.config.ConfigHelper;
import wt.vc.config.LatestConfigSpec;
import wt.vc.wip.WorkInProgressHelper;

import java.sql.Timestamp;
import java.util.*;

public class ContainerHelper {

    /**
     * 获取站点
     *
     * @return 站点
     * @throws WTException
     */
    public static ExchangeContainer getExchangeContainer() throws WTException {
        return WTContainerHelper.service.getExchangeContainer();
    }

    /**
     * 查询组织(按创建时间排序)
     *
     * @return 组织结果集
     * @throws WTException
     */
    public static QueryResult queryWTOrganizations() throws WTException {
        QuerySpec querySpec = new QuerySpec(WTOrganization.class);
        ClassAttribute name = new ClassAttribute(WTOrganization.class, WTOrganization.NAME);
        SearchCondition searchCondition = new SearchCondition(name, SearchCondition.NOT_NULL);
        querySpec.appendWhere(searchCondition, new int[1]);
        ClassAttribute createTime = new ClassAttribute(WTOrganization.class, WTOrganization.CREATE_TIMESTAMP);
        OrderBy orderBy = new OrderBy(createTime, false);
        querySpec.appendOrderBy(orderBy, new int[1]);
        QueryResult queryResult = PersistenceHelper.manager.find(querySpec);
        if (queryResult == null) {
            queryResult = new QueryResult();
        }
        return queryResult;
    }

    /**
     * 获取默认组织
     *
     * @return 组织
     * @throws WTException
     */
    public static WTOrganization getDefaultWTOrganization() throws WTException {
        WTOrganization organization = null;
        QueryResult queryResult = queryWTOrganizations();
        if (queryResult.hasMoreElements()) {
            organization = (WTOrganization) queryResult.nextElement();
        }
        return organization;
    }

    /**
     * 获取组织
     *
     * @param orgName 组织名
     * @return 组织
     * @throws WTException
     */
    public static WTOrganization getWTOrganization(String orgName) throws WTException {
        WTOrganization organization = null;
        if (StringUtils.hasText(orgName)) {
            QuerySpec querySpec = new QuerySpec(WTOrganization.class);
            SearchCondition searchCondition = new SearchCondition(WTOrganization.class, WTOrganization.NAME,
                    SearchCondition.EQUAL, orgName);
            querySpec.appendWhere(searchCondition, new int[1]);
            QueryResult queryResult = PersistenceHelper.manager.find(querySpec);
            if (queryResult != null && queryResult.hasMoreElements()) {
                organization = (WTOrganization) queryResult.nextElement();
            }
        }
        return organization;
    }

    /**
     * 获取组织所在的组织容器
     *
     * @param organization 组织
     * @return 组织容器
     * @throws WTException
     */
    public static OrgContainer getOrgContainer(WTOrganization organization) throws WTException {
        OrgContainer orgContainer = null;
        if (organization != null) {
            orgContainer = WTContainerHelper.service.getOrgContainer(organization);
        }
        return orgContainer;
    }

    /**
     * 获取容器对象所在的组织容器
     *
     * @param contained 容器对象(部件、文档等对象)
     * @return 组织容器
     * @throws WTException
     */
    public static OrgContainer getOrgContainer(WTContained contained) throws WTException {
        OrgContainer orgContainer = null;
        if (contained != null) {
            orgContainer = WTContainerHelper.service.getOrgContainer(contained);
        }
        return orgContainer;
    }

    /**
     * 获取用户所在的组织容器
     *
     * @param user 用户
     * @return 组织容器
     * @throws WTException
     */
    public static OrgContainer getOrgContainer(WTUser user) throws WTException {
        OrgContainer orgContainer = null;
        if (user != null) {
            orgContainer = WTContainerHelper.service.getOrgContainer(user);
        }
        return orgContainer;
    }

    /**
     * 查询容器(产品/存储库)
     *
     * @param containerName 容器名
     * @return 容器(产品/存储库)结果集
     * @throws Exception
     */
    public static QueryResult queryWTContainer(String containerName) throws Exception {
        QueryResult queryResult = null;
        if (StringUtils.hasText(containerName)) {
            QuerySpec querySpec = new QuerySpec(WTContainer.class);
            SearchCondition searchCondition = new SearchCondition(WTContainer.class, WTContainer.NAME,
                    SearchCondition.EQUAL, containerName);
            querySpec.appendWhere(searchCondition, new int[1]);
            querySpec.setAdvancedQueryEnabled(true);
            querySpec.setDescendantQuery(true);
            queryResult = PersistenceHelper.manager.find(querySpec);
        }
        if (queryResult == null) {
            queryResult = new QueryResult();
        }
        return queryResult;
    }

    /**
     * 获取容器(产品/存储库)(默认容器名称唯一)
     *
     * @param containerName 容器名
     * @return 容器(产品/存储库)
     * @throws Exception
     */
    public static WTContainer getWTContainer(String containerName) throws Exception {
        WTContainer container = null;
        QueryResult queryResult = queryWTContainer(containerName);
        if (queryResult.hasMoreElements()) {
            container = (WTContainer) queryResult.nextElement();
        }
        return container;
    }

    /**
     * 获取产品
     *
     * @param productName 产品名
     * @return 产品
     * @throws WTException
     */
    public static PDMLinkProduct getPDMLinkProduct(String productName) throws WTException {
        PDMLinkProduct product = null;
        if (StringUtils.hasText(productName)) {
            QuerySpec querySpec = new QuerySpec(PDMLinkProduct.class);
            SearchCondition searchCondition = new SearchCondition(PDMLinkProduct.class, PDMLinkProduct.NAME,
                    SearchCondition.EQUAL, productName);
            querySpec.appendWhere(searchCondition, new int[1]);
            QueryResult queryResult = PersistenceHelper.manager.find(querySpec);
            if (queryResult != null && queryResult.hasMoreElements()) {
                product = (PDMLinkProduct) queryResult.nextElement();
            }
        }
        return product;
    }

    /**
     * 获取存储库
     *
     * @param libraryName 存储库名
     * @return 存储库
     * @throws WTException
     */
    public static WTLibrary getWTLibrary(String libraryName) throws WTException {
        WTLibrary library = null;
        if (StringUtils.hasText(libraryName)) {
            QuerySpec querySpec = new QuerySpec(WTLibrary.class);
            SearchCondition searchCondition = new SearchCondition(WTLibrary.class, WTLibrary.NAME,
                    SearchCondition.EQUAL, libraryName);
            querySpec.appendWhere(searchCondition, new int[1]);
            QueryResult queryResult = PersistenceHelper.manager.find(querySpec);
            if (queryResult != null && queryResult.hasMoreElements()) {
                library = (WTLibrary) queryResult.nextElement();
            }
        }
        return library;
    }

    /**
     * 获取容器的默认文件夹(Default)
     *
     * @param container 容器
     * @return 默认文件夹(Default)
     * @throws WTException
     */
    public static Cabinet getDefaultFolder(WTContainer container) throws WTException {
        Cabinet cabinet = null;
        if (container != null) {
            WTContainerRef containerRef = WTContainerRef.newWTContainerRef(container);
            Folder folder = FolderHelper.service.getFolder("/Default", containerRef);
            if (folder != null && folder instanceof Cabinet) {
                cabinet = (Cabinet) folder;
            }
        }
        return cabinet;
    }

    /**
     * 获取容器的子文件夹
     *
     * @param container  容器
     * @param folderPath 文件夹路径
     * @return 子文件夹
     * @throws WTException
     */
    public static SubFolder getSubFolder(WTContainer container, String folderPath) throws WTException {
        SubFolder subFolder = null;
        if (container != null && StringUtils.hasText(folderPath)) {
            WTContainerRef containerRef = WTContainerRef.newWTContainerRef(container);
            Folder folder = FolderHelper.service.getFolder(folderPath, containerRef);
            if (folder != null && folder instanceof SubFolder) {
                subFolder = (SubFolder) folder;
            }
        }
        return subFolder;
    }

    /**
     * 查询文件夹内容(默认包含共享的)
     *
     * @param folder 文件夹
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderContents(Folder folder) throws WTException {
        return queryFolderContents(folder, true);
    }

    /**
     * 查询文件夹内容
     *
     * @param folder        文件夹
     * @param includeShared 是否包含共享
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderContents(Folder folder, boolean includeShared) throws WTException {
        QueryResult queryResult = new QueryResult();
        if (folder != null) {
            WTHashSet set = new WTHashSet();
            set.add(folder);
            WTKeyedMap map = FolderHelper.service.getFolderToContentsMap(set, FolderEntry.class, includeShared);
            WTSet entrySet = (WTSet) map.get(folder);
            if (entrySet != null) {
                ObjectVectorIfc vectorIfc = WTObjectHelper.parseWTCollection2ObjectVector(entrySet);
                queryResult = new QueryResult(vectorIfc);
            }
        }
        return queryResult;
    }

    /**
     * 查询文件夹所有内容(递归所有层子文件夹)(默认包含共享的)
     *
     * @param folder 文件夹
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderAllContents(Folder folder) throws WTException {
        return queryFolderAllContents(folder, true);
    }

    /**
     * 查询文件夹所有内容(递归所有层子文件夹)
     *
     * @param folder        文件夹
     * @param includeShared 是否包含共享
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderAllContents(Folder folder, boolean includeShared) throws WTException {
        QueryResult queryResult = queryFolderContents(folder, includeShared);
        QueryResult subFolders = FolderHelper.service.findSubFolders(folder);
        while (subFolders != null && subFolders.size() > 0) {
            WTHashSet set = new WTHashSet();
            set.addAll(subFolders);
            WTKeyedMap map = FolderHelper.service.getFolderToContentsMap(set, FolderEntry.class, includeShared);
            queryResult = WTObjectHelper.append2QueryResult(queryResult, map);
            subFolders = querySubFolders(set);
        }
        if (queryResult == null) {
            queryResult = new QueryResult();
        }
        return queryResult;
    }

    /**
     * 查询对象下的子文件夹结果集
     *
     * @param set 对象集合
     * @return 子文件夹结果集
     * @throws WTException
     */
    public static QueryResult querySubFolders(WTSet set) throws WTException {
        QueryResult queryResult = new QueryResult();
        Iterator<Persistable> iterator = set.persistableIterator();
        while (iterator.hasNext()) {
            Persistable persistable = iterator.next();
            if (persistable != null && persistable instanceof Folder) {
                Folder folder = (Folder) persistable;
                QueryResult subFolders = FolderHelper.service.findSubFolders(folder);
                if (subFolders != null && subFolders.size() > 0) {
                    ObjectVectorIfc vectorIfc = subFolders.getObjectVectorIfc();
                    queryResult.append(vectorIfc);
                }
            }
        }
        return queryResult;
    }

    /**
     * 查询文件夹最新内容(默认包含共享的)
     *
     * @param folder 文件夹
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderLatestContents(Folder folder) throws WTException {
        return queryFolderLatestContents(folder, true);
    }

    /**
     * 查询文件夹最新内容
     *
     * @param folder        文件夹
     * @param includeShared 是否包含共享
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderLatestContents(Folder folder, boolean includeShared) throws WTException {
        QueryResult queryResult = new QueryResult();
        if (folder != null) {
            WTHashSet set = new WTHashSet();
            set.add(folder);
            WTKeyedMap map = FolderHelper.service.getFolderToContentsMap(set, RevisionControlled.class, includeShared);
            WTSet entrySet = (WTSet) map.get(folder);
            if (entrySet != null) {
                ObjectVectorIfc vectorIfc = WTObjectHelper.parseWTCollection2ObjectVector(entrySet);
                queryResult.append(vectorIfc);
                LatestConfigSpec latestConfigSpec = new LatestConfigSpec();
                queryResult = latestConfigSpec.process(queryResult);
            }
        }
        return queryResult;
    }

    /**
     * 查询文件夹所有最新内容(递归所有层子文件夹)(默认包含共享的)
     *
     * @param folder 文件夹
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderAllLatestContents(Folder folder) throws WTException {
        return queryFolderAllLatestContents(folder, true);
    }

    /**
     * 查询文件夹所有最新内容(递归所有层子文件夹)
     *
     * @param folder        文件夹
     * @param includeShared 是否包含共享
     * @return 查询结果集
     * @throws WTException
     */
    public static QueryResult queryFolderAllLatestContents(Folder folder, boolean includeShared) throws WTException {
        QueryResult queryResult = queryFolderLatestContents(folder, includeShared);
        QueryResult subFolders = FolderHelper.service.findSubFolders(folder);
        while (subFolders != null && subFolders.size() > 0) {
            WTHashSet set = new WTHashSet();
            set.addAll(subFolders);
            WTKeyedMap map = FolderHelper.service.getFolderToContentsMap(set, RevisionControlled.class, includeShared);
            queryResult = WTObjectHelper.append2QueryResult(queryResult, map);
            subFolders = querySubFolders(set);
        }
        if (queryResult == null) {
            queryResult = new QueryResult();
        }
        return queryResult;
    }

    /**
     * 查询容器中的成品部件(最新且非工作副本)
     *
     * @param container 容器
     * @return 成品部件结果集
     * @throws WTException
     */
    public static QueryResult queryEndItems(WTContainer container) throws WTException {
        QuerySpec querySpec = new QuerySpec(WTPart.class);
        querySpec.appendWhere(WTContainerHelper.getWhereContainerIn(
                new WTContainerRef[]{WTContainerRef.newWTContainerRef(container)}), new int[1]);
        querySpec.appendAnd();
        querySpec.appendWhere(new SearchCondition(WTPart.class, WTPart.END_ITEM, SearchCondition.IS_TRUE), new int[1]);
        querySpec.appendAnd();
        querySpec.appendNot();
        querySpec.appendWhere(WorkInProgressHelper.getSearchCondition_CO(WTPart.class), new int[1]);
        querySpec.appendAnd();
        querySpec.appendWhere(VersionControlHelper.getSearchCondition(WTPart.class, true), new int[1]);
        querySpec.appendOrderBy(new OrderBy(new ClassAttribute(WTPart.class, WTPart.NUMBER), false), new int[1]);
        LatestConfigSpec latestConfigSpec = new LatestConfigSpec();
        QueryResult queryResult = ConfigHelper.service.queryIterations(querySpec, latestConfigSpec);
        return queryResult;
    }

    /**
     * 移动容器对象到目标容器(默认文件夹)
     *
     * @param contained 容器对象(部件、文档等对象)
     * @param container 目标容器
     * @return 容器对象集合
     * @throws WTException
     */
    public static WTCollection move(WTContained contained, WTContainer container) throws WTException {
        WTContainerRef containerRef = WTContainerRef.newWTContainerRef(container);
        Folder folder = FolderHelper.service.getFolder("/Default", containerRef);
        return move(contained, folder);
    }

    /**
     * 移动容器对象到文件夹(所有版本)
     *
     * @param contained 容器对象(部件、文档等对象)
     * @param folder    文件夹
     * @return 容器对象集合
     * @throws WTException
     */
    public static WTCollection move(WTContained contained, Folder folder) throws WTException {
        WTValuedHashMap map = new WTValuedHashMap();
        map.put(contained, folder);
        return ContainerMoveHelper.service.moveAllVersions(map);
    }

    /**
     * 查询用户时间段创建的容器
     *
     * @param user  用户
     * @param start 开始时间(可为null)
     * @param end   结束时间(可为null)
     * @return 查询结果集
     * @throws WTException
     */
    public QueryResult queryCreatedContainers(WTUser user, Timestamp start, Timestamp end) throws WTException {
        QuerySpec querySpec = new QuerySpec(WTContainer.class);
        long userId = user.getPersistInfo().getObjectIdentifier().getId();
        SearchCondition searchCondition = new SearchCondition(WTContainer.class,
                WTContainer.CREATOR_REFERENCE.concat(".key.id"), SearchCondition.EQUAL, userId);
        querySpec.appendWhere(searchCondition, new int[1]);
        if (start != null) {
            querySpec.appendAnd();
            searchCondition = new SearchCondition(WTContainer.class,
                    WTContainer.PERSIST_INFO.concat(".createStamp"), SearchCondition.GREATER_THAN_OR_EQUAL, start);
            querySpec.appendWhere(searchCondition, new int[1]);
        }
        if (end != null) {
            querySpec.appendAnd();
            searchCondition = new SearchCondition(WTContainer.class,
                    WTContainer.PERSIST_INFO.concat(".createStamp"), SearchCondition.LESS_THAN_OR_EQUAL, end);
            querySpec.appendWhere(searchCondition, new int[1]);
        }
        QueryResult queryResult = PersistenceHelper.manager.find(querySpec);
        return queryResult;
    }

    /**
     * 获取容器的上下文团队
     *
     * @param managed 容器团队管理(常指容器本身)
     * @return 上下文团队
     * @throws WTException
     */
    public static ContainerTeam getContainerTeam(ContainerTeamManaged managed) throws WTException {
        ContainerTeam containerTeam = null;
        if (managed != null) {
            containerTeam = ContainerTeamHelper.service.getContainerTeam(managed);
        }
        return containerTeam;
    }

    /**
     * 获取容器的角色集合
     *
     * @param managed 容器团队管理(常指容器本身)
     * @return 角色集合
     * @throws WTException
     */
    public static Set<Role> getRoles(ContainerTeamManaged managed) throws WTException {
        Set<Role> roles = new HashSet<>();
        ContainerTeam team = getContainerTeam(managed);
        Vector teamRoles = team.getRoles();
        roles.addAll(teamRoles);
        if (hasSharedTeam(managed)) {
            ContainerTeamReference reference = managed.getSharedTeamReference();
            if (reference != null) {
                ContainerTeam shared = (ContainerTeam) reference.getObject();
                if (shared != null) {
                    Vector sharedRoles = shared.getRoles();
                    roles.addAll(sharedRoles);
                }
            }
        }
        return roles;
    }

    /**
     * 判断容器是否存在共享团队
     *
     * @param managed 容器团队管理(常指容器本身)
     * @return true代表存在
     * @throws WTException
     */
    public static boolean hasSharedTeam(ContainerTeamManaged managed) {
        boolean flag = false;
        ContainerTeamManagedInfo info = managed.getContainerTeamManagedInfo();
        ContainerTeamReference sharedTeamId = info.getSharedTeamId();
        if (sharedTeamId != null) {
            QueryKey queryKey = sharedTeamId.getKey();
            if (queryKey != null) {
                String classname = queryKey.getClassname();
                if (classname != null) {
                    flag = true;
                }
            }
        }
        return flag;
    }

    /**
     * 获取上下文团队角色下的用户
     *
     * @param managed  容器团队管理(常指容器本身)
     * @param roleName 角色内部名
     * @return 用户集合
     * @throws WTException
     */
    public static WTSet getRoleUsers(ContainerTeamManaged managed, String roleName) throws WTException {
        boolean enforced = SessionServerHelper.manager.setAccessEnforced(false);
        try {
            WTHashSet set = new WTHashSet();
            WTGroup group = ContainerTeamHelper.service.findContainerTeamGroup(managed, ContainerTeamHelper.ROLE_GROUPS, roleName);
            if (group != null) {
                Enumeration members = group.members();
                while (members.hasMoreElements()) {
                    Object nextElement = members.nextElement();
                    if (nextElement != null && nextElement instanceof WTUser) {
                        set.add(nextElement);
                    }
                }
            }
            return set;
        } finally {
            SessionServerHelper.manager.setAccessEnforced(enforced);
        }
    }

    /**
     * 获取上下文团队角色下的用户
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return 用户集合
     * @throws WTException
     */
    public static WTSet getRoleUsers(ContainerTeamManaged managed, Role role) throws WTException {
        WTSet set = new WTHashSet();
        if (role != null) {
            set = getRoleUsers(managed, role.toString());
        }
        return set;
    }

    /**
     * 获取上下文团队角色下的参与者
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return 参与者集合
     * @throws WTException
     */
    public static WTSet getRolePrincipals(ContainerTeamManaged managed, Role role) throws WTException {
        ContainerTeam team = getContainerTeam(managed);
        return getRolePrincipals(team, role);
    }

    /**
     * 获取空角色集合
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param roles   目标角色集合
     * @return 空角色集合
     * @throws WTException
     */
    public static Set<Role> getEmptyRoles(ContainerTeamManaged managed, Collection<Role> roles) throws WTException {
        Set<Role> emptyRoles = new HashSet<>();
        if (managed != null && roles != null && !roles.isEmpty()) {
            ContainerTeam team = getContainerTeam(managed);
            for (Role role : roles) {
                boolean hasWTUsers = hasWTUsers(team, role);
                if (!hasWTUsers) {
                    emptyRoles.add(role);
                }
            }
        }
        return emptyRoles;
    }

    /**
     * 判断角色是否为空
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return true代表为空角色
     * @throws WTException
     */
    public static boolean isEmptyRole(ContainerTeamManaged managed, Role role) throws WTException {
        boolean flag = true;
        Collection<Role> roles = new ArrayList<>();
        if (role != null) {
            roles.add(role);
        }
        Set<Role> emptyRoles = getEmptyRoles(managed, roles);
        if (emptyRoles.isEmpty()) {
            flag = false;
        }
        return flag;
    }

    /**
     * 判断参与者是否为角色参与者
     *
     * @param managed   容器团队管理(常指容器本身)
     * @param role      角色
     * @param principal 参与者(常指用户/组)
     * @return true代表是角色参与者
     * @throws WTException
     */
    public static boolean isRolePrincipal(ContainerTeamManaged managed, Role role, WTPrincipal principal) throws WTException {
        ContainerTeam team = getContainerTeam(managed);
        return isRolePrincipal(team, role, principal);
    }

    /**
     * 判断参与者是否为团队成员
     *
     * @param container 容器
     * @param principal 参与者(常指用户/组)
     * @return true代表是团队成员
     * @throws WTException
     */
    public static boolean isTeamMember(WTContainer container, WTPrincipal principal) throws WTException {
        boolean flag = false;
        if (container != null && principal != null) {
            ContainerTeamManaged managed = (ContainerTeamManaged) container;
            WTGroup group = ContainerTeamHelper.service.findContainerTeamGroup(managed,
                    ContainerTeamHelper.TEAM_MEMBERS, ContainerTeamHelper.TEAM_MEMBERS);
            if (group != null) {
                flag = isGroupMember(group, principal);
            }
        }
        return flag;
    }

    /**
     * 添加角色参与者(单个)
     *
     * @param managed   容器团队管理(常指容器本身)
     * @param role      角色
     * @param principal 参与者(常指用户/组)
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged addRoleMember(ContainerTeamManaged managed, Role role,
                                                     WTPrincipal principal) throws WTException {
        Set<WTPrincipal> principals = new HashSet<>();
        if (principal != null) {
            principals.add(principal);
        }
        return addRoleMembers(managed, role, principals);
    }

    /**
     * 添加角色参与者(批量)
     *
     * @param managed    容器团队管理(常指容器本身)
     * @param role       角色
     * @param principals 参与者集合(常指用户/组)
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged addRoleMembers(ContainerTeamManaged managed, Role role,
                                                      Set<WTPrincipal> principals) throws WTException {
        ContainerTeam team = getContainerTeam(managed);
        List<WTPrincipal> list = new ArrayList<>();
        if (principals != null && !principals.isEmpty()) {
            list.addAll(principals);
            ContainerTeamHelper.service.addMembers(team, role, list);
        }
        managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        return managed;
    }

    /**
     * 移除角色参与者(单个)
     *
     * @param managed   容器团队管理(常指容器本身)
     * @param role      角色
     * @param principal 参与者(常指用户/组)
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged removeRoleMember(ContainerTeamManaged managed, Role role,
                                                        WTPrincipal principal) throws WTException {
        Set<WTPrincipal> principals = new HashSet<>();
        if (principal != null) {
            principals.add(principal);
        }
        return removeRoleMembers(managed, role, principals);
    }

    /**
     * 移除角色参与者(批量)
     *
     * @param managed    容器团队管理(常指容器本身)
     * @param role       角色
     * @param principals 参与者集合(常指用户/组)
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged removeRoleMembers(ContainerTeamManaged managed, Role role,
                                                         Set<WTPrincipal> principals) throws WTException {
        ContainerTeam team = getContainerTeam(managed);
        List<WTPrincipal> list = new ArrayList<>();
        if (principals != null && !principals.isEmpty()) {
            list.addAll(principals);
            ContainerTeamHelper.service.removeMembers(team, role, list);
        }
        managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        return managed;
    }

    /**
     * 清空角色成员
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged clearRoleMember(ContainerTeamManaged managed, Role role) throws WTException {
        if (managed != null && role != null) {
            WTSet set = getRolePrincipals(managed, role);
            Set<WTPrincipal> principals = new HashSet<>();
            principals.addAll(set.persistableCollection());
            managed = removeRoleMembers(managed, role, principals);
            managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        }
        return managed;
    }

    /**
     * 清空角色成员
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param roles   角色集合
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged clearRoleMember(ContainerTeamManaged managed, Set<Role> roles) throws WTException {
        if (roles != null && !roles.isEmpty()) {
            for (Role role : roles) {
                managed = clearRoleMember(managed, role);
            }
            managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        }
        return managed;
    }

    /**
     * 添加上下文团队角色
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged addRole(ContainerTeamManaged managed, Role role) throws WTException {
        Set<Role> roles = new HashSet<>();
        if (role != null) {
            roles.add(role);
        }
        return addRoles(managed, roles);
    }

    /**
     * 添加上下文团队角色
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param roles   角色集合
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged addRoles(ContainerTeamManaged managed, Set<Role> roles) throws WTException {
        if (managed != null && roles != null && !roles.isEmpty()) {
            ContainerTeam team = getContainerTeam(managed);
            for (Role role : roles) {
                if (role != null) {
                    ContainerTeamHelper.validateRoleName(role.toString());
                    ContainerTeamHelper.service.addMember(team, role, null);
                }
            }
            managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        }
        return managed;
    }

    /**
     * 移除上下文团队角色
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param role    角色
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged removeRole(ContainerTeamManaged managed, Role role) throws WTException {
        if (managed != null && role != null) {
            managed = clearRoleMember(managed, role);
            ContainerTeam team = getContainerTeam(managed);
            ContainerTeamHelper.service.removeRole(team, role);
            managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        }
        return managed;
    }

    /**
     * 移除上下文团队角色
     *
     * @param managed 容器团队管理(常指容器本身)
     * @param roles   角色集合
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged removeRoles(ContainerTeamManaged managed, Set<Role> roles) throws WTException {
        if (managed != null && roles != null && !roles.isEmpty()) {
            for (Role role : roles) {
                managed = removeRole(managed, role);
            }
            managed = (ContainerTeamManaged) PersistenceHelper.manager.refresh(managed);
        }
        return managed;
    }

    /**
     * 复制参与者(将源上下文团队角色的参与者复制到目标上下文团队角色)
     *
     * @param sourceManaged 源容器团队管理(常指容器本身)
     * @param sourceRole    源角色
     * @param targetManaged 目标容器团队管理(常指容器本身)
     * @param targetRole    目标角色
     * @return 容器团队管理(常指容器本身)
     * @throws WTException
     */
    public static ContainerTeamManaged copyPrincipals(ContainerTeamManaged sourceManaged, Role sourceRole,
                                                      ContainerTeamManaged targetManaged, Role targetRole) throws WTException {
        if (sourceManaged != null && sourceRole != null && targetManaged != null && targetRole != null) {
            if (!PersistenceHelper.isEquivalent(sourceManaged, targetManaged) || !sourceRole.equals(targetRole)) {
                WTSet sourcePrincipals = getRolePrincipals(sourceManaged, sourceRole);
                Set<WTPrincipal> targetPrincipals = new HashSet<>();
                targetPrincipals.addAll(sourcePrincipals.persistableCollection());
                targetManaged = addRoleMembers(targetManaged, targetRole, targetPrincipals);
            }
        }
        return targetManaged;
    }

    /**
     * 获取角色参与者
     *
     * @param holder 角色载体(常指上下文团队)
     * @param role   角色
     * @return 参与者集合
     * @throws WTException
     */
    public static WTSet getRolePrincipals(WTRoleHolder2 holder, Role role) throws WTException {
        WTHashSet set = new WTHashSet();
        if (holder != null && role != null) {
            Enumeration<WTPrincipalReference> enumeration = holder.getPrincipalTarget(role);
            while (enumeration.hasMoreElements()) {
                WTPrincipalReference reference = enumeration.nextElement();
                if (reference != null && !reference.isDisabled()) {
                    WTPrincipal principal = reference.getPrincipal();
                    set.add(principal);
                }
            }
        }
        return set;
    }

    /**
     * 判断角色是否存在用户
     *
     * @param holder 角色载体(常指上下文团队)
     * @param role   角色
     * @return true代表存在
     * @throws WTException
     */
    public static boolean hasWTUsers(WTRoleHolder2 holder, Role role) throws WTException {
        boolean flag = false;
        WTSet users = getRolePrincipals(holder, role);
        if (!users.isEmpty()) {
            flag = true;
        }
        return flag;
    }

    /**
     * 判断参与者是否为角色的参与者
     *
     * @param holder    角色载体(常指上下文团队)
     * @param role      角色
     * @param principal 参与者(常指用户/组)
     * @return true代表是角色参与者
     * @throws WTException
     */
    public static boolean isRolePrincipal(WTRoleHolder2 holder, Role role, WTPrincipal principal) throws WTException {
        boolean flag = false;
        if (principal != null) {
            if (principal instanceof WTUser) {
                WTUser user = (WTUser) principal;
                flag = isRolePrincipal(holder, role, user);
            } else if (principal instanceof WTGroup) {
                WTGroup group = (WTGroup) principal;
                flag = isRolePrincipal(holder, role, group);
            }
        }
        return flag;
    }

    /**
     * 判断用户是否为角色的参与者
     *
     * @param holder 角色载体(常指上下文团队)
     * @param role   角色
     * @param user   用户
     * @return true代表是角色参与者
     * @throws WTException
     */
    public static boolean isRolePrincipal(WTRoleHolder2 holder, Role role, WTUser user) throws WTException {
        boolean flag = false;
        if (holder != null && role != null && user != null) {
            WTSet users = getRolePrincipals(holder, role);
            if (users.contains(user)) {
                flag = true;
            }
        }
        return flag;
    }

    /**
     * 判断组是否为角色的参与者
     *
     * @param holder 角色载体(常指上下文团队)
     * @param role   角色
     * @param group  组
     * @return true代表是角色参与者
     * @throws WTException
     */
    public static boolean isRolePrincipal(WTRoleHolder2 holder, Role role, WTGroup group) throws WTException {
        boolean flag = false;
        if (holder != null && role != null && group != null) {
            Enumeration<WTPrincipalReference> enumeration = holder.getPrincipalTarget(role);
            while (enumeration.hasMoreElements()) {
                WTPrincipalReference reference = enumeration.nextElement();
                if (reference != null && !reference.isDisabled()) {
                    WTPrincipal principal = reference.getPrincipal();
                    if (principal instanceof WTGroup) {
                        WTGroup teamGroup = (WTGroup) principal;
                        if (PersistenceHelper.isEquivalent(group, teamGroup)) {
                            flag = true;
                            break;
                        }
                        WTSet groups = getChildGroups(teamGroup);
                        if (groups.contains(group)) {
                            flag = true;
                            break;
                        }
                    }
                }
            }
        }
        return flag;
    }

    /**
     * 获取组的直系成员集合(单层)
     *
     * @param group 组
     * @return 成员集合
     * @throws WTException
     */
    public static WTSet getImmediateMembers(WTGroup group) throws WTException {
        WTHashSet set = new WTHashSet();
        if (group != null) {
            Enumeration enumeration = OrganizationServicesHelper.manager.members(group, false);
            if (enumeration != null) {
                while (enumeration.hasMoreElements()) {
                    Object nextElement = enumeration.nextElement();
                    set.add(nextElement);
                }
            }
        }
        return set;
    }

    /**
     * 获取组的所有子组集合
     *
     * @param group 组
     * @return 子组集合
     * @throws WTException
     */
    public static WTSet getChildGroups(WTGroup group) throws WTException {
        WTHashSet set = new WTHashSet();
        if (group != null) {
            WTSet members = getImmediateMembers(group);
            Iterator iterator = members.persistableIterator();
            while (iterator.hasNext()) {
                Object next = iterator.next();
                if (next != null && next instanceof WTGroup) {
                    WTGroup child = (WTGroup) next;
                    set.add(child);
                    WTSet temp = getChildGroups(child);
                    set.addAll(temp);
                }
            }
        }
        return set;
    }

    /**
     * 获取组的所有子用户集合
     *
     * @param group 组
     * @return 子用户集合
     * @throws WTException
     */
    public static WTSet getChildUsers(WTGroup group) throws WTException {
        WTHashSet set = new WTHashSet();
        if (group != null) {
            Enumeration enumeration = OrganizationServicesHelper.manager.members(group, true);
            if (enumeration != null) {
                while (enumeration.hasMoreElements()) {
                    Object nextElement = enumeration.nextElement();
                    set.add(nextElement);
                }
            }
        }
        return set;
    }

    /**
     * 判断用户是否为组成员
     *
     * @param group 组
     * @param user  用户
     * @return true代表是组成员
     * @throws WTException
     */
    public static boolean isGroupMember(WTGroup group, WTUser user) throws WTException {
        boolean flag = false;
        if (group != null && user != null) {
            flag = OrganizationServicesHelper.manager.isMember(group, user);
            if (!flag) {
                WTSet users = getChildUsers(group);
                if (users.contains(user)) {
                    flag = true;
                }
            }
        }
        return flag;
    }

    /**
     * 判断目标组是否为源组成员
     *
     * @param source 源组
     * @param target 目标组
     * @return true代表是源组成员
     * @throws WTException
     */
    public static boolean isGroupMember(WTGroup source, WTGroup target) throws WTException {
        boolean flag = false;
        if (source != null && target != null) {
            flag = OrganizationServicesHelper.manager.isMember(source, target);
            if (!flag) {
                WTSet groups = getChildGroups(source);
                if (groups.contains(target)) {
                    flag = true;
                }
            }
        }
        return flag;
    }

    /**
     * 判断参与者是否为组成员
     *
     * @param group     组
     * @param principal 参与者(常指用户/组)
     * @return true代表是组成员
     * @throws WTException
     */
    public static boolean isGroupMember(WTGroup group, WTPrincipal principal) throws WTException {
        boolean flag = false;
        if (group != null && principal != null) {
            if (principal instanceof WTGroup) {
                WTGroup target = (WTGroup) principal;
                flag = isGroupMember(group, target);
            } else if (principal instanceof WTUser) {
                WTUser user = (WTUser) principal;
                flag = isGroupMember(group, user);
            } else {
                flag = OrganizationServicesHelper.manager.isMember(group, principal);
            }
        }
        return flag;
    }

    /**
     * WTCollection转化为ObjectVector
     *
     * @param collection 集合
     * @return
     */
    public static ObjectVectorIfc parseWTCollection2ObjectVector(WTCollection collection) {
        Vector<Persistable> vector = new Vector<>(collection.persistableCollection());
        ObjectVectorIfc vectorIfc = new ObjectVector(vector);
        return vectorIfc;
    }

    /**
     * 将对象添加到结果集
     *
     * @param queryResult 结果集
     * @param map         对象map
     * @return 结果集
     */
    public static QueryResult append2QueryResult(QueryResult queryResult, WTKeyedMap map) {
        if (queryResult == null) {
            queryResult = new QueryResult();
        }
        if (map != null) {
            for (Object key : map.keySet()) {
                Object value = map.get(key);
                if (value != null && value instanceof WTCollection) {
                    WTCollection collection = (WTCollection) value;
                    ObjectVectorIfc vectorIfc = parseWTCollection2ObjectVector(collection);
                    queryResult.append(vectorIfc);
                }
            }
        }
        return queryResult;
    }
}
http://www.dtcms.com/a/121211.html

相关文章:

  • 【项目实训项目博客】prompt初版实践
  • 流浪动物管理系统设计与实现(代码+数据库+LW)
  • 《系统分析师-案例实践篇-16-22章总结》
  • 图灵逆向——题七-千山鸟飞绝
  • 封装方法的辨析
  • MuMu 模拟器过检测技术全解析
  • 牛客 小苯的Z串匹配
  • 隐性需求未识别,项目后期如何补救
  • 这是专业翻译的生产力工具
  • 远程团队协作效率低,如何优化
  • AI开发学习路线(闯关升级版)
  • Kairos 的野望:构建“智能体即服务”生态,让万物皆可 “Agent”
  • Python标准库-logging
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(十二)
  • list的底层:
  • 进度管理__制订进度计划_资源平衡和资源平滑
  • DEM精度、地形图比例尺与卫星遥感分辨率的奇妙关系
  • floyd模板
  • SpringBoot无法访问静态资源文件CSS、Js问题
  • 未来 AI 发展趋势与挑战(AGI、数据安全、监管政策)
  • 2025 年 AI 编程新风向:从智能辅助到自主开发的跨越
  • 机器学习的下一个前沿是因果关系吗?
  • nginx介绍和几种安装方法
  • MCP协议介绍
  • Leetcode hot100 (day 8,9)
  • k8s node inode被耗尽如何处理?
  • 解决前后端时区不一致问题
  • Redis与Mysql双写一致性如何保证?
  • 图灵逆向——题十-魔改算法
  • Tigshop| 一个基于Java的开源商城系统