Reworked the sidebox implementation to depend less on the database and more
on XML config files...the implementation should now be much more customizable and less klunky. Added a provision for implementing "generic" (JSP-driven) sideboxes. Implemented the sidebox configure button on the front page (finally!). Implemented a random password generator class which will be used in a future implementation of reminder-driven automatic forgotten-password changing. Fixed some minor funnies in SIG menu generation.
This commit is contained in:
parent
bf040973ba
commit
1c69955046
|
@ -89,6 +89,9 @@
|
||||||
<site-logo width="140" height="80"
|
<site-logo width="140" height="80"
|
||||||
href="http://venice.sourceforge.net">/venice/images/powered-by-venice.gif</site-logo>
|
href="http://venice.sourceforge.net">/venice/images/powered-by-venice.gif</site-logo>
|
||||||
|
|
||||||
|
<!-- The location of the sidebox configuration file, relative to the application root. -->
|
||||||
|
<sidebox-config>WEB-INF/sidebox-config.xml</sidebox-config>
|
||||||
|
|
||||||
</paths>
|
</paths>
|
||||||
|
|
||||||
<!-- Contains standard messages displayed by front end -->
|
<!-- Contains standard messages displayed by front end -->
|
||||||
|
|
57
etc/sidebox-config.xml
Normal file
57
etc/sidebox-config.xml
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
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 Communities System.
|
||||||
|
|
||||||
|
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s):
|
||||||
|
-->
|
||||||
|
<!-- Configuration file for sideboxes, referenced by both venice-config.xml and render-config.xml -->
|
||||||
|
<sidebox-config>
|
||||||
|
|
||||||
|
<sidebox id="1">
|
||||||
|
<title>Your SIGs</title>
|
||||||
|
<anon-title>Featured SIGs</anon-title>
|
||||||
|
<factory-class>com.silverwrist.venice.servlets.format.sideboxes.SIGBox</factory-class>
|
||||||
|
<null-msg>You are not a member of any SIGs.</null-msg>
|
||||||
|
<manage-link>Manage</manage-link>
|
||||||
|
<create-new-link>Create New</create-new-link>
|
||||||
|
<bullet width="14" height="14" fixup="true">purple-ball.gif</bullet>
|
||||||
|
<host-image width="40" height="20" alt="Host!" fixup="true">tag_host.gif</host-image>
|
||||||
|
</sidebox>
|
||||||
|
|
||||||
|
<sidebox id="2">
|
||||||
|
<title>Your Conference Hotlist</title>
|
||||||
|
<anon-title>Featured Conferences</anon-title>
|
||||||
|
<factory-class>com.silverwrist.venice.servlets.format.sideboxes.ConferenceBox</factory-class>
|
||||||
|
<null-msg>You have no conferences in your hotlist.</null-msg>
|
||||||
|
<manage-link>Manage</manage-link>
|
||||||
|
<bullet width="14" height="14" fixup="true">purple-ball.gif</bullet>
|
||||||
|
<new-image width="40" height="20" alt="New!" fixup="true">tag_new.gif</new-image>
|
||||||
|
</sidebox>
|
||||||
|
|
||||||
|
<!-- test sidebox only, do not use -->
|
||||||
|
<!--
|
||||||
|
<sidebox id="-1">
|
||||||
|
<title>Test Sidebox</title>
|
||||||
|
<factory-class>com.silverwrist.venice.servlets.format.sideboxes.JSPSideBoxFactory</factory-class>
|
||||||
|
<format-jsp>test/test_sidebox.jsp</format-jsp>
|
||||||
|
<strings>
|
||||||
|
<test1>This is a test.</test1>
|
||||||
|
<test2>This is only a test.</test2>
|
||||||
|
<test3>If this had been an actual emergency, we would all be dead by now.</test3>
|
||||||
|
</strings>
|
||||||
|
</sidebox>
|
||||||
|
-->
|
||||||
|
|
||||||
|
</sidebox-config>
|
|
@ -8,7 +8,7 @@
|
||||||
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@silcom.com>,
|
||||||
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
@ -23,6 +23,9 @@
|
||||||
<engine>
|
<engine>
|
||||||
<!-- The fully-qualified Java classname of the Venice engine class. -->
|
<!-- The fully-qualified Java classname of the Venice engine class. -->
|
||||||
<classname>com.silverwrist.venice.core.impl.VeniceEngineImpl</classname>
|
<classname>com.silverwrist.venice.core.impl.VeniceEngineImpl</classname>
|
||||||
|
|
||||||
|
<!-- The pathname of the sidebox config file, relative to the Web application root directory. -->
|
||||||
|
<sidebox-config>WEB-INF/sidebox-config.xml</sidebox-config>
|
||||||
</engine>
|
</engine>
|
||||||
|
|
||||||
<!-- This section is used to configure the database pool system. -->
|
<!-- This section is used to configure the database pool system. -->
|
||||||
|
@ -94,7 +97,7 @@ Venice - community services, conferencing and more. <http://venice.sourceforge.
|
||||||
</signature>
|
</signature>
|
||||||
|
|
||||||
<!-- This is the message sent out with the email confirmation number. -->
|
<!-- This is the message sent out with the email confirmation number. -->
|
||||||
<!-- Parameters: $USERNAME - account user name, $CONFNUM - confirmation number -->
|
<!-- Parameters: username - account user name, confnum - confirmation number -->
|
||||||
<email-confirm>
|
<email-confirm>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
Welcome to the Venice conferencing system! In order to fully activate your
|
Welcome to the Venice conferencing system! In order to fully activate your
|
||||||
|
@ -102,7 +105,7 @@ account after you register or change your E-mail address, you must provide a
|
||||||
confirmation number to the system. Please enter this number into the "Confirm
|
confirmation number to the system. Please enter this number into the "Confirm
|
||||||
E-mail Address" dialog on the system when indicated.
|
E-mail Address" dialog on the system when indicated.
|
||||||
|
|
||||||
Your confirmation number for your account "$USERNAME" is $CONFNUM.
|
Your confirmation number for your account "${username}" is ${confnum}.
|
||||||
|
|
||||||
Thank you, and enjoy the Venice conferencing system!
|
Thank you, and enjoy the Venice conferencing system!
|
||||||
|
|
||||||
|
@ -110,13 +113,16 @@ Thank you, and enjoy the Venice conferencing system!
|
||||||
]]>
|
]]>
|
||||||
</email-confirm>
|
</email-confirm>
|
||||||
|
|
||||||
|
<!-- The subject of the message with the email confirmation number. -->
|
||||||
|
<email-confirm-subject>Venice Email Confirmation</email-confirm-subject>
|
||||||
|
|
||||||
<!-- This is the "password reminder" message. -->
|
<!-- This is the "password reminder" message. -->
|
||||||
<!-- Parameters: $USERNAME - account user name, $REMINDER - password reminder -->
|
<!-- Parameters: username - account user name, reminder - password reminder -->
|
||||||
<reminder>
|
<reminder>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
Here is the password reminder for your account "$USERNAME" as you requested:
|
Here is the password reminder for your account "${username}" as you requested:
|
||||||
|
|
||||||
$REMINDER
|
${reminder}
|
||||||
|
|
||||||
If this reminder is not sufficient for you to remember what your password is,
|
If this reminder is not sufficient for you to remember what your password is,
|
||||||
please contact the server administrator for further assistance.
|
please contact the server administrator for further assistance.
|
||||||
|
@ -125,50 +131,53 @@ please contact the server administrator for further assistance.
|
||||||
]]>
|
]]>
|
||||||
</reminder>
|
</reminder>
|
||||||
|
|
||||||
|
<reminder-subject>Venice Password Reminder Message</reminder-subject>
|
||||||
|
|
||||||
<!-- Invitation message to a public SIG -->
|
<!-- Invitation message to a public SIG -->
|
||||||
<!-- Parameters: $SIGNAME = name of SIG, $SIGALIAS = alias of SIG, $PERSONAL = personal message,
|
<!-- Parameters: signame = name of SIG, sigalias = alias of SIG, personal = personal message,
|
||||||
$FULLNAME = name of inviter, $USERNAME = user name of inviter -->
|
fullname = name of inviter, username = user name of inviter -->
|
||||||
<invite-public>
|
<invite-public>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
Hi! I would like to invite you to join the "$SIGNAME" Special Interest Group (SIG) on the Venice
|
Hi! I would like to invite you to join the "${signame}" Special Interest Group (SIG) on the Venice
|
||||||
conferencing system. To do so, you must register as a user, which is absolutely free! Just point
|
conferencing system. To do so, you must register as a user, which is absolutely free! Just point
|
||||||
your Web browser at <http://delenn:8080/venice/sig/$SIGALIAS> and click the "Create Account" link
|
your Web browser at <http://delenn:8080/venice/sig/${sigalias}> and click the "Create Account" link
|
||||||
at the top of the page, or click the "Log In" link if you already have a Venice account. Once you have
|
at the top of the page, or click the "Log In" link if you already have a Venice account. Once you have
|
||||||
completed the process, click the "Join Now" button. You will then be able to take part in the conferences
|
completed the process, click the "Join Now" button. You will then be able to take part in the conferences
|
||||||
that are going on in the SIG.
|
that are going on in the SIG.
|
||||||
|
|
||||||
$PERSONAL
|
${personal}
|
||||||
|
|
||||||
Hope to see you in "$SIGNAME" soon!
|
Hope to see you in "${signame}" soon!
|
||||||
|
|
||||||
-- $FULLNAME (Venice user ID: $USERNAME)
|
-- ${fullname} (Venice user ID: ${username})
|
||||||
]]>
|
]]>
|
||||||
</invite-public>
|
</invite-public>
|
||||||
|
|
||||||
<!-- Invitation message to a private SIG -->
|
<!-- Invitation message to a private SIG -->
|
||||||
<!-- Parameters: $SIGNAME = name of SIG, $SIGALIAS = alias of SIG, $JOINKEY = join key for SIG,
|
<!-- Parameters: signame = name of SIG, sigalias = alias of SIG, joinkey = join key for SIG,
|
||||||
$PERSONAL = personal message, $FULLNAME = name of inviter,
|
personal = personal message, fullname = name of inviter,
|
||||||
$USERNAME = user name of inviter -->
|
username = user name of inviter -->
|
||||||
<invite-private>
|
<invite-private>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
Hi! I would like to invite you to join the "$SIGNAME" Special Interest Group (SIG) on the Venice
|
Hi! I would like to invite you to join the "${signame}" Special Interest Group (SIG) on the Venice
|
||||||
conferencing system. To do so, you must register as a user, which is absolutely free! Just point
|
conferencing system. To do so, you must register as a user, which is absolutely free! Just point
|
||||||
your Web browser at <http://delenn:8080/venice/sig/$SIGALIAS> and click the "Create Account" link
|
your Web browser at <http://delenn:8080/venice/sig/${sigalias}> and click the "Create Account" link
|
||||||
at the top of the page, or click the "Log In" link if you already have a Venice account. Once you have
|
at the top of the page, or click the "Log In" link if you already have a Venice account. Once you have
|
||||||
completed the process, click the "Join Now" button. You will be prompted for the "password" for this
|
completed the process, click the "Join Now" button. You will be prompted for the "password" for this
|
||||||
SIG, which is "$JOINKEY". You will then be able to take part in the conferences that are going on in the SIG.
|
SIG, which is "${joinkey}". You will then be able to take part in the conferences that are going on in the
|
||||||
|
SIG.
|
||||||
|
|
||||||
$PERSONAL
|
${personal}
|
||||||
|
|
||||||
Hope to see you in "$SIGNAME" soon!
|
Hope to see you in "${signame}" soon!
|
||||||
|
|
||||||
-- $FULLNAME (Venice user ID: $USERNAME)
|
-- ${fullname} (Venice user ID: ${username})
|
||||||
]]>
|
]]>
|
||||||
</invite-private>
|
</invite-private>
|
||||||
|
|
||||||
<!-- Subject line for invitation messages -->
|
<!-- Subject line for invitation messages -->
|
||||||
<!-- Parameters: $SIGNAME = name of SIG -->
|
<!-- Parameters: signame = name of SIG -->
|
||||||
<subj-invite>Invitation to "$SIGNAME" SIG</subj-invite>
|
<subj-invite>Invitation to "${signame}" SIG</subj-invite>
|
||||||
|
|
||||||
</messages>
|
</messages>
|
||||||
|
|
||||||
|
|
|
@ -103,14 +103,6 @@ CREATE TABLE sideboxes (
|
||||||
INDEX inorder (uid, sequence)
|
INDEX inorder (uid, sequence)
|
||||||
);
|
);
|
||||||
|
|
||||||
# A reference to the available sideboxes.
|
|
||||||
CREATE TABLE refsidebox (
|
|
||||||
boxid INT NOT NULL PRIMARY KEY,
|
|
||||||
classname VARCHAR(255),
|
|
||||||
description VARCHAR(255),
|
|
||||||
param_descr VARCHAR(255)
|
|
||||||
);
|
|
||||||
|
|
||||||
# The contact information table. This is used for both users and SIGs.
|
# The contact information table. This is used for both users and SIGs.
|
||||||
CREATE TABLE contacts (
|
CREATE TABLE contacts (
|
||||||
contactid INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
contactid INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
@ -489,12 +481,6 @@ INSERT INTO refaudit (type, descr) VALUES
|
||||||
(315, 'Delete Conference'),
|
(315, 'Delete Conference'),
|
||||||
(9999999, 'DUMMY');
|
(9999999, 'DUMMY');
|
||||||
|
|
||||||
# Which side boxes are defined. The class names MUST match implementations in the
|
|
||||||
# com.silverwrist.venice.servlets.format package!!!
|
|
||||||
INSERT INTO refsidebox (boxid, classname, description, param_descr) VALUES
|
|
||||||
(1, 'SideBoxSIGs', 'Your SIGs', NULL),
|
|
||||||
(2, 'SideBoxConferences', 'Your Conference Hotlist', NULL);
|
|
||||||
|
|
||||||
# The ISO 3166 two-letter country codes. Source is
|
# The ISO 3166 two-letter country codes. Source is
|
||||||
# <http://www.din.de/gremien/nas/nabd/iso3166ma/>.
|
# <http://www.din.de/gremien/nas/nabd/iso3166ma/>.
|
||||||
INSERT INTO refcountry (code, name) VALUES
|
INSERT INTO refcountry (code, name) VALUES
|
||||||
|
|
|
@ -124,6 +124,12 @@ public class DOMElementHelper
|
||||||
|
|
||||||
} // end hasChildElement
|
} // end hasChildElement
|
||||||
|
|
||||||
|
public boolean hasAttribute(String name)
|
||||||
|
{
|
||||||
|
return !(StringUtil.isStringEmpty(elt.getAttribute(name)));
|
||||||
|
|
||||||
|
} // end hasAttribute
|
||||||
|
|
||||||
public Integer getAttributeInt(String name)
|
public Integer getAttributeInt(String name)
|
||||||
{
|
{
|
||||||
String tmp = elt.getAttribute(name);
|
String tmp = elt.getAttribute(name);
|
||||||
|
|
|
@ -23,12 +23,8 @@ public interface SideBoxDescriptor
|
||||||
|
|
||||||
public abstract int getSequence();
|
public abstract int getSequence();
|
||||||
|
|
||||||
public abstract String getParameter();
|
public abstract String getTitle(boolean anonymous);
|
||||||
|
|
||||||
public abstract String getDescription();
|
public abstract String getFactoryClassName();
|
||||||
|
|
||||||
public abstract String getParamDescription();
|
|
||||||
|
|
||||||
public abstract String getClassname();
|
|
||||||
|
|
||||||
} // end interface SideBoxDescriptor
|
} // end interface SideBoxDescriptor
|
||||||
|
|
|
@ -48,7 +48,48 @@ public class Startup
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private static Document loadConfiguration(String configname) throws ConfigException
|
private static String getEngineClassName(Document config) throws ConfigException
|
||||||
|
{
|
||||||
|
// Make sure the configuration is valid...
|
||||||
|
Element root = config.getDocumentElement();
|
||||||
|
if (!(root.getTagName().equals("venice-config")))
|
||||||
|
{ // not the correct root tag name
|
||||||
|
logger.fatal("config document is not a <venice-config/> document (root tag: <"
|
||||||
|
+ root.getTagName() + "/>)");
|
||||||
|
throw new ConfigException("document is not a <venice-config/> document",root);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
// Get the <engine/> section.
|
||||||
|
DOMElementHelper root_h = new DOMElementHelper(root);
|
||||||
|
Element engine_sect = root_h.getSubElement("engine");
|
||||||
|
if (engine_sect==null)
|
||||||
|
{ // no <engine/> section - bail out now!
|
||||||
|
logger.fatal("config document has no <engine/> section");
|
||||||
|
throw new ConfigException("no <engine/> section found in config file",root);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
// Get the classname out of that section.
|
||||||
|
DOMElementHelper engine_sect_h = new DOMElementHelper(engine_sect);
|
||||||
|
String rc = engine_sect_h.getSubElementText("classname");
|
||||||
|
if (rc==null)
|
||||||
|
{ // no <classname/> specified - bail out now!
|
||||||
|
logger.fatal("config document <engine/> section has no <classname/>");
|
||||||
|
throw new ConfigException("no <classname/> found in <engine/> section",engine_sect);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
} // end getEngineClassName
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External static methods (global functions)
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static Document loadConfiguration(String configname) throws ConfigException
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{ // create a simple DOM parser by using the Java XML parsing API
|
{ // create a simple DOM parser by using the Java XML parsing API
|
||||||
|
@ -105,48 +146,8 @@ public class Startup
|
||||||
|
|
||||||
} // end loadConfiguration
|
} // end loadConfiguration
|
||||||
|
|
||||||
private static String getEngineClassName(Document config) throws ConfigException
|
public static VeniceEngine createEngine(String configname, String app_root)
|
||||||
{
|
throws ConfigException, DataException
|
||||||
// Make sure the configuration is valid...
|
|
||||||
Element root = config.getDocumentElement();
|
|
||||||
if (!(root.getTagName().equals("venice-config")))
|
|
||||||
{ // not the correct root tag name
|
|
||||||
logger.fatal("config document is not a <venice-config/> document (root tag: <"
|
|
||||||
+ root.getTagName() + "/>)");
|
|
||||||
throw new ConfigException("document is not a <venice-config/> document",root);
|
|
||||||
|
|
||||||
} // end if
|
|
||||||
|
|
||||||
// Get the <engine/> section.
|
|
||||||
DOMElementHelper root_h = new DOMElementHelper(root);
|
|
||||||
Element engine_sect = root_h.getSubElement("engine");
|
|
||||||
if (engine_sect==null)
|
|
||||||
{ // no <engine/> section - bail out now!
|
|
||||||
logger.fatal("config document has no <engine/> section");
|
|
||||||
throw new ConfigException("no <engine/> section found in config file",root);
|
|
||||||
|
|
||||||
} // end if
|
|
||||||
|
|
||||||
// Get the classname out of that section.
|
|
||||||
DOMElementHelper engine_sect_h = new DOMElementHelper(engine_sect);
|
|
||||||
String rc = engine_sect_h.getSubElementText("classname");
|
|
||||||
if (rc==null)
|
|
||||||
{ // no <classname/> specified - bail out now!
|
|
||||||
logger.fatal("config document <engine/> section has no <classname/>");
|
|
||||||
throw new ConfigException("no <classname/> found in <engine/> section",engine_sect);
|
|
||||||
|
|
||||||
} // end if
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
} // end getEngineClassName
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
|
||||||
* External static methods (global functions)
|
|
||||||
*--------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
public static VeniceEngine createEngine(String configname) throws ConfigException, DataException
|
|
||||||
{
|
{
|
||||||
// load the configuration data
|
// load the configuration data
|
||||||
Document config = loadConfiguration(configname);
|
Document config = loadConfiguration(configname);
|
||||||
|
@ -168,7 +169,7 @@ public class Startup
|
||||||
logger.debug("VeniceEngine created successfully");
|
logger.debug("VeniceEngine created successfully");
|
||||||
|
|
||||||
// initialize the engine
|
// initialize the engine
|
||||||
engine.initialize(config);
|
engine.initialize(config,app_root);
|
||||||
|
|
||||||
// and return it
|
// and return it
|
||||||
return engine;
|
return engine;
|
||||||
|
|
|
@ -89,6 +89,8 @@ public interface UserContext extends SearchMode
|
||||||
|
|
||||||
public abstract List getSideBoxList() throws DataException;
|
public abstract List getSideBoxList() throws DataException;
|
||||||
|
|
||||||
|
public abstract void addSideBox(int id) throws DataException;
|
||||||
|
|
||||||
public abstract List getConferenceHotlist() throws DataException;
|
public abstract List getConferenceHotlist() throws DataException;
|
||||||
|
|
||||||
public abstract boolean hasAdminAccess();
|
public abstract boolean hasAdminAccess();
|
||||||
|
|
26
src/com/silverwrist/venice/core/UserSideBoxDescriptor.java
Normal file
26
src/com/silverwrist/venice/core/UserSideBoxDescriptor.java
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* 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 Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.core;
|
||||||
|
|
||||||
|
public interface UserSideBoxDescriptor extends SideBoxDescriptor
|
||||||
|
{
|
||||||
|
public abstract void setSequence(int seq) throws DataException;
|
||||||
|
|
||||||
|
public abstract void remove() throws DataException;
|
||||||
|
|
||||||
|
} // end interface UserSideBoxDescriptor
|
|
@ -25,7 +25,7 @@ import com.silverwrist.venice.htmlcheck.HTMLChecker;
|
||||||
|
|
||||||
public interface VeniceEngine extends SearchMode
|
public interface VeniceEngine extends SearchMode
|
||||||
{
|
{
|
||||||
public abstract void initialize(Document config) throws ConfigException, DataException;
|
public abstract void initialize(Document config, String app_root) throws ConfigException, DataException;
|
||||||
|
|
||||||
public abstract int getNumFeatures();
|
public abstract int getNumFeatures();
|
||||||
|
|
||||||
|
|
|
@ -1237,24 +1237,32 @@ class SIGUserContextImpl implements SIGContext, SIGBackend
|
||||||
SIGData my_sig = getSIGData();
|
SIGData my_sig = getSIGData();
|
||||||
my_sig.testMembership(level,is_member);
|
my_sig.testMembership(level,is_member);
|
||||||
|
|
||||||
// Prepare the message text to be sent to the user.
|
|
||||||
boolean is_pub = my_sig.isPublicSIG();
|
|
||||||
String msg = engine.getStockMessage(is_pub ? "invite-public" : "invite-private");
|
|
||||||
String signame = my_sig.getName();
|
|
||||||
msg = StringUtil.replaceAllInstances(msg,"$SIGNAME",signame);
|
|
||||||
msg = StringUtil.replaceAllInstances(msg,"$SIGALIAS",my_sig.getAlias());
|
|
||||||
if (!is_pub)
|
|
||||||
msg = StringUtil.replaceAllInstances(msg,"$JOINKEY",my_sig.getJoinKey());
|
|
||||||
msg = StringUtil.replaceAllInstances(msg,"$PERSONAL",personal_message);
|
|
||||||
msg = StringUtil.replaceAllInstances(msg,"$FULLNAME",user.realFullName());
|
|
||||||
String uname = user.realUserName();
|
|
||||||
msg = StringUtil.replaceAllInstances(msg,"$USERNAME",uname);
|
|
||||||
StringBuffer msg_buf = new StringBuffer(msg);
|
|
||||||
msg_buf.append("\n\n--\n").append(engine.getStockMessage("signature"));
|
|
||||||
|
|
||||||
// Prepare the subject line to be sent to the user.
|
// Prepare the subject line to be sent to the user.
|
||||||
String subject = engine.getStockMessage("subj-invite");
|
String subject = engine.getStockMessage("subj-invite");
|
||||||
subject = StringUtil.replaceAllInstances(subject,"$SIGNAME",signame);
|
HashMap vars = new HashMap(5);
|
||||||
|
vars.put("signame",my_sig.getName());
|
||||||
|
subject = StringUtil.replaceAllVariables(subject,vars);
|
||||||
|
|
||||||
|
// Prepare the message text to be sent to the user.
|
||||||
|
String msg;
|
||||||
|
if (my_sig.isPublicSIG())
|
||||||
|
msg = engine.getStockMessage("invite-public");
|
||||||
|
else
|
||||||
|
{ // get the private invite message and set the join key variable
|
||||||
|
msg = engine.getStockMessage("invite-private");
|
||||||
|
vars.put("joinkey",my_sig.getJoinKey());
|
||||||
|
|
||||||
|
} // end else
|
||||||
|
|
||||||
|
// Set the remaining variables and replace them.
|
||||||
|
vars.put("sigalias",my_sig.getAlias());
|
||||||
|
vars.put("personal",personal_message);
|
||||||
|
vars.put("fullname",user.realFullName());
|
||||||
|
String uname = user.realUserName();
|
||||||
|
vars.put("username",uname);
|
||||||
|
msg = StringUtil.replaceAllVariables(msg,vars);
|
||||||
|
StringBuffer msg_buf = new StringBuffer(msg);
|
||||||
|
msg_buf.append("\n\n--\n").append(engine.getStockMessage("signature"));
|
||||||
|
|
||||||
// Get a SimpleEmailer object, set it up, and send it.
|
// Get a SimpleEmailer object, set it up, and send it.
|
||||||
SimpleEmailer em = engine.createEmailer();
|
SimpleEmailer em = engine.createEmailer();
|
||||||
|
|
|
@ -17,29 +17,41 @@
|
||||||
*/
|
*/
|
||||||
package com.silverwrist.venice.core.impl;
|
package com.silverwrist.venice.core.impl;
|
||||||
|
|
||||||
import com.silverwrist.venice.core.SideBoxDescriptor;
|
import java.sql.*;
|
||||||
|
import org.apache.log4j.*;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
import com.silverwrist.venice.db.*;
|
||||||
|
|
||||||
class SideBoxDescriptorImpl implements SideBoxDescriptor
|
class SideBoxDescriptorImpl implements UserSideBoxDescriptor
|
||||||
{
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static Category logger = Category.getInstance(SideBoxDescriptorImpl.class);
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Attributes
|
* Attributes
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private SideBoxDescriptor parent;
|
private int uid; // the user ID
|
||||||
private int sequence;
|
private SideBoxDescriptor parent; // the master side box descriptor
|
||||||
private String param;
|
private DataPool datapool; // the data pool used by this object
|
||||||
|
private int sequence; // the sequence number
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Constructor
|
* Constructor
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SideBoxDescriptorImpl(SideBoxDescriptor parent, int sequence, String param)
|
SideBoxDescriptorImpl(int uid, SideBoxDescriptor parent, DataPool datapool, int sequence)
|
||||||
{
|
{
|
||||||
|
this.uid = uid;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
|
this.datapool = datapool;
|
||||||
this.sequence = sequence;
|
this.sequence = sequence;
|
||||||
this.param = param;
|
|
||||||
|
|
||||||
} // end constructor
|
} // end constructor
|
||||||
|
|
||||||
|
@ -60,28 +72,85 @@ class SideBoxDescriptorImpl implements SideBoxDescriptor
|
||||||
|
|
||||||
} // end getSequence
|
} // end getSequence
|
||||||
|
|
||||||
public String getParameter()
|
public String getTitle(boolean anonymous)
|
||||||
{
|
{
|
||||||
return param;
|
return parent.getTitle(anonymous);
|
||||||
|
|
||||||
} // end getParameter
|
} // end getTitle
|
||||||
|
|
||||||
public String getDescription()
|
public String getFactoryClassName()
|
||||||
{
|
{
|
||||||
return parent.getDescription();
|
return parent.getFactoryClassName();
|
||||||
|
|
||||||
} // end getDescription
|
} // end getFactoryClassName
|
||||||
|
|
||||||
public String getParamDescription()
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface UserSideBoxDescriptor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void setSequence(int seq) throws DataException
|
||||||
{
|
{
|
||||||
return parent.getParamDescription();
|
Connection conn = null;
|
||||||
|
|
||||||
} // end getParamDescription
|
try
|
||||||
|
{ // retrieve a connection from the datapool
|
||||||
|
conn = datapool.getConnection();
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
|
||||||
public String getClassname()
|
// create the UPDATE statement and just execute it blind (if this sidebox is not in the list,
|
||||||
|
// the UPDATE is a no-op).
|
||||||
|
StringBuffer sql = new StringBuffer("UPDATE sideboxes SET sequence = ");
|
||||||
|
sql.append(seq).append(" WHERE uid = ").append(uid).append(" AND boxid = ").append(parent.getID());
|
||||||
|
sql.append(';');
|
||||||
|
stmt.executeUpdate(sql.toString());
|
||||||
|
this.sequence = seq;
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (SQLException e)
|
||||||
|
{ // this becomes a DataException
|
||||||
|
logger.error("DB error setting sidebox sequence: " + e.getMessage(),e);
|
||||||
|
throw new DataException("error setting sidebox sequence: " + e.getMessage(),e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
finally
|
||||||
|
{ // make sure we release the connection before we go
|
||||||
|
if (conn!=null)
|
||||||
|
datapool.releaseConnection(conn);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
} // end setSequence
|
||||||
|
|
||||||
|
public void remove() throws DataException
|
||||||
{
|
{
|
||||||
return parent.getClassname();
|
Connection conn = null;
|
||||||
|
|
||||||
} // end getClassname
|
try
|
||||||
|
{ // retrieve a connection from the datapool
|
||||||
|
conn = datapool.getConnection();
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
|
||||||
|
// create the DELETE statement and just execute it blind (if this conference is not in the hotlist,
|
||||||
|
// the DELETE is a no-op).
|
||||||
|
StringBuffer sql = new StringBuffer("DELETE FROM sideboxes WHERE uid = ");
|
||||||
|
sql.append(uid).append(" AND boxid = ").append(parent.getID()).append(';');
|
||||||
|
stmt.executeUpdate(sql.toString());
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (SQLException e)
|
||||||
|
{ // this becomes a DataException
|
||||||
|
logger.error("DB error removing from sidebox list: " + e.getMessage(),e);
|
||||||
|
throw new DataException("error removing from sidebox list: " + e.getMessage(),e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
finally
|
||||||
|
{ // make sure we release the connection before we go
|
||||||
|
if (conn!=null)
|
||||||
|
datapool.releaseConnection(conn);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
} // end remove
|
||||||
|
|
||||||
} // end class SideBoxDescriptorImpl
|
} // end class SideBoxDescriptorImpl
|
||||||
|
|
|
@ -202,13 +202,20 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
|
|
||||||
message = StringUtil.replaceAllInstances(message,"$USERNAME",username);
|
// Replace the variables in the text.
|
||||||
message = StringUtil.replaceAllInstances(message,"$CONFNUM",String.valueOf(confirm_num));
|
HashMap vars = new HashMap(2);
|
||||||
|
vars.put("username",username);
|
||||||
|
vars.put("confnum",String.valueOf(confirm_num));
|
||||||
|
message = StringUtil.replaceAllVariables(message,vars);
|
||||||
|
|
||||||
|
String subject = engine.getStockMessage("email-confirm-subject");
|
||||||
|
if (subject==null)
|
||||||
|
subject = "Venice Email Confirmation";
|
||||||
|
|
||||||
// Create the emailer and send the message.
|
// Create the emailer and send the message.
|
||||||
SimpleEmailer emailer = engine.createEmailer();
|
SimpleEmailer emailer = engine.createEmailer();
|
||||||
emailer.setTo(my_email);
|
emailer.setTo(my_email);
|
||||||
emailer.setSubject("Venice Email Confirmation");
|
emailer.setSubject(subject);
|
||||||
emailer.setText(message);
|
emailer.setText(message);
|
||||||
emailer.send();
|
emailer.send();
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
|
@ -974,12 +981,12 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
Statement stmt = conn.createStatement();
|
Statement stmt = conn.createStatement();
|
||||||
|
|
||||||
// retrieve the necessary rows from the sideboxes table
|
// retrieve the necessary rows from the sideboxes table
|
||||||
ResultSet rs = stmt.executeQuery("SELECT boxid, sequence, param FROM sideboxes WHERE uid = " + uid
|
ResultSet rs = stmt.executeQuery("SELECT boxid, sequence FROM sideboxes WHERE uid = " + uid
|
||||||
+ " ORDER BY sequence;");
|
+ " ORDER BY sequence;");
|
||||||
while (rs.next())
|
while (rs.next())
|
||||||
{ // create the implementation objects and return them all
|
{ // create the implementation objects and return them all
|
||||||
SideBoxDescriptor sbd = new SideBoxDescriptorImpl(engine.getMasterSideBoxDescriptor(rs.getInt(1)),
|
SideBoxDescriptor sbd = new SideBoxDescriptorImpl(uid,engine.getMasterSideBoxDescriptor(rs.getInt(1)),
|
||||||
rs.getInt(2),rs.getString(3));
|
datapool,rs.getInt(2));
|
||||||
rc.add(sbd);
|
rc.add(sbd);
|
||||||
|
|
||||||
} // end while
|
} // end while
|
||||||
|
@ -1002,6 +1009,65 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
|
|
||||||
} // end getSideBoxList
|
} // end getSideBoxList
|
||||||
|
|
||||||
|
public void addSideBox(int id) throws DataException
|
||||||
|
{
|
||||||
|
if (engine.getMasterSideBoxDescriptor(id)==null)
|
||||||
|
throw new DataException("invalid sidebox ID: " + id);
|
||||||
|
|
||||||
|
Connection conn = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // retrieve a connection from the datapool
|
||||||
|
conn = datapool.getConnection();
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
|
||||||
|
stmt.executeUpdate("LOCK TABLES sideboxes WRITE;");
|
||||||
|
try
|
||||||
|
{ // do a quickie query to see if we're already in the sidebox list
|
||||||
|
StringBuffer sql = new StringBuffer("SELECT sequence FROM sideboxes WHERE uid = ");
|
||||||
|
sql.append(uid).append(" AND boxid = ").append(id).append(';');
|
||||||
|
ResultSet rs = stmt.executeQuery(sql.toString());
|
||||||
|
if (rs.next())
|
||||||
|
return; // already in sidebox list - this is a no-op
|
||||||
|
|
||||||
|
// find a sequence number for the new entry
|
||||||
|
sql.setLength(0);
|
||||||
|
sql.append("SELECT MAX(sequence) FROM sideboxes WHERE uid = ").append(uid).append(';');
|
||||||
|
rs = stmt.executeQuery(sql.toString());
|
||||||
|
if (!(rs.next()))
|
||||||
|
throw new InternalStateError("bogus query result on addSideBox");
|
||||||
|
int new_sequence = rs.getInt(1) + 100;
|
||||||
|
|
||||||
|
// add the new record
|
||||||
|
sql.setLength(0);
|
||||||
|
sql.append("INSERT INTO sideboxes (uid, sequence, boxid) VALUES (").append(uid).append(", ");
|
||||||
|
sql.append(new_sequence).append(", ").append(id).append(");");
|
||||||
|
stmt.executeUpdate(sql.toString());
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
finally
|
||||||
|
{ // make sure the table is unlocked before we go
|
||||||
|
Statement ulk_stmt = conn.createStatement();
|
||||||
|
ulk_stmt.executeUpdate("UNLOCK TABLES;");
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (SQLException e)
|
||||||
|
{ // this becomes a DataException
|
||||||
|
logger.error("DB error adding to sidebox list: " + e.getMessage(),e);
|
||||||
|
throw new DataException("error adding to sidebox list: " + e.getMessage(),e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
finally
|
||||||
|
{ // make sure we release the connection before we go
|
||||||
|
if (conn!=null)
|
||||||
|
datapool.releaseConnection(conn);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
} // end addSideBox
|
||||||
|
|
||||||
public List getConferenceHotlist() throws DataException
|
public List getConferenceHotlist() throws DataException
|
||||||
{
|
{
|
||||||
return ConferenceUserContextImpl.getUserHotlist(engine,this,datapool);
|
return ConferenceUserContextImpl.getUserHotlist(engine,this,datapool);
|
||||||
|
|
|
@ -200,16 +200,58 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
class MasterSideBox implements SideBoxDescriptor
|
class MasterSideBox implements SideBoxDescriptor
|
||||||
{
|
{
|
||||||
private int id;
|
private int id;
|
||||||
private String description;
|
private String title;
|
||||||
private String param_descr;
|
private String anon_title;
|
||||||
private String classname;
|
private String classname;
|
||||||
|
|
||||||
MasterSideBox(ResultSet rs) throws SQLException
|
MasterSideBox(Element section) throws ConfigException
|
||||||
{
|
{
|
||||||
this.id = rs.getInt("boxid");
|
try
|
||||||
this.description = rs.getString("description");
|
{ // get the ID value for this sidebox
|
||||||
this.param_descr = rs.getString("param_descr");
|
String tmp = section.getAttribute("id");
|
||||||
this.classname = rs.getString("classname");
|
if (StringUtil.isStringEmpty(tmp))
|
||||||
|
{ // there's no
|
||||||
|
logger.fatal("<sidebox/> specified with no ID!");
|
||||||
|
throw new ConfigException("no ID specified in <sidebox/>",section);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
id = Integer.parseInt(tmp);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{ // sidebox ID not numeric
|
||||||
|
logger.fatal("<sidebox/> ID not numeric!");
|
||||||
|
throw new ConfigException("non-numeric ID specified in <sidebox/>",section);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
DOMElementHelper section_h = new DOMElementHelper(section);
|
||||||
|
title = section_h.getSubElementText("title");
|
||||||
|
anon_title = section_h.getSubElementText("anon-title");
|
||||||
|
classname = section_h.getSubElementText("factory-class");
|
||||||
|
|
||||||
|
if (StringUtil.isStringEmpty(title) || StringUtil.isStringEmpty(classname))
|
||||||
|
{ // the configuration is not complete
|
||||||
|
logger.fatal("<sidebox/> config incomplete (missing <title/> or <factory-class/>)!");
|
||||||
|
throw new ConfigException("configuration of <sidebox/> is not complete!",section);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // try to resolve the classname here so we can be sure it's cool
|
||||||
|
Class.forName(classname);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (ClassNotFoundException e)
|
||||||
|
{ // the class can't be resolved - we are h0sed
|
||||||
|
logger.fatal("<sidebox/> config <factory-class/> not valid!");
|
||||||
|
throw new ConfigException("<factory-class/> in <sidebox/> is not a valid class!",section);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
if (StringUtil.isStringEmpty(anon_title))
|
||||||
|
anon_title = title; // just set as the same in the event of difficulty
|
||||||
|
|
||||||
} // end constructor
|
} // end constructor
|
||||||
|
|
||||||
|
@ -225,25 +267,13 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
} // end getSequence
|
} // end getSequence
|
||||||
|
|
||||||
public String getParameter()
|
public String getTitle(boolean anonymous)
|
||||||
{
|
{
|
||||||
return null;
|
return (anonymous ? anon_title : title);
|
||||||
|
|
||||||
} // end getParameter
|
} // end getTitle
|
||||||
|
|
||||||
public String getDescription()
|
public String getFactoryClassName()
|
||||||
{
|
|
||||||
return description;
|
|
||||||
|
|
||||||
} // end getDescription
|
|
||||||
|
|
||||||
public String getParamDescription()
|
|
||||||
{
|
|
||||||
return param_descr;
|
|
||||||
|
|
||||||
} // end getParamDescription
|
|
||||||
|
|
||||||
public String getClassname()
|
|
||||||
{
|
{
|
||||||
return classname;
|
return classname;
|
||||||
|
|
||||||
|
@ -471,12 +501,13 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
* Loads the Venice engine configuration from the named XML file and creates appropriate subobjects,
|
* Loads the Venice engine configuration from the named XML file and creates appropriate subobjects,
|
||||||
* such as the data pool.
|
* such as the data pool.
|
||||||
*
|
*
|
||||||
* @param config The XML document conating the configuration information for the engine.
|
* @param config The XML document containing the configuration information for the engine.
|
||||||
|
* @param app_root The root directory of the Web application, which ends with a "/".
|
||||||
* @exception com.silverwrist.venice.core.ConfigException An error occurred during engine configuration;
|
* @exception com.silverwrist.venice.core.ConfigException An error occurred during engine configuration;
|
||||||
* the engine could not be initialized.
|
* the engine could not be initialized.
|
||||||
* @exception com.silverwrist.venice.core.DataException The Venice engine data could not be loaded.
|
* @exception com.silverwrist.venice.core.DataException The Venice engine data could not be loaded.
|
||||||
*/
|
*/
|
||||||
public void initialize(Document config) throws ConfigException, DataException
|
public void initialize(Document config, String app_root) throws ConfigException, DataException
|
||||||
{
|
{
|
||||||
int i; // loop counter
|
int i; // loop counter
|
||||||
|
|
||||||
|
@ -501,8 +532,56 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
|
|
||||||
// Get the <database/> section.
|
|
||||||
DOMElementHelper root_h = new DOMElementHelper(root);
|
DOMElementHelper root_h = new DOMElementHelper(root);
|
||||||
|
|
||||||
|
// Get the <engine/> section.
|
||||||
|
Element engine_sect = root_h.getSubElement("engine");
|
||||||
|
if (engine_sect==null)
|
||||||
|
{ // unable to find the engine section
|
||||||
|
logger.fatal("config document has no <engine/> section");
|
||||||
|
throw new ConfigException("no <engine/> section found in config file",root);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
DOMElementHelper engine_h = new DOMElementHelper(engine_sect);
|
||||||
|
|
||||||
|
// Get the name of the sidebox config file.
|
||||||
|
String sidebox_config = engine_h.getSubElementText("sidebox-config");
|
||||||
|
if (sidebox_config==null)
|
||||||
|
{ // unable to find the sidebox config file
|
||||||
|
logger.fatal("<engine/> section has no <sidebox-config/> element");
|
||||||
|
throw new ConfigException("no <sidebox-config/> element found in <engine/> section",engine_sect);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
if (!(sidebox_config.startsWith("/")))
|
||||||
|
sidebox_config = app_root + sidebox_config;
|
||||||
|
Document sidebox_cfg_file = Startup.loadConfiguration(sidebox_config);
|
||||||
|
Element sb_root = sidebox_cfg_file.getDocumentElement();
|
||||||
|
if (!(sb_root.getTagName().equals("sidebox-config")))
|
||||||
|
{ // the sidebox configuration file isn't the right type
|
||||||
|
logger.fatal("config document is not a <sidebox-config/> document (root tag: <"
|
||||||
|
+ sb_root.getTagName() + "/>)");
|
||||||
|
throw new ConfigException("document is not a <sidebox-config/> document",sb_root);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
NodeList sb_nodes = sb_root.getChildNodes();
|
||||||
|
ArrayList sidebox_tmp = new ArrayList();
|
||||||
|
for (i=0; i<sb_nodes.getLength(); i++)
|
||||||
|
{ // extract each sidebox section from the list and build a new master sidebox object
|
||||||
|
Node s = sb_nodes.item(i);
|
||||||
|
if ((s.getNodeType()==Node.ELEMENT_NODE) && (s.getNodeName().equals("sidebox")))
|
||||||
|
sidebox_tmp.add(new MasterSideBox((Element)s));
|
||||||
|
|
||||||
|
} // end for
|
||||||
|
|
||||||
|
// store the real master sidebox table as an array
|
||||||
|
sideboxes = (MasterSideBox[])(sidebox_tmp.toArray(new MasterSideBox[0]));
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug(sideboxes.length + " sidebox definitions loaded from database");
|
||||||
|
|
||||||
|
// Get the <database/> section.
|
||||||
Element db_sect = root_h.getSubElement("database");
|
Element db_sect = root_h.getSubElement("database");
|
||||||
if (db_sect==null)
|
if (db_sect==null)
|
||||||
{ // unable to find the database section
|
{ // unable to find the database section
|
||||||
|
@ -642,6 +721,9 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
} // end catch
|
} // end catch
|
||||||
|
|
||||||
|
for (i=0; i<sideboxes.length; i++) // insert sideboxes into hashtable
|
||||||
|
sidebox_ids.put(new Integer(sideboxes[i].getID()),sideboxes[i]);
|
||||||
|
|
||||||
// Allocate the global parameter arrays.
|
// Allocate the global parameter arrays.
|
||||||
gp_ints = new int[IPC_NUM_PARAMS];
|
gp_ints = new int[IPC_NUM_PARAMS];
|
||||||
|
|
||||||
|
@ -671,17 +753,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug(max_value + " features loaded from database");
|
logger.debug(max_value + " features loaded from database");
|
||||||
|
|
||||||
// load the master sidebox table
|
|
||||||
ArrayList sidebox_tmp = new ArrayList();
|
|
||||||
rs = stmt.executeQuery("SELECT * FROM refsidebox ORDER BY boxid;");
|
|
||||||
while (rs.next())
|
|
||||||
sidebox_tmp.add(new MasterSideBox(rs));
|
|
||||||
|
|
||||||
// store the real master sidebox table as an array
|
|
||||||
sideboxes = (MasterSideBox[])(sidebox_tmp.toArray(new MasterSideBox[0]));
|
|
||||||
if (logger.isDebugEnabled())
|
|
||||||
logger.debug(sideboxes.length + " sidebox definitions loaded from database");
|
|
||||||
|
|
||||||
// load the global defaults
|
// load the global defaults
|
||||||
loadDefaults(stmt);
|
loadDefaults(stmt);
|
||||||
|
|
||||||
|
@ -702,9 +773,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
for (i=0; i<features.length; i++) // insert feature symbols into hashtable
|
for (i=0; i<features.length; i++) // insert feature symbols into hashtable
|
||||||
feature_syms.put(features[i].getSymbol(),features[i]);
|
feature_syms.put(features[i].getSymbol(),features[i]);
|
||||||
|
|
||||||
for (i=0; i<sideboxes.length; i++) // insert sideboxes into hashtable
|
|
||||||
sidebox_ids.put(new Integer(sideboxes[i].getID()),sideboxes[i]);
|
|
||||||
|
|
||||||
// Here is where we create the HTML Checker and all the goodies it relies on.
|
// Here is where we create the HTML Checker and all the goodies it relies on.
|
||||||
// Start by creating some of the subsidiary objects that get added to HTML Checker configs.
|
// Start by creating some of the subsidiary objects that get added to HTML Checker configs.
|
||||||
EmailRewriter email_rewriter = new EmailRewriter();
|
EmailRewriter email_rewriter = new EmailRewriter();
|
||||||
|
@ -982,13 +1050,21 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
|
|
||||||
message = StringUtil.replaceAllInstances(message,"$USERNAME",username);
|
// Replace the message variables.
|
||||||
message = StringUtil.replaceAllInstances(message,"$REMINDER",rs.getString(2));
|
HashMap vars = new HashMap(2);
|
||||||
|
vars.put("username",username);
|
||||||
|
vars.put("reminder",rs.getString(2));
|
||||||
|
message = StringUtil.replaceAllVariables(message,vars);
|
||||||
|
|
||||||
|
// Find the message subject.
|
||||||
|
String subject = getStockMessage("reminder-subject");
|
||||||
|
if (subject==null)
|
||||||
|
subject = "Venice Password Reminder Message";
|
||||||
|
|
||||||
// Create the emailer and send the message.
|
// Create the emailer and send the message.
|
||||||
SimpleEmailer emailer = createEmailer();
|
SimpleEmailer emailer = createEmailer();
|
||||||
emailer.setTo(email_addr);
|
emailer.setTo(email_addr);
|
||||||
emailer.setSubject("Venice Password Reminder Message");
|
emailer.setSubject(subject);
|
||||||
emailer.setText(message);
|
emailer.setText(message);
|
||||||
emailer.send();
|
emailer.send();
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
|
@ -1074,17 +1150,17 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
logger.debug("...created userprefs");
|
logger.debug("...created userprefs");
|
||||||
|
|
||||||
// get the sidebox configuration for this user
|
// get the sidebox configuration for this user
|
||||||
rs = stmt.executeQuery("SELECT sideboxes.boxid, sideboxes.sequence, sideboxes.param FROM sideboxes, "
|
rs = stmt.executeQuery("SELECT sideboxes.boxid, sideboxes.sequence FROM sideboxes, "
|
||||||
+ "users WHERE sideboxes.uid = users.uid AND users.is_anon = 1;");
|
+ "users WHERE sideboxes.uid = users.uid AND users.is_anon = 1;");
|
||||||
sql.setLength(0);
|
sql.setLength(0);
|
||||||
while (rs.next())
|
while (rs.next())
|
||||||
{ // set up to insert into the sideboxes table
|
{ // set up to insert into the sideboxes table
|
||||||
if (sql.length()==0)
|
if (sql.length()==0)
|
||||||
sql.append("INSERT INTO sideboxes (uid, boxid, sequence, param) VALUES ");
|
sql.append("INSERT INTO sideboxes (uid, boxid, sequence) VALUES ");
|
||||||
else
|
else
|
||||||
sql.append(", ");
|
sql.append(", ");
|
||||||
sql.append("(").append(new_uid).append(", ").append(rs.getInt(1)).append(", ");
|
sql.append("(").append(new_uid).append(", ").append(rs.getInt(1)).append(", ");
|
||||||
sql.append(rs.getInt(2)).append(", ").append(SQLUtil.encodeStringArg(rs.getString(3))).append(')');
|
sql.append(rs.getInt(2)).append(')');
|
||||||
|
|
||||||
} // end while
|
} // end while
|
||||||
|
|
||||||
|
|
114
src/com/silverwrist/venice/security/PasswordGenerator.java
Normal file
114
src/com/silverwrist/venice/security/PasswordGenerator.java
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
/*
|
||||||
|
* 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 Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.security;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class PasswordGenerator
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static final String[] syllabary = {
|
||||||
|
"ba", "be", "bi", "bo", "bu",
|
||||||
|
"da", "de", "di", "do", "du",
|
||||||
|
"cha", "chi", "cho", "chu",
|
||||||
|
"fa", "fe", "fi", "fo", "fu",
|
||||||
|
"ga", "ge", "gi", "go", "gu",
|
||||||
|
"ha", "he", "hi", "ho", "hu",
|
||||||
|
"ja", "je", "ji", "jo", "ju",
|
||||||
|
"ka", "ke", "ki", "ko", "ku",
|
||||||
|
"la", "le", "li", "lo", "lu",
|
||||||
|
"ma", "me", "mi", "mo", "mu",
|
||||||
|
"na", "ne", "ni", "no", "nu",
|
||||||
|
"pa", "pe", "pi", "po", "pu",
|
||||||
|
"ra", "re", "ri", "ro", "ru",
|
||||||
|
"sa", "se", "si", "so", "su",
|
||||||
|
"sha", "she", "sho", "shu",
|
||||||
|
"ta", "te", "ti", "to", "tu",
|
||||||
|
"va", "ve", "vi", "vo", "vu",
|
||||||
|
"wa", "we", "wi", "wo", "wu",
|
||||||
|
"ya", "ye", "yi", "yo", "yu",
|
||||||
|
"za", "ze", "zi", "zo", "zu"
|
||||||
|
}; // 98 syllables
|
||||||
|
|
||||||
|
private static final char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private String value; // the password value
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public PasswordGenerator()
|
||||||
|
{
|
||||||
|
Random rng = new Random();
|
||||||
|
StringBuffer buf = new StringBuffer();
|
||||||
|
int i;
|
||||||
|
for (i=0; i<4; i++) // 4 random syllables
|
||||||
|
buf.append(syllabary[rng.nextInt(syllabary.length)]);
|
||||||
|
for (i=0; i<3; i++) // 3 random digits
|
||||||
|
buf.append(digits[rng.nextInt(digits.length)]);
|
||||||
|
value = buf.toString();
|
||||||
|
// total possible number of passwords = 92,236,816,000
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Overrides from class Object
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
|
||||||
|
} // end toString
|
||||||
|
|
||||||
|
public boolean equals(Object obj)
|
||||||
|
{
|
||||||
|
if (obj==null)
|
||||||
|
return false; // trivial case
|
||||||
|
else if (obj==(Object)this)
|
||||||
|
return true; // trivial case
|
||||||
|
if (obj instanceof PasswordGenerator)
|
||||||
|
{ // compare value of PasswordHash argument to value
|
||||||
|
PasswordGenerator other = (PasswordGenerator)obj;
|
||||||
|
return value.equals(other.value);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else
|
||||||
|
return value.equals(obj.toString());
|
||||||
|
|
||||||
|
} // end equals
|
||||||
|
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
return value.hashCode();
|
||||||
|
|
||||||
|
} // end hashCode
|
||||||
|
|
||||||
|
} // end class PasswordGenerator
|
|
@ -7,7 +7,7 @@
|
||||||
* 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@silcom.com>,
|
||||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
@ -21,9 +21,18 @@ import java.security.MessageDigest;
|
||||||
|
|
||||||
public class PasswordHash
|
public class PasswordHash
|
||||||
{
|
{
|
||||||
// Attributes
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
private String value; // the hashed password value
|
private String value; // the hashed password value
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructors
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
public PasswordHash()
|
public PasswordHash()
|
||||||
{
|
{
|
||||||
value = "";
|
value = "";
|
||||||
|
@ -84,11 +93,10 @@ public class PasswordHash
|
||||||
|
|
||||||
} // end constructor
|
} // end constructor
|
||||||
|
|
||||||
protected void finalize()
|
/*--------------------------------------------------------------------------------
|
||||||
{
|
* Overrides from class Object
|
||||||
value = null;
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
} // end finalize
|
|
||||||
|
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
|
@ -108,17 +116,22 @@ public class PasswordHash
|
||||||
return value.equals(other.value);
|
return value.equals(other.value);
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
else if (obj instanceof String)
|
|
||||||
{ // compare string argument to value
|
|
||||||
String os = (String)obj;
|
|
||||||
return value.equals(os);
|
|
||||||
|
|
||||||
} // end else if
|
|
||||||
else
|
else
|
||||||
return false;
|
return value.equals(obj.toString());
|
||||||
|
|
||||||
} // end equals
|
} // end equals
|
||||||
|
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
return value.hashCode();
|
||||||
|
|
||||||
|
} // end hashCode
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Test program
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
public static void main(String[] args)
|
public static void main(String[] args)
|
||||||
{
|
{
|
||||||
if (args.length<1)
|
if (args.length<1)
|
||||||
|
|
|
@ -87,6 +87,24 @@ public class Settings extends VeniceServlet
|
||||||
|
|
||||||
} // end findHotlistIndex
|
} // end findHotlistIndex
|
||||||
|
|
||||||
|
private static int getBoxIDParameter(ServletRequest request) throws ErrorBox
|
||||||
|
{
|
||||||
|
String foo = request.getParameter("box");
|
||||||
|
if (foo==null)
|
||||||
|
throw new ErrorBox(null,"Parameter not specified!","settings?cmd=B");
|
||||||
|
try
|
||||||
|
{ // parse the integer and get the box ID
|
||||||
|
return Integer.parseInt(foo);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{ // error in parsing...
|
||||||
|
throw new ErrorBox(null,"Parameter invalid!","settings?cmd=B");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end getBoxIDParameter
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Overrides from class HttpServlet
|
* Overrides from class HttpServlet
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
@ -258,10 +276,148 @@ public class Settings extends VeniceServlet
|
||||||
|
|
||||||
} // end if ("SX" command)
|
} // end if ("SX" command)
|
||||||
|
|
||||||
|
if (cmd.equals("B"))
|
||||||
|
{ // "B" - Configure Sideboxes
|
||||||
|
try
|
||||||
|
{ // return the sidebox viewer
|
||||||
|
setMyLocation(request,"settings?cmd=B");
|
||||||
|
return new SideBoxList(engine,user);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (DataException de)
|
||||||
|
{ // Database error getting sidebox list
|
||||||
|
return new ErrorBox("Database Error","Error getting sidebox list: " + de.getMessage(),"top");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end if ("B" command)
|
||||||
|
|
||||||
|
if (cmd.equals("BU") || cmd.equals("BD") || cmd.equals("BX"))
|
||||||
|
{ // move sidebox up or down in list, or delete it
|
||||||
|
int boxid = getBoxIDParameter(request);
|
||||||
|
try
|
||||||
|
{ // get the box ID, find it in the list
|
||||||
|
List sidebox_list = user.getSideBoxList();
|
||||||
|
UserSideBoxDescriptor prev = null;
|
||||||
|
UserSideBoxDescriptor curr = null;
|
||||||
|
Iterator it = sidebox_list.iterator();
|
||||||
|
boolean found = false;
|
||||||
|
while (!found && it.hasNext())
|
||||||
|
{ // track the previous descriptor so we can do the swap
|
||||||
|
prev = curr;
|
||||||
|
curr = (UserSideBoxDescriptor)(it.next());
|
||||||
|
if (curr.getID()==boxid)
|
||||||
|
{ // found it - trip the loop exit
|
||||||
|
found = true;
|
||||||
|
if (cmd.equals("BD"))
|
||||||
|
{ // make "prev" actually be the NEXT descriptor
|
||||||
|
if (it.hasNext())
|
||||||
|
prev = (UserSideBoxDescriptor)(it.next());
|
||||||
|
else
|
||||||
|
prev = null;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end if (found)
|
||||||
|
|
||||||
|
} // end while
|
||||||
|
|
||||||
|
if (found)
|
||||||
|
{ // the current one needs to be operated on
|
||||||
|
if (cmd.equals("BX"))
|
||||||
|
curr.remove(); // remove the "current" sidebox
|
||||||
|
else if (prev!=null)
|
||||||
|
{ // exchange the sequence numbers of "curr" and "prev"
|
||||||
|
int seq_curr = curr.getSequence();
|
||||||
|
int seq_prev = prev.getSequence();
|
||||||
|
curr.setSequence(seq_prev); // do the first "set"
|
||||||
|
boolean restore = true;
|
||||||
|
try
|
||||||
|
{ // do the second "set"
|
||||||
|
prev.setSequence(seq_curr);
|
||||||
|
restore = false;
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
finally
|
||||||
|
{ // restore first if second failed
|
||||||
|
if (restore)
|
||||||
|
curr.setSequence(seq_curr);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
} // end else if
|
||||||
|
// else just fall out and do nothing
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
// else just fall out and don't do anything
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (DataException de)
|
||||||
|
{ // there was a data problem
|
||||||
|
return new ErrorBox("Database Error","Error adjusting sidebox list: " + de.getMessage(),
|
||||||
|
"settings?cmd=B");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // return the sidebox viewer
|
||||||
|
setMyLocation(request,"settings?cmd=B");
|
||||||
|
return new SideBoxList(engine,user);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (DataException de)
|
||||||
|
{ // Database error getting sidebox list
|
||||||
|
return new ErrorBox("Database Error","Error getting sidebox list: " + de.getMessage(),"top");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end if ("BD"/"BU"/"BX" commands)
|
||||||
|
|
||||||
// command not found!
|
// command not found!
|
||||||
logger.error("invalid command to Settings.doGet: " + cmd);
|
logger.error("invalid command to Settings.doGet: " + cmd);
|
||||||
return new ErrorBox("Internal Error","Invalid command to Settings.doGet","top");
|
return new ErrorBox("Internal Error","Invalid command to Settings.doGet","top");
|
||||||
|
|
||||||
} // end doVeniceGet
|
} // end doVeniceGet
|
||||||
|
|
||||||
|
protected VeniceContent doVenicePost(HttpServletRequest request, VeniceEngine engine,
|
||||||
|
UserContext user, RenderData rdat)
|
||||||
|
throws ServletException, IOException, VeniceServletResult
|
||||||
|
{
|
||||||
|
String cmd = getStandardCommandParam(request);
|
||||||
|
|
||||||
|
if (cmd.equals("BA"))
|
||||||
|
{ // "BA" - add new sidebox
|
||||||
|
int boxid = getBoxIDParameter(request);
|
||||||
|
try
|
||||||
|
{ // add the sidebox
|
||||||
|
user.addSideBox(boxid);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (DataException de)
|
||||||
|
{ // error adding to sideboxes
|
||||||
|
return new ErrorBox("Database Error","Error adding to sidebox list: " + de.getMessage(),
|
||||||
|
"settings?cmd=B");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // return the sidebox viewer
|
||||||
|
setMyLocation(request,"settings?cmd=B");
|
||||||
|
return new SideBoxList(engine,user);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (DataException de)
|
||||||
|
{ // Database error getting sidebox list
|
||||||
|
return new ErrorBox("Database Error","Error getting sidebox list: " + de.getMessage(),"top");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end if ("BA" command)
|
||||||
|
|
||||||
|
// command not found!
|
||||||
|
logger.error("invalid command to Settings.doGet: " + cmd);
|
||||||
|
return new ErrorBox("Internal Error","Invalid command to Settings.doGet","top");
|
||||||
|
|
||||||
|
} // end doVenicePost
|
||||||
|
|
||||||
} // end class Settings
|
} // end class Settings
|
||||||
|
|
|
@ -80,7 +80,7 @@ public class Variables
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // extract the configuration file name and create the engine
|
{ // extract the configuration file name and create the engine
|
||||||
VeniceEngine engine = Startup.createEngine(cfgfile);
|
VeniceEngine engine = Startup.createEngine(cfgfile,root_file_path);
|
||||||
ctxt.setAttribute(ENGINE_ATTRIBUTE,engine);
|
ctxt.setAttribute(ENGINE_ATTRIBUTE,engine);
|
||||||
return engine;
|
return engine;
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
* 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@silcom.com>,
|
||||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
|
|
@ -29,10 +29,14 @@ import org.xml.sax.SAXParseException;
|
||||||
import com.silverwrist.util.DOMElementHelper;
|
import com.silverwrist.util.DOMElementHelper;
|
||||||
import com.silverwrist.util.IOUtil;
|
import com.silverwrist.util.IOUtil;
|
||||||
import com.silverwrist.util.StringUtil;
|
import com.silverwrist.util.StringUtil;
|
||||||
|
import com.silverwrist.venice.core.AccessError;
|
||||||
import com.silverwrist.venice.core.ConfigException;
|
import com.silverwrist.venice.core.ConfigException;
|
||||||
|
import com.silverwrist.venice.core.DataException;
|
||||||
import com.silverwrist.venice.core.UserContext;
|
import com.silverwrist.venice.core.UserContext;
|
||||||
|
import com.silverwrist.venice.core.VeniceEngine;
|
||||||
import com.silverwrist.venice.servlets.Variables;
|
import com.silverwrist.venice.servlets.Variables;
|
||||||
import com.silverwrist.venice.servlets.format.menus.LeftMenu;
|
import com.silverwrist.venice.servlets.format.menus.LeftMenu;
|
||||||
|
import com.silverwrist.venice.servlets.format.sideboxes.SideBoxFactory;
|
||||||
|
|
||||||
public class RenderConfig implements ColorSelectors
|
public class RenderConfig implements ColorSelectors
|
||||||
{
|
{
|
||||||
|
@ -44,7 +48,7 @@ public class RenderConfig implements ColorSelectors
|
||||||
protected static final String ATTR_NAME = "com.silverwrist.venice.servlets.RenderConfig";
|
protected static final String ATTR_NAME = "com.silverwrist.venice.servlets.RenderConfig";
|
||||||
protected static final String CONFIG_FILE_PARAM = "render.config";
|
protected static final String CONFIG_FILE_PARAM = "render.config";
|
||||||
|
|
||||||
private static Category logger = Category.getInstance(RenderConfig.class.getName());
|
private static Category logger = Category.getInstance(RenderConfig.class);
|
||||||
|
|
||||||
private static Map colornames_map;
|
private static Map colornames_map;
|
||||||
|
|
||||||
|
@ -71,6 +75,7 @@ public class RenderConfig implements ColorSelectors
|
||||||
private HashMap menus;
|
private HashMap menus;
|
||||||
private String[] colors_array;
|
private String[] colors_array;
|
||||||
private int footer_logo_scale;
|
private int footer_logo_scale;
|
||||||
|
private Map sidebox_factories;
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -263,6 +268,101 @@ public class RenderConfig implements ColorSelectors
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug("Site logo: " + site_logo);
|
logger.debug("Site logo: " + site_logo);
|
||||||
|
|
||||||
|
// Load the sidebox configuration information.
|
||||||
|
String sidebox_config = paths_sect_h.getSubElementText("sidebox-config");
|
||||||
|
if (sidebox_config==null)
|
||||||
|
{ // the sidebox config was not present
|
||||||
|
logger.fatal("<paths/> section has no <sidebox-config/> element");
|
||||||
|
throw new ConfigException("no <sidebox-config/> found in <paths/> section",paths_sect);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
if (!(sidebox_config.startsWith("/")))
|
||||||
|
sidebox_config = root_file_path + sidebox_config;
|
||||||
|
Document sb_doc = loadConfiguration(sidebox_config);
|
||||||
|
Element sb_root = sb_doc.getDocumentElement();
|
||||||
|
if (!(sb_root.getTagName().equals("sidebox-config")))
|
||||||
|
{ // the sidebox configuration file isn't the right type
|
||||||
|
logger.fatal("config document is not a <sidebox-config/> document (root tag: <"
|
||||||
|
+ sb_root.getTagName() + "/>)");
|
||||||
|
throw new ConfigException("document is not a <sidebox-config/> document",sb_root);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
NodeList sb_nodes = sb_root.getChildNodes();
|
||||||
|
HashMap tmp_factories = new HashMap();
|
||||||
|
for (i=0; i<sb_nodes.getLength(); i++)
|
||||||
|
{ // extract each sidebox section from the list and build a new master sidebox object
|
||||||
|
Node s = sb_nodes.item(i);
|
||||||
|
if ((s.getNodeType()==Node.ELEMENT_NODE) && (s.getNodeName().equals("sidebox")))
|
||||||
|
{ // get the various attributes of the sidebox
|
||||||
|
Element sb = (Element)s;
|
||||||
|
try
|
||||||
|
{ // get the ID of the sidebox first
|
||||||
|
tmp = sb.getAttribute("id");
|
||||||
|
if (StringUtil.isStringEmpty(tmp))
|
||||||
|
{ // there was no ID specified for the sidebox
|
||||||
|
logger.fatal("<sidebox/> specified with no ID!");
|
||||||
|
throw new ConfigException("no ID specified in <sidebox/>",sb);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
// convert to an integer which we'll be using later in the HashMap
|
||||||
|
Integer id = new Integer(tmp);
|
||||||
|
|
||||||
|
// get the name of the factory class
|
||||||
|
DOMElementHelper sb_h = new DOMElementHelper(sb);
|
||||||
|
tmp = sb_h.getSubElementText("factory-class");
|
||||||
|
if (StringUtil.isStringEmpty(tmp))
|
||||||
|
{ // the factory class was not specified!
|
||||||
|
logger.fatal("<sidebox/> config incomplete (missing <factory-class/>)!");
|
||||||
|
throw new ConfigException("configuration of <sidebox/> is not complete!",sb);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
Class factory_class = Class.forName(tmp);
|
||||||
|
SideBoxFactory factory = (SideBoxFactory)(factory_class.newInstance());
|
||||||
|
factory.setConfiguration(sb);
|
||||||
|
tmp_factories.put(id,factory);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
catch (NumberFormatException e1)
|
||||||
|
{ // ID value was not an integer
|
||||||
|
logger.fatal("<sidebox/> ID not numeric!");
|
||||||
|
throw new ConfigException("non-numeric ID specified in <sidebox/>",sb);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (ClassNotFoundException e2)
|
||||||
|
{ // sidebox could not be configured
|
||||||
|
logger.fatal("<sidebox/> config <factory-class/> not valid!",e2);
|
||||||
|
throw new ConfigException("<factory-class/> in <sidebox/> is not a valid class!",sb);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (IllegalAccessException e3)
|
||||||
|
{ // could not access class and/or constructor
|
||||||
|
logger.fatal("<sidebox/> <factory-class/> is not accessible!",e3);
|
||||||
|
throw new ConfigException("<factory-class/> in <sidebox/> is not accessible!",sb);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (InstantiationException e4)
|
||||||
|
{ // unable to create the class
|
||||||
|
logger.fatal("<sidebox/> <factory-class/> could not be instantiated!",e4);
|
||||||
|
throw new ConfigException("<factory-class/> in <sidebox/> could not be created!",sb);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (ClassCastException e5)
|
||||||
|
{ // the class is not a SideBoxFactory implementor - cannot create
|
||||||
|
logger.fatal("<sidebox/> <factory-class/> is not a SideBoxFactory!",e5);
|
||||||
|
throw new ConfigException("<factory-class/> in <sidebox/> is not the correct type!",sb);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end for
|
||||||
|
|
||||||
|
sidebox_factories = Collections.unmodifiableMap(tmp_factories);
|
||||||
|
|
||||||
Element msg_sect = root_h.getSubElement("messages");
|
Element msg_sect = root_h.getSubElement("messages");
|
||||||
if (msg_sect==null)
|
if (msg_sect==null)
|
||||||
{ // no <messages/> section - bail out now!
|
{ // no <messages/> section - bail out now!
|
||||||
|
@ -602,6 +702,15 @@ public class RenderConfig implements ColorSelectors
|
||||||
|
|
||||||
} // end useStyleSheet
|
} // end useStyleSheet
|
||||||
|
|
||||||
|
VeniceContent createSideBox(int id, VeniceEngine engine, UserContext uc) throws AccessError, DataException
|
||||||
|
{
|
||||||
|
SideBoxFactory fact = (SideBoxFactory)(sidebox_factories.get(new Integer(id)));
|
||||||
|
if (fact==null)
|
||||||
|
throw new DataException("invalid sidebox ID!");
|
||||||
|
return fact.create(engine,uc);
|
||||||
|
|
||||||
|
} // end createSideBox
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Static operations for use by VeniceServlet
|
* Static operations for use by VeniceServlet
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -28,6 +28,7 @@ import com.silverwrist.util.StringUtil;
|
||||||
import com.silverwrist.venice.core.DataException;
|
import com.silverwrist.venice.core.DataException;
|
||||||
import com.silverwrist.venice.core.IDUtils;
|
import com.silverwrist.venice.core.IDUtils;
|
||||||
import com.silverwrist.venice.core.UserContext;
|
import com.silverwrist.venice.core.UserContext;
|
||||||
|
import com.silverwrist.venice.core.VeniceEngine;
|
||||||
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.servlets.format.menus.LeftMenu;
|
import com.silverwrist.venice.servlets.format.menus.LeftMenu;
|
||||||
|
|
|
@ -1,115 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 Communities System.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
|
||||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
|
||||||
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s):
|
|
||||||
*/
|
|
||||||
package com.silverwrist.venice.servlets.format;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.util.*;
|
|
||||||
import com.silverwrist.util.StringUtil;
|
|
||||||
import com.silverwrist.venice.core.*;
|
|
||||||
|
|
||||||
public class SideBoxConferences implements ContentRender, ColorSelectors
|
|
||||||
{
|
|
||||||
/*--------------------------------------------------------------------------------
|
|
||||||
* Attributes
|
|
||||||
*--------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
private UserContext uc;
|
|
||||||
private List hotlist;
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
|
||||||
* Constructor
|
|
||||||
*--------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
public SideBoxConferences(UserContext uc, String parameter) throws DataException
|
|
||||||
{
|
|
||||||
this.uc = uc;
|
|
||||||
this.hotlist = uc.getConferenceHotlist();
|
|
||||||
|
|
||||||
} // end constructor
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
|
||||||
* Implementations from interface VeniceContent
|
|
||||||
*--------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
public String getPageTitle(RenderData rdat)
|
|
||||||
{
|
|
||||||
if (uc.isLoggedIn())
|
|
||||||
return "Your Conference Hotlist:";
|
|
||||||
else
|
|
||||||
return "Featured Conferences:";
|
|
||||||
|
|
||||||
} // end getPageTitle
|
|
||||||
|
|
||||||
public String getPageQID()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
|
|
||||||
} // end getPageQID
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
|
||||||
* Implementations from interface ContentRender
|
|
||||||
*--------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void renderHere(Writer out, RenderData rdat) throws IOException
|
|
||||||
{
|
|
||||||
String norm_font = rdat.getStdFontTag(SIDEBOX_CONTENT_FOREGROUND,2);
|
|
||||||
String hilite = rdat.getStdFontTag(SIDEBOX_CONTENT_LINK,2);
|
|
||||||
String purple_ball = rdat.getFullImagePath("purple-ball.gif");
|
|
||||||
String new_image = rdat.getFullImagePath("tag_new.gif");
|
|
||||||
if (hotlist.size()>0)
|
|
||||||
{ // display the list of conferences
|
|
||||||
out.write("<TABLE ALIGN=CENTER BORDER=0 CELLPADDING=0 CELLSPACING=2>\n");
|
|
||||||
Iterator it = hotlist.iterator();
|
|
||||||
while (it.hasNext())
|
|
||||||
{ // display the names of the conferences and SIGs one by one
|
|
||||||
ConferenceHotlistEntry hle = (ConferenceHotlistEntry)(it.next());
|
|
||||||
ConferenceContext conf = hle.getConference();
|
|
||||||
String href = "confdisp?sig=" + conf.getEnclosingSIG().getSIGID() + "&conf=" + conf.getConfID();
|
|
||||||
out.write("<TR VALIGN=MIDDLE>\n<TD ALIGN=CENTER WIDTH=14><IMG SRC=\"" + purple_ball
|
|
||||||
+ "\" ALT=\"*\" WIDTH=14 HEIGHT=14 BORDER=0></TD>\n<TD ALIGN=LEFT CLASS=\"sidebox\">\n"
|
|
||||||
+ norm_font + "<B><A CLASS=\"sidebox\" HREF=\"" + rdat.getEncodedServletPath(href) + "\">"
|
|
||||||
+ hilite + StringUtil.encodeHTML(conf.getName()) + "</FONT></A></B> ("
|
|
||||||
+ StringUtil.encodeHTML(conf.getEnclosingSIG().getName()) + ")</FONT>\n");
|
|
||||||
if (conf.anyUnread())
|
|
||||||
out.write(" <A HREF=\"" + rdat.getEncodedServletPath(href + "&rnm=1") + "\"><IMG SRC=\""
|
|
||||||
+ new_image + "\" ALT=\"New!\" BORDER=0 WIDTH=40 HEIGHT=20></A>\n");
|
|
||||||
out.write("</TD>\n</TR>\n");
|
|
||||||
|
|
||||||
} // end while
|
|
||||||
|
|
||||||
out.write("</TABLE>\n");
|
|
||||||
|
|
||||||
} // end if
|
|
||||||
else
|
|
||||||
out.write(norm_font + "<EM>You have no conferences in your hotlist.</EM></FONT>\n");
|
|
||||||
|
|
||||||
if (uc.isLoggedIn())
|
|
||||||
{ // write the link at the end
|
|
||||||
out.write("<P>" + rdat.getStdFontTag(SIDEBOX_CONTENT_FOREGROUND,1) + "<B>[ <A CLASS=\"sidebox\" HREF=\""
|
|
||||||
+ rdat.getEncodedServletPath("settings?cmd=H") + "\">"
|
|
||||||
+ rdat.getStdFontTag(SIDEBOX_CONTENT_LINK,1) + "Manage</FONT></A> ]</B></FONT>");
|
|
||||||
|
|
||||||
} // end if
|
|
||||||
|
|
||||||
} // end renderHere
|
|
||||||
|
|
||||||
} // end class SideBoxConferences
|
|
156
src/com/silverwrist/venice/servlets/format/SideBoxList.java
Normal file
156
src/com/silverwrist/venice/servlets/format/SideBoxList.java
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
/*
|
||||||
|
* 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 Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.servlets.format;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.servlet.*;
|
||||||
|
import javax.servlet.http.*;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
|
||||||
|
public class SideBoxList implements JSPRender
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Attribute name for request attribute
|
||||||
|
protected static final String ATTR_NAME = "com.silverwrist.venice.content.SideBoxList";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private UserContext uc; // user context
|
||||||
|
private List in_list; // sideboxes that are "in"
|
||||||
|
private List out_list; // sideboxes that are "out"
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public SideBoxList(VeniceEngine engine, UserContext uc) throws DataException
|
||||||
|
{
|
||||||
|
this.uc = uc;
|
||||||
|
this.in_list = uc.getSideBoxList();
|
||||||
|
HashSet ids = new HashSet(in_list.size());
|
||||||
|
Iterator it = in_list.iterator();
|
||||||
|
while (it.hasNext())
|
||||||
|
{ // add the IDs of all the sideboxes to the set
|
||||||
|
SideBoxDescriptor d = (SideBoxDescriptor)(it.next());
|
||||||
|
ids.add(new Integer(d.getID()));
|
||||||
|
|
||||||
|
} // end while
|
||||||
|
|
||||||
|
List all_list = engine.getMasterSideBoxList();
|
||||||
|
if (all_list.size()>in_list.size())
|
||||||
|
{ // allocate an ArrayList to hold the sideboxes
|
||||||
|
out_list = new ArrayList(all_list.size()-in_list.size());
|
||||||
|
it = all_list.iterator();
|
||||||
|
while (it.hasNext())
|
||||||
|
{ // get all sideboxes not in the "in" list and put them in the "out" list
|
||||||
|
SideBoxDescriptor d = (SideBoxDescriptor)(it.next());
|
||||||
|
if (!(ids.contains(new Integer(d.getID()))))
|
||||||
|
out_list.add(d);
|
||||||
|
|
||||||
|
} // end while
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else // all sideboxes are "in"...
|
||||||
|
out_list = Collections.EMPTY_LIST;
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External static functions
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static SideBoxList retrieve(ServletRequest request)
|
||||||
|
{
|
||||||
|
return (SideBoxList)(request.getAttribute(ATTR_NAME));
|
||||||
|
|
||||||
|
} // end retrieve
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface VeniceContent
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String getPageTitle(RenderData rdat)
|
||||||
|
{
|
||||||
|
return "Your Front Page Configuration";
|
||||||
|
|
||||||
|
} // end getPageTitle
|
||||||
|
|
||||||
|
public String getPageQID()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
|
||||||
|
} // end getPageQID
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface JSPRender
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void store(ServletRequest request)
|
||||||
|
{
|
||||||
|
request.setAttribute(ATTR_NAME,this);
|
||||||
|
|
||||||
|
} // end store
|
||||||
|
|
||||||
|
public String getTargetJSPName()
|
||||||
|
{
|
||||||
|
return "sideboxlist.jsp";
|
||||||
|
|
||||||
|
} // end getTargetJSPName
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public int getInListSize()
|
||||||
|
{
|
||||||
|
return in_list.size();
|
||||||
|
|
||||||
|
} // end getInListSize
|
||||||
|
|
||||||
|
public SideBoxDescriptor getInListItem(int index)
|
||||||
|
{
|
||||||
|
return (SideBoxDescriptor)(in_list.get(index));
|
||||||
|
|
||||||
|
} // end getInListItem
|
||||||
|
|
||||||
|
public int getOutListSize()
|
||||||
|
{
|
||||||
|
return out_list.size();
|
||||||
|
|
||||||
|
} // end getOutListSize
|
||||||
|
|
||||||
|
public SideBoxDescriptor getOutListItem(int index)
|
||||||
|
{
|
||||||
|
return (SideBoxDescriptor)(out_list.get(index));
|
||||||
|
|
||||||
|
} // end getInListItem
|
||||||
|
|
||||||
|
} // end class SideBoxList
|
||||||
|
|
|
@ -1,121 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 Communities System.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
|
||||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
|
||||||
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s):
|
|
||||||
*/
|
|
||||||
package com.silverwrist.venice.servlets.format;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.util.*;
|
|
||||||
import com.silverwrist.util.StringUtil;
|
|
||||||
import com.silverwrist.venice.core.*;
|
|
||||||
|
|
||||||
public class SideBoxSIGs implements ContentRender, ColorSelectors
|
|
||||||
{
|
|
||||||
/*--------------------------------------------------------------------------------
|
|
||||||
* Attributes
|
|
||||||
*--------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
private UserContext uc;
|
|
||||||
private List sig_list;
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
|
||||||
* Constructor
|
|
||||||
*--------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
public SideBoxSIGs(UserContext uc, String parameter) throws DataException
|
|
||||||
{
|
|
||||||
this.uc = uc;
|
|
||||||
this.sig_list = uc.getMemberSIGs();
|
|
||||||
|
|
||||||
} // end constructor
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
|
||||||
* Implementations from interface VeniceContent
|
|
||||||
*--------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
public String getPageTitle(RenderData rdat)
|
|
||||||
{
|
|
||||||
if (uc.isLoggedIn())
|
|
||||||
return "Your SIGs:";
|
|
||||||
else
|
|
||||||
return "Featured SIGs:";
|
|
||||||
|
|
||||||
} // end getPageTitle
|
|
||||||
|
|
||||||
public String getPageQID()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
|
|
||||||
} // end getPageQID
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
|
||||||
* Implementations from interface ContentRender
|
|
||||||
*--------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void renderHere(Writer out, RenderData rdat) throws IOException
|
|
||||||
{
|
|
||||||
if (sig_list.size()>0)
|
|
||||||
{ // display the list of available SIGs
|
|
||||||
String purple_ball = rdat.getFullImagePath("purple-ball.gif");
|
|
||||||
String link_font = rdat.getStdFontTag(SIDEBOX_CONTENT_LINK,2);
|
|
||||||
String host_image = null;
|
|
||||||
out.write("<TABLE ALIGN=CENTER BORDER=0 CELLPADDING=0 CELLSPACING=2>\n");
|
|
||||||
Iterator it = sig_list.iterator();
|
|
||||||
while (it.hasNext())
|
|
||||||
{ // display the names of the SIGs one by one
|
|
||||||
SIGContext sig = (SIGContext)(it.next());
|
|
||||||
out.write("<TR VALIGN=MIDDLE>\n<TD ALIGN=CENTER WIDTH=14><IMG SRC=\"" + purple_ball
|
|
||||||
+ "\" ALT=\"*\" WIDTH=14 HEIGHT=14 BORDER=0></TD>\n<TD ALIGN=LEFT CLASS=\"sidebox\">\n"
|
|
||||||
+ "<A CLASS=\"sidebox\" HREF=\"" + rdat.getEncodedServletPath("sig/" + sig.getAlias())
|
|
||||||
+ "\">" + link_font + "<B>" + StringUtil.encodeHTML(sig.getName()) + "</B></FONT></A>\n");
|
|
||||||
if (sig.isAdmin())
|
|
||||||
{ // write the "Host!" image at the end
|
|
||||||
if (host_image==null)
|
|
||||||
host_image = rdat.getFullImagePath("tag_host.gif");
|
|
||||||
out.write(" <IMG SRC=\"" + host_image + "\" ALT=\"Host!\" BORDER=0 WIDTH=40 HEIGHT=20>\n");
|
|
||||||
|
|
||||||
} // end if
|
|
||||||
|
|
||||||
out.write("</TD>\n</TR>\n");
|
|
||||||
|
|
||||||
} // end while
|
|
||||||
|
|
||||||
out.write("</TABLE>\n");
|
|
||||||
|
|
||||||
} // end if
|
|
||||||
else
|
|
||||||
out.write(rdat.getStdFontTag(SIDEBOX_CONTENT_FOREGROUND,2)
|
|
||||||
+ "<EM>You are not a member of any SIGs.</EM></FONT>\n");
|
|
||||||
|
|
||||||
if (uc.isLoggedIn())
|
|
||||||
{ // write the two links at the end
|
|
||||||
String hilite = rdat.getStdFontTag(SIDEBOX_CONTENT_LINK,1);
|
|
||||||
out.write("<P>" + rdat.getStdFontTag(SIDEBOX_CONTENT_FOREGROUND,1) + "<B>[ <A CLASS=\"sidebox\" HREF=\""
|
|
||||||
+ rdat.getEncodedServletPath("settings?cmd=S") + "\">" + hilite
|
|
||||||
+ "Manage</FONT></A> | <A CLASS=\"sidebox\" HREF=\""
|
|
||||||
+ rdat.getEncodedServletPath("sigops?cmd=C") + "\">" + hilite
|
|
||||||
+ "Create New</FONT></A> ]</B></FONT>");
|
|
||||||
|
|
||||||
} // end if
|
|
||||||
|
|
||||||
} // end renderHere
|
|
||||||
|
|
||||||
} // end class SideBoxSIGs
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class TopDisplay implements ContentRender, ColorSelectors
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public TopDisplay(ServletContext ctxt, VeniceEngine engine, UserContext uc)
|
public TopDisplay(ServletContext ctxt, VeniceEngine engine, UserContext uc)
|
||||||
throws DataException, AccessError, ErrorBox
|
throws ServletException, DataException, AccessError
|
||||||
{
|
{
|
||||||
// Stash some basic information.
|
// Stash some basic information.
|
||||||
this.ctxt = ctxt;
|
this.ctxt = ctxt;
|
||||||
|
@ -61,72 +61,13 @@ public class TopDisplay implements ContentRender, ColorSelectors
|
||||||
this.top_posts = engine.getPublishedMessages(false);
|
this.top_posts = engine.getPublishedMessages(false);
|
||||||
this.descrs = uc.getSideBoxList();
|
this.descrs = uc.getSideBoxList();
|
||||||
|
|
||||||
// Create the arrays used to construct sideboxes.
|
// Create the sideboxes.
|
||||||
Class[] ctor_argtypes = new Class[2];
|
|
||||||
ctor_argtypes[0] = UserContext.class;
|
|
||||||
ctor_argtypes[1] = String.class;
|
|
||||||
Object[] ctor_args = new Object[2];
|
|
||||||
ctor_args[0] = uc;
|
|
||||||
|
|
||||||
// Create the actual sideboxes.
|
|
||||||
sideboxes = new VeniceContent[descrs.size()];
|
sideboxes = new VeniceContent[descrs.size()];
|
||||||
|
RenderConfig rconf = RenderConfig.getRenderConfig(ctxt);
|
||||||
for (int i=0; i<descrs.size(); i++)
|
for (int i=0; i<descrs.size(); i++)
|
||||||
{ // create each sidebox in turn...
|
{ // create each sidebox in turn...
|
||||||
SideBoxDescriptor d = (SideBoxDescriptor)(descrs.get(i));
|
SideBoxDescriptor d = (SideBoxDescriptor)(descrs.get(i));
|
||||||
String cn = "com.silverwrist.venice.servlets.format." + d.getClassname();
|
sideboxes[i] = rconf.createSideBox(d.getID(),engine,uc);
|
||||||
|
|
||||||
try
|
|
||||||
{ // get the class name and the constructor pointer
|
|
||||||
Class sb_class = Class.forName(cn);
|
|
||||||
if (!(VeniceContent.class.isAssignableFrom(sb_class)))
|
|
||||||
throw new ErrorBox(null,"Invalid sidebox class: " + cn,null);
|
|
||||||
java.lang.reflect.Constructor ctor = sb_class.getDeclaredConstructor(ctor_argtypes);
|
|
||||||
|
|
||||||
// create the side box!
|
|
||||||
ctor_args[1] = d.getParameter();
|
|
||||||
sideboxes[i] = (VeniceContent)(ctor.newInstance(ctor_args));
|
|
||||||
|
|
||||||
} // end try
|
|
||||||
catch (ClassNotFoundException cnfe)
|
|
||||||
{ // Class.forName didn't work? yIkes!
|
|
||||||
throw new ErrorBox(null,"Cannot find sidebox class: " + cn,null);
|
|
||||||
|
|
||||||
} // end catch
|
|
||||||
catch (NoSuchMethodException nsme)
|
|
||||||
{ // no constructor matching the prototype? yIkes!
|
|
||||||
throw new ErrorBox(null,"Cannot find sidebox class constructor: " + cn,null);
|
|
||||||
|
|
||||||
} // end catch
|
|
||||||
catch (SecurityException se)
|
|
||||||
{ // how'd we trip the security manager? oh well...
|
|
||||||
throw new ErrorBox(null,"Security violation on class: " + cn,null);
|
|
||||||
|
|
||||||
} // end catch
|
|
||||||
catch (InstantiationException ie)
|
|
||||||
{ // the target class is an abstract class - oh, that's not right!
|
|
||||||
throw new ErrorBox(null,"Invalid sidebox class: " + cn,null);
|
|
||||||
|
|
||||||
} // end catch
|
|
||||||
catch (IllegalAccessException iae1)
|
|
||||||
{ // the constructor isn't public - oh, that's not right!
|
|
||||||
throw new ErrorBox(null,"Invalid sidebox class: " + cn,null);
|
|
||||||
|
|
||||||
} // end catch
|
|
||||||
catch (IllegalArgumentException iae2)
|
|
||||||
{ // the arguments to the constructor are wrong - we should've caught this!
|
|
||||||
throw new ErrorBox(null,"Invalid constructor call: " + cn,null);
|
|
||||||
|
|
||||||
} // end catch
|
|
||||||
catch (java.lang.reflect.InvocationTargetException ite)
|
|
||||||
{ // the constructor itself threw an exception
|
|
||||||
Throwable sub_e = ite.getTargetException();
|
|
||||||
if (sub_e instanceof DataException)
|
|
||||||
throw (DataException)sub_e;
|
|
||||||
if (sub_e instanceof AccessError)
|
|
||||||
throw (AccessError)sub_e;
|
|
||||||
throw new ErrorBox(null,"Unknown exception creating: " + cn,null);
|
|
||||||
|
|
||||||
} // end catch
|
|
||||||
|
|
||||||
} // end for
|
} // end for
|
||||||
|
|
||||||
|
@ -196,8 +137,7 @@ public class TopDisplay implements ContentRender, ColorSelectors
|
||||||
out.write("<TABLE ALIGN=CENTER WIDTH=200 BORDER=0 CELLPADDING=2 CELLSPACING=0>"
|
out.write("<TABLE ALIGN=CENTER WIDTH=200 BORDER=0 CELLPADDING=2 CELLSPACING=0>"
|
||||||
+ "<TR VALIGN=MIDDLE BGCOLOR=\"" + rdat.getStdColor(SIDEBOX_TITLE_BACKGROUND)
|
+ "<TR VALIGN=MIDDLE BGCOLOR=\"" + rdat.getStdColor(SIDEBOX_TITLE_BACKGROUND)
|
||||||
+ "\"><TD ALIGN=LEFT CLASS=\"sideboxtop\">\n"
|
+ "\"><TD ALIGN=LEFT CLASS=\"sideboxtop\">\n"
|
||||||
+ rdat.getStdFontTag(SIDEBOX_TITLE_FOREGROUND,3) + "<B>"
|
+ rdat.getStdFontTag(SIDEBOX_TITLE_FOREGROUND,3) + "<B>" + sideboxes[i].getPageTitle(rdat)
|
||||||
+ StringUtil.encodeHTML(sideboxes[i].getPageTitle(rdat))
|
|
||||||
+ "</B></FONT>\n</TD></TR><TR VALIGN=TOP BGCOLOR=\""
|
+ "</B></FONT>\n</TD></TR><TR VALIGN=TOP BGCOLOR=\""
|
||||||
+ rdat.getStdColor(SIDEBOX_CONTENT_BACKGROUND) + "\"><TD ALIGN=LEFT CLASS=\"sidebox\">\n");
|
+ rdat.getStdColor(SIDEBOX_CONTENT_BACKGROUND) + "\"><TD ALIGN=LEFT CLASS=\"sidebox\">\n");
|
||||||
|
|
||||||
|
@ -243,7 +183,7 @@ public class TopDisplay implements ContentRender, ColorSelectors
|
||||||
|
|
||||||
if (uc.isLoggedIn())
|
if (uc.isLoggedIn())
|
||||||
{ // write the Configure button below the sideboxes
|
{ // write the Configure button below the sideboxes
|
||||||
out.write("<A HREF=\"" + rdat.getEncodedServletPath("TODO") + "\"><IMG SRC=\""
|
out.write("<A HREF=\"" + rdat.getEncodedServletPath("settings?cmd=B") + "\"><IMG SRC=\""
|
||||||
+ rdat.getFullImagePath("bn_configure.gif")
|
+ rdat.getFullImagePath("bn_configure.gif")
|
||||||
+ "\" ALT=\"Configure\" WIDTH=80 HEIGHT=24 BORDER=0></A>\n");
|
+ "\" ALT=\"Configure\" WIDTH=80 HEIGHT=24 BORDER=0></A>\n");
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,277 @@
|
||||||
|
/*
|
||||||
|
* 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 Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.servlets.format.sideboxes;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
import org.w3c.dom.*;
|
||||||
|
import com.silverwrist.util.DOMElementHelper;
|
||||||
|
import com.silverwrist.util.StringUtil;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
import com.silverwrist.venice.servlets.format.*;
|
||||||
|
|
||||||
|
public class ConferenceBox implements SideBoxFactory
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal class that implements the actual sidebox
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ConferenceBoxImpl implements ContentRender, ColorSelectors
|
||||||
|
{
|
||||||
|
private UserContext uc; // current user context
|
||||||
|
private List hotlist; // current conference hotlist
|
||||||
|
|
||||||
|
ConferenceBoxImpl(UserContext uc) throws DataException
|
||||||
|
{
|
||||||
|
this.uc = uc;
|
||||||
|
this.hotlist = uc.getConferenceHotlist();
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
public String getPageTitle(RenderData rdat)
|
||||||
|
{
|
||||||
|
if (uc.isLoggedIn())
|
||||||
|
return title;
|
||||||
|
else
|
||||||
|
return anon_title;
|
||||||
|
|
||||||
|
} // end getPageTitle
|
||||||
|
|
||||||
|
public String getPageQID()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
|
||||||
|
} // end getPageQID
|
||||||
|
|
||||||
|
public void renderHere(Writer out, RenderData rdat) throws IOException
|
||||||
|
{
|
||||||
|
String norm_font = rdat.getStdFontTag(SIDEBOX_CONTENT_FOREGROUND,2);
|
||||||
|
if (hotlist.size()>0)
|
||||||
|
{ // write out the hotlist....
|
||||||
|
String hilite = rdat.getStdFontTag(SIDEBOX_CONTENT_LINK,2);
|
||||||
|
out.write("<TABLE ALIGN=CENTER BORDER=0 CELLPADDING=0 CELLSPACING=2>\n");
|
||||||
|
Iterator it = hotlist.iterator();
|
||||||
|
while (it.hasNext())
|
||||||
|
{ // get the next hotlist entry and add it to the display
|
||||||
|
ConferenceHotlistEntry hle = (ConferenceHotlistEntry)(it.next());
|
||||||
|
ConferenceContext conf = hle.getConference();
|
||||||
|
String href = "confdisp?sig=" + conf.getEnclosingSIG().getSIGID() + "&conf=" + conf.getConfID();
|
||||||
|
out.write("<TR VALIGN=MIDDLE>\n<TD ALIGN=CENTER WIDTH=" + bullet_width + ">");
|
||||||
|
renderBullet(out,rdat);
|
||||||
|
out.write("</TD>\n<TD ALIGN=LEFT CLASS=\"sidebox\">\n" + norm_font
|
||||||
|
+ "<B><A CLASS=\"sidebox\" HREF=\"" + rdat.getEncodedServletPath(href) + "\">" + hilite
|
||||||
|
+ StringUtil.encodeHTML(conf.getName()) + "</FONT></A></B> ("
|
||||||
|
+ StringUtil.encodeHTML(conf.getEnclosingSIG().getName()) + ")</FONT>\n");
|
||||||
|
if (conf.anyUnread())
|
||||||
|
{ // write out the new-messages tag and its enclosing link
|
||||||
|
out.write(" <A HREF=\"" + rdat.getEncodedServletPath(href + "&rnm=1") + "\">");
|
||||||
|
renderNewMessageTag(out,rdat);
|
||||||
|
out.write("</A>\n");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
out.write("</TD>\n</TR>\n");
|
||||||
|
|
||||||
|
} // end while
|
||||||
|
|
||||||
|
out.write("</TABLE>\n");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else // write the "null" message
|
||||||
|
out.write(norm_font + "<EM>" + null_message + "</EM></FONT>\n");
|
||||||
|
|
||||||
|
if (uc.isLoggedIn())
|
||||||
|
{ // write the link at the end
|
||||||
|
out.write("<P>" + rdat.getStdFontTag(SIDEBOX_CONTENT_FOREGROUND,1)
|
||||||
|
+ "<B>[ <A CLASS=\"sidebox\" HREF=\"" + rdat.getEncodedServletPath("settings?cmd=H") + "\">"
|
||||||
|
+ rdat.getStdFontTag(SIDEBOX_CONTENT_LINK,1) + manage_link + "</FONT></A> ]</B></FONT>");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end renderHere
|
||||||
|
|
||||||
|
} // end class ConferenceBoxImpl
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
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 have no hotlist conferences
|
||||||
|
private String manage_link; // "Manage" link text
|
||||||
|
private String bullet_url; // URL to bullet image
|
||||||
|
private boolean bullet_fixup; // does bullet image need to be run through getFullImagePath?
|
||||||
|
private int bullet_width; // width of bullet image
|
||||||
|
private int bullet_height; // height of bullet image
|
||||||
|
private String newmsg_url; // URL to new messages tag image
|
||||||
|
private boolean newmsg_fixup; // does new messages image need to be run through getFullImagePath?
|
||||||
|
private String newmsg_alt; // ALT text to use for new message tag image
|
||||||
|
private int newmsg_width; // width of new message tag image
|
||||||
|
private int newmsg_height; // height of new message tag image
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public ConferenceBox()
|
||||||
|
{ // do nothing
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private void renderBullet(Writer out, RenderData rdat) throws IOException
|
||||||
|
{
|
||||||
|
synchronized (this)
|
||||||
|
{ // this may be called by more than one class, so protect this part
|
||||||
|
if (bullet_fixup)
|
||||||
|
{ // fix up the bullet URL
|
||||||
|
bullet_url = rdat.getFullImagePath(bullet_url);
|
||||||
|
bullet_fixup = false;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end synchronized block
|
||||||
|
|
||||||
|
out.write("<IMG SRC=\"" + bullet_url + "\" ALT=\"*\" WIDTH=" + bullet_width + " HEIGHT=" + bullet_height
|
||||||
|
+ " BORDER=0>");
|
||||||
|
|
||||||
|
} // end renderBullet
|
||||||
|
|
||||||
|
private void renderNewMessageTag(Writer out, RenderData rdat) throws IOException
|
||||||
|
{
|
||||||
|
synchronized (this)
|
||||||
|
{ // this may be called by more than one class, so protect this part
|
||||||
|
if (newmsg_fixup)
|
||||||
|
{ // fix up the host tag URL
|
||||||
|
newmsg_url = rdat.getFullImagePath(newmsg_url);
|
||||||
|
newmsg_fixup = false;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end synchronized block
|
||||||
|
|
||||||
|
out.write("<IMG SRC=\"" + newmsg_url + "\" ALT=\"" + newmsg_alt + "\" WIDTH=" + newmsg_width + " HEIGHT="
|
||||||
|
+ newmsg_height + " BORDER=0>");
|
||||||
|
|
||||||
|
} // end renderNewMessageTag
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface SideBoxFactory
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void setConfiguration(Element cfg) throws ConfigException
|
||||||
|
{
|
||||||
|
DOMElementHelper cfg_h = new DOMElementHelper(cfg);
|
||||||
|
title = cfg_h.getSubElementText("title");
|
||||||
|
if (title==null)
|
||||||
|
throw new ConfigException("no <title/> specified for conference list sidebox",cfg);
|
||||||
|
title += ":";
|
||||||
|
anon_title = cfg_h.getSubElementText("anon-title");
|
||||||
|
if (anon_title==null)
|
||||||
|
anon_title = title;
|
||||||
|
else
|
||||||
|
anon_title += ":";
|
||||||
|
|
||||||
|
null_message = cfg_h.getSubElementText("null-msg");
|
||||||
|
if (null_message==null)
|
||||||
|
null_message = "You are not a member of any SIGs.";
|
||||||
|
|
||||||
|
manage_link = cfg_h.getSubElementText("manage-link");
|
||||||
|
if (manage_link==null)
|
||||||
|
manage_link = "Manage";
|
||||||
|
|
||||||
|
Element x = cfg_h.getSubElement("bullet");
|
||||||
|
if (x!=null)
|
||||||
|
{ // get the parameters for the bullet image
|
||||||
|
DOMElementHelper x_h = new DOMElementHelper(x);
|
||||||
|
bullet_url = x_h.getElementText();
|
||||||
|
if (StringUtil.isStringEmpty(bullet_url))
|
||||||
|
{ // default the bullet URL and fixup parameter
|
||||||
|
bullet_url = "purple-ball.gif";
|
||||||
|
bullet_fixup = true;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else // get the "fixup" parameter
|
||||||
|
bullet_fixup = x_h.hasAttribute("fixup");
|
||||||
|
|
||||||
|
Integer xi = x_h.getAttributeInt("width");
|
||||||
|
bullet_width = (xi!=null) ? xi.intValue() : 14;
|
||||||
|
xi = x_h.getAttributeInt("height");
|
||||||
|
bullet_height = (xi!=null) ? xi.intValue() : 14;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else
|
||||||
|
{ // just default all the bullet parameters
|
||||||
|
bullet_url = "purple-ball.gif";
|
||||||
|
bullet_fixup = true;
|
||||||
|
bullet_width = 14;
|
||||||
|
bullet_height = 14;
|
||||||
|
|
||||||
|
} // end else
|
||||||
|
|
||||||
|
x = cfg_h.getSubElement("new-image");
|
||||||
|
if (x!=null)
|
||||||
|
{ // get the parameters for the host tag image
|
||||||
|
DOMElementHelper x_h = new DOMElementHelper(x);
|
||||||
|
newmsg_url = x_h.getElementText();
|
||||||
|
if (StringUtil.isStringEmpty(newmsg_url))
|
||||||
|
{ // default the host tag image URL and fixup parameter
|
||||||
|
newmsg_url = "tag_new.gif";
|
||||||
|
newmsg_fixup = true;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else // get the "fixup" parameter
|
||||||
|
newmsg_fixup = x_h.hasAttribute("fixup");
|
||||||
|
|
||||||
|
newmsg_alt = x.getAttribute("alt");
|
||||||
|
if (StringUtil.isStringEmpty(newmsg_alt))
|
||||||
|
newmsg_alt = "New!";
|
||||||
|
|
||||||
|
Integer xi = x_h.getAttributeInt("width");
|
||||||
|
newmsg_width = (xi!=null) ? xi.intValue() : 40;
|
||||||
|
xi = x_h.getAttributeInt("height");
|
||||||
|
newmsg_height = (xi!=null) ? xi.intValue() : 20;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else
|
||||||
|
{ // just default all the host tag parameters
|
||||||
|
newmsg_url = "tag_new.gif";
|
||||||
|
newmsg_fixup = true;
|
||||||
|
newmsg_alt = "New!";
|
||||||
|
newmsg_width = 40;
|
||||||
|
newmsg_height = 20;
|
||||||
|
|
||||||
|
} // end else
|
||||||
|
|
||||||
|
} // end setConfiguration
|
||||||
|
|
||||||
|
public VeniceContent create(VeniceEngine engine, UserContext uc) throws AccessError, DataException
|
||||||
|
{
|
||||||
|
return new ConferenceBoxImpl(uc);
|
||||||
|
|
||||||
|
} // end create
|
||||||
|
|
||||||
|
} // end class ConferenceBox
|
|
@ -0,0 +1,133 @@
|
||||||
|
/*
|
||||||
|
* 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 Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.servlets.format.sideboxes;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
import javax.servlet.*;
|
||||||
|
import javax.servlet.http.*;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
import com.silverwrist.venice.servlets.format.*;
|
||||||
|
|
||||||
|
public class JSPSideBox implements JSPRender
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Attribute name for request attribute
|
||||||
|
protected static final String ATTR_NAME = "com.silverwrist.venice.content.sidebox.JSP";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private JSPSideBoxFactory factory;
|
||||||
|
private VeniceEngine engine;
|
||||||
|
private UserContext uc;
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
JSPSideBox(JSPSideBoxFactory factory, VeniceEngine engine, UserContext uc)
|
||||||
|
{
|
||||||
|
this.factory = factory;
|
||||||
|
this.engine = engine;
|
||||||
|
this.uc = uc;
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External static functions
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static JSPSideBox retrieve(ServletRequest request)
|
||||||
|
{
|
||||||
|
return (JSPSideBox)(request.getAttribute(ATTR_NAME));
|
||||||
|
|
||||||
|
} // end retrieve
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface VeniceContent
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String getPageTitle(RenderData rdat)
|
||||||
|
{
|
||||||
|
return factory.getTitle(uc.isLoggedIn());
|
||||||
|
|
||||||
|
} // end getPageTitle
|
||||||
|
|
||||||
|
public String getPageQID()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
|
||||||
|
} // end getPageQID
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface JSPRender
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void store(ServletRequest request)
|
||||||
|
{
|
||||||
|
request.setAttribute(ATTR_NAME,this);
|
||||||
|
|
||||||
|
} // end store
|
||||||
|
|
||||||
|
public String getTargetJSPName()
|
||||||
|
{
|
||||||
|
return factory.getTargetJSPName();
|
||||||
|
|
||||||
|
} // end getTargetJSPName
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public VeniceEngine getEngine()
|
||||||
|
{
|
||||||
|
return engine;
|
||||||
|
|
||||||
|
} // end getEngine
|
||||||
|
|
||||||
|
public UserContext getUser()
|
||||||
|
{
|
||||||
|
return uc;
|
||||||
|
|
||||||
|
} // end getUser
|
||||||
|
|
||||||
|
public String getString(String key)
|
||||||
|
{
|
||||||
|
return factory.getString(key);
|
||||||
|
|
||||||
|
} // end getString
|
||||||
|
|
||||||
|
public String replaceStrings(String base)
|
||||||
|
{
|
||||||
|
return factory.replaceStrings(base);
|
||||||
|
|
||||||
|
} // end replaceStrings
|
||||||
|
|
||||||
|
} // end class JSPSideBox
|
|
@ -0,0 +1,131 @@
|
||||||
|
/*
|
||||||
|
* 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 Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.servlets.format.sideboxes;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
import org.w3c.dom.*;
|
||||||
|
import com.silverwrist.util.DOMElementHelper;
|
||||||
|
import com.silverwrist.util.StringUtil;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
import com.silverwrist.venice.servlets.format.*;
|
||||||
|
|
||||||
|
public class JSPSideBoxFactory implements SideBoxFactory
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private String title; // title of sidebox for logged-in users
|
||||||
|
private String anon_title; // title of sidebox for not-logged-in users
|
||||||
|
private String format_jsp; // name of formatting JSP file
|
||||||
|
private Map strings; // the strings we can access from the JSP page
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public JSPSideBoxFactory()
|
||||||
|
{ // do nothing
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal functions
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
String getTitle(boolean logged_in)
|
||||||
|
{
|
||||||
|
return (logged_in ? title : anon_title);
|
||||||
|
|
||||||
|
} // end getTitle
|
||||||
|
|
||||||
|
String getTargetJSPName()
|
||||||
|
{
|
||||||
|
return format_jsp;
|
||||||
|
|
||||||
|
} // end getTargetJSPName
|
||||||
|
|
||||||
|
String getString(String key)
|
||||||
|
{
|
||||||
|
return (String)(strings.get(key));
|
||||||
|
|
||||||
|
} // end getString
|
||||||
|
|
||||||
|
String replaceStrings(String base)
|
||||||
|
{
|
||||||
|
return StringUtil.replaceAllVariables(base,strings);
|
||||||
|
|
||||||
|
} // end replaceStrings
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface SideBoxFactory
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void setConfiguration(Element cfg) throws ConfigException
|
||||||
|
{
|
||||||
|
DOMElementHelper cfg_h = new DOMElementHelper(cfg);
|
||||||
|
title = cfg_h.getSubElementText("title");
|
||||||
|
if (title==null)
|
||||||
|
throw new ConfigException("no <title/> specified for sidebox",cfg);
|
||||||
|
title += ":";
|
||||||
|
anon_title = cfg_h.getSubElementText("anon-title");
|
||||||
|
if (anon_title==null)
|
||||||
|
anon_title = title;
|
||||||
|
else
|
||||||
|
anon_title += ":";
|
||||||
|
|
||||||
|
format_jsp = cfg_h.getSubElementText("format-jsp");
|
||||||
|
if (format_jsp==null)
|
||||||
|
throw new ConfigException("no <format-jsp/> specified for sidebox",cfg);
|
||||||
|
|
||||||
|
Element s = cfg_h.getSubElement("strings");
|
||||||
|
if (s!=null)
|
||||||
|
{ // we've got some replacement strings to add
|
||||||
|
HashMap tmp = new HashMap();
|
||||||
|
NodeList sl = s.getChildNodes();
|
||||||
|
for (int i=0; i<sl.getLength(); i++)
|
||||||
|
{ // get all the replacement strings and add them to the map
|
||||||
|
Node n = sl.item(i);
|
||||||
|
if (n.getNodeType()==Node.ELEMENT_NODE)
|
||||||
|
{ // get the text inside this subelement and save it off
|
||||||
|
DOMElementHelper s_h = new DOMElementHelper((Element)n);
|
||||||
|
tmp.put(n.getNodeName(),s_h.getElementText());
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end for
|
||||||
|
|
||||||
|
strings = Collections.unmodifiableMap(tmp);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else // no replacement strings
|
||||||
|
strings = Collections.EMPTY_MAP;
|
||||||
|
|
||||||
|
} // end setConfiguration
|
||||||
|
|
||||||
|
public VeniceContent create(VeniceEngine engine, UserContext uc)
|
||||||
|
{
|
||||||
|
return new JSPSideBox(this,engine,uc);
|
||||||
|
|
||||||
|
} // end create
|
||||||
|
|
||||||
|
} // end class JSPSideBoxFactory
|
282
src/com/silverwrist/venice/servlets/format/sideboxes/SIGBox.java
Normal file
282
src/com/silverwrist/venice/servlets/format/sideboxes/SIGBox.java
Normal file
|
@ -0,0 +1,282 @@
|
||||||
|
/*
|
||||||
|
* 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 Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.servlets.format.sideboxes;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
import org.w3c.dom.*;
|
||||||
|
import com.silverwrist.util.DOMElementHelper;
|
||||||
|
import com.silverwrist.util.StringUtil;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
import com.silverwrist.venice.servlets.format.*;
|
||||||
|
|
||||||
|
public class SIGBox implements SideBoxFactory
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal class that implements the actual sidebox
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
class SIGBoxImpl implements ContentRender, ColorSelectors
|
||||||
|
{
|
||||||
|
private UserContext uc;
|
||||||
|
private List sig_list;
|
||||||
|
|
||||||
|
SIGBoxImpl(UserContext uc) throws DataException
|
||||||
|
{
|
||||||
|
this.uc = uc;
|
||||||
|
this.sig_list = uc.getMemberSIGs();
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
public String getPageTitle(RenderData rdat)
|
||||||
|
{
|
||||||
|
if (uc.isLoggedIn())
|
||||||
|
return title;
|
||||||
|
else
|
||||||
|
return anon_title;
|
||||||
|
|
||||||
|
} // end getPageTitle
|
||||||
|
|
||||||
|
public String getPageQID()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
|
||||||
|
} // end getPageQID
|
||||||
|
|
||||||
|
public void renderHere(Writer out, RenderData rdat) throws IOException
|
||||||
|
{
|
||||||
|
if (sig_list.size()>0)
|
||||||
|
{ // load up the rendering data and render the contents of the list
|
||||||
|
String link_font = rdat.getStdFontTag(SIDEBOX_CONTENT_LINK,2);
|
||||||
|
out.write("<TABLE ALIGN=CENTER BORDER=0 CELLPADDING=0 CELLSPACING=2>\n");
|
||||||
|
Iterator it = sig_list.iterator();
|
||||||
|
while (it.hasNext())
|
||||||
|
{ // write each SIG out in turn
|
||||||
|
SIGContext sig = (SIGContext)(it.next());
|
||||||
|
out.write("<TR VALIGN=MIDDLE>\n<TD ALIGN=CENTER WIDTH=" + bullet_width + ">");
|
||||||
|
renderBullet(out,rdat);
|
||||||
|
out.write("</TD>\n<TD ALIGN=LEFT CLASS=\"sidebox\">\n<A CLASS=\"sidebox\" HREF=\""
|
||||||
|
+ rdat.getEncodedServletPath("sig/" + sig.getAlias()) + "\">" + link_font + "<B>"
|
||||||
|
+ StringUtil.encodeHTML(sig.getName()) + "</B></FONT></A>\n");
|
||||||
|
if (sig.isAdmin())
|
||||||
|
{ // write the host tag at the end
|
||||||
|
out.write(" ");
|
||||||
|
renderHostTag(out,rdat);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
out.write("</TD>\n</TR>\n");
|
||||||
|
|
||||||
|
} // end while
|
||||||
|
|
||||||
|
out.write("</TABLE>\n");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else // write the "no SIGs" message
|
||||||
|
out.write(rdat.getStdFontTag(SIDEBOX_CONTENT_FOREGROUND,2) + "<EM>" + null_message + "</EM></FONT>\n");
|
||||||
|
|
||||||
|
if (uc.isLoggedIn())
|
||||||
|
{ // write the links at the end
|
||||||
|
String hilite = rdat.getStdFontTag(SIDEBOX_CONTENT_LINK,1);
|
||||||
|
out.write("<P>" + rdat.getStdFontTag(SIDEBOX_CONTENT_FOREGROUND,1)
|
||||||
|
+ "<B>[ <A CLASS=\"sidebox\" HREF=\"" + rdat.getEncodedServletPath("settings?cmd=S")
|
||||||
|
+ "\">" + hilite + manage_link + "</FONT></A> ");
|
||||||
|
if (uc.canCreateSIG())
|
||||||
|
out.write("| <A CLASS=\"sidebox\" HREF=\"" + rdat.getEncodedServletPath("sigops?cmd=C") + "\">"
|
||||||
|
+ hilite + create_new_link + "</FONT></A> ");
|
||||||
|
out.write("]</B></FONT>");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end renderHere
|
||||||
|
|
||||||
|
} // end class SIGBoxImpl
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
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 SIGs
|
||||||
|
private String manage_link; // "Manage" link text
|
||||||
|
private String create_new_link; // "Create New" link text
|
||||||
|
private String bullet_url; // URL to bullet image
|
||||||
|
private boolean bullet_fixup; // does bullet image need to be run through getFullImagePath?
|
||||||
|
private int bullet_width; // width of bullet image
|
||||||
|
private int bullet_height; // height of bullet image
|
||||||
|
private String host_url; // URL to host tag image
|
||||||
|
private boolean host_fixup; // does host tag image need to be run through getFullImagePath?
|
||||||
|
private String host_alt; // ALT text to use for host tag image
|
||||||
|
private int host_width; // width of host tag image
|
||||||
|
private int host_height; // height of host tag image
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public SIGBox()
|
||||||
|
{ // do nothing
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private void renderBullet(Writer out, RenderData rdat) throws IOException
|
||||||
|
{
|
||||||
|
synchronized (this)
|
||||||
|
{ // this may be called by more than one class, so protect this part
|
||||||
|
if (bullet_fixup)
|
||||||
|
{ // fix up the bullet URL
|
||||||
|
bullet_url = rdat.getFullImagePath(bullet_url);
|
||||||
|
bullet_fixup = false;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end synchronized block
|
||||||
|
|
||||||
|
out.write("<IMG SRC=\"" + bullet_url + "\" ALT=\"*\" WIDTH=" + bullet_width + " HEIGHT=" + bullet_height
|
||||||
|
+ " BORDER=0>");
|
||||||
|
|
||||||
|
} // end renderBullet
|
||||||
|
|
||||||
|
private void renderHostTag(Writer out, RenderData rdat) throws IOException
|
||||||
|
{
|
||||||
|
synchronized (this)
|
||||||
|
{ // this may be called by more than one class, so protect this part
|
||||||
|
if (host_fixup)
|
||||||
|
{ // fix up the host tag URL
|
||||||
|
host_url = rdat.getFullImagePath(host_url);
|
||||||
|
host_fixup = false;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end synchronized block
|
||||||
|
|
||||||
|
out.write("<IMG SRC=\"" + host_url + "\" ALT=\"" + host_alt + "\" WIDTH=" + host_width + " HEIGHT="
|
||||||
|
+ host_height + " BORDER=0>");
|
||||||
|
|
||||||
|
} // end renderBullet
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface SideBoxFactory
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void setConfiguration(Element cfg) throws ConfigException
|
||||||
|
{
|
||||||
|
DOMElementHelper cfg_h = new DOMElementHelper(cfg);
|
||||||
|
title = cfg_h.getSubElementText("title");
|
||||||
|
if (title==null)
|
||||||
|
throw new ConfigException("no <title/> specified for SIG list sidebox",cfg);
|
||||||
|
title += ":";
|
||||||
|
anon_title = cfg_h.getSubElementText("anon-title");
|
||||||
|
if (anon_title==null)
|
||||||
|
anon_title = title;
|
||||||
|
else
|
||||||
|
anon_title += ":";
|
||||||
|
|
||||||
|
null_message = cfg_h.getSubElementText("null-msg");
|
||||||
|
if (null_message==null)
|
||||||
|
null_message = "You are not a member of any SIGs.";
|
||||||
|
|
||||||
|
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";
|
||||||
|
|
||||||
|
Element x = cfg_h.getSubElement("bullet");
|
||||||
|
if (x!=null)
|
||||||
|
{ // get the parameters for the bullet image
|
||||||
|
DOMElementHelper x_h = new DOMElementHelper(x);
|
||||||
|
bullet_url = x_h.getElementText();
|
||||||
|
if (StringUtil.isStringEmpty(bullet_url))
|
||||||
|
{ // default the bullet URL and fixup parameter
|
||||||
|
bullet_url = "purple-ball.gif";
|
||||||
|
bullet_fixup = true;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else // get the "fixup" parameter
|
||||||
|
bullet_fixup = x_h.hasAttribute("fixup");
|
||||||
|
|
||||||
|
Integer xi = x_h.getAttributeInt("width");
|
||||||
|
bullet_width = (xi!=null) ? xi.intValue() : 14;
|
||||||
|
xi = x_h.getAttributeInt("height");
|
||||||
|
bullet_height = (xi!=null) ? xi.intValue() : 14;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else
|
||||||
|
{ // just default all the bullet parameters
|
||||||
|
bullet_url = "purple-ball.gif";
|
||||||
|
bullet_fixup = true;
|
||||||
|
bullet_width = 14;
|
||||||
|
bullet_height = 14;
|
||||||
|
|
||||||
|
} // end else
|
||||||
|
|
||||||
|
x = cfg_h.getSubElement("host-image");
|
||||||
|
if (x!=null)
|
||||||
|
{ // get the parameters for the host tag image
|
||||||
|
DOMElementHelper x_h = new DOMElementHelper(x);
|
||||||
|
host_url = x_h.getElementText();
|
||||||
|
if (StringUtil.isStringEmpty(host_url))
|
||||||
|
{ // default the host tag image URL and fixup parameter
|
||||||
|
host_url = "tag_host.gif";
|
||||||
|
host_fixup = true;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else // get the "fixup" parameter
|
||||||
|
host_fixup = x_h.hasAttribute("fixup");
|
||||||
|
|
||||||
|
host_alt = x.getAttribute("alt");
|
||||||
|
if (StringUtil.isStringEmpty(host_alt))
|
||||||
|
host_alt = "Host!";
|
||||||
|
|
||||||
|
Integer xi = x_h.getAttributeInt("width");
|
||||||
|
host_width = (xi!=null) ? xi.intValue() : 40;
|
||||||
|
xi = x_h.getAttributeInt("height");
|
||||||
|
host_height = (xi!=null) ? xi.intValue() : 20;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else
|
||||||
|
{ // just default all the host tag parameters
|
||||||
|
host_url = "tag_host.gif";
|
||||||
|
host_fixup = true;
|
||||||
|
host_alt = "Host!";
|
||||||
|
host_width = 40;
|
||||||
|
host_height = 20;
|
||||||
|
|
||||||
|
} // end else
|
||||||
|
|
||||||
|
} // end setConfiguration
|
||||||
|
|
||||||
|
public VeniceContent create(VeniceEngine engine, UserContext uc) throws DataException
|
||||||
|
{
|
||||||
|
return new SIGBoxImpl(uc);
|
||||||
|
|
||||||
|
} // end create
|
||||||
|
|
||||||
|
} // end class SIGBox
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* 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 Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.servlets.format.sideboxes;
|
||||||
|
|
||||||
|
import org.w3c.dom.*;
|
||||||
|
import com.silverwrist.venice.core.ConfigException;
|
||||||
|
import com.silverwrist.venice.core.AccessError;
|
||||||
|
import com.silverwrist.venice.core.DataException;
|
||||||
|
import com.silverwrist.venice.core.SideBoxDescriptor;
|
||||||
|
import com.silverwrist.venice.core.UserContext;
|
||||||
|
import com.silverwrist.venice.core.VeniceEngine;
|
||||||
|
import com.silverwrist.venice.servlets.format.VeniceContent;
|
||||||
|
|
||||||
|
public interface SideBoxFactory
|
||||||
|
{
|
||||||
|
public abstract void setConfiguration(Element cfg) throws ConfigException;
|
||||||
|
|
||||||
|
public abstract VeniceContent create(VeniceEngine engine, UserContext uc) throws AccessError, DataException;
|
||||||
|
|
||||||
|
} // end interface SideBoxFactory
|
109
web/format/sideboxlist.jsp
Normal file
109
web/format/sideboxlist.jsp
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
<%--
|
||||||
|
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 Communities System.
|
||||||
|
|
||||||
|
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s):
|
||||||
|
--%>
|
||||||
|
<%@ page import = "java.util.*" %>
|
||||||
|
<%@ page import = "com.silverwrist.util.StringUtil" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.core.*" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.servlets.Variables" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.servlets.format.*" %>
|
||||||
|
<%
|
||||||
|
SideBoxList data = SideBoxList.retrieve(request);
|
||||||
|
Variables.failIfNull(data);
|
||||||
|
RenderData rdat = RenderConfig.createRenderData(application,request,response);
|
||||||
|
String stdfont = rdat.getStdFontTag(ColorSelectors.CONTENT_FOREGROUND,2);
|
||||||
|
int i;
|
||||||
|
SideBoxDescriptor d;
|
||||||
|
%>
|
||||||
|
<% if (rdat.useHTMLComments()) { %><!-- User sidebox list --><% } %>
|
||||||
|
<% rdat.writeContentHeader(out,"Your Front Page Configuration",null); %>
|
||||||
|
<%= stdfont %><A HREF="<%= rdat.getEncodedServletPath("top") %>">Return to Front Page</A></FONT><P>
|
||||||
|
<% if (data.getInListSize()>0) { %>
|
||||||
|
<TABLE BORDER=0 ALIGN=CENTER CELLPADDING=0 CELLSPACING=3>
|
||||||
|
<% for (i=0; i<data.getInListSize(); i++) { %>
|
||||||
|
<% d = data.getInListItem(i); %>
|
||||||
|
<TR VALIGN=MIDDLE>
|
||||||
|
<TD ALIGN=CENTER WIDTH=16>
|
||||||
|
<% if (i==(data.getInListSize()-1)) { %> <% } else { %>
|
||||||
|
<A HREF="<%= rdat.getEncodedServletPath("settings?cmd=BD&box=" + d.getID()) %>"><IMG
|
||||||
|
SRC="<%= rdat.getFullImagePath("icn_down.gif") %>" ALT="[Down]" BORDER=0 WIDTH=16
|
||||||
|
HEIGHT=16></A>
|
||||||
|
<% } // end if %>
|
||||||
|
</TD>
|
||||||
|
<TD ALIGN=CENTER WIDTH=16>
|
||||||
|
<% if (i==0) { %> <% } else { %>
|
||||||
|
<A HREF="<%= rdat.getEncodedServletPath("settings?cmd=BU&box=" + d.getID()) %>"><IMG
|
||||||
|
SRC="<%= rdat.getFullImagePath("icn_up.gif") %>" ALT="[Up]" BORDER=0 WIDTH=16
|
||||||
|
HEIGHT=16></A>
|
||||||
|
<% } // end if %>
|
||||||
|
</TD>
|
||||||
|
<TD ALIGN=CENTER WIDTH=16>
|
||||||
|
<A HREF="<%= rdat.getEncodedServletPath("settings?cmd=BX&box=" + d.getID()) %>"><IMG
|
||||||
|
SRC="<%= rdat.getFullImagePath("icn_x.gif") %>" ALT="[Remove]" BORDER=0 WIDTH=16
|
||||||
|
HEIGHT=16></A>
|
||||||
|
</TD>
|
||||||
|
<TD ALIGN=LEFT CLASS="content"><%= stdfont %>
|
||||||
|
<B><%= StringUtil.encodeHTML(d.getTitle(false)) %></B>
|
||||||
|
</FONT></TD>
|
||||||
|
</TR>
|
||||||
|
<% } // end for %>
|
||||||
|
</TABLE><P>
|
||||||
|
<TABLE BORDER=0 CELLPADDING=2 CELLSPACING=0>
|
||||||
|
<TR VALIGN=MIDDLE>
|
||||||
|
<TD ALIGN=CENTER WIDTH=16>
|
||||||
|
<IMG SRC="<%= rdat.getFullImagePath("icn_down.gif") %>" ALT="[Down]" BORDER=0 WIDTH=16 HEIGHT=16>
|
||||||
|
</TD>
|
||||||
|
<TD ALIGN=LEFT CLASS="content"><%= stdfont %>
|
||||||
|
Click this symbol to move the specified sidebox down on your Front Page.
|
||||||
|
</FONT></TD>
|
||||||
|
</TR>
|
||||||
|
<TR VALIGN=MIDDLE>
|
||||||
|
<TD ALIGN=CENTER WIDTH=16>
|
||||||
|
<IMG SRC="<%= rdat.getFullImagePath("icn_up.gif") %>" ALT="[Up]" BORDER=0 WIDTH=16 HEIGHT=16>
|
||||||
|
</TD>
|
||||||
|
<TD ALIGN=LEFT CLASS="content"><%= stdfont %>
|
||||||
|
Click this symbol to move the specified sidebox up on your Front Page.
|
||||||
|
</FONT></TD>
|
||||||
|
</TR>
|
||||||
|
<TR VALIGN=MIDDLE>
|
||||||
|
<TD ALIGN=CENTER WIDTH=16>
|
||||||
|
<IMG SRC="<%= rdat.getFullImagePath("icn_x.gif") %>" ALT="[Remove]" BORDER=0 WIDTH=16 HEIGHT=16>
|
||||||
|
</TD>
|
||||||
|
<TD ALIGN=LEFT CLASS="content"><%= stdfont %>
|
||||||
|
Click this symbol to remove the specified sidebox from your Front Page.
|
||||||
|
</FONT></TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
<% } else { %>
|
||||||
|
<%= stdfont %><EM>You have no sideboxes on your Front Page.</EM></FONT>
|
||||||
|
<% } // end if %>
|
||||||
|
<% if (data.getOutListSize()>0) { %>
|
||||||
|
<P>
|
||||||
|
<FORM METHOD="POST" ACTION="<%= rdat.getEncodedServletPath("settings") %>">
|
||||||
|
<DIV CLASS="content"><%= stdfont %>
|
||||||
|
<INPUT TYPE="HIDDEN" NAME="cmd" VALUE="BA">
|
||||||
|
<B>Add sidebox:</B>
|
||||||
|
<SELECT NAME="box" SIZE=1>
|
||||||
|
<% for (i=0; i<data.getOutListSize(); i++) { %>
|
||||||
|
<% d = data.getOutListItem(i); %>
|
||||||
|
<OPTION VALUE="<%= d.getID() %>"><%= StringUtil.encodeHTML(d.getTitle(false)) %></OPTION>
|
||||||
|
<% } // end for %>
|
||||||
|
</SELECT>
|
||||||
|
<INPUT TYPE="IMAGE" SRC="<%= rdat.getFullImagePath("bn_add.gif") %>" NAME="add" ALT="Add"
|
||||||
|
ALIGN=MIDDLE WIDTH=80 HEIGHT=24 BORDER=0>
|
||||||
|
</FONT></DIV>
|
||||||
|
</FORM>
|
||||||
|
<% } // end if %>
|
29
web/format/test/test_sidebox.jsp
Normal file
29
web/format/test/test_sidebox.jsp
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<%--
|
||||||
|
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@silcom.com>,
|
||||||
|
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s):
|
||||||
|
--%>
|
||||||
|
<%@ page import = "com.silverwrist.venice.servlets.Variables" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.servlets.format.*" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.servlets.format.sideboxes.JSPSideBox" %>
|
||||||
|
<%
|
||||||
|
JSPSideBox data = JSPSideBox.retrieve(request);
|
||||||
|
Variables.failIfNull(data);
|
||||||
|
RenderData rdat = RenderConfig.createRenderData(application,request,response);
|
||||||
|
%>
|
||||||
|
<% if (rdat.useHTMLComments()) { %><!-- Test Sidebox Here --><% } %>
|
||||||
|
<%= rdat.getStdFontTag(ColorSelectors.SIDEBOX_CONTENT_FOREGROUND,2) %>
|
||||||
|
<%= data.replaceStrings("${test1}<BR>${test2}<BR>${test3}") %>
|
||||||
|
</FONT>
|
Loading…
Reference in New Issue
Block a user