/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.core.rest.resources; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import org.eclipse.skalli.model.Project; import org.eclipse.skalli.model.User; import org.eclipse.skalli.services.Services; import org.eclipse.skalli.services.entity.EntityServices; import org.eclipse.skalli.services.extension.rest.ResourceBase; import org.eclipse.skalli.services.extension.rest.ResourceRepresentation; import org.eclipse.skalli.services.permit.PermitService; import org.eclipse.skalli.services.permit.PermitSet; import org.eclipse.skalli.services.permit.Permits; import org.eclipse.skalli.services.project.ProjectService; import org.eclipse.skalli.services.search.QueryParseException; import org.eclipse.skalli.services.search.SearchService; import org.eclipse.skalli.services.user.UserServices; import org.restlet.data.Status; import org.restlet.representation.Representation; import org.restlet.resource.Get; public class UserPermitsResource extends ResourceBase { private static final String ID_PREFIX = "rest:api/users/{0}/permits:"; //$NON-NLS-1$ private static final String ERROR_ID_SERVIVE_UNAVAILABLE = ID_PREFIX + "10"; //$NON-NLS-1$ private static final String ERROR_ID_INVALID_QUERY = ID_PREFIX + "20"; //$NON-NLS-1$ private static final String PARAM_USERID = "userId"; //$NON-NLS-1$ private static final String PARAM_PROJECTID = "projectId"; //$NON-NLS-1$ @Get public Representation retrieve() { if (!Permits.isAllowed(getAction(), getPath())) { return createUnauthorizedRepresentation(); } if (!isSupportedMediaType()) { setStatus(Status.CLIENT_ERROR_UNSUPPORTED_MEDIA_TYPE); return null; } String userId = (String) getRequestAttributes().get(PARAM_USERID); User user = UserServices.getUser(userId); if (user.isUnknown()) { setStatus(Status.CLIENT_ERROR_NOT_FOUND, MessageFormat.format("User \"{0}\" not found", userId)); //$NON-NLS-1$ return null; } PermitService permitService = Services.getService(PermitService.class); if (permitService == null) { String errorId = MessageFormat.format(ERROR_ID_SERVIVE_UNAVAILABLE, userId); return createServiceUnavailableRepresentation(errorId, "Permit Service"); //$NON-NLS-1$ } String projectId = (String) getRequestAttributes().get(PARAM_PROJECTID); List<Project> projects = new ArrayList<Project>(); if (projectId != null) { ProjectService projectService = ((ProjectService)EntityServices.getByEntityClass(Project.class)); Project project = projectService.getProject(projectId); if (project == null) { setStatus(Status.CLIENT_ERROR_NOT_FOUND, MessageFormat.format("Project \"{0}\" not found", projectId)); //$NON-NLS-1$ return null; } projects.add(project); } else { SearchService searchService = Services.getService(SearchService.class); if (searchService != null) { try { projects.addAll(searchService.findProjectsByUser(userId, null).getEntities()); } catch (QueryParseException e) { return createErrorRepresentation(Status.CLIENT_ERROR_BAD_REQUEST, ERROR_ID_INVALID_QUERY, "Invalid query \"?{0}\": {1}", getQueryString(), e.getMessage()); //$NON-NLS-1$ } } } PermitSet permits = new PermitSet(); for (Project project: projects) { permits.addAll(permitService.getPermits(userId, project)); } if (enforceOldStyleConverters()) { return new ResourceRepresentation<PermitSet>(permits, new PermitSetConverter(userId, getHost())); } return new ResourceRepresentation<PermitSet>(getResourceContext(), permits, new PermitSetConverter(userId)); } }