http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/WorkflowServiceImpl.java ---------------------------------------------------------------------- diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/WorkflowServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/WorkflowServiceImpl.java index d3a44e4..30229a6 100644 --- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/WorkflowServiceImpl.java +++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/WorkflowServiceImpl.java @@ -50,7 +50,7 @@ public class WorkflowServiceImpl extends AbstractServiceImpl implements Workflow if (kind == SubjectType.USER) { logic.exportUserDefinition(accept, os); } else { - logic.exportRoleDefinition(accept, os); + logic.exportGroupDefinition(accept, os); } } }; @@ -69,7 +69,7 @@ public class WorkflowServiceImpl extends AbstractServiceImpl implements Workflow if (kind == SubjectType.USER) { logic.exportUserDiagram(os); } else { - logic.exportRoleDiagram(os); + logic.exportGroupDiagram(os); } } }; @@ -89,7 +89,7 @@ public class WorkflowServiceImpl extends AbstractServiceImpl implements Workflow if (kind == SubjectType.USER) { logic.importUserDefinition(contentType, definition); } else { - logic.importRoleDefinition(contentType, definition); + logic.importGroupDefinition(contentType, definition); } }
http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java index 7b532b4..3db5052 100644 --- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java +++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java @@ -68,7 +68,7 @@ import org.apache.syncope.common.lib.types.PropagationByResource; import org.apache.syncope.common.lib.types.ResourceOperation; import org.apache.syncope.common.lib.types.WorkflowFormPropertyType; import org.apache.syncope.core.misc.security.AuthContextUtil; -import org.apache.syncope.core.misc.security.UnauthorizedRoleException; +import org.apache.syncope.core.misc.security.UnauthorizedGroupException; import org.apache.syncope.core.misc.spring.BeanUtils; import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException; import org.apache.syncope.core.persistence.api.attrvalue.validation.ParsingValidationException; @@ -249,7 +249,7 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter { @Override public WorkflowResult<Map.Entry<Long, Boolean>> create(UserTO userTO, boolean storePassword) throws - UnauthorizedRoleException, WorkflowException { + UnauthorizedGroupException, WorkflowException { return create(userTO, false, storePassword); } @@ -445,7 +445,7 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter { @Override public WorkflowResult<Long> execute(final UserTO userTO, final String taskId) - throws UnauthorizedRoleException, WorkflowException { + throws UnauthorizedGroupException, WorkflowException { User user = userDAO.authFetch(userTO.getKey()); @@ -709,8 +709,8 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter { taskCandidateOrAssigned(user.getKey().toString()))); List<String> candidateGroups = new ArrayList<>(); - for (Long roleId : user.getRoleKeys()) { - candidateGroups.add(roleId.toString()); + for (Long groupId : user.getGroupKeys()) { + candidateGroups.add(groupId.toString()); } if (!candidateGroups.isEmpty()) { forms.addAll(getForms(taskService.createTaskQuery(). http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupManager.java ---------------------------------------------------------------------- diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupManager.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupManager.java index 96f0aeb..0033824 100644 --- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupManager.java +++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupManager.java @@ -28,7 +28,7 @@ import org.activiti.engine.impl.GroupQueryImpl; import org.activiti.engine.impl.Page; import org.activiti.engine.impl.persistence.entity.GroupEntity; import org.activiti.engine.impl.persistence.entity.GroupIdentityManager; -import org.apache.syncope.core.persistence.api.dao.RoleDAO; +import org.apache.syncope.core.persistence.api.dao.GroupDAO; import org.apache.syncope.core.persistence.api.dao.UserDAO; import org.apache.syncope.core.persistence.api.entity.user.User; import org.springframework.beans.factory.annotation.Autowired; @@ -39,7 +39,7 @@ public class SyncopeGroupManager implements GroupIdentityManager, SyncopeSession private UserDAO userDAO; @Autowired - private RoleDAO roleDAO; + private GroupDAO groupDAO; @Override public Class<?> getType() { @@ -53,7 +53,7 @@ public class SyncopeGroupManager implements GroupIdentityManager, SyncopeSession @Override public GroupQuery createNewGroupQuery() { - return new SyncopeGroupQueryImpl(roleDAO); + return new SyncopeGroupQueryImpl(groupDAO); } @Override @@ -67,8 +67,8 @@ public class SyncopeGroupManager implements GroupIdentityManager, SyncopeSession User user = userDAO.find(userId); if (user != null) { result = new ArrayList<>(); - for (Long roleId : user.getRoleKeys()) { - result.add(new GroupEntity(roleId.toString())); + for (Long groupId : user.getGroupKeys()) { + result.add(new GroupEntity(groupId.toString())); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupQueryImpl.java ---------------------------------------------------------------------- diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupQueryImpl.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupQueryImpl.java index efa2f4d..1ec4b54 100644 --- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupQueryImpl.java +++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupQueryImpl.java @@ -26,25 +26,24 @@ import org.activiti.engine.ActivitiException; import org.activiti.engine.identity.Group; import org.activiti.engine.identity.GroupQuery; import org.activiti.engine.impl.persistence.entity.GroupEntity; -import org.apache.syncope.core.persistence.api.dao.RoleDAO; -import org.apache.syncope.core.persistence.api.entity.role.Role; +import org.apache.syncope.core.persistence.api.dao.GroupDAO; public class SyncopeGroupQueryImpl implements GroupQuery { - private RoleDAO roleDAO; + private GroupDAO groupDAO; - private Long roleId; + private Long groupId; private List<Group> result; - public SyncopeGroupQueryImpl(final RoleDAO roleDAO) { - this.roleDAO = roleDAO; + public SyncopeGroupQueryImpl(final GroupDAO groupDAO) { + this.groupDAO = groupDAO; } @Override public GroupQuery groupId(final String groupId) { try { - roleId = Long.valueOf(groupId); + this.groupId = Long.valueOf(groupId); } catch (NumberFormatException e) { } @@ -96,23 +95,23 @@ public class SyncopeGroupQueryImpl implements GroupQuery { return this; } - private Group fromSyncopeRole(Role role) { - return new GroupEntity(role.getKey().toString()); + private Group fromSyncopeGroup(final org.apache.syncope.core.persistence.api.entity.group.Group group) { + return new GroupEntity(group.getKey().toString()); } private void execute() { - if (roleId != null) { - Role role = roleDAO.find(roleId); - if (role == null) { + if (groupId != null) { + org.apache.syncope.core.persistence.api.entity.group.Group syncopeGroup = groupDAO.find(groupId); + if (syncopeGroup == null) { result = Collections.emptyList(); } else { - result = Collections.singletonList(fromSyncopeRole(role)); + result = Collections.singletonList(fromSyncopeGroup(syncopeGroup)); } } if (result == null) { - result = new ArrayList<Group>(); - for (Role role : roleDAO.findAll()) { - result.add(fromSyncopeRole(role)); + result = new ArrayList<>(); + for ( org.apache.syncope.core.persistence.api.entity.group.Group syncopeGroup : groupDAO.findAll()) { + result.add(fromSyncopeGroup(syncopeGroup)); } } } http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java ---------------------------------------------------------------------- diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java index 456d241..7112967 100644 --- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java +++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java @@ -33,7 +33,7 @@ import org.activiti.engine.impl.persistence.entity.IdentityInfoEntity; import org.activiti.engine.impl.persistence.entity.UserEntity; import org.activiti.engine.impl.persistence.entity.UserIdentityManager; import org.apache.syncope.core.persistence.api.dao.EntitlementDAO; -import org.apache.syncope.core.persistence.api.dao.RoleDAO; +import org.apache.syncope.core.persistence.api.dao.GroupDAO; import org.apache.syncope.core.persistence.api.dao.UserDAO; import org.springframework.beans.factory.annotation.Autowired; @@ -43,7 +43,7 @@ public class SyncopeUserManager implements UserIdentityManager, SyncopeSession { private UserDAO userDAO; @Autowired - private RoleDAO roleDAO; + private GroupDAO groupDAO; @Autowired private EntitlementDAO entitlementDAO; @@ -65,7 +65,7 @@ public class SyncopeUserManager implements UserIdentityManager, SyncopeSession { @Override public UserQuery createNewUserQuery() { - return new SyncopeUserQueryImpl(userDAO, roleDAO, entitlementDAO); + return new SyncopeUserQueryImpl(userDAO, groupDAO, entitlementDAO); } @Override @@ -79,8 +79,8 @@ public class SyncopeUserManager implements UserIdentityManager, SyncopeSession { org.apache.syncope.core.persistence.api.entity.user.User user = userDAO.find(userKey); if (user != null) { result = new ArrayList<>(); - for (Long roleId : user.getRoleKeys()) { - result.add(new GroupEntity(roleId.toString())); + for (Long groupId : user.getGroupKeys()) { + result.add(new GroupEntity(groupId.toString())); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserQueryImpl.java ---------------------------------------------------------------------- diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserQueryImpl.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserQueryImpl.java index f51d094..43b0306 100644 --- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserQueryImpl.java +++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserQueryImpl.java @@ -25,18 +25,18 @@ import org.activiti.engine.ActivitiException; import org.activiti.engine.identity.User; import org.activiti.engine.identity.UserQuery; import org.activiti.engine.impl.persistence.entity.UserEntity; -import org.apache.syncope.core.persistence.api.RoleEntitlementUtil; +import org.apache.syncope.core.persistence.api.GroupEntitlementUtil; import org.apache.syncope.core.persistence.api.dao.EntitlementDAO; -import org.apache.syncope.core.persistence.api.dao.RoleDAO; +import org.apache.syncope.core.persistence.api.dao.GroupDAO; import org.apache.syncope.core.persistence.api.dao.UserDAO; import org.apache.syncope.core.persistence.api.entity.membership.Membership; -import org.apache.syncope.core.persistence.api.entity.role.Role; +import org.apache.syncope.core.persistence.api.entity.group.Group; public class SyncopeUserQueryImpl implements UserQuery { private UserDAO userDAO; - private RoleDAO roleDAO; + private GroupDAO groupDAO; private EntitlementDAO entitlementDAO; @@ -46,9 +46,9 @@ public class SyncopeUserQueryImpl implements UserQuery { private List<User> result; - public SyncopeUserQueryImpl(final UserDAO userDAO, final RoleDAO roleDAO, final EntitlementDAO entitlementDAO) { + public SyncopeUserQueryImpl(final UserDAO userDAO, final GroupDAO groupDAO, final EntitlementDAO entitlementDAO) { this.userDAO = userDAO; - this.roleDAO = roleDAO; + this.groupDAO = groupDAO; this.entitlementDAO = entitlementDAO; } @@ -142,18 +142,18 @@ public class SyncopeUserQueryImpl implements UserQuery { if (user == null) { result = Collections.<User>emptyList(); } else { - if (memberOf == null || user.getRoleKeys().contains(memberOf)) { + if (memberOf == null || user.getGroupKeys().contains(memberOf)) { result = Collections.singletonList(fromSyncopeUser(user)); } } } if (memberOf != null) { - Role role = roleDAO.find(memberOf); - if (role == null) { + Group group = groupDAO.find(memberOf); + if (group == null) { result = Collections.<User>emptyList(); } else { result = new ArrayList<>(); - List<Membership> memberships = roleDAO.findMemberships(role); + List<Membership> memberships = groupDAO.findMemberships(group); User user; for (Membership membership : memberships) { user = fromSyncopeUser(membership.getUser()); @@ -168,7 +168,7 @@ public class SyncopeUserQueryImpl implements UserQuery { result = new ArrayList<>(); List<org.apache.syncope.core.persistence.api.entity.user.User> users = - userDAO.findAll(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), page, itemsPerPage); + userDAO.findAll(GroupEntitlementUtil.getGroupKeys(entitlementDAO.findAll()), page, itemsPerPage); for (org.apache.syncope.core.persistence.api.entity.user.User user : users) { result.add(fromSyncopeUser(user)); } http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-activiti/src/main/resources/workflow.properties ---------------------------------------------------------------------- diff --git a/core/workflow-activiti/src/main/resources/workflow.properties b/core/workflow-activiti/src/main/resources/workflow.properties index 04e7d05..5a975cf 100644 --- a/core/workflow-activiti/src/main/resources/workflow.properties +++ b/core/workflow-activiti/src/main/resources/workflow.properties @@ -17,4 +17,4 @@ wf.directory=${conf.directory} jobExecutorActivate=true uwfAdapter=org.apache.syncope.core.workflow.activiti.ActivitiUserWorkflowAdapter -rwfAdapter=org.apache.syncope.core.workflow.java.DefaultRoleWorkflowAdapter \ No newline at end of file +gwfAdapter=org.apache.syncope.core.workflow.java.DefaultGroupWorkflowAdapter http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/GroupWorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/GroupWorkflowAdapter.java b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/GroupWorkflowAdapter.java new file mode 100644 index 0000000..26864ba --- /dev/null +++ b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/GroupWorkflowAdapter.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.workflow.api; + +import org.apache.syncope.core.provisioning.api.WorkflowResult; +import org.apache.syncope.common.lib.mod.GroupMod; +import org.apache.syncope.common.lib.to.GroupTO; + +/** + * Interface for calling underlying workflow implementations. + */ +public interface GroupWorkflowAdapter extends WorkflowAdapter { + + /** + * Create a group. + * + * @param groupTO group to be created and whether to propagate it as active + * @return group just created + */ + WorkflowResult<Long> create(GroupTO groupTO); + + /** + * Execute a task on a group. + * + * @param groupTO group to be subject to task + * @param taskId to be executed + * @return group just updated + */ + WorkflowResult<Long> execute(GroupTO groupTO, String taskId); + + /** + * Update a group. + * + * @param groupMod modification set to be performed + * @return group just updated and propagations to be performed + */ + WorkflowResult<Long> update(GroupMod groupMod); + + /** + * Delete a group. + * + * @param groupKey group to be deleted + */ + void delete(Long groupKey); +} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/RoleWorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/RoleWorkflowAdapter.java b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/RoleWorkflowAdapter.java deleted file mode 100644 index ce67a4d..0000000 --- a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/RoleWorkflowAdapter.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.syncope.core.workflow.api; - -import org.apache.syncope.core.provisioning.api.WorkflowResult; -import org.apache.syncope.common.lib.mod.RoleMod; -import org.apache.syncope.common.lib.to.RoleTO; -import org.apache.syncope.core.persistence.api.dao.NotFoundException; - -/** - * Interface for calling underlying workflow implementations. - */ -public interface RoleWorkflowAdapter extends WorkflowAdapter { - - /** - * Create a role. - * - * @param roleTO role to be created and wether to propagate it as active - * @return role just created - * @throws WorkflowException workflow exception - */ - WorkflowResult<Long> create(RoleTO roleTO) throws WorkflowException; - - /** - * Execute a task on a role. - * - * @param roleTO role to be subject to task - * @param taskId to be executed - * @return role just updated - * @throws NotFoundException role not found exception - * @throws WorkflowException workflow exception - */ - WorkflowResult<Long> execute(RoleTO roleTO, String taskId) - throws NotFoundException, WorkflowException; - - /** - * Update a role. - * - * @param roleMod modification set to be performed - * @return role just updated and propagations to be performed - * @throws NotFoundException role not found exception - * @throws WorkflowException workflow exception - */ - WorkflowResult<Long> update(RoleMod roleMod) - throws NotFoundException, WorkflowException; - - /** - * Delete a role. - * - * @param roleKey role to be deleted - * @throws NotFoundException role not found exception - * @throws WorkflowException workflow exception - */ - void delete(Long roleKey) throws NotFoundException, WorkflowException; -} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/UserWorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/UserWorkflowAdapter.java b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/UserWorkflowAdapter.java index 6475bcc..f91b83f 100644 --- a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/UserWorkflowAdapter.java +++ b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/UserWorkflowAdapter.java @@ -35,10 +35,8 @@ public interface UserWorkflowAdapter extends WorkflowAdapter { * @param userTO user to be created and whether to propagate it as active * @param storePassword whether password shall be stored into the internal storage * @return user just created - * @throws WorkflowException workflow exception */ - WorkflowResult<Map.Entry<Long, Boolean>> create(UserTO userTO, boolean storePassword) - throws WorkflowException; + WorkflowResult<Map.Entry<Long, Boolean>> create(UserTO userTO, boolean storePassword); /** * Create an user, optionally disabling password policy check. @@ -47,10 +45,9 @@ public interface UserWorkflowAdapter extends WorkflowAdapter { * @param disablePwdPolicyCheck disable password policy check? * @param storePassword whether password shall be stored into the internal storage * @return user just created - * @throws WorkflowException workflow exception */ - WorkflowResult<Map.Entry<Long, Boolean>> create(UserTO userTO, boolean disablePwdPolicyCheck, - boolean storePassword) throws WorkflowException; + WorkflowResult<Map.Entry<Long, Boolean>> create( + UserTO userTO, boolean disablePwdPolicyCheck, boolean storePassword); /** * Create an user, optionally disabling password policy check. @@ -60,10 +57,9 @@ public interface UserWorkflowAdapter extends WorkflowAdapter { * @param enabled specify true/false to force active/supended status * @param storePassword whether password shall be stored into the internal storage * @return user just created - * @throws WorkflowException workflow exception */ - WorkflowResult<Map.Entry<Long, Boolean>> create(UserTO userTO, boolean disablePwdPolicyCheck, final Boolean enabled, - boolean storePassword) throws WorkflowException; + WorkflowResult<Map.Entry<Long, Boolean>> create( + UserTO userTO, boolean disablePwdPolicyCheck, final Boolean enabled, boolean storePassword); /** * Execute a task on an user. @@ -71,9 +67,8 @@ public interface UserWorkflowAdapter extends WorkflowAdapter { * @param userTO user to be subject to task * @param taskId to be executed * @return user just updated - * @throws WorkflowException workflow exception */ - WorkflowResult<Long> execute(UserTO userTO, String taskId) throws WorkflowException; + WorkflowResult<Long> execute(UserTO userTO, String taskId); /** * Activate an user. @@ -81,54 +76,47 @@ public interface UserWorkflowAdapter extends WorkflowAdapter { * @param userKey user to be activated * @param token to be verified for activation * @return user just updated - * @throws WorkflowException workflow exception */ - WorkflowResult<Long> activate(Long userKey, String token) throws WorkflowException; + WorkflowResult<Long> activate(Long userKey, String token); /** * Update an user. * * @param userMod modification set to be performed * @return user just updated and propagations to be performed - * @throws WorkflowException workflow exception */ - WorkflowResult<Map.Entry<UserMod, Boolean>> update(UserMod userMod) - throws WorkflowException; + WorkflowResult<Map.Entry<UserMod, Boolean>> update(UserMod userMod); /** * Suspend an user. * * @param userKey user to be suspended * @return user just suspended - * @throws WorkflowException workflow exception */ - WorkflowResult<Long> suspend(Long userKey) throws WorkflowException; + WorkflowResult<Long> suspend(Long userKey); /** * Suspend an user. * * @param user to be suspended * @return user just suspended - * @throws WorkflowException workflow exception */ - WorkflowResult<Long> suspend(User user) throws WorkflowException; + WorkflowResult<Long> suspend(User user); /** * Reactivate an user. * * @param userKey user to be reactivated * @return user just reactivated - * @throws WorkflowException workflow exception */ - WorkflowResult<Long> reactivate(Long userKey) throws WorkflowException; + WorkflowResult<Long> reactivate(Long userKey); /** * Request password reset for an user. * * @param userKey user requesting password reset - * @throws WorkflowException workflow exception */ - void requestPasswordReset(Long userKey) throws WorkflowException; + void requestPasswordReset(Long userKey); /** * Confirm password reset for an user. @@ -136,16 +124,13 @@ public interface UserWorkflowAdapter extends WorkflowAdapter { * @param userKey user confirming password reset * @param token security token * @param password new password value - * @throws WorkflowException workflow exception */ - void confirmPasswordReset(Long userKey, String token, String password) - throws WorkflowException; + void confirmPasswordReset(Long userKey, String token, String password); /** * Delete an user. * * @param userKey user to be deleted - * @throws WorkflowException workflow exception */ - void delete(Long userKey) throws WorkflowException; + void delete(Long userKey); } http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/WorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/WorkflowAdapter.java b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/WorkflowAdapter.java index 85d8822..0c92d66 100644 --- a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/WorkflowAdapter.java +++ b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/WorkflowAdapter.java @@ -23,7 +23,6 @@ import java.io.OutputStream; import java.util.List; import org.apache.syncope.common.lib.mod.AbstractAttributableMod; import org.apache.syncope.common.lib.to.WorkflowFormTO; -import org.apache.syncope.core.persistence.api.dao.NotFoundException; public interface WorkflowAdapter { @@ -37,26 +36,23 @@ public interface WorkflowAdapter { * * @param format export format * @param os export stream - * @throws WorkflowException workflow exception */ - void exportDefinition(WorkflowDefinitionFormat format, OutputStream os) throws WorkflowException; + void exportDefinition(WorkflowDefinitionFormat format, OutputStream os); /** * Export workflow graphical representation (if available). * * @param os export stream - * @throws WorkflowException workflow exception */ - void exportDiagram(OutputStream os) throws WorkflowException; + void exportDiagram(OutputStream os); /** * Update workflow definition. * * @param format import format * @param definition definition - * @throws WorkflowException workflow exception */ - void importDefinition(WorkflowDefinitionFormat format, String definition) throws WorkflowException; + void importDefinition(WorkflowDefinitionFormat format, String definition); /** * Get all defined forms for current workflow process instances. @@ -79,29 +75,22 @@ public interface WorkflowAdapter { * * @param workflowId workflow id * @return form (if present), otherwise null - * @throws NotFoundException definition not found exception - * @throws WorkflowException workflow exception */ - WorkflowFormTO getForm(String workflowId) throws NotFoundException, WorkflowException; + WorkflowFormTO getForm(String workflowId); /** * Claim a form for a given user. * * @param taskId Workflow task to which the form is associated * @return updated form - * @throws NotFoundException not found exception - * @throws WorkflowException workflow exception */ - WorkflowFormTO claimForm(String taskId) throws NotFoundException, WorkflowException; + WorkflowFormTO claimForm(String taskId); /** * Submit a form. * * @param form to be submitted * @return user updated by this form submit - * @throws NotFoundException not found exception - * @throws WorkflowException workflow exception */ - WorkflowResult<? extends AbstractAttributableMod> submitForm(WorkflowFormTO form) - throws NotFoundException, WorkflowException; + WorkflowResult<? extends AbstractAttributableMod> submitForm(WorkflowFormTO form); } http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractGroupWorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractGroupWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractGroupWorkflowAdapter.java new file mode 100644 index 0000000..27a8c74 --- /dev/null +++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractGroupWorkflowAdapter.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.workflow.java; + +import org.apache.syncope.common.lib.mod.GroupMod; +import org.apache.syncope.core.persistence.api.dao.NotFoundException; +import org.apache.syncope.core.persistence.api.dao.GroupDAO; +import org.apache.syncope.core.persistence.api.entity.EntityFactory; +import org.apache.syncope.core.persistence.api.entity.group.Group; +import org.apache.syncope.core.provisioning.api.WorkflowResult; +import org.apache.syncope.core.provisioning.api.data.GroupDataBinder; +import org.apache.syncope.core.workflow.api.GroupWorkflowAdapter; +import org.apache.syncope.core.workflow.api.WorkflowException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional(rollbackFor = { Throwable.class }) +public abstract class AbstractGroupWorkflowAdapter implements GroupWorkflowAdapter { + + @Autowired + protected GroupDataBinder dataBinder; + + @Autowired + protected GroupDAO groupDAO; + + @Autowired + protected EntityFactory entityFactory; + + @Override + public String getPrefix() { + return null; + } + + protected abstract WorkflowResult<Long> doUpdate(Group group, GroupMod groupMod) + throws WorkflowException; + + @Override + public WorkflowResult<Long> update(final GroupMod groupMod) + throws NotFoundException, WorkflowException { + + return doUpdate(groupDAO.authFetch(groupMod.getKey()), groupMod); + } + + protected abstract void doDelete(Group group) throws WorkflowException; + + @Override + public void delete(final Long groupKey) throws NotFoundException, WorkflowException { + doDelete(groupDAO.authFetch(groupKey)); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractRoleWorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractRoleWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractRoleWorkflowAdapter.java deleted file mode 100644 index 54e00ab..0000000 --- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractRoleWorkflowAdapter.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.syncope.core.workflow.java; - -import org.apache.syncope.common.lib.mod.RoleMod; -import org.apache.syncope.core.persistence.api.dao.NotFoundException; -import org.apache.syncope.core.persistence.api.dao.RoleDAO; -import org.apache.syncope.core.persistence.api.entity.EntityFactory; -import org.apache.syncope.core.persistence.api.entity.role.Role; -import org.apache.syncope.core.provisioning.api.WorkflowResult; -import org.apache.syncope.core.provisioning.api.data.RoleDataBinder; -import org.apache.syncope.core.workflow.api.RoleWorkflowAdapter; -import org.apache.syncope.core.workflow.api.WorkflowException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; - -@Transactional(rollbackFor = { Throwable.class }) -public abstract class AbstractRoleWorkflowAdapter implements RoleWorkflowAdapter { - - @Autowired - protected RoleDataBinder dataBinder; - - @Autowired - protected RoleDAO roleDAO; - - @Autowired - protected EntityFactory entityFactory; - - @Override - public String getPrefix() { - return null; - } - - protected abstract WorkflowResult<Long> doUpdate(Role role, RoleMod roleMod) - throws WorkflowException; - - @Override - public WorkflowResult<Long> update(final RoleMod roleMod) - throws NotFoundException, WorkflowException { - - return doUpdate(roleDAO.authFetch(roleMod.getKey()), roleMod); - } - - protected abstract void doDelete(Role role) throws WorkflowException; - - @Override - public void delete(final Long roleKey) throws NotFoundException, WorkflowException { - doDelete(roleDAO.authFetch(roleKey)); - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java new file mode 100644 index 0000000..5fc683a --- /dev/null +++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java @@ -0,0 +1,129 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.workflow.java; + +import java.io.OutputStream; +import java.util.Collections; +import java.util.List; +import org.apache.syncope.common.lib.mod.GroupMod; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.syncope.common.lib.to.WorkflowFormTO; +import org.apache.syncope.common.lib.types.PropagationByResource; +import org.apache.syncope.common.lib.types.ResourceOperation; +import org.apache.syncope.core.persistence.api.dao.NotFoundException; +import org.apache.syncope.core.persistence.api.entity.group.Group; +import org.apache.syncope.core.provisioning.api.WorkflowResult; +import org.apache.syncope.core.workflow.api.WorkflowDefinitionFormat; +import org.apache.syncope.core.workflow.api.WorkflowException; +import org.springframework.transaction.annotation.Transactional; + +/** + * Simple implementation basically not involving any workflow engine. + */ +@Transactional(rollbackFor = { Throwable.class }) +public class DefaultGroupWorkflowAdapter extends AbstractGroupWorkflowAdapter { + + @Override + public WorkflowResult<Long> create(final GroupTO groupTO) throws WorkflowException { + Group group = entityFactory.newEntity(Group.class); + dataBinder.create(group, groupTO); + group = groupDAO.save(group); + + final PropagationByResource propByRes = new PropagationByResource(); + propByRes.set(ResourceOperation.CREATE, group.getResourceNames()); + + return new WorkflowResult<>(group.getKey(), propByRes, "create"); + } + + @Override + protected WorkflowResult<Long> doUpdate(final Group group, final GroupMod groupMod) + throws WorkflowException { + + PropagationByResource propByRes = dataBinder.update(group, groupMod); + + Group updated = groupDAO.save(group); + + return new WorkflowResult<>(updated.getKey(), propByRes, "update"); + } + + @Override + protected void doDelete(final Group group) + throws WorkflowException { + + groupDAO.delete(group); + } + + @Override + public WorkflowResult<Long> execute(final GroupTO group, final String taskId) + throws NotFoundException, WorkflowException { + + throw new WorkflowException(new UnsupportedOperationException("Not supported.")); + } + + @Override + public void exportDefinition(final WorkflowDefinitionFormat format, final OutputStream os) + throws WorkflowException { + + throw new WorkflowException(new UnsupportedOperationException("Not supported.")); + } + + @Override + public void exportDiagram(final OutputStream os) throws WorkflowException { + throw new WorkflowException(new UnsupportedOperationException("Not supported.")); + } + + @Override + public void importDefinition(final WorkflowDefinitionFormat format, final String definition) + throws NotFoundException, WorkflowException { + + throw new WorkflowException(new UnsupportedOperationException("Not supported.")); + } + + @Override + public List<WorkflowFormTO> getForms() { + return Collections.emptyList(); + } + + @Override + public List<WorkflowFormTO> getForms(final String workflowId, final String name) { + return Collections.emptyList(); + } + + @Override + public WorkflowFormTO getForm(final String workflowId) + throws NotFoundException, WorkflowException { + + return null; + } + + @Override + public WorkflowFormTO claimForm(final String taskId) + throws NotFoundException, WorkflowException { + + throw new WorkflowException(new UnsupportedOperationException("Not supported.")); + } + + @Override + public WorkflowResult<GroupMod> submitForm(final WorkflowFormTO form) + throws NotFoundException, WorkflowException { + + throw new WorkflowException(new UnsupportedOperationException("Not supported.")); + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultRoleWorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultRoleWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultRoleWorkflowAdapter.java deleted file mode 100644 index d4f8b52..0000000 --- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultRoleWorkflowAdapter.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.syncope.core.workflow.java; - -import java.io.OutputStream; -import java.util.Collections; -import java.util.List; -import org.apache.syncope.common.lib.mod.RoleMod; -import org.apache.syncope.common.lib.to.RoleTO; -import org.apache.syncope.common.lib.to.WorkflowFormTO; -import org.apache.syncope.common.lib.types.PropagationByResource; -import org.apache.syncope.common.lib.types.ResourceOperation; -import org.apache.syncope.core.persistence.api.dao.NotFoundException; -import org.apache.syncope.core.persistence.api.entity.role.Role; -import org.apache.syncope.core.provisioning.api.WorkflowResult; -import org.apache.syncope.core.workflow.api.WorkflowDefinitionFormat; -import org.apache.syncope.core.workflow.api.WorkflowException; -import org.springframework.transaction.annotation.Transactional; - -/** - * Simple implementation basically not involving any workflow engine. - */ -@Transactional(rollbackFor = { Throwable.class }) -public class DefaultRoleWorkflowAdapter extends AbstractRoleWorkflowAdapter { - - @Override - public WorkflowResult<Long> create(final RoleTO roleTO) throws WorkflowException { - Role role = entityFactory.newEntity(Role.class); - dataBinder.create(role, roleTO); - role = roleDAO.save(role); - - final PropagationByResource propByRes = new PropagationByResource(); - propByRes.set(ResourceOperation.CREATE, role.getResourceNames()); - - return new WorkflowResult<>(role.getKey(), propByRes, "create"); - } - - @Override - protected WorkflowResult<Long> doUpdate(final Role role, final RoleMod roleMod) - throws WorkflowException { - - PropagationByResource propByRes = dataBinder.update(role, roleMod); - - Role updated = roleDAO.save(role); - - return new WorkflowResult<>(updated.getKey(), propByRes, "update"); - } - - @Override - protected void doDelete(final Role role) - throws WorkflowException { - - roleDAO.delete(role); - } - - @Override - public WorkflowResult<Long> execute(RoleTO roleTO, String taskId) - throws NotFoundException, WorkflowException { - - throw new WorkflowException(new UnsupportedOperationException("Not supported.")); - } - - @Override - public void exportDefinition(final WorkflowDefinitionFormat format, final OutputStream os) - throws WorkflowException { - - throw new WorkflowException(new UnsupportedOperationException("Not supported.")); - } - - @Override - public void exportDiagram(final OutputStream os) throws WorkflowException { - throw new WorkflowException(new UnsupportedOperationException("Not supported.")); - } - - @Override - public void importDefinition(final WorkflowDefinitionFormat format, final String definition) - throws NotFoundException, WorkflowException { - - throw new WorkflowException(new UnsupportedOperationException("Not supported.")); - } - - @Override - public List<WorkflowFormTO> getForms() { - return Collections.emptyList(); - } - - @Override - public List<WorkflowFormTO> getForms(final String workflowId, final String name) { - return Collections.emptyList(); - } - - @Override - public WorkflowFormTO getForm(final String workflowId) - throws NotFoundException, WorkflowException { - - return null; - } - - @Override - public WorkflowFormTO claimForm(final String taskId) - throws NotFoundException, WorkflowException { - - throw new WorkflowException(new UnsupportedOperationException("Not supported.")); - } - - @Override - public WorkflowResult<RoleMod> submitForm(final WorkflowFormTO form) - throws NotFoundException, WorkflowException { - - throw new WorkflowException(new UnsupportedOperationException("Not supported.")); - } - -} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-java/src/main/resources/workflow.properties ---------------------------------------------------------------------- diff --git a/core/workflow-java/src/main/resources/workflow.properties b/core/workflow-java/src/main/resources/workflow.properties index 9f0e35e..7167164 100644 --- a/core/workflow-java/src/main/resources/workflow.properties +++ b/core/workflow-java/src/main/resources/workflow.properties @@ -17,4 +17,4 @@ wf.directory=${conf.directory} jobExecutorActivate=false uwfAdapter=org.apache.syncope.core.workflow.java.DefaultUserWorkflowAdapter -rwfAdapter=org.apache.syncope.core.workflow.java.DefaultRoleWorkflowAdapter \ No newline at end of file +gwfAdapter=org.apache.syncope.core.workflow.java.DefaultGroupWorkflowAdapter http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/core/workflow-java/src/main/resources/workflowContext.xml ---------------------------------------------------------------------- diff --git a/core/workflow-java/src/main/resources/workflowContext.xml b/core/workflow-java/src/main/resources/workflowContext.xml index 54ac139..8a6935e 100644 --- a/core/workflow-java/src/main/resources/workflowContext.xml +++ b/core/workflow-java/src/main/resources/workflowContext.xml @@ -23,6 +23,6 @@ under the License. http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="uwfAdapter" class="${uwfAdapter}"/> - <bean id="rwfAdapter" class="${rwfAdapter}"/> + <bean id="gwfAdapter" class="${gwfAdapter}"/> </beans> http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/deb/core/pom.xml ---------------------------------------------------------------------- diff --git a/deb/core/pom.xml b/deb/core/pom.xml index 5b50a6e..45183a4 100644 --- a/deb/core/pom.xml +++ b/deb/core/pom.xml @@ -157,7 +157,7 @@ under the License. <includes> <include>provisioning.properties</include> <include>userRoutes.xml</include> - <include>roleRoutes.xml</include> + <include>groupRoutes.xml</include> </includes> <targetPath>${project.build.directory}/etc</targetPath> <filtering>true</filtering> http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/deb/core/src/deb/control/conffiles ---------------------------------------------------------------------- diff --git a/deb/core/src/deb/control/conffiles b/deb/core/src/deb/control/conffiles index a8458f8..3bdc093 100644 --- a/deb/core/src/deb/control/conffiles +++ b/deb/core/src/deb/control/conffiles @@ -7,7 +7,7 @@ /etc/apache-syncope/mail.properties /etc/apache-syncope/persistence.properties /etc/apache-syncope/provisioning.properties -/etc/apache-syncope/roleRoutes.xml +/etc/apache-syncope/groupRoutes.xml /etc/apache-syncope/security.properties /etc/apache-syncope/userRoutes.xml /etc/apache-syncope/userWorkflow.bpmn20.xml http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/deb/core/src/deb/control/control ---------------------------------------------------------------------- diff --git a/deb/core/src/deb/control/control b/deb/core/src/deb/control/control index 2b41faf..e9563a3 100644 --- a/deb/core/src/deb/control/control +++ b/deb/core/src/deb/control/control @@ -9,6 +9,6 @@ Description: Apache Syncope Core Web Application Apache Syncope is an Open Source system for managing digital identities in enterprise environments, implemented in JEE technology and released under Apache 2.0 license. Identity management (or IdM) represents the joint result of business process and IT to manage user data - on systems and applications. IdM involves considering user attributes, roles, resources and + on systems and applications. IdM involves considering user attributes, groups, resources and entitlements in trying to give a decent answer to the question bumping up every time in an IT administrator's mind: Who has access to What, When, How, and Why? http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutePanel.java ---------------------------------------------------------------------- diff --git a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutePanel.java b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutePanel.java index e96dab5..597f327 100644 --- a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutePanel.java +++ b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutePanel.java @@ -145,8 +145,8 @@ public class CamelRoutePanel extends AbstractExtensionPanel { if (restClient.isCamelEnabledFor(SubjectType.USER)) { list.addAll(restClient.list(SubjectType.USER)); } - if (restClient.isCamelEnabledFor(SubjectType.ROLE)) { - list.addAll(restClient.list(SubjectType.ROLE)); + if (restClient.isCamelEnabledFor(SubjectType.GROUP)) { + list.addAll(restClient.list(SubjectType.GROUP)); } Collections.sort(list, comparator); @@ -159,8 +159,8 @@ public class CamelRoutePanel extends AbstractExtensionPanel { return (restClient.isCamelEnabledFor(SubjectType.USER) ? restClient.list(SubjectType.USER).size() : 0) - + (restClient.isCamelEnabledFor(SubjectType.ROLE) - ? restClient.list(SubjectType.ROLE).size() + + (restClient.isCamelEnabledFor(SubjectType.GROUP) + ? restClient.list(SubjectType.GROUP).size() : 0); } http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/rest/CamelRouteRestClient.java ---------------------------------------------------------------------- diff --git a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/rest/CamelRouteRestClient.java b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/rest/CamelRouteRestClient.java index 509f208..2ccbe6c 100644 --- a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/rest/CamelRouteRestClient.java +++ b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/rest/CamelRouteRestClient.java @@ -47,7 +47,7 @@ public class CamelRouteRestClient extends BaseRestClient { public boolean isCamelEnabledFor(final SubjectType subjectType) { return subjectType == SubjectType.USER ? SyncopeSession.get().getSyncopeTO().getUserProvisioningManager().indexOf("Camel") != -1 - : SyncopeSession.get().getSyncopeTO().getRoleProvisioningManager().indexOf("Camel") != -1; + : SyncopeSession.get().getSyncopeTO().getGroupProvisioningManager().indexOf("Camel") != -1; } } http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java ---------------------------------------------------------------------- diff --git a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java index eaae724..3fe8592 100644 --- a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java +++ b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java @@ -53,8 +53,8 @@ public class CamelRouteLoader implements SyncopeLoader { @javax.annotation.Resource(name = "userRoutes") private ResourceWithFallbackLoader userRoutesLoader; - @javax.annotation.Resource(name = "roleRoutes") - private ResourceWithFallbackLoader roleRoutesLoader; + @javax.annotation.Resource(name = "groupRoutes") + private ResourceWithFallbackLoader groupRoutesLoader; @Autowired private DataSource dataSource; @@ -74,7 +74,7 @@ public class CamelRouteLoader implements SyncopeLoader { synchronized (this) { if (!loaded) { loadRoutes(userRoutesLoader.getResource(), SubjectType.USER); - loadRoutes(roleRoutesLoader.getResource(), SubjectType.ROLE); + loadRoutes(groupRoutesLoader.getResource(), SubjectType.GROUP); loadEntitlements(); loaded = true; } http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java ---------------------------------------------------------------------- diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java new file mode 100644 index 0000000..8ab600a --- /dev/null +++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java @@ -0,0 +1,175 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.provisioning.camel; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.camel.Exchange; +import org.apache.camel.PollingConsumer; +import org.apache.syncope.common.lib.mod.GroupMod; +import org.apache.syncope.common.lib.to.PropagationStatus; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.syncope.core.provisioning.api.GroupProvisioningManager; +import org.apache.syncope.core.provisioning.api.propagation.PropagationException; + +public class CamelGroupProvisioningManager + extends AbstractCamelProvisioningManager implements GroupProvisioningManager { + + @Override + public Map.Entry<Long, List<PropagationStatus>> create(final GroupTO subject) { + return create(subject, Collections.<String>emptySet()); + } + + @Override + @SuppressWarnings("unchecked") + public Map.Entry<Long, List<PropagationStatus>> create(final GroupTO groupTO, final Set<String> excludedResources) { + PollingConsumer pollingConsumer = getConsumer("direct:createGroupPort"); + + Map<String, Object> props = new HashMap<>(); + props.put("excludedResources", excludedResources); + + sendMessage("direct:createGroup", groupTO, props); + + Exchange exchange = pollingConsumer.receive(); + + if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { + throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); + } + + return exchange.getIn().getBody(Map.Entry.class); + } + + @Override + @SuppressWarnings("unchecked") + public Map.Entry<Long, List<PropagationStatus>> create(final GroupTO groupTO, final Map<Long, String> groupOwnerMap, + final Set<String> excludedResources) throws PropagationException { + + PollingConsumer pollingConsumer = getConsumer("direct:createGroupInSyncPort"); + + Map<String, Object> props = new HashMap<>(); + props.put("groupOwnerMap", groupOwnerMap); + props.put("excludedResources", excludedResources); + + sendMessage("direct:createGroupInSync", groupTO, props); + + Exchange exchange = pollingConsumer.receive(); + + if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { + throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); + } + + return exchange.getIn().getBody(Map.Entry.class); + } + + @Override + public Map.Entry<Long, List<PropagationStatus>> update(final GroupMod subjectMod) { + return update(subjectMod, Collections.<String>emptySet()); + } + + @Override + @SuppressWarnings("unchecked") + public Map.Entry<Long, List<PropagationStatus>> update( + final GroupMod subjectMod, final Set<String> excludedResources) { + + PollingConsumer pollingConsumer = getConsumer("direct:updateGroupPort"); + + Map<String, Object> props = new HashMap<>(); + props.put("excludedResources", excludedResources); + + sendMessage("direct:updateGroup", subjectMod, props); + + Exchange exchange = pollingConsumer.receive(); + + if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { + throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); + } + + return exchange.getIn().getBody(Map.Entry.class); + } + + @Override + @SuppressWarnings("unchecked") + public List<PropagationStatus> delete(final Long groupKey) { + PollingConsumer pollingConsumer = getConsumer("direct:deleteGroupPort"); + + sendMessage("direct:deleteGroup", groupKey); + + Exchange exchange = pollingConsumer.receive(); + + if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { + throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); + } + + return exchange.getIn().getBody(List.class); + } + + @Override + public Long unlink(final GroupMod groupMod) { + PollingConsumer pollingConsumer = getConsumer("direct:unlinkGroupPort"); + + sendMessage("direct:unlinkGroup", groupMod); + + Exchange exchange = pollingConsumer.receive(); + + if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { + throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); + } + + return exchange.getIn().getBody(Long.class); + } + + @Override + public Long link(final GroupMod groupMod) { + PollingConsumer pollingConsumer = getConsumer("direct:linkGroupPort"); + + sendMessage("direct:linkGroup", groupMod); + + Exchange exchange = pollingConsumer.receive(); + + if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { + throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); + } + + return exchange.getIn().getBody(Long.class); + } + + @Override + @SuppressWarnings("unchecked") + public List<PropagationStatus> deprovision(final Long groupKey, Collection<String> resources) { + PollingConsumer pollingConsumer = getConsumer("direct:deprovisionGroupPort"); + + Map<String, Object> props = new HashMap<>(); + props.put("resources", resources); + + sendMessage("direct:deprovisionGroup", groupKey, props); + + Exchange exchange = pollingConsumer.receive(); + + if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { + throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); + } + + return exchange.getIn().getBody(List.class); + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelRoleProvisioningManager.java ---------------------------------------------------------------------- diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelRoleProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelRoleProvisioningManager.java deleted file mode 100644 index 096816a..0000000 --- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelRoleProvisioningManager.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.syncope.core.provisioning.camel; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.apache.camel.Exchange; -import org.apache.camel.PollingConsumer; -import org.apache.syncope.common.lib.mod.RoleMod; -import org.apache.syncope.common.lib.to.PropagationStatus; -import org.apache.syncope.common.lib.to.RoleTO; -import org.apache.syncope.core.provisioning.api.RoleProvisioningManager; -import org.apache.syncope.core.provisioning.api.propagation.PropagationException; - -public class CamelRoleProvisioningManager extends AbstractCamelProvisioningManager implements RoleProvisioningManager { - - @Override - public Map.Entry<Long, List<PropagationStatus>> create(final RoleTO subject) { - return create(subject, Collections.<String>emptySet()); - } - - @Override - @SuppressWarnings("unchecked") - public Map.Entry<Long, List<PropagationStatus>> create(final RoleTO roleTO, final Set<String> excludedResources) { - PollingConsumer pollingConsumer = getConsumer("direct:createRolePort"); - - Map<String, Object> props = new HashMap<>(); - props.put("excludedResources", excludedResources); - - sendMessage("direct:createRole", roleTO, props); - - Exchange exchange = pollingConsumer.receive(); - - if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { - throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); - } - - return exchange.getIn().getBody(Map.Entry.class); - } - - @Override - @SuppressWarnings("unchecked") - public Map.Entry<Long, List<PropagationStatus>> create(final RoleTO roleTO, final Map<Long, String> roleOwnerMap, - final Set<String> excludedResources) throws PropagationException { - - PollingConsumer pollingConsumer = getConsumer("direct:createRoleInSyncPort"); - - Map<String, Object> props = new HashMap<>(); - props.put("roleOwnerMap", roleOwnerMap); - props.put("excludedResources", excludedResources); - - sendMessage("direct:createRoleInSync", roleTO, props); - - Exchange exchange = pollingConsumer.receive(); - - if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { - throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); - } - - return exchange.getIn().getBody(Map.Entry.class); - } - - @Override - public Map.Entry<Long, List<PropagationStatus>> update(final RoleMod subjectMod) { - return update(subjectMod, Collections.<String>emptySet()); - } - - @Override - @SuppressWarnings("unchecked") - public Map.Entry<Long, List<PropagationStatus>> update( - final RoleMod subjectMod, final Set<String> excludedResources) { - - PollingConsumer pollingConsumer = getConsumer("direct:updateRolePort"); - - Map<String, Object> props = new HashMap<>(); - props.put("excludedResources", excludedResources); - - sendMessage("direct:updateRole", subjectMod, props); - - Exchange exchange = pollingConsumer.receive(); - - if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { - throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); - } - - return exchange.getIn().getBody(Map.Entry.class); - } - - @Override - @SuppressWarnings("unchecked") - public List<PropagationStatus> delete(final Long roleKey) { - PollingConsumer pollingConsumer = getConsumer("direct:deleteRolePort"); - - sendMessage("direct:deleteRole", roleKey); - - Exchange exchange = pollingConsumer.receive(); - - if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { - throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); - } - - return exchange.getIn().getBody(List.class); - } - - @Override - public Long unlink(final RoleMod roleMod) { - PollingConsumer pollingConsumer = getConsumer("direct:unlinkRolePort"); - - sendMessage("direct:unlinkRole", roleMod); - - Exchange exchange = pollingConsumer.receive(); - - if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { - throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); - } - - return exchange.getIn().getBody(Long.class); - } - - @Override - public Long link(final RoleMod roleMod) { - PollingConsumer pollingConsumer = getConsumer("direct:linkRolePort"); - - sendMessage("direct:linkRole", roleMod); - - Exchange exchange = pollingConsumer.receive(); - - if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { - throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); - } - - return exchange.getIn().getBody(Long.class); - } - - @Override - @SuppressWarnings("unchecked") - public List<PropagationStatus> deprovision(final Long roleKey, Collection<String> resources) { - PollingConsumer pollingConsumer = getConsumer("direct:deprovisionRolePort"); - - Map<String, Object> props = new HashMap<>(); - props.put("resources", resources); - - sendMessage("direct:deprovisionRole", roleKey, props); - - Exchange exchange = pollingConsumer.receive(); - - if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) { - throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT); - } - - return exchange.getIn().getBody(List.class); - } - -} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateInSyncProcessor.java ---------------------------------------------------------------------- diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateInSyncProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateInSyncProcessor.java new file mode 100644 index 0000000..97a2783 --- /dev/null +++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateInSyncProcessor.java @@ -0,0 +1,72 @@ +package org.apache.syncope.core.provisioning.camel.processor; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import java.util.AbstractMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.springframework.beans.factory.annotation.Autowired; +import org.apache.commons.lang3.StringUtils; +import org.apache.syncope.common.lib.to.AttrTO; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.syncope.core.misc.security.AuthContextUtil; +import org.apache.syncope.core.persistence.api.GroupEntitlementUtil; +import org.apache.syncope.core.persistence.api.entity.task.PropagationTask; +import org.apache.syncope.core.provisioning.api.WorkflowResult; +import org.apache.syncope.core.provisioning.api.propagation.PropagationManager; +import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor; +import org.springframework.stereotype.Component; + +@Component +public class GroupCreateInSyncProcessor implements Processor { + + @Autowired + protected PropagationManager propagationManager; + + @Autowired + protected PropagationTaskExecutor taskExecutor; + + @Override + @SuppressWarnings("unchecked") + public void process(final Exchange exchange) { + WorkflowResult<Long> created = (WorkflowResult) exchange.getIn().getBody(); + + GroupTO actual = exchange.getProperty("subject", GroupTO.class); + Map<Long, String> groupOwnerMap = exchange.getProperty("groupOwnerMap", Map.class); + Set<String> excludedResource = exchange.getProperty("excludedResources", Set.class); + + AttrTO groupOwner = actual.getPlainAttrMap().get(StringUtils.EMPTY); + if (groupOwner != null) { + groupOwnerMap.put(created.getResult(), groupOwner.getValues().iterator().next()); + } + + AuthContextUtil.extendAuthContext( + created.getResult(), GroupEntitlementUtil.getEntitlementNameFromGroupKey(created.getResult())); + + List<PropagationTask> tasks = propagationManager.getGroupCreateTaskIds( + created, actual.getVirAttrs(), excludedResource); + + taskExecutor.execute(tasks); + + exchange.getOut().setBody(new AbstractMap.SimpleEntry<>(created.getResult(), null)); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateProcessor.java ---------------------------------------------------------------------- diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateProcessor.java new file mode 100644 index 0000000..239e209 --- /dev/null +++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateProcessor.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.provisioning.camel.processor; + +import java.util.AbstractMap; +import java.util.List; +import java.util.Set; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.syncope.core.misc.security.AuthContextUtil; +import org.apache.syncope.core.misc.spring.ApplicationContextProvider; +import org.apache.syncope.core.persistence.api.GroupEntitlementUtil; +import org.apache.syncope.core.persistence.api.entity.task.PropagationTask; +import org.apache.syncope.core.provisioning.api.WorkflowResult; +import org.apache.syncope.core.provisioning.api.propagation.PropagationException; +import org.apache.syncope.core.provisioning.api.propagation.PropagationManager; +import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter; +import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class GroupCreateProcessor implements Processor { + + private static final Logger LOG = LoggerFactory.getLogger(GroupCreateProcessor.class); + + @Autowired + protected PropagationManager propagationManager; + + @Autowired + protected PropagationTaskExecutor taskExecutor; + + @SuppressWarnings("unchecked") + @Override + public void process(final Exchange exchange) { + WorkflowResult<Long> created = (WorkflowResult) exchange.getIn().getBody(); + GroupTO subject = exchange.getProperty("subject", GroupTO.class); + Set<String> excludedResource = exchange.getProperty("excludedResources", Set.class); + + AuthContextUtil.extendAuthContext(created.getResult(), GroupEntitlementUtil.getEntitlementNameFromGroupKey(created.getResult())); + + List<PropagationTask> tasks = + propagationManager.getGroupCreateTaskIds(created, subject.getVirAttrs(), excludedResource); + PropagationReporter propagationReporter = + ApplicationContextProvider.getApplicationContext().getBean(PropagationReporter.class); + try { + taskExecutor.execute(tasks, propagationReporter); + } catch (PropagationException e) { + LOG.error("Error propagation primary resource", e); + propagationReporter.onPrimaryResourceFailure(tasks); + } + + exchange.getOut().setBody(new AbstractMap.SimpleEntry<>( + created.getResult(), propagationReporter.getStatuses())); + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java ---------------------------------------------------------------------- diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java new file mode 100644 index 0000000..7b1ece2 --- /dev/null +++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.provisioning.camel.processor; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.syncope.common.lib.types.PropagationByResource; +import org.apache.syncope.core.misc.spring.ApplicationContextProvider; +import org.apache.syncope.core.persistence.api.dao.GroupDAO; +import org.apache.syncope.core.persistence.api.entity.group.Group; +import org.apache.syncope.core.persistence.api.entity.task.PropagationTask; +import org.apache.syncope.core.provisioning.api.WorkflowResult; +import org.apache.syncope.core.provisioning.api.propagation.PropagationException; +import org.apache.syncope.core.provisioning.api.propagation.PropagationManager; +import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter; +import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor; +import org.apache.syncope.core.workflow.api.GroupWorkflowAdapter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class GroupDeleteProcessor implements Processor { + + private static final Logger LOG = LoggerFactory.getLogger(GroupDeleteProcessor.class); + + @Autowired + protected GroupWorkflowAdapter gwfAdapter; + + @Autowired + protected PropagationManager propagationManager; + + @Autowired + protected PropagationTaskExecutor taskExecutor; + + @Autowired + protected GroupDAO groupDAO; + + @Override + public void process(final Exchange exchange) throws Exception { + final List<Group> toBeDeprovisioned = new ArrayList<>(); + + Long subjectKey = exchange.getIn().getBody(Long.class); + final Group syncopeGroup = groupDAO.find(subjectKey); + + if (syncopeGroup != null) { + toBeDeprovisioned.add(syncopeGroup); + + final List<Group> descendants = groupDAO.findDescendants(toBeDeprovisioned.get(0)); + if (descendants != null) { + toBeDeprovisioned.addAll(descendants); + } + } + + final List<PropagationTask> tasks = new ArrayList<>(); + + for (Group group : toBeDeprovisioned) { + // Generate propagation tasks for deleting users from group resources, if they are on those resources only + // because of the reason being deleted (see SYNCOPE-357) + for (Map.Entry<Long, PropagationByResource> entry + : groupDAO.findUsersWithIndirectResources(group.getKey()).entrySet()) { + + WorkflowResult<Long> wfResult = + new WorkflowResult<>(entry.getKey(), entry.getValue(), Collections.<String>emptySet()); + tasks.addAll(propagationManager.getUserDeleteTaskIds(wfResult)); + } + + // Generate propagation tasks for deleting this group from resources + tasks.addAll(propagationManager.getGroupDeleteTaskIds(group.getKey())); + } + + PropagationReporter propagationReporter = + ApplicationContextProvider.getApplicationContext().getBean(PropagationReporter.class); + try { + taskExecutor.execute(tasks, propagationReporter); + } catch (PropagationException e) { + LOG.error("Error propagation primary resource", e); + propagationReporter.onPrimaryResourceFailure(tasks); + } + + exchange.setProperty("statuses", propagationReporter.getStatuses()); + } + +}
