Package org.osforce.connect.web.module.message

Source Code of org.osforce.connect.web.module.message.MessageWidget

package org.osforce.connect.web.module.message;

import java.util.Collections;

import javax.validation.Valid;

import org.osforce.connect.entity.message.Message;
import org.osforce.connect.entity.system.Project;
import org.osforce.connect.entity.system.ProjectFeature;
import org.osforce.connect.entity.system.User;
import org.osforce.connect.service.message.MessageService;
import org.osforce.connect.service.system.ProjectService;
import org.osforce.connect.web.AttributeKeys;
import org.osforce.connect.web.security.annotation.Permission;
import org.osforce.spring4me.dao.Page;
import org.osforce.spring4me.web.bind.annotation.PrefParam;
import org.osforce.spring4me.web.bind.annotation.RequestAttr;
import org.osforce.spring4me.web.stereotype.Widget;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
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.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.WebRequest;

/**
*
* @author <a href="mailto:haozhonghu@hotmail.com">gavin</a>
* @since 0.1.0
* @create May 22, 2011 - 10:03:05 AM
* <a href="http://www.opensourceforce.org">开源力量</a>
*/
@Widget
@RequestMapping("/message/message")
public class MessageWidget {

  private ProjectService projectService;
  private MessageService messageService;
 
  public MessageWidget() {
  }
 
  @Autowired
  public void setProjectService(ProjectService projectService) {
    this.projectService = projectService;
  }
 
  @Autowired
  public void setMessageService(MessageService messageService) {
    this.messageService = messageService;
  }
 
  @RequestMapping("/list-view")
  @Permission({"message-view"})
  public String doListView(@PrefParam String  box, Page<Message> page,
      @RequestAttr User user, @RequestAttr Project project, Model model) {
    page = messageService.getMessagePage(page, project, box);
    model.addAttribute(AttributeKeys.PAGE_KEY_READABLE, page);
    model.addAttribute("box", box);
    return "message/message-list";
  }
 
  @RequestMapping("/info-view")
  @Permission({"message-view"})
  public String doInfoView(@RequestAttr Project project, Model model) {
    Long unreadCount = messageService.countMessages(project, false);
    if(unreadCount==0) {
      return "commons/blank";
    }
    model.addAttribute("unreadCount", unreadCount);
    return "message/message-info";
  }
 
  @RequestMapping("/detail-view")
  @Permission({"message-view"})
  public String doDetailView(@RequestParam Long messageId,
      @RequestAttr User user, Model model, WebRequest request) {
    Message message = messageService.getMessage(messageId);
    String box = (String) request.getAttribute("box", WebRequest.SCOPE_REQUEST);
    if("inbox".equals(box)) {
      message.setReadBy(user);
      message.setRead(true);
      messageService.updateMessage(message);
    }
    model.addAttribute(AttributeKeys.MESSAGE_KEY_READABLE, message);
    return "message/message-detail";
  }
 
  @RequestMapping("/form-view")
  public String doFormView(@RequestParam Long toId,
      @RequestParam(required=false) Long messageId,
      @RequestParam Long fromId, @RequestAttr User user, Model model,
      @ModelAttribute @Valid Message message, BindingResult result, Boolean showErrors) {
    if(!showErrors) {
      message.setEnteredBy(user);
      if(fromId!=null) {
        Project from = projectService.getProject(fromId);
        message.setFrom(from);
      }
      if(toId!=null) {
        Project to = projectService.getProject(toId);
        message.setTo(to);
      }
      if(messageId!=null) {
        Message original = messageService.getMessage(messageId);
        message.setSubject(original.getSubject());
        message.setTo(original.getFrom());
        message.setReply(true);
      }
      model.addAttribute(AttributeKeys.MESSAGE_KEY_READABLE, message);
    }
    return "message/message-form";
  }
 
  @RequestMapping(value="/form-action", method=RequestMethod.POST)
  public String doFormAction(
      @ModelAttribute @Valid Message message, BindingResult result, Model model) {
    if(result.hasErrors()) {
      model.addAttribute(AttributeKeys.SHOW_ERRORS_KEY_READABLE, true);
      model.addAttribute(AttributeKeys.FEATURE_CODE_KEY_READABLE, ProjectFeature.FEATURE_MESSAGE);
      return "page:/message/message-form";
    }
    //
    if(message.getId()==null) {
      messageService.createMessage(message);
    } else {
      messageService.updateMessage(message);
    }
    return String.format("redirect:/%s/message/sentbox", message.getFrom().getUniqueId());
  }
 
  @RequestMapping(value="/form-action", method=RequestMethod.POST, params="ajax=true")
  public @ResponseBody Object doAjaxFormAction(
      @ModelAttribute @Valid Message message, BindingResult result, Model model) {
    if(result.hasErrors()) {
      return Collections.singletonMap("error", result.getAllErrors().size());
    }
    //
    if(message.getId()==null) {
      messageService.createMessage(message);
    } else {
      messageService.updateMessage(message);
    }
    //
    return Collections.singletonMap("id", message.getId());
  }
 
}
TOP

Related Classes of org.osforce.connect.web.module.message.MessageWidget

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.