// Path: spanners-mvc/src/main/java/org/dontpanic/spanners/springmvc/domain/Spanner.java
// public class Spanner {
// 
//     private Long id;
//     private String name;
//     private int size;
//     private String owner;
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public int getSize() {
//         return size;
//     }
// 
//     public void setSize(int size) {
//         this.size = size;
//     }
// 
//     public String getOwner() {
//         return owner;
//     }
// 
//     public void setOwner(String owner) {
//         this.owner = owner;
//     }
// }
// 
// Path: spanners-mvc/src/main/java/org/dontpanic/spanners/springmvc/services/SpannersService.java
// @Service
// public class SpannersService {
// 
//     private RestTemplate restTemplate;
// 
//     public SpannersService(RestTemplateBuilder builder,
//                            @Value("${app.service.url.spanners}") String rootUri) {
//         restTemplate = builder.messageConverters(halAwareMessageConverter())
//                               .rootUri(rootUri).build();
//     }
// 
// 
//     private HttpMessageConverter halAwareMessageConverter() {
//         ObjectMapper mapper = new ObjectMapper();
//         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//         mapper.registerModule(new Jackson2HalModule());
// 
//         return new MappingJackson2HttpMessageConverter(mapper);
//     }
// 
// 
//     public Collection<Spanner> findAll() {
//         ResponseEntity<PagedResources<Spanner>> response = restTemplate.exchange("/", HttpMethod.GET, null,
//                                                             new ParameterizedTypeReference<PagedResources<Spanner>>(){});
//         PagedResources<Spanner> pages = response.getBody();
//         return pages.getContent();
// 
//     }
// 
// 
//     public Spanner findOne(Long id) {
//         return restTemplate.getForObject("/{0}", Spanner.class, id);
//     }
// 
// 
//     @PreAuthorize("hasPermission(#spanner, 'owner')")
//     public void delete(Spanner spanner) {
//         restTemplate.delete("/{0}", spanner.getId());
//     }
// 
// 
//     public void create(Spanner spanner) {
//         restTemplate.postForObject("/", spanner, Spanner.class);
//     }
// 
// 
//     @PreAuthorize("hasPermission(#spanner, 'owner')")
//     public void update(Spanner spanner) {
//         restTemplate.put("/{0}", spanner, spanner.getId());
//     }
// }
// 
// Path: spanners-mvc/src/main/java/org/dontpanic/spanners/springmvc/forms/SpannerForm.java
// public class SpannerForm {
// 
//     public static final String FIELD_NAME = "name";
//     public static final String FIELD_SIZE = "size";
// 
//     private Long id;
//     @Size(min=1, max=255)
//     private String name;
//     @Min(1) @Max(99)
//     private int size;
// 
//     public SpannerForm() {
//     }
// 
//     /**
//      * Create a spanner form with values initialized to given spanner
//      */
//     public SpannerForm(Spanner spanner) {
//         this.id = spanner.getId();
//         this.name = spanner.getName();
//         this.size = spanner.getSize();
//     }
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public int getSize() {
//         return size;
//     }
// 
//     public void setSize(int size) {
//         this.size = size;
//     }
// }


import org.dontpanic.spanners.springmvc.domain.Spanner;
import org.dontpanic.spanners.springmvc.services.SpannersService;
import org.dontpanic.spanners.springmvc.forms.SpannerForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import javax.validation.Valid;
import java.security.Principal;
package org.dontpanic.spanners.springmvc.controllers;



/**
 * Controller for creating a new spanner
 * User: Stevie
 * Date: 20/10/13
 */
@Controller
public class AddSpannerController {

    public static final String CONTROLLER_URL = "/addSpanner";
    public static final String VIEW_ADD_SPANNER = "editSpanner";
    public static final String VIEW_SUCCESS = "redirect:/displaySpanners";
    public static final String VIEW_VALIDATION_FAIL = "editSpanner";

    public static final String MODEL_SPANNER = "spanner";

    @Autowired private SpannersService spannersService;

    /**
     * Display that add spanner page
     */
    @RequestMapping(value = CONTROLLER_URL, method = RequestMethod.GET)
    public ModelAndView displayPage() {
// Path: spanners-mvc/src/main/java/org/dontpanic/spanners/springmvc/domain/Spanner.java
// public class Spanner {
// 
//     private Long id;
//     private String name;
//     private int size;
//     private String owner;
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public int getSize() {
//         return size;
//     }
// 
//     public void setSize(int size) {
//         this.size = size;
//     }
// 
//     public String getOwner() {
//         return owner;
//     }
// 
//     public void setOwner(String owner) {
//         this.owner = owner;
//     }
// }
// 
// Path: spanners-mvc/src/main/java/org/dontpanic/spanners/springmvc/services/SpannersService.java
// @Service
// public class SpannersService {
// 
//     private RestTemplate restTemplate;
// 
//     public SpannersService(RestTemplateBuilder builder,
//                            @Value("${app.service.url.spanners}") String rootUri) {
//         restTemplate = builder.messageConverters(halAwareMessageConverter())
//                               .rootUri(rootUri).build();
//     }
// 
// 
//     private HttpMessageConverter halAwareMessageConverter() {
//         ObjectMapper mapper = new ObjectMapper();
//         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//         mapper.registerModule(new Jackson2HalModule());
// 
//         return new MappingJackson2HttpMessageConverter(mapper);
//     }
// 
// 
//     public Collection<Spanner> findAll() {
//         ResponseEntity<PagedResources<Spanner>> response = restTemplate.exchange("/", HttpMethod.GET, null,
//                                                             new ParameterizedTypeReference<PagedResources<Spanner>>(){});
//         PagedResources<Spanner> pages = response.getBody();
//         return pages.getContent();
// 
//     }
// 
// 
//     public Spanner findOne(Long id) {
//         return restTemplate.getForObject("/{0}", Spanner.class, id);
//     }
// 
// 
//     @PreAuthorize("hasPermission(#spanner, 'owner')")
//     public void delete(Spanner spanner) {
//         restTemplate.delete("/{0}", spanner.getId());
//     }
// 
// 
//     public void create(Spanner spanner) {
//         restTemplate.postForObject("/", spanner, Spanner.class);
//     }
// 
// 
//     @PreAuthorize("hasPermission(#spanner, 'owner')")
//     public void update(Spanner spanner) {
//         restTemplate.put("/{0}", spanner, spanner.getId());
//     }
// }
// 
// Path: spanners-mvc/src/main/java/org/dontpanic/spanners/springmvc/forms/SpannerForm.java
// public class SpannerForm {
// 
//     public static final String FIELD_NAME = "name";
//     public static final String FIELD_SIZE = "size";
// 
//     private Long id;
//     @Size(min=1, max=255)
//     private String name;
//     @Min(1) @Max(99)
//     private int size;
// 
//     public SpannerForm() {
//     }
// 
//     /**
//      * Create a spanner form with values initialized to given spanner
//      */
//     public SpannerForm(Spanner spanner) {
//         this.id = spanner.getId();
//         this.name = spanner.getName();
//         this.size = spanner.getSize();
//     }
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public int getSize() {
//         return size;
//     }
// 
//     public void setSize(int size) {
//         this.size = size;
//     }
// }


// Path: spanners-mvc/src/main/java/org/dontpanic/spanners/springmvc/controllers/AddSpannerController.java
import org.dontpanic.spanners.springmvc.domain.Spanner;
import org.dontpanic.spanners.springmvc.services.SpannersService;
import org.dontpanic.spanners.springmvc.forms.SpannerForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import javax.validation.Valid;
import java.security.Principal;

package org.dontpanic.spanners.springmvc.controllers;



/**
 * Controller for creating a new spanner
 * User: Stevie
 * Date: 20/10/13
 */
@Controller
public class AddSpannerController {

    public static final String CONTROLLER_URL = "/addSpanner";
    public static final String VIEW_ADD_SPANNER = "editSpanner";
    public static final String VIEW_SUCCESS = "redirect:/displaySpanners";
    public static final String VIEW_VALIDATION_FAIL = "editSpanner";

    public static final String MODEL_SPANNER = "spanner";

    @Autowired private SpannersService spannersService;

    /**
     * Display that add spanner page
     */
    @RequestMapping(value = CONTROLLER_URL, method = RequestMethod.GET)
    public ModelAndView displayPage() {
        SpannerForm newSpanner = new SpannerForm();