001/* 002 * (C) Copyright 2013 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * dmetzler 018 */ 019package org.nuxeo.ecm.restapi.server.jaxrs.usermanager; 020 021import java.io.Serializable; 022 023import javax.ws.rs.core.Response; 024 025import org.nuxeo.ecm.core.api.DocumentModel; 026import org.nuxeo.ecm.core.api.NuxeoGroup; 027import org.nuxeo.ecm.platform.query.api.PageProviderDefinition; 028import org.nuxeo.ecm.platform.query.api.PageProviderService; 029import org.nuxeo.ecm.platform.usermanager.UserManager; 030import org.nuxeo.ecm.webengine.WebException; 031import org.nuxeo.ecm.webengine.model.WebObject; 032import org.nuxeo.runtime.api.Framework; 033 034/** 035 * @since 5.7.3 036 */ 037@WebObject(type = "groups") 038public class GroupRootObject extends AbstractUMRootObject<NuxeoGroup> { 039 040 public static final String PAGE_PROVIDER_NAME = "nuxeo_groups_listing"; 041 042 @Override 043 protected NuxeoGroup getArtifact(String id) { 044 return um.getGroup(id); 045 } 046 047 @Override 048 protected String getArtifactType() { 049 return "group"; 050 } 051 052 @Override 053 protected void checkPrecondition(NuxeoGroup group) { 054 checkCurrentUserCanCreateArtifact(group); 055 checkGroupHasAName(group); 056 checkGroupDoesNotAlreadyExists(group, um); 057 } 058 059 @Override 060 protected NuxeoGroup createArtifact(NuxeoGroup group) { 061 DocumentModel groupModel = buildModelFromGroup(group, um); 062 063 um.createGroup(groupModel); 064 return um.getGroup(group.getName()); 065 } 066 067 private DocumentModel buildModelFromGroup(NuxeoGroup group, UserManager um) { 068 DocumentModel groupModel = um.getBareGroupModel(); 069 String schemaName = um.getGroupSchemaName(); 070 groupModel.setProperty(schemaName, um.getGroupIdField(), group.getName()); 071 groupModel.setProperty(schemaName, um.getGroupLabelField(), group.getLabel()); 072 073 groupModel.setPropertyValue(um.getGroupMembersField(), (Serializable) group.getMemberUsers()); 074 groupModel.setPropertyValue(um.getGroupSubGroupsField(), (Serializable) group.getMemberGroups()); 075 return groupModel; 076 } 077 078 private void checkGroupDoesNotAlreadyExists(NuxeoGroup group, UserManager um) { 079 if (um.getGroup(group.getName()) != null) { 080 throw new WebException("Group already exists", Response.Status.PRECONDITION_FAILED.getStatusCode()); 081 } 082 } 083 084 private void checkGroupHasAName(NuxeoGroup group) { 085 if (group.getName() == null) { 086 throw new WebException("Group MUST have a name", Response.Status.PRECONDITION_FAILED.getStatusCode()); 087 } 088 } 089 090 @Override 091 boolean isAPowerUserEditableArtifact(NuxeoGroup artifact) { 092 return isAPowerUserEditableGroup(artifact); 093 094 } 095 096 static boolean isAPowerUserEditableGroup(NuxeoGroup group) { 097 UserManager um = Framework.getLocalService(UserManager.class); 098 return !um.getAdministratorsGroups().contains(group.getName()); 099 100 } 101 102 @Override 103 protected PageProviderDefinition getPageProviderDefinition() { 104 PageProviderService ppService = Framework.getLocalService(PageProviderService.class); 105 return ppService.getPageProviderDefinition(PAGE_PROVIDER_NAME); 106 } 107 108}