package edu.asu.spring.quadriga.web.resolver; import java.security.Principal; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; 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.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import edu.asu.spring.quadriga.domain.resolver.IProjectHandleResolver; import edu.asu.spring.quadriga.domain.resolver.Status; import edu.asu.spring.quadriga.domain.resolver.impl.ProjectHandleResolver; import edu.asu.spring.quadriga.service.resolver.IProjectHandleResolverManager; import edu.asu.spring.quadriga.validator.ProjectHandleResolverValidator; @Controller public class EditResolverController { @Autowired private IProjectHandleResolverManager resolverManager; @Autowired private ProjectHandleResolverValidator validator; @InitBinder public void initBinder(WebDataBinder binder) { binder.setValidator(validator); } @RequestMapping(value = "/auth/resolvers/{resolverId}/edit", method = RequestMethod.GET) public String editPage(Principal principal, Model model, @PathVariable("resolverId") String resolverId) { IProjectHandleResolver projectHandleResolver = resolverManager.getProjectHandleResolver(resolverId); model.addAttribute("resolver", projectHandleResolver); return "auth/resolvers/edit"; } @RequestMapping(value = "/auth/resolvers/update", method = RequestMethod.POST) public String editResolver(Principal principal, @Validated @ModelAttribute("resolver") ProjectHandleResolver resolver, BindingResult results, Model model) { if (results.hasErrors()) { model.addAttribute("resolver", resolver); return "auth/resolvers/edit"; } resolverManager.saveProjectHandleResolver(resolver, principal.getName()); return "redirect:/auth/resolvers"; } @RequestMapping(method = RequestMethod.POST, value = "auth/resolvers/check") public @ResponseBody ResponseEntity<String> testEditPageSuccess(@RequestParam("data") JSONObject data) throws JSONException { IProjectHandleResolver projectHandleResolver = new ProjectHandleResolver(); projectHandleResolver.setHandlePattern(data.getString("handlePattern")); projectHandleResolver.setResolvedHandlePattern(data.getString("resolvedHandlePattern")); projectHandleResolver.setHandleExample(data.getString("handleExample")); projectHandleResolver.setResolvedHandleExample(data.getString("resolvedHandleExample")); if (resolverManager.validateProjectResolverHandle(projectHandleResolver, false) == Status.PASSED) { return new ResponseEntity<String>("SUCCESS", HttpStatus.OK); } else { return new ResponseEntity<String>("FAILURE", HttpStatus.OK); } } }