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.List; import java.util.concurrent.atomic.AtomicInteger; 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.publication.WebPublishFacable; import com.ewcms.publication.task.Taskable; public class ProgressSender extends PubsubSender { private WebPublishFacable publishFac; private Integer siteId; public ProgressSender(String path, ServletContext context) { super(path, context); } private WebPublishFacable getPublishFac(ServletContext context) { ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(context); Assert.notNull(applicationContext, "Can not get spring's context"); WebPublishFacable fac = applicationContext.getBean("webPublishFac", WebPublishFacable.class); Assert.notNull(fac, "Can not get webPublishFacBean"); return fac; } private Integer getSiteId(String path) { String[] s = StringUtils.split(path, "/"); String value = s[s.length - 1]; try { return Integer.valueOf(value); } catch (Exception e) { return Integer.MIN_VALUE; } } @Override protected void init(String path, ServletContext context) { publishFac = getPublishFac(context); siteId = getSiteId(path); } @Override protected String constructOutput() { List<Taskable> tasks = publishFac.getSitePublishTasks(siteId); StringBuilder builder = new StringBuilder(); builder.append(" <script type=\"text/javascript\">"); builder.append("parent.loadData("); AtomicInteger count = new AtomicInteger(0); builder.append("{\"rows\":["); for (Taskable task : tasks) { constructTreeGridRows(builder, count, -1, task); } builder.append("]"); builder.append(",\"total\":").append(count.get()).append("}"); builder.append(");"); builder.append("</script>"); return builder.toString(); } private void constructTreeGridRows(StringBuilder builder, AtomicInteger count, int partenId, Taskable task) { if (task.getProgress() == -1) { return; } if (count.get() != 0) { builder.append(","); } int id = count.incrementAndGet(); builder.append("{"); builder.append("\"id\":").append(id); builder.append(",\"taskId\":\"").append(task.getId()).append("\""); builder.append(",\"name\":\"").append(task.getDescription()).append("\""); builder.append(",\"username\":\"").append(task.getUsername()).append("\""); builder.append(",\"progress\":").append(task.getProgress()); if (partenId != -1) { builder.append(",\"_parentId\":").append(partenId); } builder.append("}"); for (Taskable child : task.getDependenceTasks()) { constructTreeGridRows(builder, count, id, child); } } }