001/* 002 * (C) Copyright 2013 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl-2.1.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * dmetzler 016 */ 017package org.nuxeo.ecm.restapi.server.jaxrs.usermanager; 018 019import java.io.Serializable; 020 021import javax.ws.rs.core.Response; 022 023import org.nuxeo.ecm.core.api.DocumentModel; 024import org.nuxeo.ecm.core.api.NuxeoGroup; 025import org.nuxeo.ecm.platform.query.api.PageProviderDefinition; 026import org.nuxeo.ecm.platform.query.api.PageProviderService; 027import org.nuxeo.ecm.platform.usermanager.UserManager; 028import org.nuxeo.ecm.webengine.WebException; 029import org.nuxeo.ecm.webengine.model.WebObject; 030import org.nuxeo.runtime.api.Framework; 031 032/** 033 * @since 5.7.3 034 */ 035@WebObject(type = "groups") 036public class GroupRootObject extends AbstractUMRootObject<NuxeoGroup> { 037 038 public static final String PAGE_PROVIDER_NAME = "nuxeo_groups_listing"; 039 040 @Override 041 protected NuxeoGroup getArtifact(String id) { 042 return um.getGroup(id); 043 } 044 045 @Override 046 protected String getArtifactType() { 047 return "group"; 048 } 049 050 @Override 051 protected void checkPrecondition(NuxeoGroup group) { 052 checkCurrentUserCanCreateArtifact(group); 053 checkGroupHasAName(group); 054 checkGroupDoesNotAlreadyExists(group, um); 055 } 056 057 @Override 058 protected NuxeoGroup createArtifact(NuxeoGroup group) { 059 DocumentModel groupModel = buildModelFromGroup(group, um); 060 061 um.createGroup(groupModel); 062 return um.getGroup(group.getName()); 063 } 064 065 private DocumentModel buildModelFromGroup(NuxeoGroup group, UserManager um) { 066 DocumentModel groupModel = um.getBareGroupModel(); 067 String schemaName = um.getGroupSchemaName(); 068 groupModel.setProperty(schemaName, um.getGroupIdField(), group.getName()); 069 groupModel.setProperty(schemaName, um.getGroupLabelField(), group.getLabel()); 070 071 groupModel.setPropertyValue(um.getGroupMembersField(), (Serializable) group.getMemberUsers()); 072 groupModel.setPropertyValue(um.getGroupSubGroupsField(), (Serializable) group.getMemberGroups()); 073 return groupModel; 074 } 075 076 private void checkGroupDoesNotAlreadyExists(NuxeoGroup group, UserManager um) { 077 if (um.getGroup(group.getName()) != null) { 078 throw new WebException("Group already exists", Response.Status.PRECONDITION_FAILED.getStatusCode()); 079 } 080 } 081 082 private void checkGroupHasAName(NuxeoGroup group) { 083 if (group.getName() == null) { 084 throw new WebException("Group MUST have a name", Response.Status.PRECONDITION_FAILED.getStatusCode()); 085 } 086 } 087 088 @Override 089 boolean isAPowerUserEditableArtifact(NuxeoGroup artifact) { 090 return isAPowerUserEditableGroup(artifact); 091 092 } 093 094 static boolean isAPowerUserEditableGroup(NuxeoGroup group) { 095 UserManager um = Framework.getLocalService(UserManager.class); 096 return !um.getAdministratorsGroups().contains(group.getName()); 097 098 } 099 100 @Override 101 protected PageProviderDefinition getPageProviderDefinition() { 102 PageProviderService ppService = Framework.getLocalService(PageProviderService.class); 103 return ppService.getPageProviderDefinition(PAGE_PROVIDER_NAME); 104 } 105 106}