package edu.asu.spring.quadriga.rest; import java.io.StringWriter; import java.security.Principal; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.exception.MethodInvocationException; import org.apache.velocity.exception.ParseErrorException; import org.apache.velocity.exception.ResourceNotFoundException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import edu.asu.spring.quadriga.domain.IProfile; import edu.asu.spring.quadriga.domain.IUser; import edu.asu.spring.quadriga.domain.factories.IRestVelocityFactory; import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException; import edu.asu.spring.quadriga.exceptions.RestException; import edu.asu.spring.quadriga.service.IUserManager; import edu.asu.spring.quadriga.service.IUserProfileManager; /** * Controller for {@link IUser} related rest APIs exposed to other clients * * @author LohithDwaraka * */ @Controller public class UserRestController { @Autowired private IUserProfileManager profileManager; @Autowired private IRestVelocityFactory restVelocityFactory; @Autowired private IUserManager userManager; /** * Rest interface to fetch the user details http://<<URL>: * <PORT>>/quadriga/rest/userdetails/ * http://localhost:8080/quadriga/rest/userdetails/ * * @author Lohith Dwaraka * @param userId * @param model * @return * @throws RestException */ @RequestMapping(value = "rest/userdetails", method = RequestMethod.GET, produces = "application/xml") public ResponseEntity<String> getUserDetails(ModelMap model, Principal principal, HttpServletRequest req) throws RestException { try { IUser userDetails = userManager.getUser(principal.getName()); VelocityEngine engine = restVelocityFactory.getVelocityEngine(); List<IProfile> authFiles = profileManager.getUserProfiles(userDetails.getUserName()); engine.init(); Template template = engine.getTemplate("velocitytemplates/userDetails.vm"); VelocityContext context = new VelocityContext(); context.put("url", ServletUriComponentsBuilder.fromContextPath(req).toUriString()); context.put("userdetails", userDetails); context.put("list", authFiles); StringWriter writer = new StringWriter(); template.merge(context, writer); return new ResponseEntity<String>(writer.toString(), HttpStatus.OK); } catch (ResourceNotFoundException e) { throw new RestException(404, e); } catch (ParseErrorException e) { throw new RestException(500, e); } catch (MethodInvocationException e) { throw new RestException(500, e); } catch (QuadrigaStorageException e) { throw new RestException(500, e); } catch (Exception e) { throw new RestException(500, e); } } }