added community home page - first step into community support

This commit is contained in:
Eric J. Bowersox 2003-06-16 00:45:33 +00:00
parent 80d4ba4212
commit 96b6f27e2c
14 changed files with 319 additions and 11 deletions

View File

@ -57,6 +57,10 @@
<database connection="data"/> <database connection="data"/>
</object> </object>
<object name="index" classname="com.silverwrist.dynamo.index.IndexManagerObject" priority="1">
<database connection="data" namespaces="nscache"/>
</object>
<object name="srm" classname="com.silverwrist.dynamo.security.SRMObject" priority="1"> <object name="srm" classname="com.silverwrist.dynamo.security.SRMObject" priority="1">
<database connection="data" namespaces="nscache"/> <database connection="data" namespaces="nscache"/>
<user-manager cpoint="srm_proxy"/> <user-manager cpoint="srm_proxy"/>

View File

@ -164,6 +164,12 @@
<servlet-class>com.silverwrist.venice.servlet.UserServlet</servlet-class> <servlet-class>com.silverwrist.venice.servlet.UserServlet</servlet-class>
</servlet> </servlet>
<servlet>
<servlet-name>Community</servlet-name>
<description>Displays the community homepage.</description>
<servlet-class>com.silverwrist.venice.servlet.CommunityServlet</servlet-class>
</servlet>
<!-- BEGIN SourceID-SSO Servlets --> <!-- BEGIN SourceID-SSO Servlets -->
<!-- SourceID-SSO Manager Servlet (configuration is loaded here) --> <!-- SourceID-SSO Manager Servlet (configuration is loaded here) -->
@ -281,6 +287,16 @@
<url-pattern>/user/*</url-pattern> <url-pattern>/user/*</url-pattern>
</servlet-mapping> </servlet-mapping>
<servlet-mapping>
<servlet-name>Community</servlet-name>
<url-pattern>/community/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Community</servlet-name>
<url-pattern>/sig/*</url-pattern> <!-- the backwards-compatible mapping -->
</servlet-mapping>
<!-- BEGIN SourceID-SSO Servlet Mappings --> <!-- BEGIN SourceID-SSO Servlet Mappings -->
<!-- Authenticator Servlet --> <!-- Authenticator Servlet -->

View File

@ -40,6 +40,7 @@
<username>veniceuser</username> <username>veniceuser</username>
<password>XYZZY0099</password> <password>XYZZY0099</password>
<connections initial="5" max="20" busywait="true"/> <connections initial="5" max="20" busywait="true"/>
<initialize test="true"/>
</dbconnection> </dbconnection>
<!-- Infrastructure objects --> <!-- Infrastructure objects -->

View File

@ -1370,7 +1370,9 @@ INSERT INTO sbox_master (sbid, sb_nsid, sb_name, type_nsid, type_name, descr) VA
INSERT INTO sbox_context (sbid, ctx_nsid, ctx_name) VALUES INSERT INTO sbox_context (sbid, ctx_nsid, ctx_name) VALUES
(1, 17, 'top' ), (1, 17, 'top' ),
(2, 17, 'top' ), (2, 17, 'top' ),
(3, 17, 'top'); (2, 17, 'community'),
(3, 17, 'top' ),
(3, 17, 'community');
INSERT INTO sbox_props (sbid, nsid, prop_name, prop_value) VALUES INSERT INTO sbox_props (sbid, nsid, prop_name, prop_value) VALUES
(1, 6, 'normal.title', '!Your Communities' ), (1, 6, 'normal.title', '!Your Communities' ),
@ -1383,6 +1385,10 @@ INSERT INTO sbox_deploy (uid, ctx_nsid, ctx_name, param, seq, sbid) VALUES
(1, 17, 'top', NULL, 0, 1), (1, 17, 'top', NULL, 0, 1),
(1, 17, 'top', NULL, 1, 2), (1, 17, 'top', NULL, 1, 2),
(1, 17, 'top', NULL, 2, 3), (1, 17, 'top', NULL, 2, 3),
(1, 17, 'community', '.Community:1', 0, 2),
(1, 17, 'community', '.Community:1', 1, 3),
(2, 17, 'top', NULL, 0, 1), (2, 17, 'top', NULL, 0, 1),
(2, 17, 'top', NULL, 1, 2), (2, 17, 'top', NULL, 1, 2),
(2, 17, 'top', NULL, 2, 3); (2, 17, 'top', NULL, 2, 3),
(2, 17, 'community', '.Community:1', 0, 2),
(2, 17, 'community', '.Community:1', 1, 3);

View File

@ -12,7 +12,7 @@
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
Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. Copyright (C) 2002-03 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
Contributor(s): Contributor(s):
--> -->
@ -157,6 +157,12 @@
<servlet-class>com.silverwrist.venice.servlet.UserServlet</servlet-class> <servlet-class>com.silverwrist.venice.servlet.UserServlet</servlet-class>
</servlet> </servlet>
<servlet>
<servlet-name>Community</servlet-name>
<description>Displays the community homepage.</description>
<servlet-class>com.silverwrist.venice.servlet.CommunityServlet</servlet-class>
</servlet>
<!-- Servlet mappings --> <!-- Servlet mappings -->
<servlet-mapping> <servlet-mapping>
@ -204,6 +210,16 @@
<url-pattern>/user/*</url-pattern> <url-pattern>/user/*</url-pattern>
</servlet-mapping> </servlet-mapping>
<servlet-mapping>
<servlet-name>Community</servlet-name>
<url-pattern>/community/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Community</servlet-name>
<url-pattern>/sig/*</url-pattern> <!-- the backwards-compatible mapping -->
</servlet-mapping>
<!-- Global parameters for the HTTP session --> <!-- Global parameters for the HTTP session -->
<session-config> <session-config>
<session-timeout>60</session-timeout> <!-- 1 hour --> <session-timeout>60</session-timeout> <!-- 1 hour -->

View File

@ -313,6 +313,18 @@ public class StringUtils extends org.apache.commons.lang.StringUtils
} // end split1 } // end split1
/**
* Returns the string equivalent of this object, or <CODE>null</CODE> if the specified object is <CODE>null</CODE>.
*
* @param obj The object to be converted to a string.
* @return See above.
*/
public static final String stringize(Object obj)
{
return ((obj==null) ? null : obj.toString());
} // end stringize
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Static initializer * Static initializer
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------

View File

@ -179,6 +179,12 @@ public class ExternalException extends DynamoException
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
public String getMessageID()
{
return m_message_id;
} // end getMessageID
/** /**
* Sets a replacement parameter for the message. * Sets a replacement parameter for the message.
* *

View File

@ -162,6 +162,12 @@ public class ExternalRuntimeException extends DynamoRuntimeException
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
public String getMessageID()
{
return m_message_id;
} // end getMessageID
/** /**
* Sets a replacement parameter for the message. * Sets a replacement parameter for the message.
* *

View File

@ -70,4 +70,7 @@ public interface VeniceNamespaces
public static final String SIDEBOX_CONTEXT_NAMESPACE = public static final String SIDEBOX_CONTEXT_NAMESPACE =
"http://www.silverwrist.com/NS/venice/2003/05/31/sidebox.context.ids"; "http://www.silverwrist.com/NS/venice/2003/05/31/sidebox.context.ids";
public static final String COMMUNITY_NAMESPACE =
"http://www.silverwrist.com/NS/venice/2003/06/15/community";
} // end interface VeniceNamespaces } // end interface VeniceNamespaces

View File

@ -0,0 +1,19 @@
# 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) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
#
# Contributor(s):
# ---------------------------------------------------------------------------------
# This file has been localized for the en_US locale
invalid.cid=The specified community ID "{0}" is not a valid integer.
no.community=No community ID was specified for this operation.

View File

@ -25,7 +25,9 @@ import com.silverwrist.dynamo.except.*;
import com.silverwrist.dynamo.iface.*; import com.silverwrist.dynamo.iface.*;
import com.silverwrist.dynamo.util.*; import com.silverwrist.dynamo.util.*;
import com.silverwrist.venice.VeniceNamespaces; import com.silverwrist.venice.VeniceNamespaces;
import com.silverwrist.venice.community.CommunityService;
import com.silverwrist.venice.content.*; import com.silverwrist.venice.content.*;
import com.silverwrist.venice.iface.*;
import com.silverwrist.venice.session.SessionInfoParams; import com.silverwrist.venice.session.SessionInfoParams;
public class LibraryVenice public class LibraryVenice
@ -85,6 +87,37 @@ public class LibraryVenice
} // end constructor } // end constructor
/*--------------------------------------------------------------------------------
* Internal operations
*--------------------------------------------------------------------------------
*/
private final int getCommunityParameter(Request req) throws ValidationException
{
Map pmap = req.getParameters();
String cparam = StringUtils.stringize(pmap.get("cid"));
if (cparam==null)
cparam = StringUtils.stringize(pmap.get("cc"));
if (cparam==null)
cparam = StringUtils.stringize(pmap.get("sig"));
if (cparam==null)
return -1; // completely not-specified
try
{ // get the community ID
return Integer.parseInt(cparam.trim());
} // end try
catch (NumberFormatException e)
{ // couldn't be parsed as an integer - damn!
ValidationException ve = new ValidationException(LibraryVenice.class,"LibraryMessages","invalid.cid",e);
ve.setParameter(0,cparam);
throw ve;
} // end catch
} // end getCommunityParameter
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* External operations * External operations
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
@ -101,6 +134,63 @@ public class LibraryVenice
} // end dialogFrameTitle } // end dialogFrameTitle
public VeniceCommunity getCommunity(Request req) throws DatabaseException, ValidationException
{
VeniceCommunity rc = (VeniceCommunity)(PropertyUtils.getPropertyNoErr(req,VeniceNamespaces.COMMUNITY_NAMESPACE,
"current"));
if (rc==null)
{ // get the value of the community ID parameter
int cid = getCommunityParameter(req);
if (cid==-1)
throw new ValidationException(LibraryVenice.class,"LibraryMessages","no.community");
// use that to get the community
ObjectProvider op = (ObjectProvider)(req.queryService(ObjectProvider.class));
CommunityService csvc = (CommunityService)(op.getObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"communities"));
rc = csvc.getCommunity(cid);
// save community reference for next time
req.setObject(VeniceNamespaces.COMMUNITY_NAMESPACE,"current",rc);
} // end if
return rc;
} // end getCommunity
public VeniceCommunity getCommunity(Request req, VeniceCommunity def) throws DatabaseException, ValidationException
{
VeniceCommunity rc = (VeniceCommunity)(PropertyUtils.getPropertyNoErr(req,VeniceNamespaces.COMMUNITY_NAMESPACE,
"current"));
if ((rc==null) && PropertyUtils.hasProperty(req,VeniceNamespaces.COMMUNITY_NAMESPACE,"is.null"))
return null;
if (rc==null)
{ // get the value of the community ID parameter
int cid = getCommunityParameter(req);
if (cid!=-1)
{ // use that to get the community
ObjectProvider op = (ObjectProvider)(req.queryService(ObjectProvider.class));
CommunityService csvc = (CommunityService)(op.getObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"communities"));
rc = csvc.getCommunity(cid);
} // end if
else
{ // just employ the default community
rc = def;
if (rc==null)
req.setObject(VeniceNamespaces.COMMUNITY_NAMESPACE,"is.null",Boolean.TRUE);
} // end else
if (rc!=null) // save community reference for next time
req.setObject(VeniceNamespaces.COMMUNITY_NAMESPACE,"current",rc);
} // end if
return rc;
} // end getCommunity
public String getLocation(Request req) public String getLocation(Request req)
{ {
return (String)(req.getObject(SessionInfoParams.REQ_NAMESPACE,SessionInfoParams.RATTR_LOCATION)); return (String)(req.getObject(SessionInfoParams.REQ_NAMESPACE,SessionInfoParams.RATTR_LOCATION));

View File

@ -0,0 +1,63 @@
/*
* 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) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.servlet;
import com.silverwrist.dynamo.HttpStatusCode;
import com.silverwrist.dynamo.Namespaces;
import com.silverwrist.dynamo.except.*;
import com.silverwrist.dynamo.iface.*;
import com.silverwrist.dynamo.servlet.ServletBase;
import com.silverwrist.dynamo.util.*;
import com.silverwrist.venice.VeniceNamespaces;
import com.silverwrist.venice.community.CommunityService;
import com.silverwrist.venice.iface.*;
public class CommunityServlet extends ServletBase
{
/*--------------------------------------------------------------------------------
* Abstract implementations from class ServletBase
*--------------------------------------------------------------------------------
*/
protected Object process(Request r, Application app) throws Exception
{
// Look up the community.
ObjectProvider op = (ObjectProvider)(r.queryService(ObjectProvider.class));
CommunityService csvc = (CommunityService)(op.getObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"communities"));
VeniceCommunity comm = null;
try
{ // get the community by its alias
comm = csvc.getCommunity(r.getExtraPath().substring(1));
} // end try
catch (DatabaseException e)
{ // handle "not-found" errors in a special way
if (e.getMessageID().equals("cid.notFound"))
return new HttpErrorMessage(HttpStatusCode.E_NOTFOUND);
throw e;
} // end catch
// Execute the script that produces the value.
r.setObject(VeniceNamespaces.COMMUNITY_NAMESPACE,"current",comm);
ScriptExecute exec = (ScriptExecute)(r.queryService(ScriptExecute.class));
return exec.executeScript(r,"/util/comm/homepage.js");
} // end process
} // end class CommunityServlet

View File

@ -0,0 +1,66 @@
// 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) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
//
// Contributor(s):
importPackage(Packages.com.silverwrist.dynamo.iface);
importPackage(Packages.com.silverwrist.dynamo.util);
importPackage(Packages.com.silverwrist.venice.iface);
req = bsf.lookupBean("request");
req_help = bsf.lookupBean("request_help");
user = vlib.getUser(req);
comm = vlib.getCommunity(req);
// Create the page content.
// BEGIN TEMPORARY STUFF
// Find the standard content supplier.
scs = vcast.queryContentBlockProvider(req_help.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"venice-content"));
// Get an instance of the content block representing the page title.
cblk = scs.getContentBlock("content.header");
cblk.setContentParameter("title","Home Page");
cblk.setContentParameter("subtitle",comm.getName());
lipsum = "<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore "
+ "et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut "
+ "aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum "
+ "dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui "
+ "officia deserunt mollit anim id est laborum.</p>";
// Put together a list of objects to render in order.
page_content = new ArrayList();
page_content.add(cblk);
page_content.add(lipsum);
// END TEMPORARY STUFF
// Create the sidebox list.
sideboxes = vcast.querySideboxService(req_help.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"venice-sidebox"));
sidebox_list = sideboxes.getSideboxes(req,VeniceNamespaces.SIDEBOX_CONTEXT_NAMESPACE,"community",comm);
// Create the master view and return it.
rc = new SideboxView(page_content,sidebox_list);
//rc.menuSelector = "community";
rc.pageTitle = comm.getName() + ": Home";
rc.pageQID = "community/" + comm.getAlias();
if (!(user.isAnonymous()))
{ // they only get to configure if they're logged in
rc.configureURL = "TODO";
rc.configureURLType = "SERVLET";
} // end if
dynamo.scriptOutput(rc);

View File

@ -27,7 +27,7 @@
<tr valign="middle"> <tr valign="middle">
<td align="center" width="14">#bullet()</td> <td align="center" width="14">#bullet()</td>
<td align="left"> <td align="left">
<b><a href="#formatURL( "SERVLET" "TODO" )">#encodeHTML( ${c.Name} )</a></b> <b><a href="#formatURL( "SERVLET" "community/${c.Alias}" )">#encodeHTML( ${c.Name} )</a></b>
#if( ${c.isAdministrator($user)} ) #if( ${c.isAdministrator($user)} )
## user is administrator, include the "Host!" graphic ## user is administrator, include the "Host!" graphic
&nbsp;<img src="#formatURL( "IMAGE" "tag_host.gif" )" alt="Host!" width="40" height="20" border="0" /> &nbsp;<img src="#formatURL( "IMAGE" "tag_host.gif" )" alt="Host!" width="40" height="20" border="0" />