/* * 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 . * * 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 Communities System. * * The Initial Developer of the Original Code is Eric J. Bowersox , * 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.ui.sidebox; import java.io.*; import java.util.*; import org.w3c.dom.*; import com.silverwrist.util.*; import com.silverwrist.venice.core.*; import com.silverwrist.venice.except.*; import com.silverwrist.venice.ui.*; import com.silverwrist.venice.ui.helpers.HTMLRendering; import com.silverwrist.venice.ui.helpers.ImageHandler; public class UserListBox implements SideBoxFactory { /*-------------------------------------------------------------------------------- * Internal class that implements the actual sidebox *-------------------------------------------------------------------------------- */ private class UserListBoxImpl implements ContentDirect { /*==================================================================== * Attributes *==================================================================== */ private boolean m_logged_in; private int m_total_count; private int m_max_count; private int m_anon_count = 0; private TreeSet m_users = new TreeSet(); /*==================================================================== * Constructor *==================================================================== */ UserListBoxImpl(boolean logged_in, VeniceUISessionList slist) { m_logged_in = logged_in; Iterator it = null; synchronized (slist) { // get user information m_total_count = slist.getSessionCount(); m_max_count = slist.getMaxSessionCount(); it = slist.listSessions(); } // end synchronized block while (it.hasNext()) { // build the user list and the anon user count UserContext uc = ((VeniceUISession)(it.next())).getUser(); if (uc.isLoggedIn()) m_users.add(uc.getUserName()); else m_anon_count++; } // end while } // end constructor /*==================================================================== * Implementations from interface Content *==================================================================== */ public boolean needFrame() { return false; } // end needFrame public int getMenuSelector() { return MENU_SELECTOR_NOCHANGE; } // end getMenuSelector public String getPageTitle(RequestOutput ro) { if (m_title_image!=null) { // return an image rendering ImageHandler ih = (m_logged_in ? m_title_image : m_anon_title_image); return ih.getRendering(ro); } // end if else { // return a title string String rc = (m_logged_in ? m_title : m_anon_title); return StringUtil.encodeHTML(rc); } // end else } // end getPageTitle public String getPageQID() { return null; } // end getPageQID /*==================================================================== * Implementations from interface ContentDirect *==================================================================== */ public void render(RequestOutput out) throws IOException { HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class)); String norm_font = html.getFontTag(html.SIDEBOX_CONTENT_FOREGROUND,"sidebox"); String hilite = html.getFontTag(html.SIDEBOX_CONTENT_LINK,"sidebox"); out.write("" + ""); if (m_anon_count>0) { // write the anonymous user count out.write(""); } // end if for (Iterator it=m_users.iterator(); it.hasNext(); ) { // get user name and write it out to the list String uname = (String)(it.next()); out.write(""); } // end for out.write("
" + norm_font + ""); HashMap m = new HashMap(); m.put("cur",String.valueOf(m_total_count)); m.put("max",String.valueOf(m_max_count)); out.write(StringUtil.replaceAllVariables(m_summary,m) + "
"); m_bullet.render(out); out.write("" + norm_font + m_anon_label + " (" + m_anon_count + ")
"); m_bullet.render(out); out.write("" + hilite + uname + "
\n"); } // end render } // end class UserListBoxImpl /*-------------------------------------------------------------------------------- * Attributes *-------------------------------------------------------------------------------- */ private ImageHandler m_title_image; // title image for sidebox for logged-in users private ImageHandler m_anon_title_image; // title image for sidebox for not-logged-in users private String m_title; // title of sidebox for logged-in users private String m_anon_title; // title of sidebox for not-logged-in users private ImageHandler m_bullet; // bullet image private String m_summary; // summary message private String m_anon_label; // anonymous label /*-------------------------------------------------------------------------------- * Constructor *-------------------------------------------------------------------------------- */ public UserListBox() { // do nothing } // end constructor /*-------------------------------------------------------------------------------- * Implementations from interface SideBoxFactory *-------------------------------------------------------------------------------- */ public void setConfiguration(Element cfg) throws ConfigException { DOMElementHelper cfg_h = new DOMElementHelper(cfg); m_title_image = new ImageHandler(cfg_h.getSubElement("title-image")); if (m_title_image.isDefined()) { // we're using image titles... m_title = m_anon_title = null; m_anon_title_image = new ImageHandler(cfg_h.getSubElement("anon-title-image")); if (!(m_anon_title_image.isDefined())) m_anon_title_image = m_title_image; } // end if else { // standard textual title m_title_image = m_anon_title_image = null; m_title = cfg_h.getSubElementText("title"); if (m_title==null) throw new ConfigException("no specified for conference list sidebox",cfg); m_title += ":"; m_anon_title = cfg_h.getSubElementText("anon-title"); if (m_anon_title==null) m_anon_title = m_title; else m_anon_title += ":"; } // end else m_bullet = new ImageHandler(cfg_h.getSubElement("bullet"),"purple-ball.gif","*",14,14); m_summary = cfg_h.getSubElementText("summary"); if (m_summary==null) m_summary = "${cur} total (max ${max})"; m_anon_label = cfg_h.getSubElementText("anon-label"); if (m_anon_label==null) m_anon_label = "Anonymous"; } // end setConfiguration public Content create(RequestInput ri) throws AccessError, DataException { VeniceUISessionList slist = (VeniceUISessionList)(ri.getAppAttribute(VeniceUISessionList.APP_ATTR_NAME)); if (slist==null) throw new DataException("session list object not found"); return new UserListBoxImpl(ri.getUser().isLoggedIn(),slist); } // end create } // end class UserListBox