001 package net.sf.tacos.cometd.components; 002 003 import java.util.HashMap; 004 import java.util.Map; 005 006 import javax.servlet.ServletContext; 007 008 import org.apache.tapestry.BaseComponent; 009 import org.apache.tapestry.IScript; 010 import org.apache.tapestry.annotations.InjectObject; 011 import org.apache.tapestry.annotations.InjectScript; 012 import org.apache.tapestry.web.WebRequest; 013 import org.mortbay.cometd.AbstractBayeux; 014 015 import dojox.cometd.Bayeux; 016 import dojox.cometd.Client; 017 018 public abstract class Cometd extends BaseComponent 019 { 020 public abstract String getTopic(); 021 public abstract void setTopic(String topic); 022 023 public abstract String getClickComponent(); 024 public abstract void setClickComponent(String comp); 025 026 @InjectObject("service:tapestry.globals.ServletContext") 027 public abstract ServletContext getServletContext(); 028 029 @InjectObject("service:tapestry.globals.WebRequest") 030 public abstract WebRequest getWebRequest(); 031 032 @InjectScript("Cometd.script") 033 public abstract IScript getScript(); 034 035 private AbstractBayeux _bayeux = null; 036 037 private Client _client = null; 038 039 public void publish(String information) 040 { 041 if(_bayeux == null) 042 { 043 _bayeux = (AbstractBayeux)getServletContext().getAttribute(Bayeux.DOJOX_COMETD_BAYEUX); 044 } 045 046 047 048 if(_bayeux != null) 049 { 050 051 if(_client == null) 052 { 053 _client=_bayeux.newClient("alarms", new dojox.cometd.Listener() 054 { 055 public void removed(String id, boolean test) 056 {} 057 public void deliver(Client fromClient, String toChannel, Object data,String id) 058 { 059 } 060 }); 061 } 062 063 if(_client != null) 064 { 065 _bayeux.publish(_client, getTopic(),"TEST", null); 066 } 067 } 068 } 069 070 public Map getScriptSymbols() 071 { 072 String cometdPath = getWebRequest().getContextPath() + "/cometd"; 073 //publish("TEST"); 074 Map mapSymbols = new HashMap(); 075 mapSymbols.put("topic", getTopic()); 076 mapSymbols.put("cometdPath", cometdPath); 077 mapSymbols.put("clickComponent", getClickComponent()); 078 return mapSymbols; 079 } 080 081 }