Package com.m4f.web.controller.model

Source Code of com.m4f.web.controller.model.MediationServiceController

package com.m4f.web.controller.model;

import java.security.Principal;
import java.util.Locale;
import java.util.logging.Logger;

import javax.servlet.http.HttpSession;
import javax.validation.Valid;

import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.google.appengine.api.datastore.GeoPt;
import com.m4f.business.domain.MediationService;
import com.m4f.business.domain.Provider;
import com.m4f.business.service.extended.impl.InternalFeedServiceImpl;
import com.m4f.utils.StackTraceUtil;
import com.m4f.web.bind.form.MediationForm;


@Controller
@Secured({"ROLE_ADMIN"})
@RequestMapping("/mediation")
public class MediationServiceController extends BaseModelController {
 
  private static final Logger LOGGER = Logger.getLogger(MediationServiceController.class.getName());
 
/*  @RequestMapping(value="/convertAll", method=RequestMethod.GET)
  @ResponseStatus(HttpStatus.OK)
  public void convertAll(Locale locale) {
    try {
      Collection<MediationService> mediators = this.serviceLocator.getMediatorService().getAllMediationService(locale);
      for(MediationService mediator : mediators) {
        mediator.setDeleted(Boolean.FALSE);
        this.serviceLocator.getMediatorService().save(mediator, locale);
      }
    } catch(Exception e) {
      LOGGER.severe(StackTraceUtil.getStackTrace(e));
      //return "common.error";
    }
    //return "mediation.form";
  }
*/ 
  @RequestMapping(method=RequestMethod.GET)
  public String getView(Principal currentUser, Model model, Locale locale,
      @RequestHeader(required=false,value="referer") String referer,
      HttpSession session) {
    try {
      MediationForm form = new MediationForm();
      form.setMediationService(this.serviceLocator.getMediatorService().createMediationService());
      form.setProvider(this.serviceLocator.getProviderService().createProvider());
      model.addAttribute("mediation", form);
      model.addAttribute("provinces", this.serviceLocator.getTerritorialService().getAllProvinces(locale));
      session.setAttribute(this.REFERER_PARAM, referer);
    } catch(Exception e) {
      LOGGER.severe(StackTraceUtil.getStackTrace(e));
      return "common.error";
    }
    return "mediation.form";
  }
 
 
  @RequestMapping(value="/detail/{mediationId}", method=RequestMethod.GET)
  public String getDetail(@PathVariable Long mediationId,
      Model model, Locale locale) {
    try {
      MediationService mediationService =
        this.serviceLocator.getMediatorService().getMediationService(mediationId, locale);
      model.addAttribute("mediationService", mediationService);
      model.addAttribute("members", this.serviceLocator.getUserService().findUsersByMediationService(mediationService));
    } catch (Exception e) {
      this.viewHelper.errorManagement(e);
    }
    return "mediation.detail";
  }
 
  @RequestMapping(value="/edit/{mediationId}", method=RequestMethod.GET)
  public String getView(@PathVariable Long mediationId,
      Principal currentUser, Model model, Locale locale,
      @RequestHeader(required=false,value="referer") String referer,
      HttpSession session) {
    try {
      MediationService mediationService =
        this.serviceLocator.getMediatorService().getMediationService(mediationId, locale);
      MediationForm form = new MediationForm();
      form.setMediationService(mediationService);
      form.setLongitude(mediationService.getGeoLocation().getLongitude());
      form.setLatitude(mediationService.getGeoLocation().getLatitude());
      //TODO aunque no sea un servicio de mediacion automatico también tiene un proveedor asociado.
      Provider provider = this.serviceLocator.getProviderService().createProvider();
      if(mediationService.getHasFeed()) {
        provider = this.serviceLocator.getProviderService().findProviderByMediator(mediationService, locale);
      }
      form.setProvider(provider);
      form.addMembers(this.serviceLocator.getUserService().findUsersByMediationService(mediationService));
      model.addAttribute("mediation", form);
      model.addAttribute("provinces", this.serviceLocator.getTerritorialService().getAllProvinces(locale));
      session.setAttribute(this.REFERER_PARAM, referer);
    }catch(Exception e) {
      this.viewHelper.errorManagement(e);
    }
    return "mediation.form";
  }
 
  @RequestMapping(method=RequestMethod.POST)
  public String save(@ModelAttribute("mediation") @Valid MediationForm form,
      BindingResult result, Principal currentUser, Locale locale,
      @RequestHeader("Host") String host, HttpSession session) {
   
    try {
      MediationService mediationService = form.getMediationService();
      if(form.getLatitude() != null && form.getLongitude() != null) {
        mediationService.setGeoLocation(new GeoPt(form.getLatitude(), form.getLongitude()));
      }
      mediationService.addUsers(form.getMembers()); // TODO I think that this donĀ“t do anything useful, because there are not member fields in the form.
      this.validator.validate(mediationService, result);
      if(result.hasErrors()) {
        return "mediation.form";
      }
      if(mediationService.getId() != null) { // Edit mode. Get old mediation to set the user list and not lost them.
        MediationService mediationOld = this.serviceLocator.getMediatorService().getMediationService(mediationService.getId(), locale);
        mediationService.setMembers(mediationOld.getMembers());
      }
      mediationService.setDeleted(Boolean.FALSE);
      this.serviceLocator.getMediatorService().save(mediationService, locale);
      Provider provider = form.getProvider();
      provider.setName(mediationService.getName());
      provider.setMediationService(mediationService.getId());
      if(mediationService.getHasFeed()) {
        this.validator.validate(provider, result);
        if(result.hasErrors()) {
          return "mediation.form";
        }
        this.serviceLocator.getProviderService().save(provider, locale);
      } else if(!mediationService.getHasFeed()) {
        // NEW. For manual mediations service a provider is created to with hard-coded url to get its school feed.
        this.serviceLocator.getProviderService().save(provider, locale);
        provider.setFeed(new StringBuffer("http://").append(host).append("/").
            append(locale).append(InternalFeedServiceImpl.SCHOOL_DETAIL_URL).append(provider.getId()).toString());
        this.serviceLocator.getProviderService().save(provider, locale);
        this.validator.validate(provider, result);
      }else {
        if(provider.getId()!=null) {
          /*Operacion obligatoria para poder borrar el provider, ya que
           * al lanzar la sentencia this.providerService.deleteProvider(provider, locale),
           * se producía un error al ser provider un objeto transitorio.
           */
          this.serviceLocator.getProviderService().deleteProvider(
              this.serviceLocator.getProviderService().getProviderById(provider.getId(),
              locale), locale);
        }
      }
    } catch(Exception e) {
      this.viewHelper.errorManagement(e);
    }
    String returnURL = this.buildReturnURL(host,
        (String) session.getAttribute(this.REFERER_PARAM), locale);
    return "redirect:" + returnURL;
  }
 
 
  @RequestMapping(value="/delete/{mediationId}", method=RequestMethod.GET)
  public String delete(@PathVariable Long mediationId,
      Principal currentUser, Model model, Locale locale,
      @RequestHeader("referer") String referer,
      @RequestHeader("Host") String host) {
    try {
      MediationService mediationService =
        this.serviceLocator.getMediatorService().getMediationService(mediationId, locale);
      /*
       * TODO comento la eliminacion del provider cuando se elimina el mediation service, ya que esto implica que  hay que eliminar
       * todos los centros, cursos, cursos del catalogo asociados a este provider. Ademas, ya no hay que distinguir si el meditionservice
       * tiene feed, porque siempre se crea un proveedor cuando se anyade un mediation service.
       *
       * if(mediationService.getHasFeed()) {
        Provider provider = this.serviceLocator.getProviderService().findProviderByMediator(mediationService, locale);
        if(provider != null) this.serviceLocator.getProviderService().deleteProvider(provider, locale);
      }    */
      //Se borra el servicio de mediación y el proveedor asociado.
      //TODO que hacer con los usuarios relacionados con el servicio de mediacion.
      if(mediationService != null) {
        this.serviceLocator.getMediatorService().delete(mediationService, locale);
      }
     
    }catch(Exception e) {
      LOGGER.severe(StackTraceUtil.getStackTrace(e));
      return "common.error";
    }
    return "redirect:" + this.buildReturnURL(host, referer, locale);
  }
 
}
TOP

Related Classes of com.m4f.web.controller.model.MediationServiceController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.