Merge remote-tracking branch 'upstream/master'

This commit is contained in:
DOHA 2015-03-04 17:33:02 +02:00
commit d86a6a43b6
5 changed files with 66 additions and 26 deletions

View File

@ -67,7 +67,7 @@ public class PersistenceJPAConfig {
final Properties additionalProperties() { final Properties additionalProperties() {
final Properties hibernateProperties = new Properties(); final Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto", "create-drop"));
hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
return hibernateProperties; return hibernateProperties;
} }

View File

@ -43,7 +43,7 @@ public class RedditController {
private PostRepository postReopsitory; private PostRepository postReopsitory;
@RequestMapping("/info") @RequestMapping("/info")
public final String getInfo(Model model) { public final String getInfo(final Model model) {
final JsonNode node = redditRestTemplate.getForObject("https://oauth.reddit.com/api/v1/me", JsonNode.class); final JsonNode node = redditRestTemplate.getForObject("https://oauth.reddit.com/api/v1/me", JsonNode.class);
final String name = node.get("name").asText(); final String name = node.get("name").asText();
addUser(name, redditRestTemplate.getAccessToken()); addUser(name, redditRestTemplate.getAccessToken());
@ -52,28 +52,19 @@ public class RedditController {
} }
@RequestMapping("/submit") @RequestMapping("/submit")
public final String submit(Model model, @RequestParam Map<String, String> formParams) { public final String submit(final Model model, @RequestParam final Map<String, String> formParams) {
final MultiValueMap<String, String> param = new LinkedMultiValueMap<String, String>(); final MultiValueMap<String, String> param1 = constructParams(formParams);
param.add(RedditApiConstants.API_TYPE, "json");
param.add(RedditApiConstants.KIND, "link");
param.add(RedditApiConstants.RESUBMIT, "true");
param.add(RedditApiConstants.SENDREPLIES, "false");
param.add(RedditApiConstants.THEN, "comments");
for (final Map.Entry<String, String> entry : formParams.entrySet()) { logger.info("Submitting Link with these parameters: " + param1);
param.add(entry.getKey(), entry.getValue()); final JsonNode node = redditRestTemplate.postForObject("https://oauth.reddit.com/api/submit", param1, JsonNode.class);
} logger.info("Submitted Link - Full Response from Reddit: " + node.toString());
logger.info("User submitting Link with these parameters: " + formParams.entrySet());
final JsonNode node = redditRestTemplate.postForObject("https://oauth.reddit.com/api/submit", param, JsonNode.class);
logger.info("Full Reddit Response: " + node.toString());
final String responseMsg = parseResponse(node); final String responseMsg = parseResponse(node);
model.addAttribute("msg", responseMsg); model.addAttribute("msg", responseMsg);
return "submissionResponse"; return "submissionResponse";
} }
@RequestMapping("/post") @RequestMapping("/post")
public final String showSubmissionForm(Model model) { public final String showSubmissionForm(final Model model) {
final String needsCaptchaResult = needsCaptcha(); final String needsCaptchaResult = needsCaptcha();
if (needsCaptchaResult.equalsIgnoreCase("true")) { if (needsCaptchaResult.equalsIgnoreCase("true")) {
final String iden = getNewCaptcha(); final String iden = getNewCaptcha();
@ -83,7 +74,7 @@ public class RedditController {
} }
@RequestMapping("/postSchedule") @RequestMapping("/postSchedule")
public final String showSchedulePostForm(Model model) { public final String showSchedulePostForm(final Model model) {
final String needsCaptchaResult = needsCaptcha(); final String needsCaptchaResult = needsCaptcha();
if (needsCaptchaResult.equalsIgnoreCase("true")) { if (needsCaptchaResult.equalsIgnoreCase("true")) {
model.addAttribute("msg", "Sorry, You do not have enought karma"); model.addAttribute("msg", "Sorry, You do not have enought karma");
@ -93,7 +84,7 @@ public class RedditController {
} }
@RequestMapping("/schedule") @RequestMapping("/schedule")
public final String schedule(Model model, @RequestParam Map<String, String> formParams) throws ParseException { public final String schedule(final Model model, @RequestParam final Map<String, String> formParams) throws ParseException {
logger.info("User scheduling Post with these parameters: " + formParams.entrySet()); logger.info("User scheduling Post with these parameters: " + formParams.entrySet());
final User user = userReopsitory.findByAccessToken(redditRestTemplate.getAccessToken().getValue()); final User user = userReopsitory.findByAccessToken(redditRestTemplate.getAccessToken().getValue());
final Post post = new Post(); final Post post = new Post();
@ -115,7 +106,7 @@ public class RedditController {
} }
@RequestMapping("/posts") @RequestMapping("/posts")
public final String getScheduledPosts(Model model) { public final String getScheduledPosts(final Model model) {
final User user = userReopsitory.findByAccessToken(redditRestTemplate.getAccessToken().getValue()); final User user = userReopsitory.findByAccessToken(redditRestTemplate.getAccessToken().getValue());
final List<Post> posts = postReopsitory.findByUser(user); final List<Post> posts = postReopsitory.findByUser(user);
model.addAttribute("posts", posts); model.addAttribute("posts", posts);
@ -124,6 +115,32 @@ public class RedditController {
// === private // === private
private final MultiValueMap<String, String> constructParams(final Map<String, String> formParams) {
final MultiValueMap<String, String> param = new LinkedMultiValueMap<String, String>();
param.add(RedditApiConstants.API_TYPE, "json");
param.add(RedditApiConstants.KIND, "link");
param.add(RedditApiConstants.RESUBMIT, "true");
param.add(RedditApiConstants.SENDREPLIES, "false");
param.add(RedditApiConstants.THEN, "comments");
for (final Map.Entry<String, String> entry : formParams.entrySet()) {
param.add(entry.getKey(), entry.getValue());
}
return param;
}
private final Map<String, String> constructParams2(final Map<String, String> formParams) {
final Map<String, String> param = new HashMap<String, String>();
param.put(RedditApiConstants.API_TYPE, "json");
param.put(RedditApiConstants.KIND, "link");
param.put(RedditApiConstants.RESUBMIT, "true");
param.put(RedditApiConstants.SENDREPLIES, "false");
param.put(RedditApiConstants.THEN, "comments");
for (final Map.Entry<String, String> entry : formParams.entrySet()) {
param.put(entry.getKey(), entry.getValue());
}
return param;
}
private final String needsCaptcha() { private final String needsCaptcha() {
final String result = redditRestTemplate.getForObject("https://oauth.reddit.com/api/needs_captcha.json", String.class); final String result = redditRestTemplate.getForObject("https://oauth.reddit.com/api/needs_captcha.json", String.class);
return result; return result;
@ -138,7 +155,7 @@ public class RedditController {
return split[split.length - 2]; return split[split.length - 2];
} }
private final String parseResponse(JsonNode node) { private final String parseResponse(final JsonNode node) {
String result = ""; String result = "";
final JsonNode errorNode = node.get("json").get("errors").get(0); final JsonNode errorNode = node.get("json").get("errors").get(0);
if (errorNode != null) { if (errorNode != null) {
@ -155,7 +172,7 @@ public class RedditController {
} }
} }
private final void addUser(String name, OAuth2AccessToken token) { private final void addUser(final String name, final OAuth2AccessToken token) {
User user = userReopsitory.findByUsername(name); User user = userReopsitory.findByUsername(name);
if (user == null) { if (user == null) {
user = new User(); user = new User();

View File

@ -2,13 +2,17 @@ package org.baeldung.web;
import java.io.Serializable; import java.io.Serializable;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.oauth2.client.resource.OAuth2AccessDeniedException;
import org.springframework.security.oauth2.client.resource.UserApprovalRequiredException; import org.springframework.security.oauth2.client.resource.UserApprovalRequiredException;
import org.springframework.security.oauth2.client.resource.UserRedirectRequiredException; import org.springframework.security.oauth2.client.resource.UserRedirectRequiredException;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.context.request.WebRequest; import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ -23,7 +27,25 @@ public class RestExceptionHandler extends ResponseEntityExceptionHandler impleme
// API // API
// 4xx
@ExceptionHandler({ OAuth2AccessDeniedException.class })
public ResponseEntity<Object> handleOAuth2AccessDeniedException(final OAuth2AccessDeniedException ex, final WebRequest request) {
logger.error("403 Status Code", ex);
final String response = "Error Occurred - Forbidden: " + ex.getMessage();
return handleExceptionInternal(ex, response, new HttpHeaders(), HttpStatus.FORBIDDEN, request);
}
@ExceptionHandler({ HttpClientErrorException.class })
public ResponseEntity<Object> handleHttpClientErrorException(final HttpClientErrorException ex, final WebRequest request) {
logger.error("400 Status Code", ex);
final String response = "Error Occurred - To Many Requests: " + ex.getMessage();
return handleExceptionInternal(ex, response, new HttpHeaders(), HttpStatus.TOO_MANY_REQUESTS, request);
}
// HttpClientErrorException
// 500 // 500
@ExceptionHandler({ UserApprovalRequiredException.class, UserRedirectRequiredException.class }) @ExceptionHandler({ UserApprovalRequiredException.class, UserRedirectRequiredException.class })
public ResponseEntity<Object> handleRedirect(final RuntimeException ex, final WebRequest request) { public ResponseEntity<Object> handleRedirect(final RuntimeException ex, final WebRequest request) {
logger.info(ex.getLocalizedMessage()); logger.info(ex.getLocalizedMessage());
@ -31,10 +53,10 @@ public class RestExceptionHandler extends ResponseEntityExceptionHandler impleme
} }
@ExceptionHandler({ Exception.class }) @ExceptionHandler({ Exception.class })
public ResponseEntity<Object> handleInternal(final RuntimeException ex, final WebRequest request) { public ResponseEntity<Object> handleInternal(final RuntimeException ex, final WebRequest request, final HttpServletResponse response) {
logger.info(request.getHeader("x-ratelimit-remaining")); logger.info(response.getHeader("x-ratelimit-remaining"));
logger.error("500 Status Code", ex); logger.error("500 Status Code", ex);
final String response = "Error Occurred : " + ex.getMessage(); final String message = "Error Occurred: " + ex.getMessage();
return handleExceptionInternal(ex, response, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request); return handleExceptionInternal(ex, message, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request);
} }
} }

View File

@ -0,0 +1 @@
persistence.properties