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

📄 dlog_velocitytool.java

📁 个人Blog java编写的Blog可以直接使用!
💻 JAVA
字号:
/*
 *  DLOG_VelocityTool.java
 *  
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Library General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *  
 *  Author: Winter Lau
 *  http://dlog4j.sourceforge.net
 *  
 */
package com.liusoft.dlog4j.velocity;

import java.io.File;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.digester.rss.Channel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.util.MessageResources;
import org.apache.velocity.tools.struts.StrutsUtils;
import org.hibernate.HibernateException;

import com.liusoft.dlog4j.SessionUserObject;
import com.liusoft.dlog4j.UserLoginManager;
import com.liusoft.dlog4j.beans.BookmarkBean;
import com.liusoft.dlog4j.beans.ExternalReferBean;
import com.liusoft.dlog4j.beans.LinkBean;
import com.liusoft.dlog4j.beans.MessageBean;
import com.liusoft.dlog4j.beans.SiteBean;
import com.liusoft.dlog4j.beans.UserBean;
import com.liusoft.dlog4j.dao.BookmarkDAO;
import com.liusoft.dlog4j.dao.ExternalReferDAO;
import com.liusoft.dlog4j.dao.GuestBookDAO;
import com.liusoft.dlog4j.dao.LinkDAO;
import com.liusoft.dlog4j.dao.MessageDAO;
import com.liusoft.dlog4j.dao.SiteDAO;
import com.liusoft.dlog4j.dao.UserDAO;
import com.liusoft.dlog4j.util.RequestUtils;
import com.liusoft.dlog4j.util.StringUtils;
import com.liusoft.dlog4j.xml.RSSFetcher;

/**
 * DLOG4J的Toolbox类
 * @author liudong
 */
public class DLOG_VelocityTool extends VelocityTool {

	private static Log log = LogFactory.getLog(DLOG_VelocityTool.class);		
	
	/**
	 * 该属性对应velocity-toolbox.xml中的配置
	 */
	private boolean saveRefer = true;
	
	/**
	 * 列出某人的书签
	 * @param user
	 * @return
	 */
	public List bookmarks(SessionUserObject user){
		if(user==null)
			return null;
		return BookmarkDAO.list(user.getId());
	}
	
	/**
	 * 获取FCKUpload过程中生成的会话ID
	 * @return
	 */
	public String dlog_session_id(HttpServletRequest req){
		return RequestUtils.getDlogSessionId(req);
	}
	
	/**
	 * 获取一个全路径的文件名部分
	 * @param absolute_path
	 * @return
	 */
	public String file_name(String absolute_path){
		return StringUtils.substringAfterLast(absolute_path, File.separator);
	}
	
	/**
	 * 记录外部网站引用
	 * @param site
	 * @param ref_id
	 * @param ref_type
	 * @param req
	 */
	public void save_refer(SiteBean site, int ref_id, int ref_type, HttpServletRequest req){
		if(!saveRefer)
			return ;
		String refer = RequestUtils.getHeader(req, "refer");
		if(StringUtils.isNotEmpty(refer)){
			URL url;
			try {
				url = new URL(refer);
				String host = url.getHost();
				if(!StringUtils.equals(req.getServerName(),host)){
					ExternalReferBean rbean = new ExternalReferBean();
					rbean.setUrl(refer);
					rbean.setClientAddr(req.getRemoteAddr());
					rbean.setReferTime(new Date());
					rbean.setRefId(ref_id);
					rbean.setRefType(ref_type);
					rbean.setSite(site);
					rbean.setHost(host);
					ExternalReferDAO.save(rbean);
				}
			} catch (Exception e) {
				log.error("Save refer failed, ip="+req.getRemoteAddr()+",refer="+refer, e);
			} finally {
				url = null;
			}
		}
	}
	
	/**
	 * 判断用户能否访问某个网站
	 * @param site
	 * @param loginUser
	 * @return
	 */
	public boolean can_access_site(SiteBean site, UserBean loginUser){
		if(site == null)
			return true;
		boolean is_owner = is_owner(site, loginUser);
		if(is_owner)
			return true;
		switch(site.getAccessMode()){
		case SiteBean.ACCESS_MODE_PUBLIC:
			return true;
		case SiteBean.ACCESS_MODE_PRIVATE:
			return is_owner;
		case SiteBean.ACCESS_MODE_LOGIN:
			return loginUser!=null;
		case SiteBean.ACCESS_MODE_FRIEND:
			//判断是否站长的好友
			return is_friend_of(site.getOwner().getId(),
					(loginUser != null) ? loginUser.getId() : -1);
		case SiteBean.ACCESS_MODE_SECRET_CODE:
			//判断是否已经输入密码
			HttpSession ssn = request.getSession(false);
			if(ssn!=null){
				String pwd = (String)ssn.getAttribute("ACCESS_CODE_OF_SITE#"+site.getId());
				return pwd!=null && StringUtils.equals(site.getAccessCode(), pwd);
			}
		}
		return false;
	}
	
	/**
	 * 判断两个人是否为好友
	 * @param user1
	 * @param user2
	 * @return
	 */
	public boolean is_friend_of(int user1, int user2){
		if(user1<1 || user2<1)
			return false;
		return UserDAO.getFriend(user1, user2)!=null;
	}
	
	/**
	 * 生成客户端安全识别码
	 * @return
	 */
	public String gen_client_id(){
		return UserLoginManager.generateClientId(request, response);
	}
	
	/**
	 * 获取某个站点的留言板信息数
	 * @param site
	 * @return
	 */
	public int get_guest_msg_count(SiteBean site){
		if(site==null)
			return -1;
		return GuestBookDAO.getMsgCount(site);
	}
	
	/**
	 * 分页浏览留言板中的信息
	 * @param site
	 * @param page
	 * @param pageSize
	 * @return
	 */
	public List list_guest_msgs(SiteBean site, int page, int pageSize){
		if(site==null)
			return null;
		if(pageSize < 1 || pageSize > 100)
			pageSize = 10;
		int fromIdx = (page - 1) * pageSize;
		if(fromIdx < 0)
			fromIdx = 0;
		return GuestBookDAO.listMsgs(site, fromIdx, pageSize);
	}
	
	/**
	 * 得到某个站点新的留言簿的留言信息数
	 * @param site
	 * @param fromId
	 * @return
	 */
	public int get_guest_msg_count_after(SiteBean site, int fromId){
		if(site == null)
			return -1;
		return GuestBookDAO.getNewMsgCount(site, fromId);
	}
	
	/**
	 * @see listmsg.vm
	 * @param user
	 */
	public void read_msgs(SessionUserObject user){
		if(user!=null){
			try{
				MessageDAO.readNewMsgs(user.getId());
			}catch(Exception e){
				context.log("DLOG_VelocityTool.read_msgs failed.", e);
			}
		}
	}
	
	/**
	 * 读取某条留言信息(sendmsg.vm)
	 * @param msg_id
	 * @return
	 */
	public MessageBean get_msg(int msg_id){
		if(msg_id <1)
			return null;
		return MessageDAO.getMsg(msg_id);
	}
	
	/**
	 * 根据书签生成超链(bookmark.vm)
	 * @param bmb
	 * @return
	 */
	public String gen_bookmark_hyperlink(BookmarkBean bmb){
		return gen_bookmark_hyperlink(bmb, "html");
	}

	/**
	 * 根据书签生成超链(bookmark.vm)
	 * @param bmb
	 * @return
	 */
	public String gen_bookmark_hyperlink(BookmarkBean bmb, String subDir){
		if(bmb==null)
			return null;
		return bmb.url(request, subDir);
	}
	
	/**
	 * 判断是否有给某个人的留言
	 * @param site
	 * @param user
	 * @return
	 */
	public boolean has_new_msg(SiteBean site, SessionUserObject user){
		if(user==null)
			return false;
		return MessageDAO.hasNewMessage(user.getId());
	}
	
	/**
	 * 返回某个用户的新留言数
	 * @param user
	 * @return
	 */
	public int get_new_msg_count(SessionUserObject user){
		if(user==null) 
			return -1;
		return MessageDAO.getNewMessageCount(user.getId());
	}

	/**
	 * 返回某个用户的留言数
	 * @param user
	 * @return
	 */
	public int get_msg_count(SessionUserObject user){
		if(user==null)
			return -1;
		return MessageDAO.getMessageCount(user.getId());
	}
	
	/**
	 * 抓取频道内容
	 * @param type
	 * @param url
	 * @return
	 */
	public Channel fetch_channel(int type, String url){
		if(StringUtils.isEmpty(url))
			return null;
		return RSSFetcher.fetchChannel(type, url);
	}
	
	/**
	 * 获取链接信息(/html/rssview.vm)
	 * @param site
	 * @param linkid
	 * @return
	 * @important 此方法因为可能需要在读取频道时候耗费比较长的时间,为了不占用数据库资源,在此释放数据库连接
	 */
	public LinkBean get_link(int linkid){
		if(linkid<0)
			return null;
		return LinkDAO.getLinkByID(linkid);
	}
	
	/**
	 * 返回用户是否为指定站点的站长
	 * @param site
	 * @param user
	 * @return
	 */
	public boolean is_owner(SiteBean site, SessionUserObject user){
		if(site==null) 
			return false;
		return site.isOwner(user);
	}
	
	/**
	 * 判断用户是不是超级管理员
	 * @param site
	 * @param user
	 * @return
	 */
	public boolean is_superior(SessionUserObject user){
		return SiteBean.isSuperior(user);
	}
	
	/**
	 * 显示时间(diary.vm)
	 * @param year
	 * @param month
	 * @param date
	 * @return
	 */
	public String show_time(int year, int month, int date){
		StringBuffer stime = new StringBuffer();
		if(year>0&&month>0&&date>0){//某天
			stime.append(year);
			stime.append('.');
			stime.append(month);
			stime.append('.');
			stime.append(date);
		}
		else
		if(year>0&&month>0){//某月
			stime.append(year);
			stime.append('.');
			stime.append(month);
		}
		else
		if(year>0){//某年
			stime.append(year);
		}
		return stime.toString();
	}
	
	/**
	 * 根据网站编号获取其详细资料(_global.vm)
	 * 
	 * @param site_id
	 * @return
	 * @throws HibernateException
	 */
	public SiteBean site(int site_id) throws HibernateException {
		if (site_id <= 0)
			return null;
		return SiteDAO.getSiteByID(site_id);
	}

	/**
	 * 返回当前访问的用户信息
	 */
	public SessionUserObject get_current_user() {
		return UserLoginManager.getLoginUser(request,response,false);
	}

	/**
	 * 构造日历(_catalog_and_calendar.vm)
	 * 
	 * @param year
	 * @param month
	 * @return
	 */
	public int[][] calendar(int year, int month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month - 1);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		int firstDateInWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
		int dateOfMonth = getMonthDateCount(cal);
		int base = dateOfMonth + firstDateInWeek;
		int row = base / 7;
		row += ((base % 7) > 0) ? 1 : 0;
		int[][] cals = new int[row][7];
		int iCol = firstDateInWeek, iRow = 0;
		for (int i = 1; i <= dateOfMonth; i++) {
			cals[iRow][iCol] = i;
			if (iCol == 6) {
				iCol = 0;
				iRow++;
			} else
				iCol++;
		}
		return cals;
	}

	/**
	 * 得到指定月份的天数
	 * 
	 * @param cal
	 * @return
	 */
	private static int getMonthDateCount(Calendar cal) {
		Calendar cal2 = (Calendar) cal.clone();
		cal2.add(Calendar.MONTH, 1);
		cal2.set(Calendar.DAY_OF_MONTH, 1);
		cal2.add(Calendar.DAY_OF_MONTH, -1);
		return cal2.get(Calendar.DAY_OF_MONTH);
	}

	/**
	 * (_catalog_and_calendar.vm)
	 * 
	 * @param field
	 * @return
	 */
	public int calendar(int field) {
		Calendar cal = Calendar.getInstance();
		String param;
		int defValue;
		switch (field) {
		case 1:
			param = "year";
			defValue = cal.get(Calendar.YEAR);
			break;
		case 2:
			param = "month";
			defValue = cal.get(Calendar.MONTH) + 1;
			break;
		case 3:
			param = "date";
			defValue = cal.get(Calendar.DATE);
			break;
		default:
			return -1;
		}
		return RequestUtils.getParam(request, param, defValue);
	}
	
	/**
	 * 根据时间参数组合URL (diary.vm)
	 * @param year
	 * @param month
	 * @param date
	 * @return
	 */
	public String make_date_params(String param_name, int cat_id, int year, int month, int date){
		StringBuffer param = new StringBuffer();
		if(cat_id>0){
			param.append('&');
			param.append(param_name);
			param.append('=');
			param.append(cat_id);
		}
		if(year>0){
			param.append("&year=");
			param.append(year);
		}
		if(month>0){
			param.append("&month=");
			param.append(month);
		}
		if(date>0){
			param.append("&date=");
			param.append(date);
		}
		return param.toString();
	}
	
	/**
	 * 对较长的文本内容进行切割
	 * @param content
	 * @param page
	 * @param word_count
	 * @return
	 */
	public String split(String content, int page, int word_count){
		int fromIdx = ( page - 1 ) * word_count;
		int endIdx = fromIdx + word_count;
		if(fromIdx >= content.length())
			return "";
		if(endIdx > content.length())
			endIdx = content.length();
		return content.substring(fromIdx, endIdx);
	}	

	/** parameter getter/setter */
	public boolean isSaveRefer() {
		return saveRefer;
	}

	public void setSaveRefer(boolean saveRefer) {
		this.saveRefer = saveRefer;
	}

	/**
	 * 自动创建一个博客网站,并返回该网站的编号 
	 * @param username
	 * @return
	 * @throws Exception 
	 */
	public SiteBean auto_create_site() throws Exception{
		String username = "admin";
		//创建用户
		UserBean ubean = auto_create_user(username);
		//创建网站
		SiteBean sbean = auto_create_site(ubean);
		//执行登录过程
		UserLoginManager.loginUser(request, response, ubean, -1);
		return sbean;
	}

	/**
	 * 自动创建dlog用户
	 * @param username
	 * @return
	 */
	private UserBean auto_create_user(String username){
		UserBean ubean = new UserBean();
		ubean.setName(username);
		String nickname = null;
    	MessageResources res = StrutsUtils.getMessageResources(request, context, null);
    	if(res!=null)
    		nickname = res.getMessage("administrator");
    	if(StringUtils.isEmpty(nickname))
    		nickname = "Administrator";
		ubean.setNickname(nickname);
		ubean.setPassword("admin");		
		UserDAO.createUser(ubean);
		return ubean;
	}

	/**
	 * 自动开通个人空间
	 * @param ubean
	 * @return
	 */
	private SiteBean auto_create_site(UserBean ubean){
		SiteBean sbean = new SiteBean();
		sbean.setCreateTime(new Date());
		sbean.setUniqueName(ubean.getName());
		sbean.setFriendlyName("DLOG of "+ubean.getNickname());
		sbean.setOwner(ubean);
		SiteDAO.createSite(sbean);
		return sbean;
	}
	
}

⌨️ 快捷键说明

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