[SYNCOPE-119] Renaming Role to Group
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/4095f1e8 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/4095f1e8 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/4095f1e8 Branch: refs/heads/SYNCOPE-119 Commit: 4095f1e84bc22e0f0253e1ccf0c4daeddd2c1b35 Parents: f76826f Author: Francesco Chicchiriccò <[email protected]> Authored: Mon Apr 6 18:13:31 2015 +0200 Committer: Francesco Chicchiriccò <[email protected]> Committed: Mon Apr 6 18:13:31 2015 +0200 ---------------------------------------------------------------------- .../client/console/SyncopeApplication.java | 12 +- .../client/console/commons/AttrLayoutType.java | 12 +- .../client/console/commons/Constants.java | 10 +- .../console/commons/GroupTreeBuilder.java | 128 +++ .../client/console/commons/RoleTreeBuilder.java | 116 --- .../client/console/commons/RoleUtils.java | 36 - .../console/commons/status/StatusBean.java | 4 +- .../console/commons/status/StatusUtils.java | 4 +- .../client/console/pages/AbstractBasePage.java | 4 +- .../pages/BulkActionResultModalPage.java | 2 +- .../client/console/pages/Configuration.java | 4 +- .../client/console/pages/GroupModalPage.java | 164 ++++ .../console/pages/GroupSelectModalPage.java | 105 +++ .../console/pages/GroupTemplateModalPage.java | 50 ++ .../syncope/client/console/pages/Groups.java | 186 ++++ .../console/pages/NotificationModalPage.java | 38 +- .../client/console/pages/PolicyModalPage.java | 47 +- .../console/pages/ProvisioningModalPage.java | 11 +- .../client/console/pages/PushTaskModalPage.java | 28 +- .../console/pages/ReportletConfModalPage.java | 18 +- .../client/console/pages/ResourceModalPage.java | 8 +- .../syncope/client/console/pages/Resources.java | 6 +- .../console/pages/ResultStatusModalPage.java | 11 +- .../client/console/pages/RoleModalPage.java | 162 ---- .../console/pages/RoleSelectModalPage.java | 105 --- .../console/pages/RoleTemplateModalPage.java | 50 -- .../syncope/client/console/pages/Roles.java | 186 ---- .../syncope/client/console/pages/Schema.java | 16 +- .../client/console/pages/StatusModalPage.java | 35 +- .../client/console/pages/UserModalPage.java | 2 +- .../console/panels/AbstractSearchPanel.java | 30 +- .../console/panels/AttrTemplatesPanel.java | 46 +- .../client/console/panels/DerAttrsPanel.java | 28 +- .../console/panels/GroupDetailsPanel.java | 435 +++++++++ .../client/console/panels/GroupPanel.java | 187 ++++ .../client/console/panels/GroupSearchPanel.java | 101 +++ .../console/panels/GroupSearchResultPanel.java | 172 ++++ .../console/panels/GroupSecurityPanel.java | 198 +++++ .../console/panels/GroupSummaryPanel.java | 153 ++++ .../client/console/panels/GroupTabPanel.java | 195 ++++ .../client/console/panels/MembershipsPanel.java | 49 +- .../client/console/panels/PlainAttrsPanel.java | 32 +- .../client/console/panels/PolicyBeanPanel.java | 24 +- .../console/panels/ResourceMappingPanel.java | 30 +- .../client/console/panels/ResourcesPanel.java | 19 +- .../client/console/panels/RoleDetailsPanel.java | 435 --------- .../client/console/panels/RolePanel.java | 187 ---- .../client/console/panels/RoleSearchPanel.java | 101 --- .../console/panels/RoleSearchResultPanel.java | 172 ---- .../console/panels/RoleSecurityPanel.java | 198 ----- .../client/console/panels/RoleSummaryPanel.java | 153 ---- .../client/console/panels/RoleTabPanel.java | 195 ---- .../client/console/panels/SearchView.java | 8 +- .../panels/SelectOnlyUserSearchResultPanel.java | 2 +- .../client/console/panels/StatusPanel.java | 21 +- .../client/console/panels/SyncTasksPanel.java | 9 +- .../client/console/panels/UserSearchPanel.java | 20 +- .../client/console/panels/VirAttrsPanel.java | 31 +- .../client/console/rest/GroupRestClient.java | 184 ++++ .../client/console/rest/ResourceRestClient.java | 2 +- .../client/console/rest/RoleRestClient.java | 184 ---- .../wicket/markup/html/form/ActionLink.java | 4 +- .../markup/html/form/ActionLinksPanel.java | 20 +- .../markup/html/form/BinaryFieldPanel.java | 2 +- .../tree/DefaultMutableTreeNodeExpansion.java | 20 +- .../wicket/markup/html/tree/TreeGroupPanel.java | 121 +++ .../markup/html/tree/TreeGroupProvider.java | 43 + .../wicket/markup/html/tree/TreeRolePanel.java | 121 --- .../markup/html/tree/TreeRoleProvider.java | 43 - .../resources/META-INF/resources/css/style.css | 8 +- .../resources/img/actions/groups-icon.png | Bin 0 -> 391 bytes .../resources/img/actions/roles-icon.png | Bin 391 -> 0 bytes .../META-INF/resources/img/menu/groups.png | Bin 0 -> 5020 bytes .../resources/img/menu/notsel/groups.png | Bin 0 -> 5175 bytes .../resources/img/menu/notsel/roles.png | Bin 5175 -> 0 bytes .../META-INF/resources/img/menu/roles.png | Bin 5020 -> 0 bytes .../src/main/resources/authorizations.xml | 12 +- .../src/main/resources/consoleContext.xml | 2 +- .../console/SyncopeApplication.properties | 2 +- .../console/SyncopeApplication_it.properties | 2 +- .../console/SyncopeApplication_pt_BR.properties | 2 +- .../syncope/client/console/pages/BasePage.html | 4 +- .../client/console/pages/Configuration.html | 12 +- .../console/pages/Configuration.properties | 4 +- .../console/pages/Configuration_it.properties | 4 +- .../pages/Configuration_pt_BR.properties | 4 +- .../client/console/pages/GroupModalPage.html | 52 ++ .../console/pages/GroupModalPage.properties | 48 + .../console/pages/GroupModalPage_it.properties | 50 ++ .../pages/GroupModalPage_pt_BR.properties | 48 + .../console/pages/GroupSelectModalPage.html | 24 + .../syncope/client/console/pages/Groups.html | 80 ++ .../client/console/pages/Groups.properties | 26 + .../client/console/pages/Groups_it.properties | 26 + .../console/pages/Groups_pt_BR.properties | 26 + .../pages/MembershipModalPage.properties | 2 +- .../pages/MembershipModalPage_it.properties | 2 +- .../pages/MembershipModalPage_pt_BR.properties | 2 +- .../console/pages/NotificationModalPage.html | 10 +- .../pages/NotificationModalPage.properties | 6 +- .../pages/NotificationModalPage_it.properties | 6 +- .../NotificationModalPage_pt_BR.properties | 8 +- .../client/console/pages/PolicyModalPage.html | 8 +- .../console/pages/PolicyModalPage.properties | 6 +- .../console/pages/PolicyModalPage_it.properties | 6 +- .../pages/PolicyModalPage_pt_BR.properties | 6 +- .../client/console/pages/PushTaskModalPage.html | 8 +- .../console/pages/PushTaskModalPage.properties | 2 +- .../pages/PushTaskModalPage_it.properties | 2 +- .../pages/PushTaskModalPage_pt_BR.properties | 2 +- .../client/console/pages/ResourceModalPage.html | 6 +- .../console/pages/ResourceModalPage.properties | 6 +- .../pages/ResourceModalPage_it.properties | 6 +- .../pages/ResourceModalPage_pt_BR.properties | 6 +- .../client/console/pages/RoleModalPage.html | 52 -- .../console/pages/RoleModalPage.properties | 48 - .../console/pages/RoleModalPage_it.properties | 50 -- .../pages/RoleModalPage_pt_BR.properties | 48 - .../console/pages/RoleSelectModalPage.html | 22 - .../syncope/client/console/pages/Roles.html | 80 -- .../client/console/pages/Roles.properties | 26 - .../client/console/pages/Roles_it.properties | 26 - .../client/console/pages/Roles_pt_BR.properties | 26 - .../syncope/client/console/pages/Schema.html | 6 +- .../client/console/pages/Schema.properties | 2 +- .../client/console/pages/Schema_it.properties | 2 +- .../console/pages/Schema_pt_BR.properties | 2 +- .../console/pages/UserModalPage.properties | 4 +- .../console/pages/UserModalPage_it.properties | 4 +- .../pages/UserModalPage_pt_BR.properties | 4 +- .../client/console/pages/WelcomePage.html | 2 +- .../console/panels/AttrTemplatesPanel.html | 6 +- .../console/panels/GroupDetailsPanel.html | 107 +++ .../console/panels/GroupDetailsPanel.properties | 22 + .../panels/GroupDetailsPanel_it.properties | 22 + .../panels/GroupDetailsPanel_pt_BR.properties | 22 + .../client/console/panels/GroupPanel.html | 88 ++ .../client/console/panels/GroupPanel.properties | 51 ++ .../console/panels/GroupPanel_it.properties | 53 ++ .../console/panels/GroupPanel_pt_BR.properties | 40 + .../console/panels/GroupSecurityPanel.html | 66 ++ .../panels/GroupSecurityPanel.properties | 20 + .../panels/GroupSecurityPanel_it.properties | 20 + .../panels/GroupSecurityPanel_pt_BR.properties | 20 + .../console/panels/GroupSummaryPanel.html | 39 + .../client/console/panels/GroupTabPanel.html | 64 ++ .../console/panels/GroupTabPanel.properties | 27 + .../console/panels/GroupTabPanel_it.properties | 27 + .../panels/GroupTabPanel_pt_BR.properties | 27 + .../client/console/panels/MembershipsPanel.html | 6 +- .../console/panels/MembershipsPanel.properties | 8 +- .../panels/MembershipsPanel_it.properties | 8 +- .../panels/MembershipsPanel_pt_BR.properties | 8 +- .../client/console/panels/RoleDetailsPanel.html | 107 --- .../console/panels/RoleDetailsPanel.properties | 22 - .../panels/RoleDetailsPanel_it.properties | 22 - .../panels/RoleDetailsPanel_pt_BR.properties | 22 - .../client/console/panels/RolePanel.html | 88 -- .../client/console/panels/RolePanel.properties | 51 -- .../console/panels/RolePanel_it.properties | 53 -- .../console/panels/RolePanel_pt_BR.properties | 40 - .../console/panels/RoleSecurityPanel.html | 66 -- .../console/panels/RoleSecurityPanel.properties | 20 - .../panels/RoleSecurityPanel_it.properties | 20 - .../panels/RoleSecurityPanel_pt_BR.properties | 20 - .../client/console/panels/RoleSummaryPanel.html | 39 - .../client/console/panels/RoleTabPanel.html | 64 -- .../console/panels/RoleTabPanel.properties | 27 - .../console/panels/RoleTabPanel_it.properties | 27 - .../panels/RoleTabPanel_pt_BR.properties | 27 - .../markup/html/form/ActionLinksPanel.html | 12 +- .../wicket/markup/html/tree/TreeGroupPanel.html | 25 + .../wicket/markup/html/tree/TreeRolePanel.html | 23 - .../syncope/client/lib/SyncopeClient.java | 10 +- .../syncope/common/lib/AbstractBaseBean.java | 4 +- .../common/lib/AttributableOperations.java | 62 +- .../lib/SyncopeClientCompositeException.java | 10 +- .../common/lib/SyncopeClientException.java | 12 +- .../syncope/common/lib/SyncopeConstants.java | 8 +- .../lib/annotation/FormAttributeField.java | 2 +- .../apache/syncope/common/lib/mod/AttrMod.java | 11 +- .../apache/syncope/common/lib/mod/GroupMod.java | 300 +++++++ .../syncope/common/lib/mod/MembershipMod.java | 12 +- .../syncope/common/lib/mod/ReferenceMod.java | 5 +- .../common/lib/mod/ResourceAssociationMod.java | 4 +- .../apache/syncope/common/lib/mod/RoleMod.java | 300 ------- .../syncope/common/lib/mod/StatusMod.java | 2 +- .../lib/report/AbstractReportletConf.java | 3 +- .../report/AbstractSubjectReportletConf.java | 84 ++ .../common/lib/report/GroupReportletConf.java | 66 ++ .../common/lib/report/RoleReportletConf.java | 109 --- .../common/lib/report/StaticReportletConf.java | 10 +- .../common/lib/report/UserReportletConf.java | 45 +- .../AbstractFiqlSearchConditionBuilder.java | 112 +++ .../search/GroupFiqlSearchConditionBuilder.java | 90 ++ .../common/lib/search/GroupProperty.java | 29 + .../search/RoleFiqlSearchConditionBuilder.java | 90 -- .../syncope/common/lib/search/RoleProperty.java | 29 - .../common/lib/search/SearchableFields.java | 12 +- .../syncope/common/lib/search/SpecialAttr.java | 2 +- .../SyncopeFiqlSearchConditionBuilder.java | 110 --- .../common/lib/search/SyncopeProperty.java | 4 +- .../search/UserFiqlSearchConditionBuilder.java | 24 +- .../syncope/common/lib/search/UserProperty.java | 4 +- .../syncope/common/lib/to/AbstractExecTO.java | 34 +- .../syncope/common/lib/to/AbstractPolicyTO.java | 14 +- .../lib/to/AbstractProvisioningTaskTO.java | 12 +- .../common/lib/to/AbstractStartEndBean.java | 57 ++ .../syncope/common/lib/to/AbstractTaskTO.java | 32 +- .../syncope/common/lib/to/BulkActionResult.java | 2 + .../syncope/common/lib/to/ConnBundleTO.java | 2 +- .../common/lib/to/ConnIdObjectClassTO.java | 6 +- .../syncope/common/lib/to/EventCategoryTO.java | 7 +- .../apache/syncope/common/lib/to/GroupTO.java | 258 ++++++ .../apache/syncope/common/lib/to/MappingTO.java | 2 +- .../syncope/common/lib/to/MembershipTO.java | 20 +- .../syncope/common/lib/to/NotificationTO.java | 12 +- .../common/lib/to/NotificationTaskTO.java | 2 +- .../syncope/common/lib/to/PasswordPolicyTO.java | 2 +- .../syncope/common/lib/to/PushTaskTO.java | 10 +- .../syncope/common/lib/to/ReportExecTO.java | 2 +- .../apache/syncope/common/lib/to/ReportTO.java | 33 +- .../syncope/common/lib/to/ResourceTO.java | 15 +- .../apache/syncope/common/lib/to/RoleTO.java | 258 ------ .../syncope/common/lib/to/SchedTaskTO.java | 3 + .../syncope/common/lib/to/SyncTaskTO.java | 12 +- .../apache/syncope/common/lib/to/SyncopeTO.java | 20 +- .../apache/syncope/common/lib/to/UserTO.java | 2 +- .../syncope/common/lib/to/WorkflowFormTO.java | 2 +- .../common/lib/types/AbstractPolicySpec.java | 83 ++ .../common/lib/types/AccountPolicySpec.java | 69 +- .../common/lib/types/AttrSchemaType.java | 2 +- .../common/lib/types/AttributableType.java | 2 +- .../syncope/common/lib/types/AuditElements.java | 3 - .../common/lib/types/AuditLoggerName.java | 35 +- .../common/lib/types/CipherAlgorithm.java | 4 +- .../common/lib/types/ClientExceptionType.java | 8 +- .../common/lib/types/EntityViolationType.java | 8 +- .../common/lib/types/IntMappingType.java | 52 +- .../common/lib/types/PasswordPolicySpec.java | 69 +- .../types/ResourceAssociationActionType.java | 6 +- .../types/ResourceDeassociationActionType.java | 6 +- .../syncope/common/lib/types/SubjectType.java | 4 +- .../common/lib/types/SyncPolicySpec.java | 24 +- common/pom.xml | 4 + .../common/rest/api/service/GroupService.java | 312 +++++++ .../common/rest/api/service/JAXRSService.java | 16 +- .../rest/api/service/ResourceService.java | 10 +- .../common/rest/api/service/RoleService.java | 312 ------- .../rest/api/service/WorkflowService.java | 6 +- .../syncope/core/logic/ConfigurationLogic.java | 6 +- .../apache/syncope/core/logic/GroupLogic.java | 405 +++++++++ .../syncope/core/logic/ResourceLogic.java | 6 +- .../apache/syncope/core/logic/RoleLogic.java | 405 --------- .../apache/syncope/core/logic/SyncopeLogic.java | 12 +- .../apache/syncope/core/logic/UserLogic.java | 45 +- .../syncope/core/logic/WorkflowLogic.java | 16 +- .../core/logic/report/GroupReportlet.java | 328 +++++++ .../core/logic/report/RoleReportlet.java | 327 ------- .../core/logic/report/UserReportlet.java | 28 +- .../resources/report/groupReportlet2csv.xsl | 118 +++ .../main/resources/report/groupReportlet2fo.xsl | 228 +++++ .../resources/report/groupReportlet2html.xsl | 196 ++++ .../src/main/resources/report/report2csv.xsl | 4 +- .../src/main/resources/report/report2fo.xsl | 4 +- .../src/main/resources/report/report2html.xsl | 4 +- .../main/resources/report/roleReportlet2csv.xsl | 118 --- .../main/resources/report/roleReportlet2fo.xsl | 228 ----- .../resources/report/roleReportlet2html.xsl | 196 ---- .../main/resources/report/userReportlet2csv.xsl | 6 +- .../main/resources/report/userReportlet2fo.xsl | 16 +- .../resources/report/userReportlet2html.xsl | 16 +- .../syncope/core/logic/NotificationTest.java | 52 +- .../apache/syncope/core/misc/AuditManager.java | 18 +- .../syncope/core/misc/ConnObjectUtil.java | 146 ++- .../apache/syncope/core/misc/MappingUtil.java | 94 +- .../core/misc/jexl/EmptyClassLoader.java | 2 +- .../apache/syncope/core/misc/jexl/JexlUtil.java | 20 +- .../core/misc/policy/AccountPolicyEnforcer.java | 4 +- .../misc/policy/PasswordPolicyEnforcer.java | 4 +- .../core/misc/policy/PolicyEnforcer.java | 5 +- .../core/misc/search/SearchCondConverter.java | 4 +- .../core/misc/search/SearchCondVisitor.java | 8 +- .../core/misc/security/AuthContextUtil.java | 10 +- .../syncope/core/misc/security/Encryptor.java | 68 +- .../core/misc/security/PasswordGenerator.java | 16 +- .../core/misc/security/SecureRandomUtil.java | 2 +- .../security/SyncopeAuthenticationProvider.java | 23 +- .../security/SyncopeUserDetailsService.java | 41 +- .../security/UnauthorizedGroupException.java | 42 + .../security/UnauthorizedRoleException.java | 42 - .../serialization/AttributeDeserializer.java | 3 +- .../misc/serialization/AttributeSerializer.java | 7 +- .../GuardedStringDeserializer.java | 3 +- .../serialization/GuardedStringSerializer.java | 3 +- .../serialization/SyncTokenDeserializer.java | 3 +- .../misc/serialization/SyncTokenSerializer.java | 3 +- .../serialization/UnwrappedObjectMapper.java | 10 +- .../misc/spring/ApplicationContextProvider.java | 8 +- .../syncope/core/misc/spring/BeanUtils.java | 20 +- .../misc/src/main/resources/security.properties | 3 +- .../misc/search/SearchCondConverterTest.java | 12 +- .../persistence/api/GroupEntitlementUtil.java | 88 ++ .../persistence/api/RoleEntitlementUtil.java | 88 -- .../validation/InvalidEntityException.java | 2 +- .../InvalidPlainAttrValueException.java | 2 +- .../api/attrvalue/validation/Validator.java | 3 +- .../persistence/api/dao/ConnInstanceDAO.java | 3 +- .../core/persistence/api/dao/DerAttrDAO.java | 3 +- .../core/persistence/api/dao/DerSchemaDAO.java | 3 +- .../persistence/api/dao/EntitlementDAO.java | 7 +- .../api/dao/ExternalResourceDAO.java | 3 +- .../core/persistence/api/dao/GroupDAO.java | 91 ++ .../core/persistence/api/dao/LoggerDAO.java | 3 +- .../core/persistence/api/dao/MembershipDAO.java | 7 +- .../persistence/api/dao/NotificationDAO.java | 3 +- .../persistence/api/dao/PlainAttrValueDAO.java | 3 +- .../persistence/api/dao/PlainSchemaDAO.java | 3 +- .../core/persistence/api/dao/ReportDAO.java | 3 +- .../core/persistence/api/dao/ReportExecDAO.java | 3 +- .../core/persistence/api/dao/RoleDAO.java | 92 -- .../api/dao/SecurityQuestionDAO.java | 3 +- .../persistence/api/dao/SubjectSearchDAO.java | 47 +- .../core/persistence/api/dao/TaskDAO.java | 3 +- .../core/persistence/api/dao/TaskExecDAO.java | 5 +- .../core/persistence/api/dao/UserDAO.java | 9 +- .../core/persistence/api/dao/VirAttrDAO.java | 3 +- .../core/persistence/api/dao/VirSchemaDAO.java | 3 +- .../api/dao/search/MembershipCond.java | 16 +- .../persistence/api/dao/search/SubjectCond.java | 1 + .../persistence/api/entity/AttrTemplate.java | 6 +- .../api/entity/ExternalResource.java | 6 +- .../persistence/api/entity/Notification.java | 4 +- .../core/persistence/api/entity/PlainAttr.java | 3 +- .../persistence/api/entity/PlainAttrValue.java | 3 +- .../persistence/api/entity/group/GDerAttr.java | 34 + .../api/entity/group/GDerAttrTemplate.java | 25 + .../api/entity/group/GDerSchema.java | 25 + .../persistence/api/entity/group/GMapping.java | 25 + .../api/entity/group/GMappingItem.java | 29 + .../api/entity/group/GPlainAttr.java | 42 + .../api/entity/group/GPlainAttrTemplate.java | 25 + .../api/entity/group/GPlainAttrUniqueValue.java | 31 + .../api/entity/group/GPlainAttrValue.java | 28 + .../api/entity/group/GPlainSchema.java | 25 + .../persistence/api/entity/group/GVirAttr.java | 34 + .../api/entity/group/GVirAttrTemplate.java | 25 + .../api/entity/group/GVirSchema.java | 25 + .../persistence/api/entity/group/Group.java | 168 ++++ .../api/entity/membership/Membership.java | 6 +- .../persistence/api/entity/role/RDerAttr.java | 34 - .../api/entity/role/RDerAttrTemplate.java | 25 - .../persistence/api/entity/role/RDerSchema.java | 25 - .../persistence/api/entity/role/RMapping.java | 25 - .../api/entity/role/RMappingItem.java | 29 - .../persistence/api/entity/role/RPlainAttr.java | 42 - .../api/entity/role/RPlainAttrTemplate.java | 25 - .../api/entity/role/RPlainAttrUniqueValue.java | 31 - .../api/entity/role/RPlainAttrValue.java | 28 - .../api/entity/role/RPlainSchema.java | 25 - .../persistence/api/entity/role/RVirAttr.java | 34 - .../api/entity/role/RVirAttrTemplate.java | 25 - .../persistence/api/entity/role/RVirSchema.java | 25 - .../core/persistence/api/entity/role/Role.java | 168 ---- .../persistence/api/entity/task/PushTask.java | 4 +- .../persistence/api/entity/task/SyncTask.java | 6 +- .../core/persistence/api/entity/user/User.java | 8 +- .../jpa/content/XMLContentExporter.java | 2 +- .../persistence/jpa/dao/AbstractSubjectDAO.java | 6 +- .../persistence/jpa/dao/JPAAttrTemplateDAO.java | 24 +- .../core/persistence/jpa/dao/JPADerAttrDAO.java | 8 +- .../persistence/jpa/dao/JPADerSchemaDAO.java | 8 +- .../persistence/jpa/dao/JPAEntitlementDAO.java | 24 +- .../jpa/dao/JPAExternalResourceDAO.java | 24 +- .../core/persistence/jpa/dao/JPAGroupDAO.java | 579 ++++++++++++ .../persistence/jpa/dao/JPAMembershipDAO.java | 11 +- .../persistence/jpa/dao/JPAPlainAttrDAO.java | 8 +- .../jpa/dao/JPAPlainAttrValueDAO.java | 16 +- .../persistence/jpa/dao/JPAPlainSchemaDAO.java | 18 +- .../core/persistence/jpa/dao/JPARoleDAO.java | 584 ------------ .../jpa/dao/JPASubjectSearchDAO.java | 74 +- .../core/persistence/jpa/dao/JPAUserDAO.java | 38 +- .../core/persistence/jpa/dao/JPAVirAttrDAO.java | 8 +- .../persistence/jpa/dao/JPAVirSchemaDAO.java | 8 +- .../core/persistence/jpa/dao/SearchSupport.java | 8 +- .../persistence/jpa/entity/AbstractMapping.java | 2 +- .../jpa/entity/AbstractMappingItem.java | 10 +- .../jpa/entity/JPAAttributableUtil.java | 152 ++-- .../jpa/entity/JPAEntityFactory.java | 112 +-- .../jpa/entity/JPAExternalResource.java | 18 +- .../persistence/jpa/entity/JPANotification.java | 10 +- .../jpa/entity/JPAttributableUtilFactory.java | 8 +- .../jpa/entity/group/JPAGDerAttr.java | 82 ++ .../jpa/entity/group/JPAGDerAttrTemplate.java | 66 ++ .../jpa/entity/group/JPAGDerSchema.java | 34 + .../jpa/entity/group/JPAGMapping.java | 103 +++ .../jpa/entity/group/JPAGMappingItem.java | 58 ++ .../jpa/entity/group/JPAGPlainAttr.java | 140 +++ .../jpa/entity/group/JPAGPlainAttrTemplate.java | 75 ++ .../entity/group/JPAGPlainAttrUniqueValue.java | 78 ++ .../jpa/entity/group/JPAGPlainAttrValue.java | 64 ++ .../jpa/entity/group/JPAGPlainSchema.java | 36 + .../jpa/entity/group/JPAGVirAttr.java | 82 ++ .../jpa/entity/group/JPAGVirAttrTemplate.java | 66 ++ .../jpa/entity/group/JPAGVirSchema.java | 36 + .../persistence/jpa/entity/group/JPAGroup.java | 593 +++++++++++++ .../jpa/entity/membership/JPAMDerAttr.java | 2 +- .../entity/membership/JPAMDerAttrTemplate.java | 14 +- .../jpa/entity/membership/JPAMPlainAttr.java | 2 +- .../membership/JPAMPlainAttrTemplate.java | 14 +- .../jpa/entity/membership/JPAMVirAttr.java | 2 +- .../entity/membership/JPAMVirAttrTemplate.java | 14 +- .../jpa/entity/membership/JPAMembership.java | 30 +- .../jpa/entity/role/JPARDerAttr.java | 82 -- .../jpa/entity/role/JPARDerAttrTemplate.java | 66 -- .../jpa/entity/role/JPARDerSchema.java | 34 - .../jpa/entity/role/JPARMapping.java | 103 --- .../jpa/entity/role/JPARMappingItem.java | 58 -- .../jpa/entity/role/JPARPlainAttr.java | 140 --- .../jpa/entity/role/JPARPlainAttrTemplate.java | 75 -- .../entity/role/JPARPlainAttrUniqueValue.java | 78 -- .../jpa/entity/role/JPARPlainAttrValue.java | 64 -- .../jpa/entity/role/JPARPlainSchema.java | 36 - .../jpa/entity/role/JPARVirAttr.java | 82 -- .../jpa/entity/role/JPARVirAttrTemplate.java | 66 -- .../jpa/entity/role/JPARVirSchema.java | 36 - .../persistence/jpa/entity/role/JPARole.java | 593 ------------- .../jpa/entity/task/JPAPushTask.java | 10 +- .../jpa/entity/task/JPASyncTask.java | 14 +- .../persistence/jpa/entity/user/JPAUser.java | 28 +- .../entity/ExternalResourceValidator.java | 6 +- .../jpa/validation/entity/GroupCheck.java | 41 + .../jpa/validation/entity/GroupValidator.java | 44 + .../entity/PlainAttrValueValidator.java | 6 +- .../jpa/validation/entity/RoleCheck.java | 41 - .../jpa/validation/entity/RoleValidator.java | 44 - .../validation/entity/SchemaNameValidator.java | 22 +- .../jpa/validation/entity/UserValidator.java | 14 +- .../resources/META-INF/spring-orm-oracle.xml | 40 +- .../resources/META-INF/spring-orm-sqlserver.xml | 40 +- .../src/main/resources/META-INF/spring-orm.xml | 40 +- .../src/main/resources/content.xml | 14 +- .../src/main/resources/indexes.xml | 10 +- .../src/main/resources/views.xml | 60 +- .../jpa/entity/AttributableSearchTest.java | 115 ++- .../persistence/jpa/entity/DerAttrTest.java | 52 +- .../persistence/jpa/entity/DerSchemaTest.java | 8 +- .../core/persistence/jpa/entity/GroupTest.java | 141 +++ .../persistence/jpa/entity/MembershipTest.java | 10 +- .../jpa/entity/NotificationTest.java | 4 +- .../persistence/jpa/entity/PlainSchemaTest.java | 18 +- .../core/persistence/jpa/entity/PolicyTest.java | 4 +- .../persistence/jpa/entity/ResourceTest.java | 8 +- .../core/persistence/jpa/entity/RoleTest.java | 142 --- .../core/persistence/jpa/entity/UserTest.java | 16 +- .../persistence/jpa/entity/VirAttrTest.java | 20 +- .../persistence/jpa/entity/VirSchemaTest.java | 8 +- .../persistence/jpa/relationship/AttrTest.java | 32 +- .../relationship/AttributableSearchTest.java | 18 +- .../jpa/relationship/EntitlementTest.java | 14 +- .../persistence/jpa/relationship/GroupTest.java | 145 +++ .../jpa/relationship/MembershipTest.java | 16 +- .../jpa/relationship/ResourceTest.java | 14 +- .../persistence/jpa/relationship/RoleTest.java | 145 --- .../persistence/jpa/relationship/UserTest.java | 6 +- .../src/test/resources/content.xml | 294 +++--- core/pom.xml | 4 + .../api/AttributableTransformer.java | 2 +- .../core/provisioning/api/Connector.java | 8 +- .../api/GroupProvisioningManager.java | 37 + .../api/RoleProvisioningManager.java | 37 - .../core/provisioning/api/WorkflowResult.java | 5 +- .../provisioning/api/cache/VirAttrCache.java | 12 +- .../api/cache/VirAttrCacheValue.java | 8 +- .../provisioning/api/data/GroupDataBinder.java | 36 + .../provisioning/api/data/RoleDataBinder.java | 36 - .../core/provisioning/api/job/TaskJob.java | 2 +- .../api/notification/NotificationManager.java | 5 +- .../api/propagation/PropagationManager.java | 50 +- .../api/sync/GroupPushResultHandler.java | 23 + .../api/sync/GroupSyncResultHandler.java | 26 + .../api/sync/ProvisioningProfile.java | 2 +- .../api/sync/ProvisioningResult.java | 2 +- .../core/provisioning/api/sync/PushActions.java | 36 +- .../api/sync/RolePushResultHandler.java | 23 - .../api/sync/RoleSyncResultHandler.java | 26 - .../core/provisioning/api/sync/SyncActions.java | 48 +- .../java/DefaultGroupProvisioningManager.java | 222 +++++ .../java/DefaultRoleProvisioningManager.java | 223 ----- .../java/DefaultUserProvisioningManager.java | 2 +- .../core/provisioning/java/VirAttrHandler.java | 24 +- .../java/cache/MemoryVirAttrCache.java | 14 +- .../data/AbstractAttributableDataBinder.java | 66 +- .../java/data/GroupDataBinderImpl.java | 411 +++++++++ .../java/data/NotificationDataBinderImpl.java | 4 +- .../java/data/PolicyDataBinderImpl.java | 14 +- .../java/data/ResourceDataBinderImpl.java | 20 +- .../java/data/RoleDataBinderImpl.java | 411 --------- .../java/data/TaskDataBinderImpl.java | 14 +- .../java/data/UserDataBinderImpl.java | 52 +- .../notification/NotificationManagerImpl.java | 46 +- .../AbstractPropagationTaskExecutor.java | 28 +- .../LDAPMembershipPropagationActions.java | 40 +- .../propagation/PropagationManagerImpl.java | 183 ++-- .../java/sync/AbstractProvisioningJob.java | 40 +- .../java/sync/AbstractPushResultHandler.java | 2 +- .../java/sync/AbstractSyncResultHandler.java | 9 +- .../java/sync/AbstractSyncopeResultHandler.java | 18 +- .../java/sync/GroupPushResultHandlerImpl.java | 162 ++++ .../java/sync/GroupSyncResultHandlerImpl.java | 168 ++++ .../java/sync/LDAPMembershipSyncActions.java | 75 +- .../provisioning/java/sync/PushJobImpl.java | 47 +- .../java/sync/RolePushResultHandlerImpl.java | 162 ---- .../java/sync/RoleSyncResultHandlerImpl.java | 169 ---- .../provisioning/java/sync/SyncJobImpl.java | 52 +- .../provisioning/java/sync/SyncUtilities.java | 49 +- .../main/resources/mailTemplates/optin.html.vm | 4 +- .../main/resources/mailTemplates/optin.txt.vm | 4 +- .../src/main/resources/provisioning.properties | 2 +- .../src/main/resources/provisioningContext.xml | 2 +- .../rest/cxf/RestServiceExceptionMapper.java | 6 +- .../core/rest/cxf/service/GroupServiceImpl.java | 227 +++++ .../rest/cxf/service/ResourceServiceImpl.java | 6 +- .../core/rest/cxf/service/RoleServiceImpl.java | 227 ----- .../rest/cxf/service/WorkflowServiceImpl.java | 6 +- .../activiti/ActivitiUserWorkflowAdapter.java | 10 +- .../workflow/activiti/SyncopeGroupManager.java | 10 +- .../activiti/SyncopeGroupQueryImpl.java | 31 +- .../workflow/activiti/SyncopeUserManager.java | 10 +- .../workflow/activiti/SyncopeUserQueryImpl.java | 22 +- .../src/main/resources/workflow.properties | 2 +- .../core/workflow/api/GroupWorkflowAdapter.java | 61 ++ .../core/workflow/api/RoleWorkflowAdapter.java | 71 -- .../core/workflow/api/UserWorkflowAdapter.java | 43 +- .../core/workflow/api/WorkflowAdapter.java | 23 +- .../java/AbstractGroupWorkflowAdapter.java | 66 ++ .../java/AbstractRoleWorkflowAdapter.java | 66 -- .../java/DefaultGroupWorkflowAdapter.java | 129 +++ .../java/DefaultRoleWorkflowAdapter.java | 129 --- .../src/main/resources/workflow.properties | 2 +- .../src/main/resources/workflowContext.xml | 2 +- deb/core/pom.xml | 2 +- deb/core/src/deb/control/conffiles | 2 +- deb/core/src/deb/control/control | 2 +- .../client/console/panels/CamelRoutePanel.java | 8 +- .../console/rest/CamelRouteRestClient.java | 2 +- .../core/logic/init/CamelRouteLoader.java | 6 +- .../camel/CamelGroupProvisioningManager.java | 175 ++++ .../camel/CamelRoleProvisioningManager.java | 174 ---- .../processor/GroupCreateInSyncProcessor.java | 72 ++ .../camel/processor/GroupCreateProcessor.java | 76 ++ .../camel/processor/GroupDeleteProcessor.java | 105 +++ .../processor/GroupDeprovisionProcessor.java | 78 ++ .../camel/processor/GroupUpdateProcessor.java | 71 ++ .../processor/RoleCreateInSyncProcessor.java | 72 -- .../camel/processor/RoleCreateProcessor.java | 77 -- .../camel/processor/RoleDeleteProcessor.java | 105 --- .../processor/RoleDeprovisionProcessor.java | 78 -- .../camel/processor/RoleUpdateProcessor.java | 71 -- .../camel/processor/UserUpdateProcessor.java | 2 +- .../src/main/resources/groupRoutes.xml | 140 +++ .../src/main/resources/provisioning.properties | 2 +- .../main/resources/provisioningCamelContext.xml | 6 +- .../src/main/resources/roleRoutes.xml | 140 --- .../fit/buildtools/ApacheDSRootDseServlet.java | 6 +- .../fit/console/reference/AccessITCase.java | 7 +- .../console/reference/ConfigurationITCase.java | 26 +- .../fit/console/reference/ConnectorITCase.java | 2 +- .../fit/console/reference/GroupITCase.java | 211 +++++ .../fit/console/reference/RoleITCase.java | 211 ----- .../fit/console/reference/SchemaITCase.java | 2 +- .../fit/core/reference/TestSyncActions.java | 3 + .../fit/core/reference/TestSyncRule.java | 5 +- .../fit/core/reference/package-info.java | 19 + .../main/resources/all/provisioning.properties | 2 +- .../src/main/resources/all/workflow.properties | 2 +- .../src/main/resources/connid.properties | 3 +- .../src/main/resources/provisioning.properties | 2 +- .../src/main/resources/userWorkflow.bpmn20.xml | 8 +- .../src/main/resources/workflow.properties | 2 +- .../fit/core/reference/AbstractITCase.java | 29 +- .../fit/core/reference/ActivitiDetector.java | 4 +- .../core/reference/AuthenticationITCase.java | 100 +-- .../fit/core/reference/CamelDetector.java | 4 +- .../fit/core/reference/CamelRouteITCase.java | 12 +- .../fit/core/reference/ConfigurationITCase.java | 27 +- .../fit/core/reference/DerSchemaITCase.java | 16 +- .../syncope/fit/core/reference/GroupITCase.java | 887 ++++++++++++++++++ .../fit/core/reference/LoggerITCase.java | 4 +- .../fit/core/reference/NotificationITCase.java | 7 +- .../core/reference/NotificationTaskITCase.java | 6 +- .../fit/core/reference/PlainSchemaITCase.java | 28 +- .../fit/core/reference/PolicyITCase.java | 8 +- .../fit/core/reference/PushTaskITCase.java | 58 +- .../fit/core/reference/ResourceITCase.java | 20 +- .../syncope/fit/core/reference/RoleITCase.java | 889 ------------------- .../fit/core/reference/SearchITCase.java | 42 +- .../fit/core/reference/SyncTaskITCase.java | 60 +- .../syncope/fit/core/reference/UserITCase.java | 116 +-- .../fit/core/reference/UserSelfITCase.java | 4 +- .../fit/core/reference/UserWorkflowITCase.java | 26 +- .../fit/core/reference/VirAttrITCase.java | 86 +- .../fit/core/reference/VirSchemaITCase.java | 6 +- .../fit/core/reference/WorkflowITCase.java | 14 +- fit/core-reference/src/test/resources/test.csv | 20 +- .../apache/syncope/installer/files/OrmXml.java | 381 -------- .../installer/utilities/FileSystemUtils.java | 3 +- pom.xml | 51 ++ .../resources/org/apache/syncope/checkstyle.xml | 29 +- src/main/resources/org/apache/syncope/pmd.xml | 55 +- src/site/xdoc/architecture.xml | 2 +- src/site/xdoc/features.xml | 10 +- src/site/xdoc/index.xml | 2 +- src/site/xdoc/security.xml | 2 +- 614 files changed, 15911 insertions(+), 16394 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/SyncopeApplication.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeApplication.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeApplication.java index ac44d43..a1e781d 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeApplication.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeApplication.java @@ -28,7 +28,7 @@ import org.apache.syncope.client.console.pages.Login; import org.apache.syncope.client.console.pages.Logout; import org.apache.syncope.client.console.pages.Reports; import org.apache.syncope.client.console.pages.Resources; -import org.apache.syncope.client.console.pages.Roles; +import org.apache.syncope.client.console.pages.Groups; import org.apache.syncope.client.console.pages.Schema; import org.apache.syncope.client.console.pages.Tasks; import org.apache.syncope.client.console.pages.Todo; @@ -177,13 +177,13 @@ public class SyncopeApplication ? IMG_NOTSEL : StringUtils.EMPTY) + "users" + Constants.PNG_EXT))); - BookmarkablePageLink<Page> rolesLink = new BookmarkablePageLink<>("roles", Roles.class); + BookmarkablePageLink<Page> groupsLink = new BookmarkablePageLink<>("groups", Groups.class); MetaDataRoleAuthorizationStrategy.authorize( - rolesLink, WebPage.ENABLE, xmlRolesReader.getEntitlement("Roles", "list")); - page.add(rolesLink); - rolesLink.add(new Image("rolesIcon", new ContextRelativeResource(IMG_PREFIX + (notsel + groupsLink, WebPage.ENABLE, xmlRolesReader.getEntitlement("Groups", "list")); + page.add(groupsLink); + groupsLink.add(new Image("groupsIcon", new ContextRelativeResource(IMG_PREFIX + (notsel ? IMG_NOTSEL - : StringUtils.EMPTY) + "roles" + Constants.PNG_EXT))); + : StringUtils.EMPTY) + "groups" + Constants.PNG_EXT))); BookmarkablePageLink<Page> resourcesLink = new BookmarkablePageLink<>("resources", Resources.class); MetaDataRoleAuthorizationStrategy.authorize( http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/commons/AttrLayoutType.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/AttrLayoutType.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/AttrLayoutType.java index 87cc062..26764b4 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/commons/AttrLayoutType.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/AttrLayoutType.java @@ -26,8 +26,8 @@ public enum AttrLayoutType { ADMIN_USER("admin.user.layout", Mode.ADMIN, AttributableType.USER), SELF_USER("self.user.layout", Mode.SELF, AttributableType.USER), - ADMIN_ROLE("admin.role.layout", Mode.ADMIN, AttributableType.ROLE), - SELF_ROLE("self.role.layout", Mode.SELF, AttributableType.ROLE), + ADMIN_GROUP("admin.group.layout", Mode.ADMIN, AttributableType.GROUP), + SELF_GROUP("self.group.layout", Mode.SELF, AttributableType.GROUP), ADMIN_MEMBERSHIP("admin.membership.layout", Mode.ADMIN, AttributableType.MEMBERSHIP), SELF_MEMBERSHIP("self.membership.layout", Mode.SELF, AttributableType.MEMBERSHIP); @@ -76,8 +76,8 @@ public enum AttrLayoutType { result = ADMIN_MEMBERSHIP; break; - case ROLE: - result = ADMIN_ROLE; + case GROUP: + result = ADMIN_GROUP; break; default: @@ -92,8 +92,8 @@ public enum AttrLayoutType { result = SELF_MEMBERSHIP; break; - case ROLE: - result = SELF_ROLE; + case GROUP: + result = SELF_GROUP; break; default: http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java index 8f06874..0b8391a 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java @@ -50,19 +50,19 @@ public final class Constants { public static final String PREF_CONF_SCHEMA_PAGINATOR_ROWS = "conf.schema.paginator.rows"; - public static final String PREF_USER_SCHEMA_PAGINATOR_ROWS = "user.schema.paginator.rows"; + public static final String PREF_USER_PLAIN_SCHEMA_PAGINATOR_ROWS = "user.schema.paginator.rows"; public static final String PREF_USER_DER_SCHEMA_PAGINATOR_ROWS = "user.derived.schema.paginator.rows"; public static final String PREF_USER_VIR_SCHEMA_PAGINATOR_ROWS = "user.virtual.schema.paginator.rows"; - public static final String PREF_ROLE_SCHEMA_PAGINATOR_ROWS = "role.schema.paginator.rows"; + public static final String PREF_GROUP_PLAIN_SCHEMA_PAGINATOR_ROWS = "group.schema.paginator.rows"; - public static final String PREF_ROLE_DER_SCHEMA_PAGINATOR_ROWS = "role.derived.schema.paginator.rows"; + public static final String PREF_GROUP_DER_SCHEMA_PAGINATOR_ROWS = "group.derived.schema.paginator.rows"; - public static final String PREF_ROLE_VIR_SCHEMA_PAGINATOR_ROWS = "role.virtual.schema.paginator.rows"; + public static final String PREF_GROUP_VIR_SCHEMA_PAGINATOR_ROWS = "group.virtual.schema.paginator.rows"; - public static final String PREF_MEMBERSHIP_SCHEMA_PAGINATOR_ROWS = "membership.schema.paginator.rows"; + public static final String PREF_MEMBERSHIP_PLAIN_SCHEMA_PAGINATOR_ROWS = "membership.schema.paginator.rows"; public static final String PREF_MEMBERSHIP_DER_SCHEMA_PAGINATOR_ROWS = "membership.derived.aschema.paginator.rows"; http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/commons/GroupTreeBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/GroupTreeBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/GroupTreeBuilder.java new file mode 100644 index 0000000..bc7d21b --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/GroupTreeBuilder.java @@ -0,0 +1,128 @@ +/* + * 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.client.console.commons; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeModel; +import org.apache.syncope.client.console.rest.GroupRestClient; +import org.apache.syncope.common.lib.to.GroupTO; +import org.springframework.beans.factory.annotation.Autowired; + +public class GroupTreeBuilder { + + @Autowired + private GroupRestClient restClient; + + private final GroupTOComparator comparator = new GroupTOComparator(); + + private List<GroupTO> allGroups; + + private List<GroupTO> getChildGroups(final long parentGroupId, final List<GroupTO> groups) { + List<GroupTO> result = new ArrayList<>(); + for (GroupTO group : groups) { + if (group.getParent() == parentGroupId) { + result.add(group); + } + } + + Collections.sort(result, comparator); + return result; + } + + private void populateSubtree(final DefaultMutableTreeNode subRoot, final List<GroupTO> groups) { + GroupTO group = (GroupTO) subRoot.getUserObject(); + + DefaultMutableTreeNode child; + for (GroupTO subGroupTO : getChildGroups(group.getKey(), groups)) { + child = new DefaultMutableTreeNode(subGroupTO); + subRoot.add(child); + populateSubtree(child, groups); + } + } + + public List<GroupTO> getAllGroups() { + return this.allGroups; + } + + public TreeModel build() { + this.allGroups = this.restClient.list(); + return build(this.allGroups); + } + + public TreeModel build(final List<GroupTO> groups) { + DefaultMutableTreeNode fakeroot = new DefaultMutableTreeNode(new FakeRootGroupTO()); + + populateSubtree(fakeroot, groups); + + return new DefaultTreeModel(fakeroot); + } + + public GroupTO findGroup(final long groupKey) { + GroupTO found = null; + if (getAllGroups() != null) { + for (GroupTO groupTO : getAllGroups()) { + if (groupTO.getKey() == groupKey) { + found = groupTO; + } + } + } + return found; + } + + private static class GroupTOComparator implements Comparator<GroupTO>, Serializable { + + private static final long serialVersionUID = 7085057398406518811L; + + @Override + public int compare(final GroupTO r1, final GroupTO r2) { + if (r1.getKey() < r2.getKey()) { + return -1; + } + if (r1.getKey() == r2.getKey()) { + return 0; + } + + return 1; + } + } + + private static class FakeRootGroupTO extends GroupTO { + + private static final long serialVersionUID = 4839183625773925488L; + + public FakeRootGroupTO() { + super(); + + setKey(0); + setName(""); + setParent(-1); + } + + @Override + public String getDisplayName() { + return ""; + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleTreeBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleTreeBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleTreeBuilder.java deleted file mode 100644 index c6ab6e4..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleTreeBuilder.java +++ /dev/null @@ -1,116 +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.client.console.commons; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreeModel; -import org.apache.syncope.client.console.rest.RoleRestClient; -import org.apache.syncope.common.lib.to.RoleTO; -import org.springframework.beans.factory.annotation.Autowired; - -public class RoleTreeBuilder { - - @Autowired - private RoleRestClient restClient; - - private final RoleTOComparator comparator = new RoleTOComparator(); - - private List<RoleTO> allRoles; - - private List<RoleTO> getChildRoles(final long parentRoleId, final List<RoleTO> roles) { - List<RoleTO> result = new ArrayList<RoleTO>(); - for (RoleTO role : roles) { - if (role.getParent() == parentRoleId) { - result.add(role); - } - } - - Collections.sort(result, comparator); - return result; - } - - private void populateSubtree(final DefaultMutableTreeNode subRoot, final List<RoleTO> roles) { - RoleTO role = (RoleTO) subRoot.getUserObject(); - - DefaultMutableTreeNode child; - for (RoleTO subRoleTO : getChildRoles(role.getKey(), roles)) { - child = new DefaultMutableTreeNode(subRoleTO); - subRoot.add(child); - populateSubtree(child, roles); - } - } - - public List<RoleTO> getAllRoles() { - return this.allRoles; - } - - public TreeModel build() { - this.allRoles = this.restClient.list(); - return build(this.allRoles); - } - - public TreeModel build(final List<RoleTO> roles) { - DefaultMutableTreeNode fakeroot = new DefaultMutableTreeNode(new FakeRootRoleTO()); - - populateSubtree(fakeroot, roles); - - return new DefaultTreeModel(fakeroot); - } - - private static class RoleTOComparator implements Comparator<RoleTO>, Serializable { - - private static final long serialVersionUID = 7085057398406518811L; - - @Override - public int compare(final RoleTO r1, final RoleTO r2) { - if (r1.getKey() < r2.getKey()) { - return -1; - } - if (r1.getKey() == r2.getKey()) { - return 0; - } - - return 1; - } - } - - private static class FakeRootRoleTO extends RoleTO { - - private static final long serialVersionUID = 4839183625773925488L; - - public FakeRootRoleTO() { - super(); - - setKey(0); - setName(""); - setParent(-1); - } - - @Override - public String getDisplayName() { - return ""; - } - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleUtils.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleUtils.java deleted file mode 100644 index 27e062b..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleUtils.java +++ /dev/null @@ -1,36 +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.client.console.commons; - -import org.apache.syncope.common.lib.to.RoleTO; - -public class RoleUtils { - - public static RoleTO findRole(final RoleTreeBuilder roleTreeBuilder, final long roleKey) { - RoleTO found = null; - if (roleTreeBuilder.getAllRoles() != null) { - for (RoleTO roleTO : roleTreeBuilder.getAllRoles()) { - if (roleTO.getKey()== roleKey) { - found = roleTO; - } - } - } - return found; - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java index 96ddd14..47d0086 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java @@ -24,7 +24,7 @@ import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.syncope.common.lib.to.AbstractAttributableTO; -import org.apache.syncope.common.lib.to.RoleTO; +import org.apache.syncope.common.lib.to.GroupTO; import org.apache.syncope.common.lib.to.UserTO; public class StatusBean implements Serializable { @@ -46,7 +46,7 @@ public class StatusBean implements Serializable { public StatusBean(final AbstractAttributableTO attributable, String resourceName) { this.attributableKey = attributable.getKey(); this.attributableName = attributable instanceof UserTO - ? ((UserTO) attributable).getUsername() : ((RoleTO) attributable).getName(); + ? ((UserTO) attributable).getUsername() : ((GroupTO) attributable).getName(); this.resourceName = resourceName; } http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java index 3c0e56e..391d202 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java @@ -102,7 +102,7 @@ public class StatusUtils implements Serializable { final AbstractAttributableTO attributable, final String resourceName, final ConnObjectTO objectTO, - final boolean isRole) { + final boolean isGroup) { final StatusBean statusBean = new StatusBean(attributable, resourceName); @@ -110,7 +110,7 @@ public class StatusUtils implements Serializable { final Boolean enabled = isEnabled(objectTO); final Status status = enabled == null - ? (isRole ? Status.ACTIVE : Status.UNDEFINED) + ? (isGroup ? Status.ACTIVE : Status.UNDEFINED) : enabled ? Status.ACTIVE : Status.SUSPENDED; http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractBasePage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractBasePage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractBasePage.java index 4a32700..830f369 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractBasePage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractBasePage.java @@ -25,7 +25,7 @@ import org.apache.syncope.client.console.panels.NotificationPanel; import org.apache.syncope.client.console.rest.ConfigurationRestClient; import org.apache.syncope.client.console.rest.ReportRestClient; import org.apache.syncope.client.console.rest.ResourceRestClient; -import org.apache.syncope.client.console.rest.RoleRestClient; +import org.apache.syncope.client.console.rest.GroupRestClient; import org.apache.syncope.client.console.rest.SchemaRestClient; import org.apache.syncope.client.console.rest.TaskRestClient; import org.apache.syncope.client.console.rest.UserRestClient; @@ -71,7 +71,7 @@ public class AbstractBasePage extends WebPage { protected UserSelfRestClient userSelfRestClient; @SpringBean - protected RoleRestClient roleRestClient; + protected GroupRestClient groupRestClient; @SpringBean protected TaskRestClient taskRestClient; http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java index 4ada6ba..b9b8968 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java @@ -35,7 +35,7 @@ import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; /** - * Show user or role status after performing a successful operation. + * Show user or group status after performing a successful operation. */ public class BulkActionResultModalPage<T, S> extends BaseModalPage { http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/pages/Configuration.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Configuration.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Configuration.java index c6774f2..9f8c734 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Configuration.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Configuration.java @@ -156,8 +156,8 @@ public class Configuration extends BasePage { // Layouts add(new LayoutsPanel("adminUserLayoutPanel", AttrLayoutType.ADMIN_USER, feedbackPanel)); add(new LayoutsPanel("selfUserLayoutPanel", AttrLayoutType.SELF_USER, feedbackPanel)); - add(new LayoutsPanel("adminRoleLayoutPanel", AttrLayoutType.ADMIN_ROLE, feedbackPanel)); - add(new LayoutsPanel("selfRoleLayoutPanel", AttrLayoutType.SELF_ROLE, feedbackPanel)); + add(new LayoutsPanel("adminGroupLayoutPanel", AttrLayoutType.ADMIN_GROUP, feedbackPanel)); + add(new LayoutsPanel("selfGroupLayoutPanel", AttrLayoutType.SELF_GROUP, feedbackPanel)); add(new LayoutsPanel("adminMembershipLayoutPanel", AttrLayoutType.ADMIN_MEMBERSHIP, feedbackPanel)); add(new LayoutsPanel("selfMembershipLayoutPanel", AttrLayoutType.SELF_MEMBERSHIP, feedbackPanel)); http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupModalPage.java new file mode 100644 index 0000000..8b4daa9 --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupModalPage.java @@ -0,0 +1,164 @@ +/* + * 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.client.console.pages; + +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.lang3.SerializationUtils; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.commons.Mode; +import org.apache.syncope.client.console.panels.GroupPanel; +import org.apache.syncope.common.lib.AttributableOperations; +import org.apache.syncope.common.lib.mod.GroupMod; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy; +import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.ResourceModel; + +/** + * Modal window with Group form. + */ +public class GroupModalPage extends BaseModalPage { + + private static final long serialVersionUID = -1732493223434085205L; + + protected final PageReference pageRef; + + protected final ModalWindow window; + + protected final Mode mode; + + protected final boolean createFlag; + + protected final GroupPanel groupPanel; + + protected GroupTO originalGroupTO; + + public GroupModalPage(final PageReference pageRef, final ModalWindow window, final GroupTO groupTO) { + this(pageRef, window, groupTO, Mode.ADMIN); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public GroupModalPage( + final PageReference pageRef, final ModalWindow window, final GroupTO groupTO, final Mode mode) { + + super(); + + this.pageRef = pageRef; + this.window = window; + this.mode = mode; + + this.createFlag = groupTO.getKey() == 0; + if (!createFlag) { + originalGroupTO = SerializationUtils.clone(groupTO); + } + + final Form<GroupTO> form = new Form<GroupTO>("groupForm"); + form.setMultiPart(true); + + add(new Label("displayName", groupTO.getKey() == 0 ? "" : groupTO.getDisplayName())); + + form.setModel(new CompoundPropertyModel<GroupTO>(groupTO)); + + this.groupPanel = new GroupPanel.Builder("groupPanel"). + form(form).groupTO(groupTO).groupModalPageMode(mode).pageRef(getPageReference()).build(); + form.add(groupPanel); + + final AjaxButton submit = new IndicatingAjaxButton(SUBMIT, new ResourceModel(SUBMIT)) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + try { + submitAction(target, form); + + if (pageRef.getPage() instanceof BasePage) { + ((BasePage) pageRef.getPage()).setModalResult(true); + } + + closeAction(target, form); + } catch (Exception e) { + error(getString(Constants.ERROR) + ": " + e.getMessage()); + feedbackPanel.refresh(target); + } + } + + @Override + protected void onError(final AjaxRequestTarget target, final Form<?> form) { + feedbackPanel.refresh(target); + } + }; + form.add(submit); + form.setDefaultButton(submit); + + final AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + closeAction(target, form); + } + }; + cancel.setDefaultFormProcessing(false); + form.add(cancel); + + MetaDataRoleAuthorizationStrategy.authorize(submit, ENABLE, xmlRolesReader.getEntitlement("Groups", + createFlag + ? "create" + : "update")); + + add(form); + } + + protected void submitAction(final AjaxRequestTarget target, final Form<?> form) { + final GroupTO groupTO = (GroupTO) form.getDefaultModelObject(); + final List<String> entitlementList = new ArrayList<String>(groupPanel.getSelectedEntitlements()); + groupTO.getEntitlements().clear(); + groupTO.getEntitlements().addAll(entitlementList); + + GroupTO result; + if (createFlag) { + result = groupRestClient.create(groupTO); + } else { + GroupMod groupMod = AttributableOperations.diff(groupTO, originalGroupTO); + + // update group just if it is changed + if (groupMod.isEmpty()) { + result = groupTO; + } else { + result = groupRestClient.update(originalGroupTO.getETagValue(), groupMod); + } + } + + setResponsePage(new ResultStatusModalPage.Builder(window, result).build()); + } + + protected void closeAction(final AjaxRequestTarget target, final Form<?> form) { + window.close(target); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupSelectModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupSelectModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupSelectModalPage.java new file mode 100644 index 0000000..97b7abf --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupSelectModalPage.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.client.console.pages; + +import java.lang.reflect.Constructor; +import javax.swing.tree.DefaultMutableTreeNode; +import org.apache.syncope.client.console.commons.GroupTreeBuilder; +import org.apache.syncope.client.console.wicket.markup.html.tree.DefaultMutableTreeNodeExpansion; +import org.apache.syncope.client.console.wicket.markup.html.tree.DefaultMutableTreeNodeExpansionModel; +import org.apache.syncope.client.console.wicket.markup.html.tree.TreeGroupProvider; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.wicket.Component; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.event.Broadcast; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree; +import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider; +import org.apache.wicket.extensions.markup.html.repeater.tree.NestedTree; +import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder; +import org.apache.wicket.extensions.markup.html.repeater.tree.theme.WindowsTheme; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class GroupSelectModalPage extends BaseModalPage { + + private static final long serialVersionUID = 2106489458494696439L; + + @SpringBean + private GroupTreeBuilder groupTreeBuilder; + + private final NestedTree<DefaultMutableTreeNode> tree; + + public GroupSelectModalPage(final PageReference pageRef, final ModalWindow window, final Class<?> payloadClass) { + super(); + + final ITreeProvider<DefaultMutableTreeNode> treeProvider = new TreeGroupProvider(groupTreeBuilder, true); + final DefaultMutableTreeNodeExpansionModel treeModel = new DefaultMutableTreeNodeExpansionModel(); + + tree = new DefaultNestedTree<DefaultMutableTreeNode>("treeTable", treeProvider, treeModel) { + + private static final long serialVersionUID = 7137658050662575546L; + + @Override + protected Component newContentComponent(final String id, final IModel<DefaultMutableTreeNode> node) { + final DefaultMutableTreeNode treeNode = node.getObject(); + final GroupTO groupTO = (GroupTO) treeNode.getUserObject(); + + return new Folder<DefaultMutableTreeNode>(id, GroupSelectModalPage.this.tree, node) { + + private static final long serialVersionUID = 9046323319920426493L; + + @Override + protected boolean isClickable() { + return true; + } + + @Override + protected IModel<?> newLabelModel(final IModel<DefaultMutableTreeNode> model) { + return new Model<>(groupTO.getDisplayName()); + } + + @Override + protected void onClick(final AjaxRequestTarget target) { + super.onClick(target); + + try { + Constructor<?> constructor = payloadClass.getConstructor(Long.class); + Object payload = constructor.newInstance(groupTO.getKey()); + + send(pageRef.getPage(), Broadcast.BREADTH, payload); + } catch (Exception e) { + LOG.error("Could not send group select event", e); + } + + window.close(target); + } + }; + } + }; + tree.add(new WindowsTheme()); + tree.setOutputMarkupId(true); + + DefaultMutableTreeNodeExpansion.get().expandAll(); + + this.add(tree); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupTemplateModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupTemplateModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupTemplateModalPage.java new file mode 100644 index 0000000..293e402 --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupTemplateModalPage.java @@ -0,0 +1,50 @@ +/* + * 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.client.console.pages; + +import org.apache.syncope.client.console.commons.Mode; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.syncope.common.lib.to.SyncTaskTO; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.markup.html.form.Form; + +public class GroupTemplateModalPage extends GroupModalPage { + + private static final long serialVersionUID = -3849135555203409845L; + + private final SyncTaskTO syncTaskTO; + + public GroupTemplateModalPage(final PageReference callerPageRef, final ModalWindow window, + final SyncTaskTO syncTaskTO) { + + super(callerPageRef, window, syncTaskTO.getGroupTemplate() == null + ? new GroupTO() + : syncTaskTO.getGroupTemplate(), Mode.TEMPLATE); + + this.syncTaskTO = syncTaskTO; + } + + @Override + protected void submitAction(final AjaxRequestTarget target, final Form form) { + syncTaskTO.setGroupTemplate((GroupTO) form.getModelObject()); + taskRestClient.updateSyncTask(syncTaskTO); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/4095f1e8/client/console/src/main/java/org/apache/syncope/client/console/pages/Groups.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Groups.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Groups.java new file mode 100644 index 0000000..2e92940 --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Groups.java @@ -0,0 +1,186 @@ +/* + * 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.client.console.pages; + +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.panels.AbstractSearchResultPanel; +import org.apache.syncope.client.console.panels.GroupSearchPanel; +import org.apache.syncope.client.console.panels.GroupSearchResultPanel; +import org.apache.syncope.client.console.panels.GroupSummaryPanel; +import org.apache.syncope.client.console.rest.GroupRestClient; +import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxButton; +import org.apache.syncope.client.console.wicket.markup.html.tree.TreeGroupPanel; +import org.apache.wicket.Session; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.event.Broadcast; +import org.apache.wicket.event.IEvent; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.model.ResourceModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.spring.injection.annot.SpringBean; + +/** + * Groups WebPage. + */ +public class Groups extends BasePage { + + private static final long serialVersionUID = -2147758241610831969L; + + private static final int WIN_HEIGHT = 500; + + private static final int WIN_WIDTH = 800; + + @SpringBean + private GroupRestClient restClient; + + private final ModalWindow editGroupWin; + + private final WebMarkupContainer groupTabsContainer; + + public Groups(final PageParameters parameters) { + super(parameters); + + groupTabsContainer = new WebMarkupContainer("groupTabsContainer"); + groupTabsContainer.setOutputMarkupId(true); + add(groupTabsContainer); + + editGroupWin = new ModalWindow("editGroupWin"); + editGroupWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY); + editGroupWin.setInitialHeight(WIN_HEIGHT); + editGroupWin.setInitialWidth(WIN_WIDTH); + editGroupWin.setCookieName("edit-group-modal"); + add(editGroupWin); + + final TreeGroupPanel treePanel = new TreeGroupPanel("treePanel"); + treePanel.setOutputMarkupId(true); + groupTabsContainer.add(treePanel); + + final GroupSummaryPanel summaryPanel = new GroupSummaryPanel.Builder("summaryPanel") + .window(editGroupWin).callerPageRef(Groups.this.getPageReference()).build(); + groupTabsContainer.add(summaryPanel); + + editGroupWin.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { + + private static final long serialVersionUID = 8804221891699487139L; + + @Override + public void onClose(final AjaxRequestTarget target) { + final GroupSummaryPanel summaryPanel = (GroupSummaryPanel) groupTabsContainer.get("summaryPanel"); + + final TreeNodeClickUpdate data = new TreeNodeClickUpdate(target, + summaryPanel == null || summaryPanel.getSelectedNode() == null + ? 0 + : summaryPanel.getSelectedNode().getKey()); + + send(getPage(), Broadcast.BREADTH, data); + + if (modalResult) { + getSession().info(getString(Constants.OPERATION_SUCCEEDED)); + feedbackPanel.refresh(target); + modalResult = false; + } + + } + }); + + final AbstractSearchResultPanel searchResult = + new GroupSearchResultPanel("searchResult", true, null, getPageReference(), restClient); + add(searchResult); + + final Form searchForm = new Form("searchForm"); + add(searchForm); + + final GroupSearchPanel searchPanel = new GroupSearchPanel.Builder("searchPanel").build(); + searchForm.add(searchPanel); + + searchForm.add(new ClearIndicatingAjaxButton("search", new ResourceModel("search"), getPageReference()) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) { + final String fiql = searchPanel.buildFIQL(); + LOG.debug("Node condition {}", fiql); + + doSearch(target, fiql, searchResult); + + Session.get().getFeedbackMessages().clear(); + searchPanel.getSearchFeedback().refresh(target); + } + + @Override + protected void onError(final AjaxRequestTarget target, final Form<?> form) { + searchPanel.getSearchFeedback().refresh(target); + } + }); + } + + private void doSearch(final AjaxRequestTarget target, final String fiql, + final AbstractSearchResultPanel resultsetPanel) { + + if (fiql == null) { + error(getString(Constants.SEARCH_ERROR)); + return; + } + + resultsetPanel.search(fiql, target); + } + + @Override + public void onEvent(final IEvent<?> event) { + super.onEvent(event); + + if (event.getPayload() instanceof TreeNodeClickUpdate) { + final TreeNodeClickUpdate update = (TreeNodeClickUpdate) event.getPayload(); + + final GroupSummaryPanel summaryPanel = new GroupSummaryPanel.Builder("summaryPanel") + .window(editGroupWin).callerPageRef(Groups.this.getPageReference()) + .selectedNodeId(update.getSelectedNodeId()).build(); + + groupTabsContainer.addOrReplace(summaryPanel); + update.getTarget().add(groupTabsContainer); + } + } + + public static class TreeNodeClickUpdate { + + private final AjaxRequestTarget target; + + private Long selectedNodeId; + + public TreeNodeClickUpdate(final AjaxRequestTarget target, final Long selectedNodeId) { + this.target = target; + this.selectedNodeId = selectedNodeId; + } + + public AjaxRequestTarget getTarget() { + return target; + } + + public Long getSelectedNodeId() { + return selectedNodeId; + } + + public void setSelectedNodeId(final Long selectedNodeId) { + this.selectedNodeId = selectedNodeId; + } + } +}
