Java tutorial
/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.web.pubsub; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.ServletContext; import org.apache.commons.lang.StringUtils; import org.springframework.context.ApplicationContext; import org.springframework.util.Assert; import org.springframework.web.context.support.WebApplicationContextUtils; import com.ewcms.content.document.DocumentFacable; import com.ewcms.core.site.model.Channel; import com.ewcms.plugin.message.manager.MessageFacable; import com.ewcms.plugin.message.model.MsgSend; import com.ewcms.plugin.notes.manager.NotesFacable; import com.ewcms.plugin.notes.model.Memoranda; import com.ewcms.web.util.JSONUtil; public class MessageSender extends PubsubSender { private MessageFacable messageFac; private NotesFacable notesFac; private DocumentFacable documentFac; private String userName; private Date clientTime; private Long unReadCount = 0L; private Integer popCount = 0; private Integer noticeCount = 0; private Integer subCount = 0; private Map<Channel, Long> beApprovals = new HashMap<Channel, Long>(); private Boolean isFirst = true; public MessageSender(String path, ServletContext context) { super(path, context); } @Override protected void init(String path, ServletContext context) { messageFac = getMessageFac(context); notesFac = getNotesFac(context); documentFac = getDocumentFac(context); getPathValues(path); } @Override protected String constructFirstOutput() { isFirst = true; return constructOutput(); } @Override protected String constructOutput() { StringBuilder builder = new StringBuilder(); builder.append(" <script type=\"text/javascript\">\n"); Long count = messageFac.findUnReadMessageCountByUserName(userName); if (isFirst || unReadCount.longValue() != count.longValue()) { unReadCount = count; builder.append(" parent._home.getUnReadMessage(" + count.longValue() + ",true);\n"); } else { builder.append(" parent._home.getUnReadMessage(0,false);\n"); } List<Memoranda> popMessages = notesFac.getMemorandaFireTime(userName, clientTime); if (isFirst || popMessages.size() != popCount) { popCount = popMessages.size(); builder.append(" parent._home.getPopMessage('{\"pops\":").append(JSONUtil.toJSON(popMessages)) .append("}', true);\n"); } else { builder.append(" parent._home.getPopMessage('', false);\n"); } List<MsgSend> noticeMessages = messageFac.findMsgSendByNotice(10); if (isFirst || noticeMessages.size() != noticeCount) { noticeCount = noticeMessages.size(); builder.append(" parent._home.getNoticeMessage('{\"notices\":") .append(JSONUtil.toJSON(noticeMessages)).append("}', true);\n"); } else { builder.append(" parent._home.getNoticeMessage('', false);\n"); } List<MsgSend> subMessages = messageFac.findMsgSendBySubscription(10); if (isFirst || subMessages.size() != subCount) { subCount = subMessages.size(); builder.append(" parent._home.getSubscription('{\"subs\":").append(JSONUtil.toJSON(subMessages)) .append("}', true);\n"); } else { builder.append(" parent._home.getSubscription('', false);\n"); } Map<Channel, Long> map = documentFac.findBeApprovalArticleMain(userName); builder.append(" parent._home.getBeApproval('{\"beapprovals\":["); StringBuilder temp = new StringBuilder(); boolean isRead = false; Set<Channel> channels = map.keySet(); if (channels.size() > 0) { int channelCount = channels.size(); int tempCount = beApprovals.size(); if (channelCount != tempCount) { isRead = true; } int idx = 0; for (Channel channel : channels) { if (!isRead && (beApprovals.get(channel).longValue() != map.get(channel).longValue())) { isRead = true; } temp.append("{"); temp.append("\"channelId\":").append(channel.getId()); temp.append(",\"channelName\":\"").append(channel.getName()).append("\""); temp.append(",\"articleCount\":").append(map.get(channel)); temp.append("}"); if (channelCount - 1 > idx) { temp.append(","); } beApprovals.put(channel, map.get(channel)); } } else { beApprovals.clear(); } if (isFirst) isRead = true; if (!isRead) temp.setLength(0); builder.append(temp.toString() + "]}', " + isRead + ");\n"); builder.append(" </script>"); if (isFirst) isFirst = false; return builder.toString(); } private MessageFacable getMessageFac(ServletContext context) { ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(context); Assert.notNull(applicationContext, "Can not get spring's context"); MessageFacable fac = applicationContext.getBean("messageFac", MessageFacable.class); Assert.notNull(fac, "Can not get messageFac"); return fac; } private NotesFacable getNotesFac(ServletContext context) { ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(context); Assert.notNull(applicationContext, "Can not get spring's context"); NotesFacable fac = applicationContext.getBean("notesFac", NotesFacable.class); Assert.notNull(fac, "Can not get notesFac"); return fac; } private DocumentFacable getDocumentFac(ServletContext context) { ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(context); Assert.notNull(applicationContext, "Can not get spring's context"); DocumentFacable fac = applicationContext.getBean("documentFac", DocumentFacable.class); Assert.notNull(fac, "Can not get documentFac"); return fac; } private void getPathValues(String path) { String[] s = StringUtils.split(path, "/"); String pathValue = s[s.length - 1]; userName = pathValue; clientTime = new Date(Calendar.getInstance().getTime().getTime()); } }