List of usage examples for org.apache.commons.collections CollectionUtils union
public static Collection union(final Collection a, final Collection b)
From source file:com.adaptris.core.runtime.RetryMessageErrorHandlerMonitorTest.java
private void registerMBeans(AdapterManager mgr) throws Exception { register(CollectionUtils.union(Arrays.asList(new BaseComponentMBean[] { mgr }), mgr.getAllDescendants())); }
From source file:net.sf.jdmf.algorithms.association.AprioriAlgorithm.java
/** * Finds k-item sets based on (k - 1)-item sets. *///from w w w .ja v a 2 s . co m @SuppressWarnings("unchecked") protected List<Set<Item>> findCurrentItemSets(List<Set<Item>> previousItemSets, List<Instance> instances) { List<Set<Item>> currentItemSets = new ArrayList<Set<Item>>(); while (previousItemSets.size() > 1) { Set<Item> firstItemSet = null; Iterator<Set<Item>> itemSetsIterator = previousItemSets.iterator(); while (itemSetsIterator.hasNext()) { Set<Item> itemSet = itemSetsIterator.next(); if (firstItemSet != null) { Set<Item> currentItemSet = new LinkedHashSet<Item>(); currentItemSet.addAll(CollectionUtils.union(firstItemSet, itemSet)); if ((calculateCoverage(currentItemSet, instances) >= minRuleCoverage) && (currentItemSets.contains(currentItemSet) == false)) { currentItemSets.add(currentItemSet); } } else { firstItemSet = itemSet; } } previousItemSets.remove(firstItemSet); } return currentItemSets; }
From source file:com.yahoo.elide.graphql.ModelBuilder.java
/** * Builds a GraphQL schema./*w w w .j ava2s . c o m*/ * @return The built schema. */ public GraphQLSchema build() { Set<Class<?>> allClasses = dictionary.getBindings(); if (allClasses.isEmpty()) { throw new IllegalArgumentException("None of the provided classes are exported by Elide"); } Set<Class<?>> rootClasses = allClasses.stream().filter(dictionary::isRoot).collect(Collectors.toSet()); /* * Walk the object graph (avoiding cycles) and construct the GraphQL input object types. */ dictionary.walkEntityGraph(rootClasses, this::buildInputObjectStub); resolveInputObjectRelationships(); /* Construct root object */ GraphQLObjectType.Builder root = newObject().name("__root"); for (Class<?> clazz : rootClasses) { String entityName = dictionary.getJsonAliasFor(clazz); root.field(newFieldDefinition().name(entityName).dataFetcher(dataFetcher).argument(relationshipOpArg) .argument(idArgument).argument(filterArgument).argument(sortArgument) .argument(pageFirstArgument).argument(pageOffsetArgument) .argument(buildInputObjectArgument(clazz, true)).type(buildConnectionObject(clazz))); } GraphQLObjectType queryRoot = root.build(); GraphQLObjectType mutationRoot = root.name("__mutation_root").build(); /* * Walk the object graph (avoiding cycles) and construct the GraphQL output object types. */ dictionary.walkEntityGraph(rootClasses, this::buildConnectionObject); /* Construct the schema */ GraphQLSchema schema = GraphQLSchema.newSchema().query(queryRoot).mutation(mutationRoot) .build(new HashSet<>( CollectionUtils.union(connectionObjectRegistry.values(), inputObjectRegistry.values()))); return schema; }
From source file:com.silverwrist.dynamo.security.AclObject.java
public Enumeration getPermissions(Principal user) { PrincipalID prid = new PrincipalID(user); Collection rc = null;/*from ww w . jav a2 s . co m*/ try { // is this for a user or a group? if (prid.isGroup()) { // compute permissions only for the group itself // (everything that appears in positive set but not in negative set) Set positive = m_ops.getGroupPermissionSetForGroup(m_aclid, prid.getID(), false); Set negative = m_ops.getGroupPermissionSetForGroup(m_aclid, prid.getID(), true); rc = CollectionUtils.subtract(positive, negative); } // end if else { // compute permissions for the user and for all groups of which the user is a member Set pos_group = m_ops.getGroupPermissionSetForUser(m_aclid, prid.getID(), false); Set neg_group = m_ops.getGroupPermissionSetForUser(m_aclid, prid.getID(), true); Set pos_user = m_ops.getUserPermissionSet(m_aclid, prid.getID(), false); Set neg_user = m_ops.getUserPermissionSet(m_aclid, prid.getID(), true); // "Real" groups have been normalized by removing all elements present in the corresponding // "other" group as well Collection real_pos_group = CollectionUtils.subtract(pos_group, neg_group); Collection real_neg_group = CollectionUtils.subtract(neg_group, pos_group); Collection real_pos_user = CollectionUtils.subtract(pos_user, neg_user); Collection real_neg_user = CollectionUtils.subtract(neg_user, pos_user); // "grant_group" = all permissions granted by the groups and not explicitly denied by user Collection grant_group = CollectionUtils.subtract(real_pos_group, real_neg_user); // "deny_group" = all permissions denied by the groups and not explicitly granted by user Collection deny_group = CollectionUtils.subtract(real_neg_group, real_pos_user); // "grant" - all grants from user plus all surviving grants from groups Collection grant = CollectionUtils.union(real_pos_user, grant_group); // "deny" - all denies from user plus all surviving denies from groups Collection deny = CollectionUtils.union(real_neg_user, deny_group); rc = CollectionUtils.subtract(grant, deny); } // end else } // end try catch (DatabaseException e) { // translate this into a SecurityRuntimeException throw new SecurityRuntimeException(e); } // end catch // Compute the proper return value. if (rc.isEmpty()) return Collections.enumeration(Collections.EMPTY_LIST); ArrayList real_rc = new ArrayList(rc.size()); Iterator it = rc.iterator(); while (it.hasNext()) { // transform PropertyKey values into PermObjects PropertyKey pk = (PropertyKey) (it.next()); real_rc.add(new PermObject(pk, m_ns_cache)); } // end while return Collections.enumeration(real_rc); }
From source file:com.wingnest.play2.origami.plugin.OrigamiPlugin.java
private void registerGraphClasses() { final OGraphDatabase db = GraphDB.open(); try {/* ww w. j a v a 2s . co m*/ debug("Registering Graph Classes"); final Set<Class<GraphVertexModel>> vertexClasses = new HashSet<Class<GraphVertexModel>>(); final Set<Class<GraphEdgeModel>> edgeClasses = new HashSet<Class<GraphEdgeModel>>(); for (String pkg : models) { vertexClasses.addAll(getSubTypesOf(pkg, GraphVertexModel.class)); edgeClasses.addAll(getSubTypesOf(pkg, GraphEdgeModel.class)); } @SuppressWarnings("unchecked") final Collection<Class<?>> javaClasses = CollectionUtils.union(vertexClasses, edgeClasses); final Class<?>[] javaClassArray = javaClasses.toArray(new Class<?>[0]); Arrays.sort(javaClassArray, new Comparator<Class<?>>() { @Override public int compare(Class<?> o1, Class<?> o2) { if (o1.equals(o2)) return 0; if (o1.isAssignableFrom(o2)) return -1; if (o2.isAssignableFrom(o1)) return 1; int o1cnt = calSuperclassCount(o1); int o2cnt = calSuperclassCount(o2); return (o1cnt - o2cnt); } }); javaClasses.clear(); javaClasses.addAll(Arrays.asList(javaClassArray)); final OSchema schema = db.getMetadata().getSchema(); for (final Class<?> javaClass : javaClasses) { final String entityName = javaClass.getSimpleName(); final OClass oClass; if (GraphVertexModel.class.isAssignableFrom(javaClass)) { final String className = javaClass.getSimpleName(); debug("Entity: %s", className); if (schema.existsClass(className)) { oClass = schema.getClass(className); } else { oClass = db.createVertexType(className); } graphEntityMap.put(className, javaClass); final Class<?> sclass = javaClass.getSuperclass(); if (javaClasses.contains(sclass)) { final OClass sClass = db.getMetadata().getSchema().getClass(sclass.getSimpleName()); db.getMetadata().getSchema().getClass(entityName).setSuperClass(sClass); } } else if (GraphEdgeModel.class.isAssignableFrom(javaClass)) { final String className = javaClass.getSimpleName(); debug("Entity: %s", className); if (schema.existsClass(className)) { oClass = schema.getClass(className); } else { oClass = db.createEdgeType(className); } graphEntityMap.put(className, javaClass); final Class<?> sclass = javaClass.getSuperclass(); if (javaClasses.contains(sclass)) { final OClass sClass = db.getMetadata().getSchema().getClass(sclass.getSimpleName()); db.getMetadata().getSchema().getClass(entityName).setSuperClass(sClass); } } else { throw new IllegalStateException("bug!?"); } maintainProperties(oClass, javaClass); } debug("Registering Database Listeners"); for (final Class<? extends ODatabaseListener> listener : getSubTypesOf("listeners", ODatabaseListener.class)) { debug("Listener: %s", listener.getName()); GraphDB.getListeners().add(listener); } debug("Registering Record Hooks"); for (final Class<? extends ORecordHook> hook : getSubTypesOf("hooks", ORecordHook.class)) { debug("Hook: %s", hook.getName()); GraphDB.getGraphHooks().add(hook); } } catch (Exception e) { throw new OrigamiUnexpectedException(e); } finally { db.close(); } }
From source file:edu.uci.ics.jung.utils.GraphUtils.java
/** * Returns a graph which consists of the union of the two input graphs. * Assumes that both graphs are of a type that can accept the vertices * and edges found in both graphs.//from w ww.jav a2 s . c o m * The resultant graph contains all constraints that are common to both graphs. */ public static ArchetypeGraph union(ArchetypeGraph g1, ArchetypeGraph g2) { ArchetypeGraph g = g1.newInstance(); // g.getEdgeConstraints().clear(); g.getEdgeConstraints() .addAll(CollectionUtils.intersection(g1.getEdgeConstraints(), g2.getEdgeConstraints())); Collection vertices = CollectionUtils.union(g1.getVertices(), g2.getVertices()); Collection edges = CollectionUtils.union(g1.getEdges(), g2.getEdges()); for (Iterator v_iter = vertices.iterator(); v_iter.hasNext();) { ArchetypeVertex v = (ArchetypeVertex) v_iter.next(); v.copy(g); } for (Iterator e_iter = edges.iterator(); e_iter.hasNext();) { ArchetypeEdge e = (ArchetypeEdge) e_iter.next(); e.copy(g); } return g; }
From source file:com.perceptive.epm.perkolcentral.bl.EmployeeBL.java
@TriggersRemove(cacheName = { "EmployeeCache", "GroupCache", "EmployeeKeyedByGroupCache" }, when = When.AFTER_METHOD_INVOCATION, removeAll = true, keyGenerator = @KeyGenerator(name = "HashCodeCacheKeyGenerator", properties = @Property(name = "includeMethod", value = "false"))) @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE, rollbackFor = ExceptionWrapper.class) public void updateAllEmployee(List<EmployeeBO> employeeListFromLDAP) throws ExceptionWrapper { try {//w w w . j a v a 2 s . c om String messageTemplateAdded = "<html>\n" + "<head>\n" + "</head>\n" + "\n" + "<body style=\"font:Georgia; font-size:12px;\">\n" + "<p>Dear All,</p>\n" + "<blockquote>\n" + " <p>A new user is added to the system.</p>\n" + "</blockquote>\n" + "<ul>\n" + " <li><strong><em>User Name</em></strong>: <strong>%s</strong></li>\n" + " <li><em><strong>User Short Id</strong></em>: <strong>%s</strong></li>\n" + " <li><em><strong>Employee Id</strong></em>: <strong>%s</strong></li>\n" + " <li><strong><em>User Email-Id</em></strong>:<strong> %s</strong></li>\n" + " <li><em><strong>Mobile Number</strong></em>:<strong> %s</strong></li>\n" + " <li><em><strong>Job Title</strong></em> : <strong>%s</strong></li>\n" + "</ul>\n" + "<p>Please take necessary actions.</p>\n" + "<p>Thanks,</p>\n" + "<blockquote>\n" + " <p>Perceptive Kolkata Central</p>\n" + "</blockquote>\n" + "</body>\n" + "</html>"; String messageTemplateDeleted = "<html>\n" + "<head>\n" + "</head>\n" + "\n" + "<body style=\"font:Georgia; font-size:12px;\">\n" + "<p>Dear All,</p>\n" + "<blockquote>\n" + " <p>An user is removed from the system.</p>\n" + "</blockquote>\n" + "<ul>\n" + " <li><strong><em>User Name</em></strong>: <strong>%s</strong></li>\n" + " <li><em><strong>User Short Id</strong></em>: <strong>%s</strong></li>\n" + " <li><em><strong>Employee Id</strong></em>: <strong>%s</strong></li>\n" + " <li><strong><em>User Email-Id</em></strong>:<strong> %s</strong></li>\n" + " <li><em><strong>Mobile Number</strong></em>:<strong> %s</strong></li>\n" + " <li><em><strong>Job Title</strong></em> : <strong>%s</strong></li>\n" + "</ul>\n" + "<p>Please take necessary actions.</p>\n" + "<p>Thanks,</p>\n" + "<blockquote>\n" + " <p>Perceptive Kolkata Central</p>\n" + "</blockquote>\n" + "</body>\n" + "</html>"; LinkedHashMap<Long, EmployeeBO> employeeLinkedHashMap = employeeDataAccessor.getAllEmployees(); for (EmployeeBO employeeBO : employeeListFromLDAP) { if (!employeeLinkedHashMap.containsKey(Long.valueOf(employeeBO.getEmployeeId()))) { //Add a new employee Employee employee = new Employee(); employee.setEmployeeId(Long.parseLong(employeeBO.getEmployeeId())); employee.setEmail(employeeBO.getEmail()); employee.setEmployeeName(employeeBO.getEmployeeName()); employee.setEmployeeUid(employeeBO.getEmployeeUid()); employee.setJobTitle(employeeBO.getJobTitle()); employee.setMobileNumber(employeeBO.getMobileNumber()); employee.setManager(employeeBO.getManager()); employee.setManagerEmail(employeeBO.getManagerEmail()); employee.setExtensionNum(employeeBO.getExtensionNum()); employee.setWorkspace(employeeBO.getWorkspace()); employee.setIsActive(true); employeeDataAccessor.addEmployee(employee); LoggingHelpUtil.printDebug(String.format("Adding user ----> %s with details %s %s", employeeBO.getEmployeeName(), System.getProperty("line.separator"), ReflectionToStringBuilder.toString(employeeBO))); //Send the mail HtmlEmail emailToSend = new HtmlEmail(); emailToSend.setHostName(email.getHostName()); String messageToSend = String.format(messageTemplateAdded, employeeBO.getEmployeeName(), employeeBO.getEmployeeUid(), employeeBO.getEmployeeId().toString(), employeeBO.getEmail(), employeeBO.getMobileNumber(), employeeBO.getJobTitle()); emailToSend.setHtmlMsg(messageToSend); //emailToSend.setTextMsg(StringEscapeUtils.escapeHtml(messageToSend)); emailToSend.getToAddresses().clear(); //Send mail to scrum masters and Development Managers Group Id 15 Collection<EmployeeBO> allEmployeesNeedToGetMail = CollectionUtils.union( getAllEmployeesKeyedByGroupId().get(Integer.valueOf("14")), getAllEmployeesKeyedByGroupId().get(Integer.valueOf("15"))); for (EmployeeBO item : allEmployeesNeedToGetMail) { emailToSend.addTo(item.getEmail(), item.getEmployeeName()); } emailToSend.addTo(employeeBO.getManagerEmail(), employeeBO.getManager());//Send the mail to manager //emailToSend.setFrom("PerceptiveKolkataCentral@perceptivesoftware.com", "Perceptive Kolkata Central"); emailToSend.setFrom("EnterpriseSoftwareKolkata@lexmark.com", "Enterprise Software Kolkata"); emailToSend.setSubject(String.format("New employee added : %s", employeeBO.getEmployeeName())); emailToSend.send(); //==========================Mail send ends here=========================================================================================================== //sendMailToPerceptiveOpsTeam(employeeBO);//Send mail to operations team in Shawnee } else { //Update a new employee employeeDataAccessor.updateEmployee(employeeBO); LoggingHelpUtil.printDebug(String.format("Updating user ----> %s with details %s %s", employeeBO.getEmployeeName(), System.getProperty("line.separator"), ReflectionToStringBuilder.toString(employeeBO))); } //======================================================================================================================================== } //Delete employees if any for (Object obj : employeeLinkedHashMap.values()) { final EmployeeBO emp = (EmployeeBO) obj; if (!CollectionUtils.exists(employeeListFromLDAP, new Predicate() { @Override public boolean evaluate(Object o) { return emp.getEmployeeId().trim().equalsIgnoreCase(((EmployeeBO) o).getEmployeeId().trim()); //To change body of implemented methods use File | Settings | File Templates. } })) { emp.setActive(false); //Soft delete the Employee employeeDataAccessor.updateEmployee(emp);//Rest deletion will be taken care by the Trigger AFTER_EMPLOYEE_UPDATE LoggingHelpUtil.printDebug( String.format("Deleting user ----> %s with details %s %s", emp.getEmployeeName(), System.getProperty("line.separator"), ReflectionToStringBuilder.toString(emp))); //Send the mail HtmlEmail emailToSend = new HtmlEmail(); emailToSend.setHostName(email.getHostName()); String messageToSend = String.format(messageTemplateDeleted, emp.getEmployeeName(), emp.getEmployeeUid(), emp.getEmployeeId().toString(), emp.getEmail(), emp.getMobileNumber(), emp.getJobTitle()); emailToSend.setHtmlMsg(messageToSend); //emailToSend.setTextMsg(StringEscapeUtils.escapeHtml(messageToSend)); emailToSend.getToAddresses().clear(); //Send mail to scrum masters ==Group ID 14 and Development Managers Group Id 15 Collection<EmployeeBO> allEmployeesNeedToGetMail = CollectionUtils.union( getAllEmployeesKeyedByGroupId().get(Integer.valueOf("14")), getAllEmployeesKeyedByGroupId().get(Integer.valueOf("15"))); for (EmployeeBO item : allEmployeesNeedToGetMail) { emailToSend.addTo(item.getEmail(), item.getEmployeeName()); } //emailToSend.setFrom("PerceptiveKolkataCentral@perceptivesoftware.com", "Perceptive Kolkata Central"); emailToSend.setFrom("EnterpriseSoftwareKolkata@lexmark.com", "Enterprise Software Kolkata"); emailToSend.setSubject(String.format("Employee removed : %s", emp.getEmployeeName())); emailToSend.send(); } } luceneUtil.indexUserInfo(getAllEmployees().values()); } catch (Exception ex) { throw new ExceptionWrapper(ex); } }
From source file:com.mirth.connect.client.ui.Frame.java
private void loadExtensionMetaData() throws ClientException { loadedPlugins = mirthClient.getPluginMetaData(); loadedConnectors = mirthClient.getConnectorMetaData(); // Register extension JAX-RS providers with the client Set<String> apiProviderPackages = new HashSet<String>(); Set<String> apiProviderClasses = new HashSet<String>(); for (Object extensionMetaData : CollectionUtils.union(loadedPlugins.values(), loadedConnectors.values())) { MetaData metaData = (MetaData) extensionMetaData; for (ApiProvider provider : metaData.getApiProviders(Version.getLatest())) { switch (provider.getType()) { case SERVLET_INTERFACE_PACKAGE: case CORE_PACKAGE: apiProviderPackages.add(provider.getName()); break; case SERVLET_INTERFACE: case CORE_CLASS: apiProviderClasses.add(provider.getName()); break; default: }//w ww .j a v a 2 s .c o m } } mirthClient.registerApiProviders(apiProviderPackages, apiProviderClasses); }
From source file:nl.strohalm.cyclos.services.accounts.AccountTypeServiceImpl.java
@SuppressWarnings("unchecked") @Override/* w w w . j av a2s.co m*/ public Collection<AccountType> getVisibleAccountTypes() { if (LoggedUser.isSystem()) { return (Collection<AccountType>) listAll(); } if (!LoggedUser.hasUser()) { // Not system and no user - nothing is visible return Collections.emptyList(); } final Group group = LoggedUser.group(); return getCache().get("_VISIBLE_" + group.getId(), new CacheCallback() { @Override public Object retrieve() { Collection<AccountType> result; if (permissionService.permission().admin(AdminSystemPermission.ACCOUNTS_VIEW).hasPermission()) { result = (Collection<AccountType>) listAll(); } else { if (LoggedUser.isOperator()) { OperatorGroup group = LoggedUser.group(); result = fetchService.fetch(group, OperatorGroup.Relationships.CAN_VIEW_INFORMATION_OF) .getCanViewInformationOf(); } else { MemberAccountTypeQuery memberQuery = new MemberAccountTypeQuery(); memberQuery.setRelatedToGroups(permissionService.getManagedMemberGroups()); result = (Collection<AccountType>) search(memberQuery); // A logged admin can see both system and member account types if (LoggedUser.isAdministrator()) { AdminGroup group = LoggedUser.group(); Collection<SystemAccountType> systemTypes = fetchService .fetch(group, AdminGroup.Relationships.VIEW_INFORMATION_OF) .getViewInformationOf(); result = CollectionUtils.union(result, systemTypes); } } } return fetchService.fetch(result, AccountType.Relationships.CURRENCY); } }); }
From source file:nl.strohalm.cyclos.services.groups.GroupServiceImpl.java
@SuppressWarnings("unchecked") private <G extends Group> G save(G group) { if (group.isTransient()) { group = groupDao.insert(group);// ww w .j av a 2 s . c o m } else { // We must keep the many-to-many relationships, or they would be cleared... final Group currentGroup = load(group.getId(), FETCH_TO_KEEP_DATA); group.setPermissions(new HashSet<Permission>(currentGroup.getPermissions())); group.setTransferTypes(new ArrayList<TransferType>(currentGroup.getTransferTypes())); group.setConversionSimulationTTs( new ArrayList<TransferType>(currentGroup.getConversionSimulationTTs())); group.setGuaranteeTypes(new ArrayList<GuaranteeType>(currentGroup.getGuaranteeTypes())); if (group instanceof SystemGroup) { final SystemGroup systemGroup = (SystemGroup) group; final SystemGroup currentSystemGroup = ((SystemGroup) currentGroup); systemGroup.setDocuments(new ArrayList<Document>(currentSystemGroup.getDocuments())); systemGroup.setMessageCategories( new ArrayList<MessageCategory>(currentSystemGroup.getMessageCategories())); systemGroup.setChargebackTransferTypes( new ArrayList<TransferType>(currentSystemGroup.getChargebackTransferTypes())); } if (group instanceof AdminGroup) { final AdminGroup adminGroup = (AdminGroup) group; final AdminGroup currentAdminGroup = ((AdminGroup) currentGroup); adminGroup.setTransferTypesAsMember( new ArrayList<TransferType>(currentAdminGroup.getTransferTypesAsMember())); adminGroup.setManagesGroups(new ArrayList<MemberGroup>(currentAdminGroup.getManagesGroups())); adminGroup.setViewConnectedAdminsOf( new ArrayList<AdminGroup>(currentAdminGroup.getViewConnectedAdminsOf())); adminGroup.setViewInformationOf( new ArrayList<SystemAccountType>(currentAdminGroup.getViewInformationOf())); adminGroup.setViewAdminRecordTypes( new ArrayList<MemberRecordType>(currentAdminGroup.getViewAdminRecordTypes())); adminGroup.setCreateAdminRecordTypes( new ArrayList<MemberRecordType>(currentAdminGroup.getCreateAdminRecordTypes())); adminGroup.setModifyAdminRecordTypes( new ArrayList<MemberRecordType>(currentAdminGroup.getModifyAdminRecordTypes())); adminGroup.setDeleteAdminRecordTypes( new ArrayList<MemberRecordType>(currentAdminGroup.getDeleteAdminRecordTypes())); adminGroup.setViewMemberRecordTypes( new ArrayList<MemberRecordType>(currentAdminGroup.getViewMemberRecordTypes())); adminGroup.setCreateMemberRecordTypes( new ArrayList<MemberRecordType>(currentAdminGroup.getCreateMemberRecordTypes())); adminGroup.setModifyMemberRecordTypes( new ArrayList<MemberRecordType>(currentAdminGroup.getModifyMemberRecordTypes())); adminGroup.setDeleteMemberRecordTypes( new ArrayList<MemberRecordType>(currentAdminGroup.getDeleteMemberRecordTypes())); } if (group instanceof BrokerGroup) { final BrokerGroup brokerGroup = (BrokerGroup) group; final BrokerGroup currentBrokerGroup = (BrokerGroup) currentGroup; final List<Document> brokerDocuments = new ArrayList<Document>(); if (currentBrokerGroup.getBrokerDocuments() != null) { brokerDocuments.addAll(currentBrokerGroup.getBrokerDocuments()); } brokerGroup.setBrokerDocuments(brokerDocuments); final List<AccountType> brokerCanViewInformationOf = new ArrayList<AccountType>(); if (brokerGroup.getBrokerCanViewInformationOf() != null) { brokerCanViewInformationOf.addAll(brokerGroup.getBrokerCanViewInformationOf()); } brokerGroup.setBrokerCanViewInformationOf(brokerCanViewInformationOf); brokerGroup.setTransferTypesAsMember( new ArrayList<TransferType>(currentBrokerGroup.getTransferTypesAsMember())); brokerGroup.setBrokerConversionSimulationTTs( new ArrayList<TransferType>(currentBrokerGroup.getBrokerConversionSimulationTTs())); brokerGroup.setBrokerMemberRecordTypes( new ArrayList<MemberRecordType>(currentBrokerGroup.getBrokerMemberRecordTypes())); brokerGroup.setBrokerCreateMemberRecordTypes( new ArrayList<MemberRecordType>(currentBrokerGroup.getBrokerCreateMemberRecordTypes())); brokerGroup.setBrokerModifyMemberRecordTypes( new ArrayList<MemberRecordType>(currentBrokerGroup.getBrokerModifyMemberRecordTypes())); brokerGroup.setBrokerDeleteMemberRecordTypes( new ArrayList<MemberRecordType>(currentBrokerGroup.getBrokerDeleteMemberRecordTypes())); // "possibleInitialGroups" is updated at edit group screen, so it doesn't need to be copied } if (group instanceof MemberGroup) { final MemberGroup memberGroup = (MemberGroup) group; final MemberGroup currentMemberGroup = (MemberGroup) currentGroup; memberGroup.setAccountSettings(currentMemberGroup.getAccountSettings()); // Ensure that no channel will be set by default if it's not accessible memberGroup.getDefaultChannels().retainAll(memberGroup.getChannels()); // Ensure the removedChannels collection contains the channels which were removed final Collection<Channel> removedChannels = new HashSet<Channel>(); removedChannels.addAll(currentMemberGroup.getChannels()); removedChannels.removeAll(memberGroup.getChannels()); final List<MemberGroup> viewProfile = new ArrayList<MemberGroup>(); if (currentMemberGroup.getCanViewProfileOfGroups() != null) { viewProfile.addAll(currentMemberGroup.getCanViewProfileOfGroups()); } memberGroup.setCanViewProfileOfGroups(viewProfile); final List<AccountType> canViewInformationOf = new ArrayList<AccountType>(); if (currentMemberGroup.getCanViewInformationOf() != null) { canViewInformationOf.addAll(currentMemberGroup.getCanViewInformationOf()); } memberGroup.setCanViewInformationOf(canViewInformationOf); final List<MemberGroup> viewAds = new ArrayList<MemberGroup>(); if (currentMemberGroup.getCanViewAdsOfGroups() != null) { viewAds.addAll(currentMemberGroup.getCanViewAdsOfGroups()); } memberGroup.setCanViewAdsOfGroups(viewAds); final List<AdminGroup> managedByGroups = new ArrayList<AdminGroup>(); if (currentMemberGroup.getManagedByGroups() != null) { managedByGroups.addAll(currentMemberGroup.getManagedByGroups()); } memberGroup.setManagedByGroups(managedByGroups); // "defaultMailMessages" is updated at edit group screen, so it doesn't need to be copied // "smsMessages" is updated at edit group screen, so it doesn't need to be copied // "defaultSmsMessages" is updated at edit group screen, so it doesn't need to be copied // "channels" is updated at edit group screen, so it doesn't need to be copied // "defaultChannels" is updated at edit group screen, so it doesn't need to be copied // Add the main web access to default and accessible channels. final Channel webChannel = channelService.loadByInternalName(Channel.WEB); memberGroup.setChannels( CollectionUtils.union(memberGroup.getChannels(), Collections.singleton(webChannel))); memberGroup.setDefaultChannels( CollectionUtils.union(memberGroup.getDefaultChannels(), Collections.singleton(webChannel))); final List<Channel> requestPaymentByChannels = new ArrayList<Channel>(); if (currentMemberGroup.getRequestPaymentByChannels() != null) { requestPaymentByChannels.addAll(currentMemberGroup.getRequestPaymentByChannels()); } memberGroup.setRequestPaymentByChannels(requestPaymentByChannels); final MemberGroupSettings memberSettings = memberGroup.getMemberSettings(); memberSettings .setGroupAfterExpiration(fetchService.fetch(memberSettings.getGroupAfterExpiration())); // Update the basic settings of operator groups for members in this group final GroupQuery operatorQuery = new GroupQuery(); operatorQuery.setNature(Group.Nature.OPERATOR); operatorQuery.fetch( RelationshipHelper.nested(OperatorGroup.Relationships.MEMBER, Element.Relationships.GROUP)); final List<OperatorGroup> operatorGroups = (List<OperatorGroup>) groupDao.search(operatorQuery); for (final OperatorGroup operatorGroup : operatorGroups) { if (operatorGroup.getMember().getGroup().equals(memberGroup)) { groupDao.update(operatorGroup); } } final List<MemberGroup> canIssueCertificationToGroups = new ArrayList<MemberGroup>(); if (currentMemberGroup.getCanIssueCertificationToGroups() != null) { canIssueCertificationToGroups.addAll(currentMemberGroup.getCanIssueCertificationToGroups()); } memberGroup.setCanIssueCertificationToGroups(canIssueCertificationToGroups); final List<MemberGroup> canBuyWithPaymentObligationsFromGroups = new ArrayList<MemberGroup>(); if (currentMemberGroup.getCanBuyWithPaymentObligationsFromGroups() != null) { canBuyWithPaymentObligationsFromGroups .addAll(currentMemberGroup.getCanBuyWithPaymentObligationsFromGroups()); } memberGroup.setCanBuyWithPaymentObligationsFromGroups(canBuyWithPaymentObligationsFromGroups); // Ensure the message notification types are not present on the group for SMS final Collection<Message.Type> smsMessages = memberGroup.getSmsMessages(); if (smsMessages != null) { smsMessages.remove(Message.Type.FROM_MEMBER); smsMessages.remove(Message.Type.FROM_ADMIN_TO_GROUP); smsMessages.remove(Message.Type.FROM_ADMIN_TO_MEMBER); } final Collection<Type> defaultSmsMessages = memberGroup.getDefaultSmsMessages(); if (defaultSmsMessages != null) { defaultSmsMessages.remove(Message.Type.FROM_MEMBER); defaultSmsMessages.remove(Message.Type.FROM_ADMIN_TO_GROUP); defaultSmsMessages.remove(Message.Type.FROM_ADMIN_TO_MEMBER); } // Remove from all members channels which are no longer accessible elementDao.removeChannelsFromMembers(memberGroup, removedChannels); // ensure activation status if (memberGroup.isRemoved()) { memberGroup.setActive(false); } } if (group instanceof OperatorGroup) { final OperatorGroup operatorGroup = (OperatorGroup) group; final OperatorGroup currentOperatorGroup = (OperatorGroup) currentGroup; // Check the account types final List<AccountType> canViewInformationOf = new ArrayList<AccountType>(); if (currentOperatorGroup.getCanViewInformationOf() != null) { canViewInformationOf.addAll(currentOperatorGroup.getCanViewInformationOf()); } operatorGroup.setCanViewInformationOf(canViewInformationOf); } group = groupDao.update(group); } // Ensure the permissions cache for this group is evicted permissionService.evictCache(group); return group; }