added the ability for the HTML checker to recognize "emoticon" character
sequences and replace them with special tags, which the post-formatting task will in turn replace with real emoticons (GIFs).
This commit is contained in:
		
							parent
							
								
									8a745717e1
								
							
						
					
					
						commit
						15224c4f3f
					
				@ -25,7 +25,7 @@
 | 
				
			|||||||
    <text>Smile!</text>
 | 
					    <text>Smile!</text>
 | 
				
			||||||
  </icon>
 | 
					  </icon>
 | 
				
			||||||
  <icon name="frown">
 | 
					  <icon name="frown">
 | 
				
			||||||
    <pattern>:(</pattern>
 | 
					    <pattern><![CDATA[:(]]></pattern>
 | 
				
			||||||
    <image width="15" height="15" fixup="true">emote/ei_frown.gif</image>
 | 
					    <image width="15" height="15" fixup="true">emote/ei_frown.gif</image>
 | 
				
			||||||
    <text>frown...</text>
 | 
					    <text>frown...</text>
 | 
				
			||||||
  </icon>
 | 
					  </icon>
 | 
				
			||||||
 | 
				
			|||||||
@ -328,8 +328,10 @@
 | 
				
			|||||||
    <config name="post-body">
 | 
					    <config name="post-body">
 | 
				
			||||||
      <options wordwrap="55" angles="true" parens="true" discardHTML="false"/>
 | 
					      <options wordwrap="55" angles="true" parens="true" discardHTML="false"/>
 | 
				
			||||||
      <output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
 | 
					      <output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
 | 
				
			||||||
 | 
					      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmoticonRewriter"/>
 | 
				
			||||||
      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
					      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
				
			||||||
      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
 | 
					      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
 | 
				
			||||||
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmoticonTagHandler"/>
 | 
				
			||||||
      <rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>
 | 
				
			||||||
      <rewriter type="tag" class="com.silverwrist.venice.db.UserNameRewriter"/>
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.db.UserNameRewriter"/>
 | 
				
			||||||
      <rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
				
			||||||
@ -345,9 +347,11 @@
 | 
				
			|||||||
    <config name="preview">
 | 
					    <config name="preview">
 | 
				
			||||||
      <options wordwrap="55" angles="true" parens="true" discardHTML="false"/>
 | 
					      <options wordwrap="55" angles="true" parens="true" discardHTML="false"/>
 | 
				
			||||||
      <output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
 | 
					      <output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
 | 
				
			||||||
 | 
					      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmoticonRewriter"/>
 | 
				
			||||||
      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
					      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
				
			||||||
      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
 | 
					      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
 | 
				
			||||||
      <rewriter type="word" class="com.silverwrist.venice.htmlcheck.filters.SpellingRewriter"/>
 | 
					      <rewriter type="word" class="com.silverwrist.venice.htmlcheck.filters.SpellingRewriter"/>
 | 
				
			||||||
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmoticonTagHandler"/>
 | 
				
			||||||
      <rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>
 | 
				
			||||||
      <rewriter type="tag" class="com.silverwrist.venice.db.UserNameRewriter"/>
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.db.UserNameRewriter"/>
 | 
				
			||||||
      <rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
				
			||||||
@ -367,8 +371,10 @@
 | 
				
			|||||||
      <options wordwrap="55" rewrap="true" angles="true" parens="true" discardHTML="false"
 | 
					      <options wordwrap="55" rewrap="true" angles="true" parens="true" discardHTML="false"
 | 
				
			||||||
               discardRejected="true" discardComments="true" discardXML="true"/>
 | 
					               discardRejected="true" discardComments="true" discardXML="true"/>
 | 
				
			||||||
      <output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
 | 
					      <output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
 | 
				
			||||||
 | 
					      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmoticonRewriter"/>
 | 
				
			||||||
      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
					      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
				
			||||||
      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
 | 
					      <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
 | 
				
			||||||
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmoticonTagHandler"/>
 | 
				
			||||||
      <rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>
 | 
				
			||||||
      <rewriter type="tag" class="com.silverwrist.venice.db.UserNameRewriter"/>
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.db.UserNameRewriter"/>
 | 
				
			||||||
      <rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
					      <rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
 | 
				
			||||||
 | 
				
			|||||||
@ -65,8 +65,8 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
      Runnable task = getNextTaskToRun(quitting);
 | 
					      Runnable task = getNextTaskToRun(quitting);
 | 
				
			||||||
      while (task!=null)
 | 
					      while (task!=null)
 | 
				
			||||||
      { // null task indicates we are shutting down
 | 
					      { // null task indicates we are shutting down
 | 
				
			||||||
	if (my_logger.isDebugEnabled())
 | 
						if (s_thread_logger.isDebugEnabled())
 | 
				
			||||||
	  my_logger.debug("Servicing task of class " + task.getClass().getName());
 | 
						  s_thread_logger.debug("Servicing task of class " + task.getClass().getName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	try
 | 
						try
 | 
				
			||||||
	{ // run the background task
 | 
						{ // run the background task
 | 
				
			||||||
@ -75,7 +75,7 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
	} // end try
 | 
						} // end try
 | 
				
			||||||
	catch (Exception e)
 | 
						catch (Exception e)
 | 
				
			||||||
	{ // log the exception and continue
 | 
						{ // log the exception and continue
 | 
				
			||||||
	  my_logger.error("Background thread caught exception in task",e);
 | 
						  s_thread_logger.error("Background thread caught exception in task",e);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	} // end catch
 | 
						} // end catch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -92,11 +92,11 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public void run()
 | 
					    public void run()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      my_logger.info("Background thread starting");
 | 
					      s_thread_logger.info("Background thread starting");
 | 
				
			||||||
      doRunLoop(false);
 | 
					      doRunLoop(false);
 | 
				
			||||||
      my_logger.info("Background thread quitting");
 | 
					      s_thread_logger.info("Background thread quitting");
 | 
				
			||||||
      doRunLoop(true);
 | 
					      doRunLoop(true);
 | 
				
			||||||
      my_logger.info("Background thread finished");
 | 
					      s_thread_logger.info("Background thread finished");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } // end run
 | 
					    } // end run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -107,8 +107,8 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
   *--------------------------------------------------------------------------------
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private static Category logger = Category.getInstance(GlobalSiteImpl.class);
 | 
					  private static Logger logger = Logger.getLogger(GlobalSiteImpl.class);
 | 
				
			||||||
  private static Category my_logger = Category.getInstance(BackgroundThread.class);
 | 
					  private static Logger s_thread_logger = Logger.getLogger(BackgroundThread.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private static final int NUM_TASK_THREADS = 4;   // TODO: make this configurable
 | 
					  private static final int NUM_TASK_THREADS = 4;   // TODO: make this configurable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -117,18 +117,18 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
   *--------------------------------------------------------------------------------
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private ServiceProvider engine_svc = null;               // ServiceProvider for the VeniceEngine
 | 
					  private ServiceProvider m_engine_svc = null;             // ServiceProvider for the VeniceEngine
 | 
				
			||||||
  private Set m_privileged_addrs = Collections.EMPTY_SET;  // privileged addresses
 | 
					  private Set m_privileged_addrs = Collections.EMPTY_SET;  // privileged addresses
 | 
				
			||||||
  private DataPool datapool = null;                        // the database pool
 | 
					  private DataPool m_datapool = null;                      // the database pool
 | 
				
			||||||
  private Properties email_props = null;                   // email properties
 | 
					  private Properties m_email_props = null;                 // email properties
 | 
				
			||||||
  private javax.mail.Session mailsession = null;           // email session object
 | 
					  private javax.mail.Session m_mailsession = null;         // email session object
 | 
				
			||||||
  private StockMessages stock_messages = null;             // stock messages holder
 | 
					  private StockMessages m_stock_messages = null;           // stock messages holder
 | 
				
			||||||
  private HashMap html_checkers = new HashMap();           // HTML checkers
 | 
					  private HashMap m_html_checkers = new HashMap();         // HTML checkers
 | 
				
			||||||
  private SecurityMonitorEnvironment sm_env;               // security monitor environment
 | 
					  private SecurityMonitorEnvironment m_sm_env;             // security monitor environment
 | 
				
			||||||
  private volatile boolean task_running = true;            // running tasks flag
 | 
					  private volatile boolean m_task_running = true;          // running tasks flag
 | 
				
			||||||
  private Object task_semaphore = new Object();            // semaphore used for tasks
 | 
					  private Object m_task_semaphore = new Object();          // semaphore used for tasks
 | 
				
			||||||
  private LinkedList[] task_queues;                        // the task queues
 | 
					  private LinkedList[] m_task_queues;                      // the task queues
 | 
				
			||||||
  private Thread[] task_threads;                           // the task threads
 | 
					  private Thread[] m_task_threads;                         // the task threads
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*--------------------------------------------------------------------------------
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
   * Constructor
 | 
					   * Constructor
 | 
				
			||||||
@ -138,7 +138,7 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
  public GlobalSiteImpl(ServiceProvider engine_svc, Element config, String application_root)
 | 
					  public GlobalSiteImpl(ServiceProvider engine_svc, Element config, String application_root)
 | 
				
			||||||
      throws ConfigException
 | 
					      throws ConfigException
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    this.engine_svc = engine_svc;
 | 
					    m_engine_svc = engine_svc;
 | 
				
			||||||
    XMLLoader loader = XMLLoader.get();
 | 
					    XMLLoader loader = XMLLoader.get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Get the <engine/> section.
 | 
					    // Get the <engine/> section.
 | 
				
			||||||
@ -168,7 +168,7 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    try
 | 
					    try
 | 
				
			||||||
    { // allocate the data pool object
 | 
					    { // allocate the data pool object
 | 
				
			||||||
      datapool = new DataPool(sect);
 | 
					      m_datapool = new DataPool(sect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } // end try
 | 
					    } // end try
 | 
				
			||||||
    catch (SQLException e)
 | 
					    catch (SQLException e)
 | 
				
			||||||
@ -183,31 +183,31 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
    sect_h = new DOMElementHelper(sect);
 | 
					    sect_h = new DOMElementHelper(sect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // initialize the email properties and get a mail session object
 | 
					    // initialize the email properties and get a mail session object
 | 
				
			||||||
    email_props = new Properties();
 | 
					    m_email_props = new Properties();
 | 
				
			||||||
    email_props.put("mail.transport.protocol","smtp");
 | 
					    m_email_props.put("mail.transport.protocol","smtp");
 | 
				
			||||||
    email_props.put("mail.smtp.host",sect_h.getSubElementText("smtp-host"));
 | 
					    m_email_props.put("mail.smtp.host",sect_h.getSubElementText("smtp-host"));
 | 
				
			||||||
    email_props.put("mail.from",sect_h.getSubElementText("mail-from-addr"));
 | 
					    m_email_props.put("mail.from",sect_h.getSubElementText("mail-from-addr"));
 | 
				
			||||||
    email_props.put("com.silverwrist.venice.email.mailer",sect_h.getSubElementText("mailer"));
 | 
					    m_email_props.put("com.silverwrist.venice.email.mailer",sect_h.getSubElementText("mailer"));
 | 
				
			||||||
    mailsession = javax.mail.Session.getInstance(email_props,null);
 | 
					    m_mailsession = javax.mail.Session.getInstance(m_email_props,null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Get the <messages/> section.
 | 
					    // Get the <messages/> section.
 | 
				
			||||||
    sect = loader.configGetSubSection(config_h,"messages");
 | 
					    sect = loader.configGetSubSection(config_h,"messages");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Initialize the stock messages list.
 | 
					    // Initialize the stock messages list.
 | 
				
			||||||
    stock_messages = new StockMessages(sect);
 | 
					    m_stock_messages = new StockMessages(sect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Initialize the task queues.
 | 
					    // Initialize the task queues.
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
    task_queues = new LinkedList[TASK_PRIO_MAX + 1];
 | 
					    m_task_queues = new LinkedList[TASK_PRIO_MAX + 1];
 | 
				
			||||||
    for (i=0; i<task_queues.length; i++)
 | 
					    for (i=0; i<m_task_queues.length; i++)
 | 
				
			||||||
      task_queues[i] = new LinkedList();
 | 
					      m_task_queues[i] = new LinkedList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Initialize the threads.
 | 
					    // Initialize the threads.
 | 
				
			||||||
    task_threads = new Thread[NUM_TASK_THREADS];
 | 
					    m_task_threads = new Thread[NUM_TASK_THREADS];
 | 
				
			||||||
    for (i=0; i<task_threads.length; i++)
 | 
					    for (i=0; i<m_task_threads.length; i++)
 | 
				
			||||||
    { // create and kick off the background threads
 | 
					    { // create and kick off the background threads
 | 
				
			||||||
      task_threads[i] = new BackgroundThread(i);
 | 
					      m_task_threads[i] = new BackgroundThread(i);
 | 
				
			||||||
      task_threads[i].start();
 | 
					      m_task_threads[i].start();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } // end for
 | 
					    } // end for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -221,6 +221,10 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
    LazyTreeLexicon lex = new LazyTreeLexicon((String[])(dictionary_tmp.toArray(new String[0])));
 | 
					    LazyTreeLexicon lex = new LazyTreeLexicon((String[])(dictionary_tmp.toArray(new String[0])));
 | 
				
			||||||
    this.queueTask(lex,TASK_PRIO_MAX-2);  // load the lexicon
 | 
					    this.queueTask(lex,TASK_PRIO_MAX-2);  // load the lexicon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Load the emoticon configuration.
 | 
				
			||||||
 | 
					    Document ei_config = loader.loadConfigDocument(emoticon_config);
 | 
				
			||||||
 | 
					    Element ei_root = loader.configGetRootElement(ei_config,"emoticon-config");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Create the intermediate object map for HTML checker creation, and "seed" it.
 | 
					    // Create the intermediate object map for HTML checker creation, and "seed" it.
 | 
				
			||||||
    HashMap intermediate_map = new HashMap();
 | 
					    HashMap intermediate_map = new HashMap();
 | 
				
			||||||
    SpellingRewriter spell_rewriter = new SpellingRewriter();
 | 
					    SpellingRewriter spell_rewriter = new SpellingRewriter();
 | 
				
			||||||
@ -230,8 +234,10 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
    intermediate_map.put(postlink_rewriter.getClass().getName(),postlink_rewriter);
 | 
					    intermediate_map.put(postlink_rewriter.getClass().getName(),postlink_rewriter);
 | 
				
			||||||
    UserNameRewriter username_rewriter = new UserNameRewriter(this);
 | 
					    UserNameRewriter username_rewriter = new UserNameRewriter(this);
 | 
				
			||||||
    intermediate_map.put(username_rewriter.getClass().getName(),username_rewriter);
 | 
					    intermediate_map.put(username_rewriter.getClass().getName(),username_rewriter);
 | 
				
			||||||
    EmoticonRewriter emoticon_rewriter = new EmoticonRewriter(emoticon_config);
 | 
					    EmoticonRewriter emoticon_rewriter = new EmoticonRewriter(ei_root);
 | 
				
			||||||
    intermediate_map.put(emoticon_rewriter.getClass().getName(),emoticon_rewriter);
 | 
					    intermediate_map.put(emoticon_rewriter.getClass().getName(),emoticon_rewriter);
 | 
				
			||||||
 | 
					    EmoticonTagHandler emoticon_tag = new EmoticonTagHandler(ei_root);
 | 
				
			||||||
 | 
					    intermediate_map.put(emoticon_tag.getClass().getName(),emoticon_tag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Get the <html-checker/> section.
 | 
					    // Get the <html-checker/> section.
 | 
				
			||||||
    sect = loader.configGetSubSection(config_h,"html-checker");
 | 
					    sect = loader.configGetSubSection(config_h,"html-checker");
 | 
				
			||||||
@ -257,14 +263,14 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
    sect = loader.configGetSubSection(config_h,"security");
 | 
					    sect = loader.configGetSubSection(config_h,"security");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Load the security monitors.
 | 
					    // Load the security monitors.
 | 
				
			||||||
    sm_env = new SecurityMonitorEnvironment();
 | 
					    m_sm_env = new SecurityMonitorEnvironment();
 | 
				
			||||||
    nl = sect.getChildNodes();
 | 
					    nl = sect.getChildNodes();
 | 
				
			||||||
    for (i=0; i<nl.getLength(); i++)
 | 
					    for (i=0; i<nl.getLength(); i++)
 | 
				
			||||||
    { // scan through and find security monitors to initialize
 | 
					    { // scan through and find security monitors to initialize
 | 
				
			||||||
      Node n = nl.item(i);
 | 
					      Node n = nl.item(i);
 | 
				
			||||||
      if ((n.getNodeType()==Node.ELEMENT_NODE) && (n.getNodeName().equals("security-definition")))
 | 
					      if ((n.getNodeType()==Node.ELEMENT_NODE) && (n.getNodeName().equals("security-definition")))
 | 
				
			||||||
	// load one of the initial security definitions
 | 
						// load one of the initial security definitions
 | 
				
			||||||
	new StaticSecurityMonitor((Element)n,sm_env);
 | 
						new StaticSecurityMonitor((Element)n,m_sm_env);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } // end for
 | 
					    } // end for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -385,7 +391,7 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
  {
 | 
					  {
 | 
				
			||||||
    XMLLoader loader = XMLLoader.get();
 | 
					    XMLLoader loader = XMLLoader.get();
 | 
				
			||||||
    String checker_name = loader.configGetAttribute(elt,"name");
 | 
					    String checker_name = loader.configGetAttribute(elt,"name");
 | 
				
			||||||
    if (html_checkers.containsKey(checker_name))
 | 
					    if (m_html_checkers.containsKey(checker_name))
 | 
				
			||||||
      throw new ConfigException("config name \"" + checker_name + "\" defined twice",elt);
 | 
					      throw new ConfigException("config name \"" + checker_name + "\" defined twice",elt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    HTMLCheckerConfig cfg = HTMLCheckerCreator.create();
 | 
					    HTMLCheckerConfig cfg = HTMLCheckerCreator.create();
 | 
				
			||||||
@ -483,7 +489,7 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    } // end for
 | 
					    } // end for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    html_checkers.put(checker_name,cfg);
 | 
					    m_html_checkers.put(checker_name,cfg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end createHTMLChecker
 | 
					  } // end createHTMLChecker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -491,26 +497,26 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
  {
 | 
					  {
 | 
				
			||||||
    int i;  // loop counter for cycling through priority queues
 | 
					    int i;  // loop counter for cycling through priority queues
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    synchronized (task_semaphore)
 | 
					    synchronized (m_task_semaphore)
 | 
				
			||||||
    { // acquire the task semaphore
 | 
					    { // acquire the task semaphore
 | 
				
			||||||
      if (quitting)
 | 
					      if (quitting)
 | 
				
			||||||
      { // just scan the queues and return the first available task
 | 
					      { // just scan the queues and return the first available task
 | 
				
			||||||
	for (i=TASK_PRIO_MAX; i>=TASK_PRIO_MIN; i--)
 | 
						for (i=TASK_PRIO_MAX; i>=TASK_PRIO_MIN; i--)
 | 
				
			||||||
	  if (!(task_queues[i].isEmpty()))  // select a task from highest possible priority queue
 | 
						  if (!(m_task_queues[i].isEmpty()))  // select a task from highest possible priority queue
 | 
				
			||||||
	    return (Runnable)(task_queues[i].removeFirst());
 | 
						    return (Runnable)(m_task_queues[i].removeFirst());
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
      } // end if
 | 
					      } // end if
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
      { // work it normally
 | 
					      { // work it normally
 | 
				
			||||||
	while (task_running)
 | 
						while (m_task_running)
 | 
				
			||||||
	{ // look for a task we can do
 | 
						{ // look for a task we can do
 | 
				
			||||||
	  for (i=TASK_PRIO_MAX; i>=TASK_PRIO_MIN; i--)
 | 
						  for (i=TASK_PRIO_MAX; i>=TASK_PRIO_MIN; i--)
 | 
				
			||||||
	    if (!(task_queues[i].isEmpty()))  // select a task from highest possible priority queue
 | 
						    if (!(m_task_queues[i].isEmpty()))  // select a task from highest possible priority queue
 | 
				
			||||||
	      return (Runnable)(task_queues[i].removeFirst());
 | 
						      return (Runnable)(m_task_queues[i].removeFirst());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  try
 | 
						  try
 | 
				
			||||||
	  { // wait for something to happen
 | 
						  { // wait for something to happen
 | 
				
			||||||
	    task_semaphore.wait();
 | 
						    m_task_semaphore.wait();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  } // end try
 | 
						  } // end try
 | 
				
			||||||
	  catch (InterruptedException e)
 | 
						  catch (InterruptedException e)
 | 
				
			||||||
@ -525,7 +531,7 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    } // end synchronized block
 | 
					    } // end synchronized block
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return null;  // if get here, task_running is false and we are quitting
 | 
					    return null;  // if get here, m_task_running is false and we are quitting
 | 
				
			||||||
                  // (or the task queue is empty, if quitting is true)
 | 
					                  // (or the task queue is empty, if quitting is true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end getNextTaskToRun
 | 
					  } // end getNextTaskToRun
 | 
				
			||||||
@ -538,15 +544,15 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
  public Object queryService(Class klass)
 | 
					  public Object queryService(Class klass)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    if (klass==DataPool.class)
 | 
					    if (klass==DataPool.class)
 | 
				
			||||||
      return datapool;
 | 
					      return m_datapool;
 | 
				
			||||||
    if (klass==MailSend.class)
 | 
					    if (klass==MailSend.class)
 | 
				
			||||||
      return new BaseMailSend(this,email_props,mailsession);
 | 
					      return new BaseMailSend(this,m_email_props,m_mailsession);
 | 
				
			||||||
    if (klass==SecurityMonitorEnvironment.class)
 | 
					    if (klass==SecurityMonitorEnvironment.class)
 | 
				
			||||||
      return sm_env;
 | 
					      return m_sm_env;
 | 
				
			||||||
    if (klass==SecurityMonitor.class)
 | 
					    if (klass==SecurityMonitor.class)
 | 
				
			||||||
      return sm_env.getMonitor("Global");
 | 
					      return m_sm_env.getMonitor("Global");
 | 
				
			||||||
    if (klass==VeniceEngine.class)
 | 
					    if (klass==VeniceEngine.class)
 | 
				
			||||||
      return engine_svc.queryService(klass);
 | 
					      return m_engine_svc.queryService(klass);
 | 
				
			||||||
    throw new NoSuchServiceException("GlobalSite",klass);
 | 
					    throw new NoSuchServiceException("GlobalSite",klass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end queryService
 | 
					  } // end queryService
 | 
				
			||||||
@ -570,7 +576,7 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (klass==HTMLCheckerConfig.class)
 | 
					    if (klass==HTMLCheckerConfig.class)
 | 
				
			||||||
    { // get the HTML Checker config
 | 
					    { // get the HTML Checker config
 | 
				
			||||||
      Object rc = html_checkers.get(serviceid);
 | 
					      Object rc = m_html_checkers.get(serviceid);
 | 
				
			||||||
      if (rc==null)
 | 
					      if (rc==null)
 | 
				
			||||||
	throw new NoSuchServiceException("GlobalSite",klass,serviceid);
 | 
						throw new NoSuchServiceException("GlobalSite",klass,serviceid);
 | 
				
			||||||
      return rc;
 | 
					      return rc;
 | 
				
			||||||
@ -579,7 +585,7 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (klass==HTMLChecker.class)
 | 
					    if (klass==HTMLChecker.class)
 | 
				
			||||||
    { // create an HTML Checker using the specified HTML Checker config
 | 
					    { // create an HTML Checker using the specified HTML Checker config
 | 
				
			||||||
      HTMLCheckerConfig fact = (HTMLCheckerConfig)(html_checkers.get(serviceid));
 | 
					      HTMLCheckerConfig fact = (HTMLCheckerConfig)(m_html_checkers.get(serviceid));
 | 
				
			||||||
      if (fact==null)
 | 
					      if (fact==null)
 | 
				
			||||||
	throw new NoSuchServiceException("GlobalSite",klass,serviceid);
 | 
						throw new NoSuchServiceException("GlobalSite",klass,serviceid);
 | 
				
			||||||
      return fact.createHTMLChecker();
 | 
					      return fact.createHTMLChecker();
 | 
				
			||||||
@ -588,7 +594,7 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (klass==SecurityMonitor.class)
 | 
					    if (klass==SecurityMonitor.class)
 | 
				
			||||||
    { // get a security monitor from the environment
 | 
					    { // get a security monitor from the environment
 | 
				
			||||||
      SecurityMonitor rc = sm_env.getMonitor(serviceid);
 | 
					      SecurityMonitor rc = m_sm_env.getMonitor(serviceid);
 | 
				
			||||||
      if (rc==null)
 | 
					      if (rc==null)
 | 
				
			||||||
	throw new NoSuchServiceException("GlobalSite",klass,serviceid);
 | 
						throw new NoSuchServiceException("GlobalSite",klass,serviceid);
 | 
				
			||||||
      return rc;
 | 
					      return rc;
 | 
				
			||||||
@ -613,13 +619,13 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
  public Connection getConnection(String db_selector) throws SQLException
 | 
					  public Connection getConnection(String db_selector) throws SQLException
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    // db_selector is ignored for now
 | 
					    // db_selector is ignored for now
 | 
				
			||||||
    return datapool.getConnection();
 | 
					    return m_datapool.getConnection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end getConnection
 | 
					  } // end getConnection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public String getStockMessage(String key)
 | 
					  public String getStockMessage(String key)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    return stock_messages.get(key);
 | 
					    return m_stock_messages.get(key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end getStockMessage
 | 
					  } // end getStockMessage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -632,13 +638,13 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
    if (task instanceof AcceptGlobalSite)
 | 
					    if (task instanceof AcceptGlobalSite)
 | 
				
			||||||
      ((AcceptGlobalSite)task).setGlobalSite(this);
 | 
					      ((AcceptGlobalSite)task).setGlobalSite(this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    synchronized (task_semaphore)
 | 
					    synchronized (m_task_semaphore)
 | 
				
			||||||
    { // make sure we are running
 | 
					    { // make sure we are running
 | 
				
			||||||
      // If the running flag is off, only the background tasks themselves may queue new tasks.
 | 
					      // If the running flag is off, only the background tasks themselves may queue new tasks.
 | 
				
			||||||
      if (task_running || Thread.currentThread().getName().startsWith("GlobalSite_bkgd"));
 | 
					      if (m_task_running || Thread.currentThread().getName().startsWith("GlobalSite_bkgd"));
 | 
				
			||||||
      { // add the task to a queue and notify a thread to take it
 | 
					      { // add the task to a queue and notify a thread to take it
 | 
				
			||||||
	task_queues[priority].addLast(task);
 | 
						m_task_queues[priority].addLast(task);
 | 
				
			||||||
	task_semaphore.notify();
 | 
						m_task_semaphore.notify();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      } // end if
 | 
					      } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -659,20 +665,20 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  public void shutdown()
 | 
					  public void shutdown()
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    synchronized (task_semaphore)
 | 
					    synchronized (m_task_semaphore)
 | 
				
			||||||
    { // notify the task threads that we're quitting
 | 
					    { // notify the task threads that we're quitting
 | 
				
			||||||
      task_running = false;
 | 
					      m_task_running = false;
 | 
				
			||||||
      task_semaphore.notifyAll();
 | 
					      m_task_semaphore.notifyAll();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } // end synchronized block
 | 
					    } // end synchronized block
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int i = 0;
 | 
					    int i = 0;
 | 
				
			||||||
    while (i<task_threads.length)
 | 
					    while (i<m_task_threads.length)
 | 
				
			||||||
    { // wait for all background threads to finally die
 | 
					    { // wait for all background threads to finally die
 | 
				
			||||||
      try
 | 
					      try
 | 
				
			||||||
      { // wait for a thread to die
 | 
					      { // wait for a thread to die
 | 
				
			||||||
	task_threads[i].join();
 | 
						m_task_threads[i].join();
 | 
				
			||||||
	task_threads[i++] = null;
 | 
						m_task_threads[i++] = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      } // end try
 | 
					      } // end try
 | 
				
			||||||
      catch (InterruptedException e)
 | 
					      catch (InterruptedException e)
 | 
				
			||||||
@ -681,21 +687,21 @@ public class GlobalSiteImpl implements GlobalSite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    } // end while
 | 
					    } // end while
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    task_threads = null;
 | 
					    m_task_threads = null;
 | 
				
			||||||
    task_queues = null;
 | 
					    m_task_queues = null;
 | 
				
			||||||
    task_semaphore = null;
 | 
					    m_task_semaphore = null;
 | 
				
			||||||
    engine_svc = null;
 | 
					    m_engine_svc = null;
 | 
				
			||||||
    if (datapool!=null)
 | 
					    if (m_datapool!=null)
 | 
				
			||||||
      datapool.closeAllConnections();
 | 
					      m_datapool.closeAllConnections();
 | 
				
			||||||
    datapool = null;
 | 
					    m_datapool = null;
 | 
				
			||||||
    email_props = null;
 | 
					    m_email_props = null;
 | 
				
			||||||
    mailsession = null;
 | 
					    m_mailsession = null;
 | 
				
			||||||
    stock_messages = null;
 | 
					    m_stock_messages = null;
 | 
				
			||||||
    html_checkers.clear();
 | 
					    m_html_checkers.clear();
 | 
				
			||||||
    html_checkers = null;
 | 
					    m_html_checkers = null;
 | 
				
			||||||
    if (sm_env!=null)
 | 
					    if (m_sm_env!=null)
 | 
				
			||||||
      sm_env.shutdown();
 | 
					      m_sm_env.shutdown();
 | 
				
			||||||
    sm_env = null;
 | 
					    m_sm_env = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end shutdown
 | 
					  } // end shutdown
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -9,9 +9,9 @@
 | 
				
			|||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * The Original Code is the Venice Web Community System.
 | 
					 * The Original Code is the Venice Web Community System.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
					 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
				
			||||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
					 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
				
			||||||
 * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
					 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * Contributor(s): 
 | 
					 * Contributor(s): 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@ -19,22 +19,22 @@ package com.silverwrist.venice.htmlcheck;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public interface HTMLChecker
 | 
					public interface HTMLChecker
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  public abstract void append(String str) throws AlreadyFinishedException;
 | 
					  public void append(String str) throws AlreadyFinishedException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public abstract void finish() throws AlreadyFinishedException;
 | 
					  public void finish() throws AlreadyFinishedException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public abstract void reset();
 | 
					  public void reset();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public abstract String getValue() throws NotYetFinishedException;
 | 
					  public String getValue() throws NotYetFinishedException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public abstract int getLength() throws NotYetFinishedException;
 | 
					  public int getLength() throws NotYetFinishedException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public abstract int getLines() throws NotYetFinishedException;
 | 
					  public int getLines() throws NotYetFinishedException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public abstract int getCounter(String name) throws NotYetFinishedException;
 | 
					  public int getCounter(String name) throws NotYetFinishedException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public abstract Object getContextValue(String name);
 | 
					  public Object getContextValue(String name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public abstract void setContextValue(String name, Object val);
 | 
					  public void setContextValue(String name, Object val);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // end interface HTMLChecker
 | 
					} // end interface HTMLChecker
 | 
				
			||||||
 | 
				
			|||||||
@ -9,9 +9,9 @@
 | 
				
			|||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * The Original Code is the Venice Web Community System.
 | 
					 * The Original Code is the Venice Web Community System.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
					 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
				
			||||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
					 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
				
			||||||
 * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
					 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * Contributor(s): 
 | 
					 * Contributor(s): 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@ -24,20 +24,31 @@ public class MarkupData
 | 
				
			|||||||
   *--------------------------------------------------------------------------------
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private String begin_markup;
 | 
					  private String m_begin_markup;
 | 
				
			||||||
  private String text;
 | 
					  private String m_text;
 | 
				
			||||||
  private String end_markup;
 | 
					  private String m_end_markup;
 | 
				
			||||||
 | 
					  private boolean m_rescan;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*--------------------------------------------------------------------------------
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
   * Constructor
 | 
					   * Constructors
 | 
				
			||||||
   *--------------------------------------------------------------------------------
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public MarkupData(String begin_markup, String text, String end_markup)
 | 
					  public MarkupData(String begin_markup, String text, String end_markup)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    this.begin_markup = begin_markup;
 | 
					    m_begin_markup = begin_markup;
 | 
				
			||||||
    this.text = text;
 | 
					    m_text = text;
 | 
				
			||||||
    this.end_markup = end_markup;
 | 
					    m_end_markup = end_markup;
 | 
				
			||||||
 | 
					    m_rescan = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end constructor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public MarkupData(String begin_markup, String text, String end_markup, boolean rescan)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    m_begin_markup = begin_markup;
 | 
				
			||||||
 | 
					    m_text = text;
 | 
				
			||||||
 | 
					    m_end_markup = end_markup;
 | 
				
			||||||
 | 
					    m_rescan = rescan;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end constructor
 | 
					  } // end constructor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -48,20 +59,51 @@ public class MarkupData
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  public String getBeginMarkup()
 | 
					  public String getBeginMarkup()
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    return begin_markup;
 | 
					    return m_begin_markup;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end getBeginMarkup
 | 
					  } // end getBeginMarkup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public String getText()
 | 
					  public String getText()
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    return text;
 | 
					    return m_text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end getText
 | 
					  } // end getText
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public boolean hasText()
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    return (m_text!=null) && (m_text.length()>0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end hasText
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public int getTextLength()
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    return (m_text==null) ? 0 : m_text.length();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end getTextLength
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public String getEndMarkup()
 | 
					  public String getEndMarkup()
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    return end_markup;
 | 
					    return m_end_markup;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end getEndMarkup
 | 
					  } // end getEndMarkup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public String getAll()
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    StringBuffer buf = new StringBuffer();
 | 
				
			||||||
 | 
					    if (m_begin_markup!=null)
 | 
				
			||||||
 | 
					      buf.append(m_begin_markup);
 | 
				
			||||||
 | 
					    if (m_text!=null)
 | 
				
			||||||
 | 
					      buf.append(m_text);
 | 
				
			||||||
 | 
					    if (m_end_markup!=null)
 | 
				
			||||||
 | 
					      buf.append(m_end_markup);
 | 
				
			||||||
 | 
					    return buf.toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end getAll
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public boolean getRescan()
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    return m_rescan;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end getRescan
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // end class MarkupData
 | 
					} // end class MarkupData
 | 
				
			||||||
 | 
				
			|||||||
@ -7,11 +7,11 @@
 | 
				
			|||||||
 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
					 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
				
			||||||
 * language governing rights and limitations under the License.
 | 
					 * language governing rights and limitations under the License.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * The Original Code is the Venice Web Community System.
 | 
					 * The Original Code is the Venice Web Communities System.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
					 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
				
			||||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
					 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
				
			||||||
 * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
					 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * Contributor(s): 
 | 
					 * Contributor(s): 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@ -19,8 +19,8 @@ package com.silverwrist.venice.htmlcheck;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public interface Rewriter
 | 
					public interface Rewriter
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  public abstract String getName();
 | 
					  public String getName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public abstract MarkupData rewrite(String data, RewriterServices svc);
 | 
					  public MarkupData rewrite(String data, RewriterServices svc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // end interface Rewriter
 | 
					} // end interface Rewriter
 | 
				
			||||||
 | 
				
			|||||||
@ -33,25 +33,25 @@ public class EmoticonRewriter implements Rewriter
 | 
				
			|||||||
   *--------------------------------------------------------------------------------
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private String m_prefixchars;
 | 
					  private char[] m_prefixchars;
 | 
				
			||||||
  private Map m_patmap;
 | 
					  private Map m_patmap;
 | 
				
			||||||
 | 
					  private int m_minlength;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*--------------------------------------------------------------------------------
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
   * Constructor
 | 
					   * Constructor
 | 
				
			||||||
   *--------------------------------------------------------------------------------
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public EmoticonRewriter(String config_file) throws ConfigException
 | 
					  public EmoticonRewriter(Element root) throws ConfigException
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    // Load the configuration file.
 | 
					 | 
				
			||||||
    XMLLoader loader = XMLLoader.get();
 | 
					    XMLLoader loader = XMLLoader.get();
 | 
				
			||||||
    Document config = loader.loadConfigDocument(config_file);
 | 
					 | 
				
			||||||
    Element root = loader.configGetRootElement(config,"emoticon-config");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Get the set of prefix characters.
 | 
					    // Get the set of prefix characters.
 | 
				
			||||||
    m_prefixchars = loader.configGetSubElementText(root,"prefix-chars");
 | 
					    String pfxchar = loader.configGetSubElementText(root,"prefix-chars");
 | 
				
			||||||
 | 
					    m_prefixchars = pfxchar.toCharArray();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    HashMap tmp = new HashMap();
 | 
					    HashMap tmp = new HashMap();
 | 
				
			||||||
 | 
					    m_minlength = Integer.MAX_VALUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Look for all associated icons.
 | 
					    // Look for all associated icons.
 | 
				
			||||||
    NodeList nl = root.getChildNodes();
 | 
					    NodeList nl = root.getChildNodes();
 | 
				
			||||||
@ -66,13 +66,17 @@ public class EmoticonRewriter implements Rewriter
 | 
				
			|||||||
	NodeList nl2 = n.getChildNodes();
 | 
						NodeList nl2 = n.getChildNodes();
 | 
				
			||||||
	for (int j=0; j<nl2.getLength(); j++)
 | 
						for (int j=0; j<nl2.getLength(); j++)
 | 
				
			||||||
	{ // look for <pattern/> elements
 | 
						{ // look for <pattern/> elements
 | 
				
			||||||
	  Node n2 = nl2.item(i);
 | 
						  Node n2 = nl2.item(j);
 | 
				
			||||||
	  if ((n2.getNodeType()==Node.ELEMENT_NODE) && n2.getNodeName().equals("pattern"))
 | 
						  if ((n2.getNodeType()==Node.ELEMENT_NODE) && n2.getNodeName().equals("pattern"))
 | 
				
			||||||
	  { // get the element text
 | 
						  { // get the element text
 | 
				
			||||||
	    DOMElementHelper h = new DOMElementHelper((Element)n2);
 | 
						    DOMElementHelper h = new DOMElementHelper((Element)n2);
 | 
				
			||||||
	    String pattern = h.getElementText();
 | 
						    String pattern = h.getElementText();
 | 
				
			||||||
	    if (m_prefixchars.indexOf(pattern.charAt(0))>=0)
 | 
						    if (pfxchar.indexOf(pattern.charAt(0))>=0)
 | 
				
			||||||
 | 
						    { // add pattern and recompute minimum length
 | 
				
			||||||
	      tmp.put(pattern,icon_name);
 | 
						      tmp.put(pattern,icon_name);
 | 
				
			||||||
 | 
						      m_minlength = Math.min(m_minlength,pattern.length());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  } // end if
 | 
						  } // end if
 | 
				
			||||||
	  // else skip this element
 | 
						  // else skip this element
 | 
				
			||||||
@ -104,7 +108,74 @@ public class EmoticonRewriter implements Rewriter
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  public MarkupData rewrite(String data, RewriterServices svc)
 | 
					  public MarkupData rewrite(String data, RewriterServices svc)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    return null;
 | 
					    int pos = Integer.MAX_VALUE;
 | 
				
			||||||
 | 
					    for (int i=0; i<m_prefixchars.length; i++)
 | 
				
			||||||
 | 
					    { // hunt for the possible beginning of an emoticon sequence
 | 
				
			||||||
 | 
					      int foo = data.indexOf(m_prefixchars[i]);
 | 
				
			||||||
 | 
					      if (foo>=0)
 | 
				
			||||||
 | 
						pos = Math.min(pos,foo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (pos==Integer.MAX_VALUE)
 | 
				
			||||||
 | 
					      return null;  // none present - we can short-circuit matters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    boolean did_replace = false;
 | 
				
			||||||
 | 
					    StringBuffer output = new StringBuffer();
 | 
				
			||||||
 | 
					    String work = data;
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					    { // break off the front part of the string
 | 
				
			||||||
 | 
					      if (pos>0)
 | 
				
			||||||
 | 
					      { // append it and make it work
 | 
				
			||||||
 | 
						output.append(work.substring(0,pos));
 | 
				
			||||||
 | 
						work = work.substring(pos);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      boolean looking = true;
 | 
				
			||||||
 | 
					      if (work.length()>=m_minlength)
 | 
				
			||||||
 | 
					      { // there's a chance we have a pattern
 | 
				
			||||||
 | 
						for (Iterator it=m_patmap.entrySet().iterator(); looking && it.hasNext(); )
 | 
				
			||||||
 | 
						{ // hunt through all the smiley entries
 | 
				
			||||||
 | 
						  Map.Entry ntry = (Map.Entry)(it.next());
 | 
				
			||||||
 | 
						  String match = ntry.getKey().toString();
 | 
				
			||||||
 | 
						  if (work.startsWith(match))
 | 
				
			||||||
 | 
						  { // found the right smiley
 | 
				
			||||||
 | 
						    looking = false;
 | 
				
			||||||
 | 
						    output.append("<ei:").append(ntry.getValue()).append("/>");
 | 
				
			||||||
 | 
						    work = work.substring(match.length());
 | 
				
			||||||
 | 
						    did_replace = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						} // end for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (looking)
 | 
				
			||||||
 | 
					      { // no such luck - shift the triggering character over
 | 
				
			||||||
 | 
						output.append(work.charAt(0));
 | 
				
			||||||
 | 
						work = work.substring(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // now look for the next triggering character
 | 
				
			||||||
 | 
					      pos = Integer.MAX_VALUE;
 | 
				
			||||||
 | 
					      for (int i=0; i<m_prefixchars.length; i++)
 | 
				
			||||||
 | 
					      { // hunt for the possible beginning of an emoticon sequence
 | 
				
			||||||
 | 
						int foo = work.indexOf(m_prefixchars[i]);
 | 
				
			||||||
 | 
						if (foo>=0)
 | 
				
			||||||
 | 
						  pos = Math.min(pos,foo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      } // end for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } while (pos!=Integer.MAX_VALUE); // end do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!did_replace)
 | 
				
			||||||
 | 
					      return null;  // no replacements done, so what's the point?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    output.append(work);  // tack this onto the end
 | 
				
			||||||
 | 
					    return new MarkupData(null,output.toString(),null,true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end rewrite
 | 
					  } // end rewrite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * The contents of this file are subject to the Mozilla Public License Version 1.1
 | 
				
			||||||
 | 
					 * (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.mozilla.org/MPL/>.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
 | 
				
			||||||
 | 
					 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
				
			||||||
 | 
					 * language governing rights and limitations under the License.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * The Original Code is the Venice Web Community System.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
				
			||||||
 | 
					 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
				
			||||||
 | 
					 * Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Contributor(s): 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					package com.silverwrist.venice.htmlcheck.filters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.*;
 | 
				
			||||||
 | 
					import org.apache.log4j.*;
 | 
				
			||||||
 | 
					import org.apache.regexp.*;
 | 
				
			||||||
 | 
					import org.w3c.dom.*;
 | 
				
			||||||
 | 
					import com.silverwrist.venice.except.*;
 | 
				
			||||||
 | 
					import com.silverwrist.venice.htmlcheck.Rewriter;
 | 
				
			||||||
 | 
					import com.silverwrist.venice.htmlcheck.RewriterServices;
 | 
				
			||||||
 | 
					import com.silverwrist.venice.htmlcheck.MarkupData;
 | 
				
			||||||
 | 
					import com.silverwrist.venice.util.XMLLoader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class EmoticonTagHandler implements Rewriter
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Static data members
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static Logger logger = Logger.getLogger(EmoticonTagHandler.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Attributes
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private Set m_valid_icons;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Constructor
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public EmoticonTagHandler(Element root) throws ConfigException
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    XMLLoader loader = XMLLoader.get();
 | 
				
			||||||
 | 
					    HashSet tmp = new HashSet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Look for all associated icons.
 | 
				
			||||||
 | 
					    NodeList nl = root.getChildNodes();
 | 
				
			||||||
 | 
					    for (int i=0; i<nl.getLength(); i++)
 | 
				
			||||||
 | 
					    { // look through all the child nodes...
 | 
				
			||||||
 | 
					      Node n = nl.item(i);
 | 
				
			||||||
 | 
					      if ((n.getNodeType()==Node.ELEMENT_NODE) && n.getNodeName().equals("icon"))
 | 
				
			||||||
 | 
					      { // load the icon name
 | 
				
			||||||
 | 
						String icon_name = loader.configGetAttribute((Element)n,"name").intern();
 | 
				
			||||||
 | 
						tmp.add(icon_name);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					      } // end if
 | 
				
			||||||
 | 
					      // else skip this element
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (tmp.isEmpty())
 | 
				
			||||||
 | 
					      m_valid_icons = Collections.EMPTY_SET;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      m_valid_icons = Collections.unmodifiableSet(tmp);
 | 
				
			||||||
 | 
					    if (logger.isDebugEnabled())
 | 
				
			||||||
 | 
					      logger.debug("EmoticonTagHandler recognizes " + m_valid_icons.size() + " valid tag names");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end constructor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Implementations from interface Rewriter
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public String getName()
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    return "emoticon_tag";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end getName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public MarkupData rewrite(String data, RewriterServices svc)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    logger.debug("EmoticonTagHandler looking at: " + data);
 | 
				
			||||||
 | 
					    RE r = new RE("ei:\\s*(\\w+)(?:\\s*/)?\\s*");
 | 
				
			||||||
 | 
					    if (!(r.match(data)))
 | 
				
			||||||
 | 
					      return null;
 | 
				
			||||||
 | 
					    String icon_name = r.getParen(1);
 | 
				
			||||||
 | 
					    logger.debug("EmoticonTagHandler match icon name: " + icon_name);
 | 
				
			||||||
 | 
					    if (!(m_valid_icons.contains(icon_name)))
 | 
				
			||||||
 | 
					      return null;
 | 
				
			||||||
 | 
					    return new MarkupData("<ei:" + icon_name + "/>",null,null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end rewrite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // end class EmoticonTagHandler
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -9,9 +9,9 @@
 | 
				
			|||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * The Original Code is the Venice Web Communities System.
 | 
					 * The Original Code is the Venice Web Communities System.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
					 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
				
			||||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
					 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
				
			||||||
 * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
					 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * Contributor(s): 
 | 
					 * Contributor(s): 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@ -23,6 +23,7 @@ import javax.servlet.jsp.tagext.*;
 | 
				
			|||||||
import com.silverwrist.venice.db.PostLinkRewriter;
 | 
					import com.silverwrist.venice.db.PostLinkRewriter;
 | 
				
			||||||
import com.silverwrist.venice.db.UserNameRewriter;
 | 
					import com.silverwrist.venice.db.UserNameRewriter;
 | 
				
			||||||
import com.silverwrist.venice.ui.*;
 | 
					import com.silverwrist.venice.ui.*;
 | 
				
			||||||
 | 
					import com.silverwrist.venice.ui.config.EmoticonManager;
 | 
				
			||||||
import com.silverwrist.venice.ui.helpers.HTMLRendering;
 | 
					import com.silverwrist.venice.ui.helpers.HTMLRendering;
 | 
				
			||||||
import com.silverwrist.venice.util.IDUtils;
 | 
					import com.silverwrist.venice.util.IDUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -59,6 +60,10 @@ public class PostRewriteTag extends VeniceConfBodyTagSupport
 | 
				
			|||||||
    BodyContent body = getBodyContent();
 | 
					    BodyContent body = getBodyContent();
 | 
				
			||||||
    String data = body.getString();
 | 
					    String data = body.getString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Remap emoticons.
 | 
				
			||||||
 | 
					    EmoticonManager em = (EmoticonManager)(getRequestInput().queryService(EmoticonManager.class));
 | 
				
			||||||
 | 
					    data = em.rewriteText(getRequestOutput(),data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((data.indexOf(PostLinkRewriter.URI_PREFIX)<0) && (data.indexOf(UserNameRewriter.URI_PREFIX)<0))
 | 
					    if ((data.indexOf(PostLinkRewriter.URI_PREFIX)<0) && (data.indexOf(UserNameRewriter.URI_PREFIX)<0))
 | 
				
			||||||
    { // no post links or user links in here - output what we've got and call it
 | 
					    { // no post links or user links in here - output what we've got and call it
 | 
				
			||||||
      output(body,data);
 | 
					      output(body,data);
 | 
				
			||||||
 | 
				
			|||||||
@ -18,9 +18,13 @@
 | 
				
			|||||||
package com.silverwrist.venice.ui.config;
 | 
					package com.silverwrist.venice.ui.config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.*;
 | 
					import java.util.*;
 | 
				
			||||||
 | 
					import org.apache.log4j.*;
 | 
				
			||||||
 | 
					import org.apache.regexp.*;
 | 
				
			||||||
import org.w3c.dom.*;
 | 
					import org.w3c.dom.*;
 | 
				
			||||||
import com.silverwrist.util.*;
 | 
					import com.silverwrist.util.*;
 | 
				
			||||||
import com.silverwrist.venice.except.*;
 | 
					import com.silverwrist.venice.except.*;
 | 
				
			||||||
 | 
					import com.silverwrist.venice.ui.*;
 | 
				
			||||||
 | 
					import com.silverwrist.venice.ui.helpers.*;
 | 
				
			||||||
import com.silverwrist.venice.util.XMLLoader;
 | 
					import com.silverwrist.venice.util.XMLLoader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class EmoticonManager
 | 
					public class EmoticonManager
 | 
				
			||||||
@ -63,11 +67,43 @@ public class EmoticonManager
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      // Get the text data.
 | 
					      // Get the text data.
 | 
				
			||||||
      m_text = h.getSubElementText("text");
 | 
					      m_text = h.getSubElementText("text");
 | 
				
			||||||
 | 
					      if (m_text==null)
 | 
				
			||||||
 | 
						m_text = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } // end constructor
 | 
					    } // end constructor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*====================================================================
 | 
				
			||||||
 | 
					     * External operations
 | 
				
			||||||
 | 
					     *====================================================================
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String format(RequestOutput out)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      StringBuffer buf = new StringBuffer("<img src=\"");
 | 
				
			||||||
 | 
					      if (m_fixup)
 | 
				
			||||||
 | 
					      { // fix it up
 | 
				
			||||||
 | 
						HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
 | 
				
			||||||
 | 
						m_path = html.getImagePath(m_path);
 | 
				
			||||||
 | 
						m_fixup = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      buf.append(m_path).append("\" width=\"").append(m_width).append("\" height=\"").append(m_height);
 | 
				
			||||||
 | 
					      buf.append("\" border=\"0\" alt=\"").append(m_text).append("\" title=\"").append(m_text);
 | 
				
			||||||
 | 
					      buf.append("\" />");
 | 
				
			||||||
 | 
					      return buf.toString();
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					    } // end format
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end class IconDefinition
 | 
					  } // end class IconDefinition
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Static data members
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static Logger logger = Logger.getLogger(EmoticonManager.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*--------------------------------------------------------------------------------
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
   * Attributes
 | 
					   * Attributes
 | 
				
			||||||
   *--------------------------------------------------------------------------------
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
@ -106,4 +142,44 @@ public class EmoticonManager
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  } // end constructor
 | 
					  } // end constructor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * External operations
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public String rewriteText(RequestOutput out, String txt)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    RE r = new RE("<ei:\\s*(\\w+)(?:\\s*/)?\\s*>");
 | 
				
			||||||
 | 
					    if (!(r.match(txt)))
 | 
				
			||||||
 | 
					    { // null it out
 | 
				
			||||||
 | 
					      logger.debug("EmoticonManager.rewriteText matched nothing at all");
 | 
				
			||||||
 | 
					      return txt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    StringBuffer buf = new StringBuffer();
 | 
				
			||||||
 | 
					    String work = txt;
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					    { // figure out how many characters to skip
 | 
				
			||||||
 | 
					      int skip = r.getParenStart(0);
 | 
				
			||||||
 | 
					      if (skip>0)
 | 
				
			||||||
 | 
						buf.append(work.substring(0,skip));
 | 
				
			||||||
 | 
					      skip += r.getParenLength(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // get the icon name
 | 
				
			||||||
 | 
					      String icon_name = r.getParen(1);
 | 
				
			||||||
 | 
					      IconDefinition defn = (IconDefinition)(m_iconmap.get(icon_name));
 | 
				
			||||||
 | 
					      if (defn==null)
 | 
				
			||||||
 | 
						buf.append(StringUtil.encodeHTML(r.getParen(0)));
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						buf.append(defn.format(out));
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      work = work.substring(skip);  // skip over stuff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } while (r.match(work));  // end do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return buf.append(work).toString();  // all done!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end rewriteText
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // end class EmoticonManager
 | 
					} // end class EmoticonManager
 | 
				
			||||||
 | 
				
			|||||||
@ -425,6 +425,12 @@ public abstract class BaseServlet extends HttpServlet
 | 
				
			|||||||
      init(config,ctxt,engine,rootconf,root_file_path);
 | 
					      init(config,ctxt,engine,rootconf,root_file_path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } // end try
 | 
					    } // end try
 | 
				
			||||||
 | 
					    catch (RuntimeException e)
 | 
				
			||||||
 | 
					    { // report an error
 | 
				
			||||||
 | 
					      logger.fatal("RuntimeException in configuration: " + e.getMessage(),e);
 | 
				
			||||||
 | 
					      throw new ServletException("Venice configuration failed: " + e.getMessage(),e);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end catch
 | 
				
			||||||
    finally
 | 
					    finally
 | 
				
			||||||
    { // make sure and pop the diagnostic context before we go
 | 
					    { // make sure and pop the diagnostic context before we go
 | 
				
			||||||
      NDC.pop();
 | 
					      NDC.pop();
 | 
				
			||||||
 | 
				
			|||||||
@ -81,6 +81,8 @@ public class RequestImpl implements RequestInput
 | 
				
			|||||||
	return RequestImpl.this.queryService(klass);
 | 
						return RequestImpl.this.queryService(klass);
 | 
				
			||||||
      if (klass==BrowserInformation.class)
 | 
					      if (klass==BrowserInformation.class)
 | 
				
			||||||
	return RequestImpl.this.queryService(klass);
 | 
						return RequestImpl.this.queryService(klass);
 | 
				
			||||||
 | 
					      if (klass==EmoticonManager.class)
 | 
				
			||||||
 | 
						return RequestImpl.this.queryService(klass);
 | 
				
			||||||
      throw new NoSuchServiceException("RequestOutput",klass);
 | 
					      throw new NoSuchServiceException("RequestOutput",klass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } // end queryService
 | 
					    } // end queryService
 | 
				
			||||||
@ -899,8 +901,8 @@ public class RequestImpl implements RequestInput
 | 
				
			|||||||
   *
 | 
					   *
 | 
				
			||||||
   * @param klass The class of the object that should be returned as a service.
 | 
					   * @param klass The class of the object that should be returned as a service.
 | 
				
			||||||
   * @return A service object.  The service object is guaranteed to be of the class
 | 
					   * @return A service object.  The service object is guaranteed to be of the class
 | 
				
			||||||
   *         specified by <CODE>klass</CODE>; that is, if <CODE>queryService(klass)</CODE>
 | 
					   *         specified by <code>klass</code>; that is, if <code>queryService(klass)</code>
 | 
				
			||||||
   *         yields some object <CODE>x</CODE>, then the expression <CODE>klass.isInstance(x)</CODE>
 | 
					   *         yields some object <code>x</code>, then the expression <CODE>klass.isInstance(x)</code>
 | 
				
			||||||
   *         is true.
 | 
					   *         is true.
 | 
				
			||||||
   * @exception com.silverwrist.venice.except.NoSuchServiceException If no service is available in
 | 
					   * @exception com.silverwrist.venice.except.NoSuchServiceException If no service is available in
 | 
				
			||||||
   *            the specified class.
 | 
					   *            the specified class.
 | 
				
			||||||
@ -958,6 +960,9 @@ public class RequestImpl implements RequestInput
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    } // end if
 | 
					    } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (klass==EmoticonManager.class)
 | 
				
			||||||
 | 
					      return config.getEmoticonManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    throw new NoSuchServiceException("RequestInput",klass);
 | 
					    throw new NoSuchServiceException("RequestInput",klass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end queryService
 | 
					  } // end queryService
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user