package org.jvalue.ceps.rest;

import org.jvalue.commons.auth.AbstractUserDescription;
import org.jvalue.commons.auth.BasicAuthUtils;
import org.jvalue.commons.auth.BasicAuthenticator;
import org.jvalue.commons.auth.OAuthUtils;
import org.jvalue.commons.auth.RestrictedTo;
import org.jvalue.commons.auth.Role;
import org.jvalue.commons.auth.User;
import org.jvalue.commons.auth.UserManager;

import java.util.List;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 * Empty class which calls super for every single method. Its solve purpose is to allow JaxRs2Retrofit to
 * create client code (yes, it's unfortunately a hack ...).
 */
@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public final class UserApi extends org.jvalue.commons.auth.rest.UserApi {

	@Inject
	UserApi(UserManager userManager, BasicAuthenticator basicAuthenticator, BasicAuthUtils basicAuthUtils, OAuthUtils oAuthUtils) {
		super(userManager, basicAuthenticator, basicAuthUtils, oAuthUtils);
	}


	@Override
	@GET
	public List<User> getAllUsers(@RestrictedTo(Role.ADMIN) User user) {
		return super.getAllUsers(user);
	}


	@Override
	@POST
	public User addUser(@RestrictedTo(value = Role.ADMIN, isOptional = true) User user, AbstractUserDescription userDescription) {
		return super.addUser(user, userDescription);
	}


	@Override
	@GET
	@Path("/{userId}")
	public User getUser(@RestrictedTo(Role.PUBLIC) User user, @PathParam("userId") String userId) {
		return super.getUser(user, userId);
	}


	@Override
	@GET
	@Path("/me")
	public User getUser(@RestrictedTo(Role.PUBLIC) User user) {
		return super.getUser(user);
	}


	@Override
	@DELETE
	@Path("/{userId}")
	public void removeUser(@RestrictedTo(Role.PUBLIC) User user, @PathParam("userId") String userId) {
		super.removeUser(user, userId);
	}

}


package org.jvalue.ceps.rest;

import org.jvalue.commons.auth.AbstractUserDescription;
import org.jvalue.commons.auth.BasicAuthUtils;
import org.jvalue.commons.auth.BasicAuthenticator;
import org.jvalue.commons.auth.OAuthUtils;
import org.jvalue.commons.auth.RestrictedTo;
import org.jvalue.commons.auth.Role;
import org.jvalue.commons.auth.User;
import org.jvalue.commons.auth.UserManager;

import java.util.List;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 * Empty class which calls super for every single method. Its solve purpose is to allow JaxRs2Retrofit to
 * create client code (yes, it's unfortunately a hack ...).
 */
@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public final class UserApi extends org.jvalue.commons.auth.rest.UserApi {

	@Inject
	UserApi(UserManager userManager, BasicAuthenticator basicAuthenticator, BasicAuthUtils basicAuthUtils, OAuthUtils oAuthUtils) {
		super(userManager, basicAuthenticator, basicAuthUtils, oAuthUtils);
	}


	@Override
	@GET
	public List<User> getAllUsers(@RestrictedTo(Role.ADMIN) User user) {
		return super.getAllUsers(user);
	}


	@Override
	@PUT
	@Path("/me")
	public User addUser(@RestrictedTo(value = Role.ADMIN, isOptional = true) User user, AbstractUserDescription userDescription) {
		return super.addUser(user, userDescription);
	}


	@Override
	@GET
	@Path("/{userId}")
	public User getUser(@RestrictedTo(Role.PUBLIC) User user, @PathParam("userId") String userId) {
		return super.getUser(user, userId);
	}


	@Override
	@GET
	@Path("/me")
	public User getUser(@RestrictedTo(Role.PUBLIC) User user) {
		return super.getUser(user);
	}


	@Override
	@DELETE
	@Path("/{userId}")
	public void removeUser(@RestrictedTo(Role.PUBLIC) User user, @PathParam("userId") String userId) {
		super.removeUser(user, userId);
	}

}


use PUT for creating new users