diff --git a/nuxeo-core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/NuxeoGroup.java b/nuxeo-core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/NuxeoGroup.java index 281103c..65ad989 100644 --- a/nuxeo-core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/NuxeoGroup.java +++ b/nuxeo-core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/NuxeoGroup.java @@ -97,4 +97,17 @@ public interface NuxeoGroup extends Serializable { */ void setLabel(String label); + /** + * Gets the description of the group + * + * @return the description of the group + */ + String getDescription(); + + /** + * Sets the description of this group. + * + * @param description the description of the group + */ + void setDescription(String description); } diff --git a/nuxeo-core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/NuxeoGroupImpl.java b/nuxeo-core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/NuxeoGroupImpl.java index 0888778..efebc36 100644 --- a/nuxeo-core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/NuxeoGroupImpl.java +++ b/nuxeo-core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/NuxeoGroupImpl.java @@ -34,6 +34,8 @@ public class NuxeoGroupImpl implements NuxeoGroup { private String name; + private String description; + private String label; public NuxeoGroupImpl(String name) { @@ -118,6 +120,16 @@ public class NuxeoGroupImpl implements NuxeoGroup { } @Override + public String getDescription() { + return this.description; + } + + @Override + public void setDescription(String description) { + this.description = description; + } + + @Override public boolean equals(Object other) { if (other == this) { return true; diff --git a/nuxeo-features/nuxeo-platform-ui-select2/src/main/java/org/nuxeo/ecm/platform/ui/select2/automation/SuggestUserEntries.java b/nuxeo-features/nuxeo-platform-ui-select2/src/main/java/org/nuxeo/ecm/platform/ui/select2/automation/SuggestUserEntries.java index e1914742..9954d67 100644 --- a/nuxeo-features/nuxeo-platform-ui-select2/src/main/java/org/nuxeo/ecm/platform/ui/select2/automation/SuggestUserEntries.java +++ b/nuxeo-features/nuxeo-platform-ui-select2/src/main/java/org/nuxeo/ecm/platform/ui/select2/automation/SuggestUserEntries.java @@ -182,7 +182,7 @@ public class SuggestUserEntries { QName fieldName = field.getName(); String key = fieldName.getLocalName(); Serializable value = group.getPropertyValue(fieldName.getPrefixedName()); - obj.element(key, value); + obj.put(key, value); } String groupId = group.getId(); obj.put(Select2Common.ID, groupId); diff --git a/nuxeo-features/rest-api/nuxeo-rest-api-io/src/main/java/org/nuxeo/ecm/restapi/jaxrs/io/usermanager/NuxeoGroupReader.java b/nuxeo-features/rest-api/nuxeo-rest-api-io/src/main/java/org/nuxeo/ecm/restapi/jaxrs/io/usermanager/NuxeoGroupReader.java index 42c034b..61ec35e 100644 --- a/nuxeo-features/rest-api/nuxeo-rest-api-io/src/main/java/org/nuxeo/ecm/restapi/jaxrs/io/usermanager/NuxeoGroupReader.java +++ b/nuxeo-features/rest-api/nuxeo-rest-api-io/src/main/java/org/nuxeo/ecm/restapi/jaxrs/io/usermanager/NuxeoGroupReader.java @@ -126,6 +126,8 @@ public class NuxeoGroupReader implements MessageBodyReader { } } else if ("grouplabel".equals(key)) { group.setLabel(jp.readValueAs(String.class)); + } else if ("description".equals(key)) { + group.setDescription(jp.readValueAs(String.class)); } else if ("memberUsers".equals(key)) { tok = jp.nextToken(); List users = new ArrayList<>(); diff --git a/nuxeo-features/rest-api/nuxeo-rest-api-io/src/main/java/org/nuxeo/ecm/restapi/jaxrs/io/usermanager/NuxeoGroupWriter.java b/nuxeo-features/rest-api/nuxeo-rest-api-io/src/main/java/org/nuxeo/ecm/restapi/jaxrs/io/usermanager/NuxeoGroupWriter.java index 1ab2788..dcec5f3 100644 --- a/nuxeo-features/rest-api/nuxeo-rest-api-io/src/main/java/org/nuxeo/ecm/restapi/jaxrs/io/usermanager/NuxeoGroupWriter.java +++ b/nuxeo-features/rest-api/nuxeo-rest-api-io/src/main/java/org/nuxeo/ecm/restapi/jaxrs/io/usermanager/NuxeoGroupWriter.java @@ -56,6 +56,8 @@ public class NuxeoGroupWriter extends EntityWriter { jg.writeStringField("grouplabel", group.getLabel()); + jg.writeStringField("description", group.getDescription()); + jg.writeArrayFieldStart("memberUsers"); for(String user : group.getMemberUsers()) { jg.writeString(user); diff --git a/nuxeo-features/rest-api/nuxeo-rest-api-server/src/main/java/org/nuxeo/ecm/restapi/server/jaxrs/usermanager/GroupObject.java b/nuxeo-features/rest-api/nuxeo-rest-api-server/src/main/java/org/nuxeo/ecm/restapi/server/jaxrs/usermanager/GroupObject.java index 100f4ca..cc588d1 100644 --- a/nuxeo-features/rest-api/nuxeo-rest-api-server/src/main/java/org/nuxeo/ecm/restapi/server/jaxrs/usermanager/GroupObject.java +++ b/nuxeo-features/rest-api/nuxeo-rest-api-server/src/main/java/org/nuxeo/ecm/restapi/server/jaxrs/usermanager/GroupObject.java @@ -57,6 +57,7 @@ public class GroupObject extends AbstractUMObject { DocumentModel groupModel = um.getGroupModel(currentArtifact.getName()); groupModel.setPropertyValue(um.getGroupLabelField(), updateGroup.getLabel()); groupModel.setPropertyValue(um.getGroupMembersField(), (Serializable) updateGroup.getMemberUsers()); + groupModel.setPropertyValue(um.getGroupDescriptionField(), updateGroup.getDescription()); groupModel.setPropertyValue(um.getGroupSubGroupsField(), (Serializable) updateGroup.getMemberGroups()); um.updateGroup(groupModel); diff --git a/nuxeo-features/rest-api/nuxeo-rest-api-server/src/main/java/org/nuxeo/ecm/restapi/server/jaxrs/usermanager/GroupRootObject.java b/nuxeo-features/rest-api/nuxeo-rest-api-server/src/main/java/org/nuxeo/ecm/restapi/server/jaxrs/usermanager/GroupRootObject.java index 8e910c3..6c3b98d 100644 --- a/nuxeo-features/rest-api/nuxeo-rest-api-server/src/main/java/org/nuxeo/ecm/restapi/server/jaxrs/usermanager/GroupRootObject.java +++ b/nuxeo-features/rest-api/nuxeo-rest-api-server/src/main/java/org/nuxeo/ecm/restapi/server/jaxrs/usermanager/GroupRootObject.java @@ -68,6 +68,7 @@ public class GroupRootObject extends AbstractUMRootObject { String schemaName = um.getGroupSchemaName(); groupModel.setProperty(schemaName, um.getGroupIdField(), group.getName()); groupModel.setProperty(schemaName, um.getGroupLabelField(), group.getLabel()); + groupModel.setProperty(schemaName, um.getGroupDescriptionField(), group.getDescription()); groupModel.setPropertyValue(um.getGroupMembersField(), (Serializable) group.getMemberUsers()); groupModel.setPropertyValue(um.getGroupSubGroupsField(), (Serializable) group.getMemberGroups()); diff --git a/nuxeo-services/nuxeo-platform-usermanager-api/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManager.java b/nuxeo-services/nuxeo-platform-usermanager-api/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManager.java index b624a0c..841f2bd 100644 --- a/nuxeo-services/nuxeo-platform-usermanager-api/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManager.java +++ b/nuxeo-services/nuxeo-platform-usermanager-api/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManager.java @@ -387,6 +387,14 @@ public interface UserManager extends Authenticator, EventListener, Serializable String getGroupLabelField() throws ClientException; /** + * Returns the group description field. + * + * @since 5.5 + * @throws ClientException + */ + String getGroupDescriptionField() throws ClientException; + + /** * Gets the group members field. * * @return the group members field. diff --git a/nuxeo-services/nuxeo-platform-usermanager-api/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManagerDescriptor.java b/nuxeo-services/nuxeo-platform-usermanager-api/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManagerDescriptor.java index 5327ff2..b6068f9 100644 --- a/nuxeo-services/nuxeo-platform-usermanager-api/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManagerDescriptor.java +++ b/nuxeo-services/nuxeo-platform-usermanager-api/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManagerDescriptor.java @@ -136,6 +136,9 @@ public class UserManagerDescriptor implements Serializable { @XNode("groups/groupLabelField") public String groupLabelField; + @XNode("groups/groupDescriptionField") + public String groupDescriptionField; + @XNode("groups/membersField") public String groupMembersField; @@ -254,6 +257,9 @@ public class UserManagerDescriptor implements Serializable { if (other.groupLabelField != null) { groupLabelField = other.groupLabelField; } + if (other.groupDescriptionField != null) { + groupDescriptionField = other.groupDescriptionField; + } if (other.groupMembersField != null) { groupMembersField = other.groupMembersField; } diff --git a/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/computedgroups/NuxeoComputedGroup.java b/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/computedgroups/NuxeoComputedGroup.java index 41fcc06..9c751b5 100644 --- a/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/computedgroups/NuxeoComputedGroup.java +++ b/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/computedgroups/NuxeoComputedGroup.java @@ -46,6 +46,8 @@ public class NuxeoComputedGroup implements ComputedGroup { private String label; + private String description; + public NuxeoComputedGroup(String name) { this(name, null); } @@ -111,6 +113,11 @@ public class NuxeoComputedGroup implements ComputedGroup { } @Override + public String getDescription() { + return description; + } + + @Override public void setMemberGroups(List groups) { throw new UnsupportedOperationException("Computed groups are read only"); } @@ -135,4 +142,8 @@ public class NuxeoComputedGroup implements ComputedGroup { throw new UnsupportedOperationException("Computed groups are read only"); } + @Override + public void setDescription(String arg0) { + throw new UnsupportedOperationException("Computed groups are read only"); + } } diff --git a/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/FakeUserManagerImpl.java b/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/FakeUserManagerImpl.java index d596933..10b4f05 100644 --- a/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/FakeUserManagerImpl.java +++ b/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/FakeUserManagerImpl.java @@ -452,6 +452,11 @@ public class FakeUserManagerImpl implements UserManager { } @Override + public String getGroupDescriptionField() throws ClientException { + throw new UnsupportedOperationException(); + } + + @Override public Principal authenticate(String name, String password) throws ClientException { return checkUsernamePassword(name, password) ? getPrincipal(name) : null; } diff --git a/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManagerImpl.java b/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManagerImpl.java index 19bb653..89d3081 100644 --- a/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManagerImpl.java +++ b/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/UserManagerImpl.java @@ -134,6 +134,8 @@ public class UserManagerImpl implements UserManager, MultiTenantUserManager { protected String groupLabelField; + protected String groupDescriptionField; + protected String groupMembersField; protected String groupSubGroupsField; @@ -203,6 +205,7 @@ public class UserManagerImpl implements UserManager, MultiTenantUserManager { userSearchFields = descriptor.userSearchFields; userPasswordPattern = descriptor.userPasswordPattern; groupLabelField = descriptor.groupLabelField; + groupDescriptionField = descriptor.groupDescriptionField; groupMembersField = descriptor.groupMembersField; groupSubGroupsField = descriptor.groupSubGroupsField; groupParentGroupsField = descriptor.groupParentGroupsField; @@ -291,6 +294,11 @@ public class UserManagerImpl implements UserManager, MultiTenantUserManager { } @Override + public String getGroupDescriptionField() throws ClientException { + return groupDescriptionField; + } + + @Override public String getGroupSchemaName() throws ClientException { return groupSchemaName; } @@ -650,6 +658,15 @@ public class UserManagerImpl implements UserManager, MultiTenantUserManager { } catch (ClientException e) { // Nothing to do. } + try { + String description = (String) groupEntry.getProperty(groupSchemaName, + groupDescriptionField); + if (description != null) { + group.setDescription(description); + } + } catch (ClientException e) { + // Nothing to do. + } return group; } @@ -994,6 +1011,8 @@ public class UserManagerImpl implements UserManager, MultiTenantUserManager { group.getName()); newGroupModel.setProperty(groupSchemaName, groupLabelField, group.getLabel()); + newGroupModel.setProperty(groupSchemaName, groupDescriptionField, + group.getDescription()); newGroupModel.setProperty(groupSchemaName, groupMembersField, group.getMemberUsers()); newGroupModel.setProperty(groupSchemaName, groupSubGroupsField, @@ -1080,6 +1099,8 @@ public class UserManagerImpl implements UserManager, MultiTenantUserManager { group.getName()); newGroupModel.setProperty(groupSchemaName, groupLabelField, group.getLabel()); + newGroupModel.setProperty(groupSchemaName, groupDescriptionField, + group.getDescription()); newGroupModel.setProperty(groupSchemaName, groupMembersField, group.getMemberUsers()); newGroupModel.setProperty(groupSchemaName, groupSubGroupsField, diff --git a/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/UserService.java b/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/UserService.java index 39e6402..f51a777 100644 --- a/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/UserService.java +++ b/nuxeo-services/nuxeo-platform-usermanager-core/src/main/java/org/nuxeo/ecm/platform/usermanager/UserService.java @@ -73,6 +73,7 @@ public class UserService extends DefaultComponent { merged.groupDirectoryName = "groupDirectory"; merged.groupLabelField = "grouplabel"; + merged.groupDescriptionField = "description"; merged.groupMembersField = "members"; merged.groupSubGroupsField = "subGroups"; merged.groupParentGroupsField = "parentGroups";