/* * 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) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ package com.silverwrist.venice.ui.sidebox; import java.io.IOException; 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 CommunityBox implements SideBoxFactory { /*-------------------------------------------------------------------------------- * Internal class that implements the actual sidebox *-------------------------------------------------------------------------------- */ private class CommunityBoxImpl implements ContentDirect { /*==================================================================== * Attributes *==================================================================== */ private UserContext uc; private List comm_list; /*==================================================================== * Constructor *==================================================================== */ CommunityBoxImpl(UserContext uc) throws DataException { this.uc = uc; this.comm_list = uc.getMemberCommunities(); } // 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 (title_image!=null) { // return an image rendering ImageHandler ih = (uc.isLoggedIn() ? title_image : anon_title_image); return ih.getRendering(ro); } // end if else { // return a title string String rc = (uc.isLoggedIn() ? title : 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)); if (comm_list.size()>0) { // load up the rendering data and render the contents of the list String link_font = html.getFontTag(html.SIDEBOX_CONTENT_LINK,"sidebox"); out.write("\n"); Iterator it = comm_list.iterator(); while (it.hasNext()) { // write each community out in turn CommunityContext comm = (CommunityContext)(it.next()); out.write("\n\n\n\n"); } // end while out.write("
"); bullet.render(out); out.write("\n" + link_font + "" + StringUtil.encodeHTML(comm.getName()) + "\n"); if (comm.isAdmin()) { // write the host tag at the end out.write(" "); host.render(out); } // end if out.write("
\n"); } // end if else // write the "no communities" message out.write(html.getFontTag(html.SIDEBOX_CONTENT_FOREGROUND,"sidebox") + "" + StringUtil.encodeHTML(null_message) + "\n"); if (uc.isLoggedIn()) { // write the links at the end String hilite = html.getFontTag(html.SIDEBOX_CONTENT_LINK,"sidebox-footer"); out.write("

" + html.getFontTag(html.SIDEBOX_CONTENT_FOREGROUND,"sidebox-footer") + "[ " + hilite + StringUtil.encodeHTML(manage_link) + " "); if (uc.canCreateCommunity()) out.write("| " + hilite + StringUtil.encodeHTML(create_new_link) + " "); out.write("]"); } // end if } // end render } // end class CommunityBoxImpl /*-------------------------------------------------------------------------------- * Attributes *-------------------------------------------------------------------------------- */ private ImageHandler title_image; // title image for sidebox for logged-in users private ImageHandler anon_title_image; // title image for sidebox for not-logged-in users private String title; // title of sidebox for logged-in users private String anon_title; // title of sidebox for not-logged-in users private String null_message; // message if they're not a member of any communities private String manage_link; // "Manage" link text private String create_new_link; // "Create New" link text private ImageHandler bullet; // bullet image private ImageHandler host; // host image /*-------------------------------------------------------------------------------- * Constructor *-------------------------------------------------------------------------------- */ public CommunityBox() { // do nothing } // end constructor /*-------------------------------------------------------------------------------- * Implementations from interface SideBoxFactory *-------------------------------------------------------------------------------- */ public void setConfiguration(Element cfg) throws ConfigException { DOMElementHelper cfg_h = new DOMElementHelper(cfg); title_image = new ImageHandler(cfg_h.getSubElement("title-image")); if (title_image.isDefined()) { // we're using image titles... title = anon_title = null; anon_title_image = new ImageHandler(cfg_h.getSubElement("anon-title-image")); if (!(anon_title_image.isDefined())) anon_title_image = title_image; } // end if else { // standard textual title title_image = anon_title_image = null; title = cfg_h.getSubElementText("title"); if (title==null) throw new ConfigException("no specified for community list sidebox",cfg); title += ":"; anon_title = cfg_h.getSubElementText("anon-title"); if (anon_title==null) anon_title = title; else anon_title += ":"; } // end else null_message = cfg_h.getSubElementText("null-msg"); if (null_message==null) null_message = "You are not a member of any communities."; manage_link = cfg_h.getSubElementText("manage-link"); if (manage_link==null) manage_link = "Manage"; create_new_link = cfg_h.getSubElementText("create-new-link"); if (create_new_link==null) create_new_link = "Create New"; bullet = new ImageHandler(cfg_h.getSubElement("bullet"),"purple-ball.gif","*",14,14); host = new ImageHandler(cfg_h.getSubElement("host-image"),"tag_host.gif","Host!",40,20); } // end setConfiguration public Content create(RequestInput ri) throws DataException { return new CommunityBoxImpl(ri.getUser()); } // end create } // end class CommunityBox