⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 forummessageshell.java

📁 用Hibernate开发的JiveJdon
💻 JAVA
字号:
/*
 * Copyright 2003-2005 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 */
package com.jdon.jivejdon.service.imp.message;


import java.util.List;

import org.apache.log4j.Logger;

import com.jdon.container.visitor.data.SessionContext;
import com.jdon.container.visitor.data.SessionContextAcceptable;
import com.jdon.controller.events.EventModel;
import com.jdon.controller.pool.Poolable;
import com.jdon.jivejdon.Constants;
import com.jdon.jivejdon.auth.NoPermissionException;
import com.jdon.jivejdon.auth.ResourceAuthorization;
import com.jdon.jivejdon.model.Account;
import com.jdon.jivejdon.model.ForumMessage;
import com.jdon.jivejdon.model.ForumThread;
import com.jdon.jivejdon.service.ForumMessageService;
import com.jdon.jivejdon.service.UploadService;
import com.jdon.jivejdon.service.util.SessionContextUtil;
import com.jdon.util.UtilValidate;

/**
 * ForumMessageShell is the shell of ForumMessage core implementions.
 * 
 * invoking order:
 * ForumMessageShell --> MessageContentFilter ---> ForumMessageServiceImp
 * 
 * @author <a href="mailto:banqiao@jdon.com">banq</a>
 *
 */
public class ForumMessageShell  implements SessionContextAcceptable, Poolable,ForumMessageService {
    private final static Logger logger = Logger.getLogger(ForumMessageShell.class);
   
    protected SessionContext sessionContext;
    protected SessionContextUtil sessionContextUtil;
    protected MessageRenderingFilter messageRenderingFilter;
    protected ResourceAuthorization resourceAuthorization;
    protected MessageKernel messageKernel;
    protected UploadService uploadService;
    
    
    public ForumMessageShell(SessionContextUtil sessionContextUtil,           
            ResourceAuthorization messageServiceAuth,MessageRenderingFilter messageRenderingFilter,
            MessageKernel messageKernel, UploadService uploadService) {
        this.sessionContextUtil = sessionContextUtil;
        this.messageRenderingFilter = messageRenderingFilter;
        this.resourceAuthorization = messageServiceAuth;
        this.messageKernel = messageKernel;
        this.uploadService = uploadService;
    }
    

    /**
     * find a Message for modify
     */
    public ForumMessage findMessage(Long messageId) {
    	logger.debug("enter ForumMessageShell's findMessage");
        ForumMessage forumMessage = messageKernel.getMessage(messageId);
        if (forumMessage == null)
            return null;
        
        try {
            com.jdon.jivejdon.model.Account account = sessionContextUtil.getLoginAccount(sessionContext);
            resourceAuthorization.verifyAuthenticated(forumMessage, account);
        } catch (NoPermissionException e) {
        	logger.error("No Permission to operate it");
        } catch (Exception e) {
            logger.error(e);
            return null;
        }
        return forumMessage;
    }
      
    
    public boolean isAuthenticated(ForumMessage forumMessage){
    	boolean authenticated = false;
		try {
			Account account = sessionContextUtil.getLoginAccount(sessionContext);
			authenticated = resourceAuthorization.isAuthenticated(forumMessage,	account);
		} catch (Exception e) {	}
		return authenticated;
    }
    
    public boolean isAdminAuthenticated() {
    	boolean authenticated = false;
    	Account account = sessionContextUtil.getLoginAccount(sessionContext);
    	authenticated = resourceAuthorization.isAdmin(account);
    	return authenticated;
    }
    
    /**
	 * create Topic Message
	 */
    public void createTopicMessage(EventModel em) throws Exception{
        ForumMessage forumMessage = (ForumMessage)em.getModelIF();
        prepareUpdate(forumMessage);
        messageRenderingFilter.createTopicMessage(em);
        try {
            if (!UtilValidate.isEmpty(forumMessage.getBody())){
            	messageKernel.createTopicMessage(em);
            }            
        } catch (Exception e) {
            logger.error(e);
            em.setErrors(Constants.ERRORS);
        }
    }
    
    /**
     * set the login account into the domain model
     */
    public void createReplyMessage(EventModel em) throws Exception{
        ForumMessage forumMessage = (ForumMessage)em.getModelIF();
        prepareUpdate(forumMessage);
        messageRenderingFilter.createReplyMessage(em);
        try {
            if(!UtilValidate.isEmpty(forumMessage.getBody())){
               messageKernel.createReplyMessage(em);            	
            }            
        } catch (Exception e) {
            logger.error(e);
            em.setErrors(Constants.ERRORS);
        }
    }        
    
    private void prepareUpdate(ForumMessage forumMessage) throws Exception{
        try {
            //the poster
            com.jdon.jivejdon.model.Account account = sessionContextUtil.getLoginAccount(sessionContext);
            forumMessage.setAccount(account);           
            
            //从session里面取出这个帖子的所有附件
            List uploads = uploadService.loadUploadFiles(this.sessionContext);
            forumMessage.setUploadFiles(uploads);
            
        } catch (Exception e) {
            logger.error(e);
            throw new Exception(e);
        }
    }
   
    /**
     *    1. auth check: amdin and the owner can modify this nessage.
     *    2. if the message has childern, only admin can update it.
     *    before business logic, we must get a true message from persistence layer,
     *    now the ForumMessage packed in EventModel object is not full, it is 
     *    a DTO from prensentation layer.
     * 
     *   
     */
    public void updateMessage(EventModel em) throws Exception{    	
        ForumMessage modForumMessage = (ForumMessage)em.getModelIF();
        ForumMessage forumMessage = getMessage(modForumMessage.getMessageId());
        if (forumMessage == null) return;          
        try {
            com.jdon.jivejdon.model.Account account = sessionContextUtil.getLoginAccount(sessionContext);
            resourceAuthorization.verifyAuthenticated(forumMessage, account);

            prepareUpdate(modForumMessage);
            messageRenderingFilter.updateMessage(em);
            messageKernel.updateMessage(em);
            
        } catch (NoPermissionException e) {
            em.setErrors(e.getMessage());   
        } catch (Exception e) {
            logger.error(e);
        }          
    }
    
    /**
     * delete a message
     * the auth is same as to the updateMessage
     * 
     * 
     */
    public void deleteMessage(EventModel em) throws Exception {
		ForumMessage forumMessage = (ForumMessage) em.getModelIF();
		forumMessage = getMessage(forumMessage.getMessageId());
		if (forumMessage == null) return;
		Account account = sessionContextUtil.getLoginAccount(sessionContext);
		boolean isAdmin = resourceAuthorization.isAdmin(account);
		
		if(isAdmin)
			messageKernel.deleteMessage(em);
	}
    

    
    public ForumMessage findFilteredMessage(Long messageId) {
    	return messageRenderingFilter.findFilteredMessage(messageId);	
	}
    

    
    /**
     * get the full forum in forumMessage, and return it.
     */
    public ForumMessage initMessage(EventModel em) {
        return messageKernel.initMessage(em);
    }
    
    public ForumMessage initReplyMessage(EventModel em) {
        return messageKernel.initReplyMessage(em);
    }    
  
    /*
     * return a full ForumMessage need solve the relations with Forum
     * ForumThread parentMessage
     */
    public ForumMessage getMessage(Long messageId) {
       return messageKernel.getMessage(messageId);
    }
    
    /**
     * return a full ForumThread
     * one ForumThread has one rootMessage
     * need solve the realtion with Forum rootForumMessage lastPost
     * 
     * @param threadId
     * @return
     */
    public ForumThread getThread(Long threadId) {
    	return messageKernel.getThread(threadId);	
    }
    
    /**
     * @return Returns the sessionContext.
     */
    public SessionContext getSessionContext() {
        return sessionContext;
    }

    /**
     * @param sessionContext The sessionContext to set.
     */
    public void setSessionContext(SessionContext sessionContext) {
        this.sessionContext = sessionContext;        
    }
    
    
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -