diff --git a/conf-sso/sp/dynamo.xml b/conf-sso/sp/dynamo.xml index ecce4cf..fe6ba46 100644 --- a/conf-sso/sp/dynamo.xml +++ b/conf-sso/sp/dynamo.xml @@ -165,6 +165,10 @@ + + + + diff --git a/conf/dynamo-venice.xml b/conf/dynamo-venice.xml index c3aa33a..04ff89f 100644 --- a/conf/dynamo-venice.xml +++ b/conf/dynamo-venice.xml @@ -164,6 +164,10 @@ + + + + diff --git a/conf/venice-db-init-mysql.sql b/conf/venice-db-init-mysql.sql index 583c97c..6a8d324 100644 --- a/conf/venice-db-init-mysql.sql +++ b/conf/venice-db-init-mysql.sql @@ -306,6 +306,47 @@ CREATE TABLE commprops ( PRIMARY KEY (cid, nsid, prop_name) ); +# The master table of sideboxes. +CREATE TABLE sbox_master ( + sbid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # sidebox identifier + sb_nsid INT NOT NULL, # namespace ID of the sidebox + sb_name VARCHAR(255) BINARY NOT NULL, # name of the sidebox + type_nsid INT NOT NULL, # namespace ID of the type of the sidebox + type_name VARCHAR(255) BINARY NOT NULL, # name of the type of the sidebox + descr TINYTEXT NOT NULL, # description of the sidebox + UNIQUE INDEX by_name (sb_nsid, sb_name) + ); + +# This table indicates in what contexts a sidebox may be used. +CREATE TABLE sbox_context ( + sbid INT NOT NULL, # sidebox identifier + ctx_nsid INT NOT NULL, # namespace ID of the context + ctx_name VARCHAR(128) BINARY NOT NULL, # name of the context + PRIMARY KEY (sbid, ctx_nsid, ctx_name), + UNIQUE INDEX by_ctx (ctx_nsid, ctx_name, sbid) + ); + +# Properties to be applied to sideboxes when they are created. +CREATE TABLE sbox_props ( + sbid INT NOT NULL, # sidebox identifier + nsid INT NOT NULL, # property namespace identifier + prop_name VARCHAR(255) BINARY NOT NULL, # property name + prop_value VARCHAR(255), # property value + PRIMARY KEY (sbid, nsid, prop_name) + ); + +# Sidebox deployment table. +CREATE TABLE sbox_deploy ( + uid INT NOT NULL, # user ID + ctx_nsid INT NOT NULL, # namespace ID of the context + ctx_name VARCHAR(128) BINARY NOT NULL, # name of the context + param VARCHAR(255), # context parameter (property serialized) + seq INT NOT NULL, # sequence counter + sbid INT NOT NULL, # sidebox ID + UNIQUE INDEX by_seq (uid, ctx_nsid, ctx_name, param, seq), + UNIQUE INDEX by_sbid (uid, ctx_nsid, ctx_name, param, sbid) + ); + ############################################################################## # Set table access rights ############################################################################## @@ -339,7 +380,9 @@ INSERT INTO namespaces (nsid, namespace) VALUES (13, 'http://www.silverwrist.com/NS/venice/2003/05/24/system.permissions' ), (14, 'http://www.silverwrist.com/NS/venice/2003/05/28/community.permissions'), (15, 'http://www.silverwrist.com/NS/venice/2003/05/29/community.profile' ), - (16, 'http://www.silverwrist.com/NS/venice/2003/05/30/community.globals' ); + (16, 'http://www.silverwrist.com/NS/venice/2003/05/30/community.globals' ), + (17, 'http://www.silverwrist.com/NS/venice/2003/05/31/sidebox.context.ids' ), + (18, 'http://www.silverwrist.com/NS/venice/2003/05/31/test.sideboxes' ); # Initial global properties setup INSERT INTO globalprop (nsid, prop_name, prop_value) VALUES @@ -1138,3 +1181,17 @@ INSERT INTO menuitems (menuid, sequence, itemtype, text, linktype, link) VALUES (4, 1, 'TEXT', 'Users', 'SERVLET', 'find_users.js.vs' ), (4, 2, 'TEXT', 'Categories', 'SERVLET', 'find_categories.js.vs' ); UPDATE menuitems SET ifdef_var = 'use_categories' WHERE menuid = 4 AND sequence = 2; + +# Create the sideboxes tables. +INSERT INTO sbox_master (sbid, sb_nsid, sb_name, type_nsid, type_name, descr) VALUES + (1, 18, 'test1', 18, 'test', 'Test Sidebox #1'), + (2, 18, 'test2', 18, 'test', 'Test Sidebox #2'); +INSERT INTO sbox_context (sbid, ctx_nsid, ctx_name) VALUES + (1, 17, 'top'), + (2, 17, 'top'); + +INSERT INTO sbox_deploy (uid, ctx_nsid, ctx_name, param, seq, sbid) VALUES + (1, 17, 'top', NULL, 0, 1), + (1, 17, 'top', NULL, 1, 2), + (2, 17, 'top', NULL, 0, 1), + (2, 17, 'top', NULL, 1, 2); diff --git a/src/venice-base/com/silverwrist/venice/VeniceNamespaces.java b/src/venice-base/com/silverwrist/venice/VeniceNamespaces.java index 6146f96..b950104 100644 --- a/src/venice-base/com/silverwrist/venice/VeniceNamespaces.java +++ b/src/venice-base/com/silverwrist/venice/VeniceNamespaces.java @@ -67,4 +67,7 @@ public interface VeniceNamespaces public static final String COMMUNITY_GLOBALS_NAMESPACE = "http://www.silverwrist.com/NS/venice/2003/05/30/community.globals"; + public static final String SIDEBOX_CONTEXT_NAMESPACE = + "http://www.silverwrist.com/NS/venice/2003/05/31/sidebox.context.ids"; + } // end interface VeniceNamespaces diff --git a/src/venice-base/com/silverwrist/venice/community/CommunityManager.java b/src/venice-base/com/silverwrist/venice/community/CommunityManager.java index 6033e87..aef4963 100644 --- a/src/venice-base/com/silverwrist/venice/community/CommunityManager.java +++ b/src/venice-base/com/silverwrist/venice/community/CommunityManager.java @@ -34,8 +34,112 @@ import com.silverwrist.venice.SearchMode; import com.silverwrist.venice.VeniceNamespaces; import com.silverwrist.venice.iface.*; -public class CommunityManager implements NamedObject, ComponentInitialize, ComponentShutdown, CommunityService +public class CommunityManager + implements NamedObject, ComponentInitialize, ComponentShutdown, CommunityService, CommunityProxyService { + /*-------------------------------------------------------------------------------- + * Internal class implementing community proxies + *-------------------------------------------------------------------------------- + */ + + private class MyCommunityProxy extends CommunityProxy + { + /*==================================================================== + * Attributes + *==================================================================== + */ + + private VeniceCommunity m_real_community = null; + + /*==================================================================== + * Constructors + *==================================================================== + */ + + MyCommunityProxy(int cid) + { + super(cid); + + } // end constructor + + /*==================================================================== + * Abstract implementations from class CommunityProxy + *==================================================================== + */ + + protected synchronized VeniceCommunity getRealCommunity() + { + if (m_real_community==null) + { // need to retrieve the real community... + try + { // get the real community... + m_real_community = CommunityManager.this.getCommunity(m_id); + + } // end try + catch (DatabaseException e) + { // wrap it in a runtime exception type + throw new ProxyException(e); + + } // end catch + + } // end if + + return m_real_community; + + } // end getRealCommunity + + } // end class MyCommunityProxy + + /*-------------------------------------------------------------------------------- + * Internal property serializer class + *-------------------------------------------------------------------------------- + */ + + private class CommunitySerializer implements PropertySerializer + { + /*==================================================================== + * Constructor + *==================================================================== + */ + + CommunitySerializer() + { // do nothing + } // end constructor + + /*==================================================================== + * Implementations from interface PropertySerializer + *==================================================================== + */ + + public String serializeProperty(Object value) + { + if (value instanceof VeniceCommunity) + return "Community:" + String.valueOf(((VeniceCommunity)value).getCID()); + + return null; + + } // end serializeProperty + + public Object deserializeProperty(String value) + { + try + { // look for our known prefixes + if (value.startsWith("Community:")) + return getCommunityProxy(Integer.parseInt(value.substring(10))); + + return null; + + } // end try + catch (NumberFormatException e) + { // number parse blew up... + return null; + + } // end catch + + } // end deserializeProperty + + } // end class CommunitySerializer + /*-------------------------------------------------------------------------------- * Static data members *-------------------------------------------------------------------------------- @@ -58,6 +162,7 @@ public class CommunityManager implements NamedObject, ComponentInitialize, Compo private CategoryService m_cats; // category service object private ReferenceMap m_id_to_comm; // ReferenceMap of community IDs to communities private ReferenceMap m_alias_to_comm; // ReferenceMap of community aliases to communities + private ComponentShutdown m_pszreg; // property serializer registration /*-------------------------------------------------------------------------------- * Constructor @@ -193,6 +298,11 @@ public class CommunityManager implements NamedObject, ComponentInitialize, Compo // Get the dynamic update poster. m_post = (PostDynamicUpdate)(services.queryService(PostDynamicUpdate.class)); + // Register our property serializer to let Community objects be serialized. + PropertySerializerRegistration psreg = + (PropertySerializerRegistration)(services.queryService(PropertySerializerRegistration.class)); + m_pszreg = psreg.registerPropertySerializer(new CommunitySerializer()); + } // end initialize /*-------------------------------------------------------------------------------- @@ -202,8 +312,12 @@ public class CommunityManager implements NamedObject, ComponentInitialize, Compo public void shutdown() { + m_pszreg.shutdown(); + m_pszreg = null; m_id_to_comm.clear(); m_alias_to_comm.clear(); + m_post = null; + m_alook = null; m_cats = null; m_users = null; m_srm = null; @@ -370,4 +484,21 @@ public class CommunityManager implements NamedObject, ComponentInitialize, Compo } // end getNumCommunitiesInCategory + /*-------------------------------------------------------------------------------- + * Implementations from interface CommunityProxyService + *-------------------------------------------------------------------------------- + */ + + public synchronized VeniceCommunity getCommunityProxy(int cid) + { + Integer key = new Integer(cid); + VeniceCommunity rc = (VeniceCommunity)(m_id_to_comm.get(key)); + if (rc!=null) + m_alias_to_comm.put(rc.getAlias(),(CommunityImpl)rc); + else + rc = new MyCommunityProxy(cid); + return rc; + + } // end getCommunityProxy + } // end class CommunityManager diff --git a/src/venice-base/com/silverwrist/venice/community/CommunityProxy.java b/src/venice-base/com/silverwrist/venice/community/CommunityProxy.java new file mode 100644 index 0000000..e7d6324 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/community/CommunityProxy.java @@ -0,0 +1,313 @@ +/* + * The contents of this file are subject to the Mozilla Public License Version 1.1 + * (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at . + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT + * WARRANTY OF ANY KIND, either express or implied. See the License for the specific + * language governing rights and limitations under the License. + * + * The Original Code is the Venice Web Communities System. + * + * The Initial Developer of the Original Code is Eric J. Bowersox , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.community; + +import java.security.Principal; +import java.security.acl.AclNotFoundException; +import java.util.*; +import com.silverwrist.dynamo.except.*; +import com.silverwrist.dynamo.iface.*; +import com.silverwrist.venice.CommunityVisibility; +import com.silverwrist.venice.iface.*; + +abstract class CommunityProxy implements VeniceCommunity, DynamicWrapper +{ + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + protected int m_id; + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + CommunityProxy(int cid) + { + m_id = cid; + + } // end constructor + + /*-------------------------------------------------------------------------------- + * Abstract operations + *-------------------------------------------------------------------------------- + */ + + protected abstract VeniceCommunity getRealCommunity(); + + /*-------------------------------------------------------------------------------- + * Overrides from class Object + *-------------------------------------------------------------------------------- + */ + + public boolean equals(Object o) + { + if (o==null) + return false; + if (o instanceof VeniceCommunity) + return (((VeniceCommunity)o).getCID()==m_id); + return false; + + } // end equals + + public int hashCode() + { + return m_id; + + } // end hashCode + + public String toString() + { + return "Community #" + m_id; + + } // end toString + + /*-------------------------------------------------------------------------------- + * Implementations from interface NamedObject + *-------------------------------------------------------------------------------- + */ + + /** + * Returns the name of this community. + * + * @return The name of this community. + */ + public String getName() + { + return getRealCommunity().getName(); + + } // end getName + + /*-------------------------------------------------------------------------------- + * Implementations from interface ObjectProvider + *-------------------------------------------------------------------------------- + */ + + /** + * Retrieves an object from this ObjectProvider. + * + * @param namespace The namespace to interpret the name relative to. + * @param name The name of the object to be retrieved. + * @return The object reference specified. + */ + public Object getObject(String namespace, String name) + { + return getRealCommunity().getObject(namespace,name); + + } // end getObject + + /*-------------------------------------------------------------------------------- + * Implementations from interface SecureObjectStore + *-------------------------------------------------------------------------------- + */ + + public Object setObject(DynamoUser caller, String namespace, String name, Object value) + throws DatabaseException, DynamoSecurityException + { + return getRealCommunity().setObject(caller,namespace,name,value); + + } // end setObject + + public Object removeObject(DynamoUser caller, String namespace, String name) + throws DatabaseException, DynamoSecurityException + { + return getRealCommunity().removeObject(caller,namespace,name); + + } // end removeObject + + public Collection getNamespaces() throws DatabaseException + { + return getRealCommunity().getNamespaces(); + + } // end getNamespaces + + public Collection getNamesForNamespace(String namespace) throws DatabaseException + { + return getRealCommunity().getNamesForNamespace(namespace); + + } // end getNamesForNamespace + + /*-------------------------------------------------------------------------------- + * Implementations from interface VeniceCommunity + *-------------------------------------------------------------------------------- + */ + + public int getCID() + { + return m_id; + + } // end getCID + + public int getMemberGID() + { + return getRealCommunity().getMemberGID(); + + } // end getMemberGID + + public DynamoGroup getMemberGroup() throws DatabaseException + { + return getRealCommunity().getMemberGroup(); + + } // end getMemberGroup + + public int getHostGID() + { + return getRealCommunity().getHostGID(); + + } // end getHostGID + + public DynamoGroup getHostGroup() throws DatabaseException + { + return getRealCommunity().getHostGroup(); + + } // end getHostGroup + + public int getHostUID() + { + return getRealCommunity().getHostUID(); + + } // end getHostUID + + public DynamoUser getHostUser() throws DatabaseException + { + return getRealCommunity().getHostUser(); + + } // end getHostUser + + public DynamoAcl getAcl() throws DatabaseException, AclNotFoundException + { + return getRealCommunity().getAcl(); + + } // end getAcl + + public int getCategoryID() + { + return getRealCommunity().getCategoryID(); + + } // end getCategoryID + + public VeniceCategory getCategory() throws DatabaseException + { + return getRealCommunity().getCategory(); + + } // end getCategory + + public synchronized void setCategoryID(DynamoUser caller, int catid) + throws DatabaseException, DynamoSecurityException + { + getRealCommunity().setCategoryID(caller,catid); + + } // end setCategoryID + + public void setCategory(DynamoUser caller, VeniceCategory cat) throws DatabaseException, DynamoSecurityException + { + this.setCategoryID(caller,cat.getCategoryID()); + + } // end setCategory + + public CommunityVisibility getVisibility() + { + return getRealCommunity().getVisibility(); + + } // end getVisibility + + public synchronized void setVisibility(DynamoUser caller, CommunityVisibility vis) + throws DatabaseException, DynamoSecurityException + { + getRealCommunity().setVisibility(caller,vis); + + } // end setVisibility + + public synchronized void setName(DynamoUser caller, String name) throws DatabaseException, DynamoSecurityException + { + getRealCommunity().setName(caller,name); + + } // end setName + + public String getAlias() + { + return getRealCommunity().getAlias(); + + } // end getAlias + + public synchronized void setAlias(DynamoUser caller, String alias) throws DatabaseException, DynamoSecurityException + { + getRealCommunity().setAlias(caller,alias); + + } // end setAlias + + public java.util.Date getCreationDate() + { + return getRealCommunity().getCreationDate(); + + } // end getCreationDate + + public java.util.Date getLastAccessDate() + { + return getRealCommunity().getLastAccessDate(); + + } // end getLastAccessDate + + public synchronized void setLastAccessDate(DynamoUser caller, java.util.Date date) + throws DatabaseException, DynamoSecurityException + { + getRealCommunity().setLastAccessDate(caller,date); + + } // end setLastAccessedDate + + public java.util.Date getLastUpdateDate() + { + return getRealCommunity().getLastUpdateDate(); + + } // end getLastUpdateDate + + public synchronized void setLastUpdateDate(DynamoUser caller, java.util.Date date) + throws DatabaseException, DynamoSecurityException + { + getRealCommunity().setLastUpdateDate(caller,date); + + } // end setLastUpdateDate + + public void grantAccess(DynamoUser caller, Principal subject, String auth_namespace, String auth_name, + String source_info, String auth_info, boolean single_use) + throws AuthenticationException, DatabaseException, DynamoSecurityException + { + getRealCommunity().grantAccess(caller,subject,auth_namespace,auth_name,source_info,auth_info,single_use); + + } // end grantAccess + + public void revokeAccess(DynamoUser caller, Principal subject) throws DatabaseException, DynamoSecurityException + { + getRealCommunity().revokeAccess(caller,subject); + + } // end revokeAccess + + /*-------------------------------------------------------------------------------- + * Implementations from interface DynamicWrapper + *-------------------------------------------------------------------------------- + */ + + public Object unwrap() + { + return getRealCommunity(); + + } // end unwrap + +} // end class CommunityProxy diff --git a/src/venice-base/com/silverwrist/venice/community/CommunityProxyService.java b/src/venice-base/com/silverwrist/venice/community/CommunityProxyService.java new file mode 100644 index 0000000..27819d2 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/community/CommunityProxyService.java @@ -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 . + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT + * WARRANTY OF ANY KIND, either express or implied. See the License for the specific + * language governing rights and limitations under the License. + * + * The Original Code is the Venice Web Communities System. + * + * The Initial Developer of the Original Code is Eric J. Bowersox , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.community; + +import com.silverwrist.venice.iface.VeniceCommunity; + +public interface CommunityProxyService +{ + public VeniceCommunity getCommunityProxy(int cid); + +} // end interface CommunityProxyService diff --git a/src/venice-base/com/silverwrist/venice/except/SideboxException.java b/src/venice-base/com/silverwrist/venice/except/SideboxException.java new file mode 100644 index 0000000..fc5cb36 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/except/SideboxException.java @@ -0,0 +1,60 @@ +/* + * The contents of this file are subject to the Mozilla Public License Version 1.1 + * (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at . + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT + * WARRANTY OF ANY KIND, either express or implied. See the License for the specific + * language governing rights and limitations under the License. + * + * The Original Code is the Venice Web Communities System. + * + * The Initial Developer of the Original Code is Eric J. Bowersox , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.except; + +import com.silverwrist.dynamo.except.ExternalException; + +public class SideboxException extends ExternalException +{ + /*-------------------------------------------------------------------------------- + * Constructors + *-------------------------------------------------------------------------------- + */ + + /** + * Constructs a new SideboxException instance. + * + * @param caller The classname of the class that's creating the exception. Its class loader + * and package name will be used, together with bundle, to find the + * resource bundle. + * @param bundle The name of the resource bundle to be loaded. + * @param message_id The identifier of the message to be loaded from the bundle. + */ + public SideboxException(Class caller, String bundle, String message_id) + { + super(caller,bundle,message_id); + + } // end constructor + + /** + * Constructs a new SideboxException instance. + * + * @param caller The classname of the class that's creating the exception. Its class loader + * and package name will be used, together with bundle, to find the + * resource bundle. + * @param bundle The name of the resource bundle to be loaded. + * @param message_id The identifier of the message to be loaded from the bundle. + * @param inner The exception to be nested inside this one. + */ + public SideboxException(Class caller, String bundle, String message_id, Throwable inner) + { + super(caller,bundle,message_id,inner); + + } // end constructor + +} // end class SideboxException diff --git a/src/venice-base/com/silverwrist/venice/iface/SideboxFactory.java b/src/venice-base/com/silverwrist/venice/iface/SideboxFactory.java new file mode 100644 index 0000000..00f1b7b --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/iface/SideboxFactory.java @@ -0,0 +1,27 @@ +/* + * The contents of this file are subject to the Mozilla Public License Version 1.1 + * (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at . + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT + * WARRANTY OF ANY KIND, either express or implied. See the License for the specific + * language governing rights and limitations under the License. + * + * The Original Code is the Venice Web Communities System. + * + * The Initial Developer of the Original Code is Eric J. Bowersox , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.iface; + +import com.silverwrist.dynamo.except.DynamoException; +import com.silverwrist.dynamo.iface.Request; + +public interface SideboxFactory +{ + public Sidebox createSidebox(Request req) throws DynamoException; + +} // end interface SideboxFactory diff --git a/src/venice-base/com/silverwrist/venice/iface/SideboxTypeFactory.java b/src/venice-base/com/silverwrist/venice/iface/SideboxTypeFactory.java new file mode 100644 index 0000000..b2c6c65 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/iface/SideboxTypeFactory.java @@ -0,0 +1,28 @@ +/* + * The contents of this file are subject to the Mozilla Public License Version 1.1 + * (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at . + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT + * WARRANTY OF ANY KIND, either express or implied. See the License for the specific + * language governing rights and limitations under the License. + * + * The Original Code is the Venice Web Communities System. + * + * The Initial Developer of the Original Code is Eric J. Bowersox , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.iface; + +import com.silverwrist.dynamo.except.DynamoException; +import com.silverwrist.dynamo.iface.ObjectProvider; + +public interface SideboxTypeFactory +{ + public SideboxFactory createFactory(String type_namespace, String type_name, String box_namespace, String box_name, + ObjectProvider properties) throws DynamoException; + +} // end interface SideboxTypeFactory diff --git a/src/venice-base/com/silverwrist/venice/script/LibraryVeniceCast.java b/src/venice-base/com/silverwrist/venice/script/LibraryVeniceCast.java index d702a1b..df50ca3 100644 --- a/src/venice-base/com/silverwrist/venice/script/LibraryVeniceCast.java +++ b/src/venice-base/com/silverwrist/venice/script/LibraryVeniceCast.java @@ -24,6 +24,7 @@ import com.silverwrist.venice.app.AdvancedUserService; import com.silverwrist.venice.community.CategoryService; import com.silverwrist.venice.community.CommunityService; import com.silverwrist.venice.iface.*; +import com.silverwrist.venice.sidebox.SideboxService; public class LibraryVeniceCast { @@ -125,6 +126,12 @@ public class LibraryVeniceCast } // end queryRenderImage + public final SideboxService querySideboxService(Object obj) + { + return (SideboxService)query(obj,SideboxService.class); + + } // end querySideboxService + public final UserDefaultPropertyNamespace queryUserDefaultPropertyNamespace(Object obj) { return (UserDefaultPropertyNamespace)query(obj,UserDefaultPropertyNamespace.class); diff --git a/src/venice-base/com/silverwrist/venice/sidebox/SideboxManager.java b/src/venice-base/com/silverwrist/venice/sidebox/SideboxManager.java new file mode 100644 index 0000000..523ca68 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/sidebox/SideboxManager.java @@ -0,0 +1,360 @@ +/* + * The contents of this file are subject to the Mozilla Public License Version 1.1 + * (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at . + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT + * WARRANTY OF ANY KIND, either express or implied. See the License for the specific + * language governing rights and limitations under the License. + * + * The Original Code is the Venice Web Communities System. + * + * The Initial Developer of the Original Code is Eric J. Bowersox , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.sidebox; + +import java.util.*; +import org.apache.commons.collections.*; +import org.apache.log4j.Logger; +import org.w3c.dom.*; +import com.silverwrist.util.xml.*; +import com.silverwrist.dynamo.db.NamespaceCache; +import com.silverwrist.dynamo.except.*; +import com.silverwrist.dynamo.iface.*; +import com.silverwrist.dynamo.util.*; +import com.silverwrist.venice.except.*; +import com.silverwrist.venice.iface.*; +import com.silverwrist.venice.session.SessionInfoParams; +import com.silverwrist.venice.sidebox.test.TestSideboxes; + +public class SideboxManager implements NamedObject, ComponentInitialize, ComponentShutdown, SideboxService +{ + /*-------------------------------------------------------------------------------- + * Internal class implementing ObjectProvider to initialize SideboxFactory + *-------------------------------------------------------------------------------- + */ + + private class InitProps implements ObjectProvider + { + /*==================================================================== + * Attributes + *==================================================================== + */ + + private int m_sbid; // sidebox identifier + private ReferenceMap m_properties; // property cache + + /*==================================================================== + * Constructor + *==================================================================== + */ + + InitProps(int sbid) + { + m_sbid = sbid; + m_properties = new ReferenceMap(ReferenceMap.HARD,ReferenceMap.SOFT); + + } // end constructor + + /*==================================================================== + * Overrides from class Object + *==================================================================== + */ + + public String toString() + { + return "Sidebox Properties For Sidebox #" + m_sbid; + + } // end toString + + /*==================================================================== + * Implementations from interface ObjectProvider + *==================================================================== + */ + + public Object getObject(String namespace, String name) + { + try + { // convert the namespace name to an ID here + PropertyKey key = new PropertyKey(m_ns_cache.namespaceNameToId(namespace),name); + Object rc = null; + synchronized (this) + { // start by looking in the properties map + rc = m_properties.get(key); + if (rc==null) + { // no use - need to try the database + rc = m_ops.getSideboxProperty(m_sbid,key); + if (rc!=null) + { // found in the database + m_properties.put(key,rc); + logger.debug("value found in database"); + + } // end if + + } // end if + else + logger.debug("value found in cache"); + + } // end synchronized block + + if (rc==null) + { // the object was not found + logger.debug("value not found"); + throw new NoSuchObjectException(this.toString(),namespace,name); + + } // end if + + return rc; + + } // end try + catch (DatabaseException e) + { // translate into our NoSuchObjectException but retain the DatabaseException + logger.debug("Database exception while doing find",e); + throw new NoSuchObjectException(this.toString(),namespace,name,e); + + } // end catch + + } // end getObject + + } // end class InitProps + + /*-------------------------------------------------------------------------------- + * Static data members + *-------------------------------------------------------------------------------- + */ + + private static Logger logger = Logger.getLogger(SideboxManager.class); + + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + private String m_name; // this object's name + private SideboxOps m_ops; // operations object + private NamespaceCache m_ns_cache; // namespace cache object + private Hashtable m_qnk_to_tf; // maps QualifiedNameKey to SideboxTypeFactory + private Hashtable m_ns_to_tf; // maps namespace to SideboxTypeFactory + private ReferenceMap m_pk_to_fact; // maps PropertyKey to SideboxFactory + private ReferenceMap m_id_to_type; // maps sidebox IDs to types + private ReferenceMap m_id_to_name; // maps sidebox IDs to names + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public SideboxManager() + { + m_qnk_to_tf = new Hashtable(); + m_ns_to_tf = new Hashtable(); + m_pk_to_fact = new ReferenceMap(ReferenceMap.HARD,ReferenceMap.SOFT); + m_id_to_type = new ReferenceMap(ReferenceMap.HARD,ReferenceMap.SOFT); + m_id_to_name = new ReferenceMap(ReferenceMap.HARD,ReferenceMap.SOFT); + m_ns_to_tf.put(TestSideboxes.NAMESPACE,new TestSideboxes()); + + } // end constructor + + /*-------------------------------------------------------------------------------- + * Implementations from interface NamedObject + *-------------------------------------------------------------------------------- + */ + + public String getName() + { + return m_name; + + } // end getName + + /*-------------------------------------------------------------------------------- + * Implementations from interface ComponentInitialize + *-------------------------------------------------------------------------------- + */ + + /** + * Initialize the component. + * + * @param config_root Pointer to the section of the Dynamo XML configuration file that configures this + * particular component. This is to be considered "read-only" by the component. + * @param services An implementation of {@link com.silverwrist.dynamo.iface.ServiceProvider ServiceProvider} + * which provides initialization services to the component. This will include an implementation + * of {@link com.silverwrist.dynamo.iface.ObjectProvider ObjectProvider} which may be used to + * get information about other objects previously initialized by the application. + * @exception com.silverwrist.dynamo.except.ConfigException If an error is encountered in the component + * configuration. + */ + public void initialize(Element config_root, ServiceProvider services) throws ConfigException + { + logger.info("SideboxManager initializing"); + + XMLLoader loader = XMLLoader.get(); + String name_pool = null, name_nscache = null; + try + { // verify the right node name + loader.verifyNodeName(config_root,"object"); + + // get the object's name + m_name = loader.getAttribute(config_root,"name"); + + // get the name of the database pool and namespace cache + DOMElementHelper config_root_h = new DOMElementHelper(config_root); + Element foo = loader.getSubElement(config_root_h,"database"); + name_pool = loader.getAttribute(foo,"connection"); + name_nscache = loader.getAttribute(foo,"namespaces"); + + } // end try + catch (XMLLoadException e) + { // error loading XML config data + logger.fatal("XML loader exception in CommunityManager",e); + throw new ConfigException(e); + + } // end catch + + // Get the database connection pool. + DBConnectionPool pool = GetObjectUtils.getDatabaseConnection(services,name_pool); + + // Get the database operations object. + m_ops = SideboxOps.get(pool); + + // Get the namespace cache. + m_ns_cache = (NamespaceCache)(GetObjectUtils.getDynamoComponent(services,NamespaceCache.class,name_nscache)); + + } // end initialize + + /*-------------------------------------------------------------------------------- + * Implementations from interface ComponentShutdown + *-------------------------------------------------------------------------------- + */ + + public void shutdown() + { + m_ns_cache = null; + m_ops.dispose(); + m_ops = null; + m_id_to_type.clear(); + m_id_to_name.clear(); + m_pk_to_fact.clear(); + m_qnk_to_tf.clear(); + m_ns_to_tf.clear(); + + } // end shutdown + + /*-------------------------------------------------------------------------------- + * Implementations from interface SideboxService + *-------------------------------------------------------------------------------- + */ + + public List getSideboxes(Request req, String context_namespace, String context_name, Object context_param) + throws DynamoException + { + // Start by getting the current user object. + SessionInfoProvider sip = (SessionInfoProvider)(req.queryService(SessionInfoProvider.class)); + SessionInfo si = sip.getSessionInfo(); + DynamoUser user = (DynamoUser)(si.getObject(SessionInfoParams.NAMESPACE,SessionInfoParams.ATTR_USER)); + if (logger.isDebugEnabled()) + logger.debug("Retrieving sidebox list for user: " + user.getName()); + + // Get the IDs of all the sideboxes. + int[] ids = m_ops.getSideboxIDList(user.getUID(),m_ns_cache.namespaceNameToId(context_namespace),context_name, + context_param); + if (logger.isDebugEnabled()) + logger.debug("Returned " + ids.length + " sideboxes"); + if (ids.length==0) + return Collections.EMPTY_LIST; + + // Create the return list. + ArrayList rc = new ArrayList(ids.length); + for (int i=0; i. +# +# Software distributed under the License is distributed on an "AS IS" basis, WITHOUT +# WARRANTY OF ANY KIND, either express or implied. See the License for the specific +# language governing rights and limitations under the License. +# +# The Original Code is the Venice Web Communities System. +# +# The Initial Developer of the Original Code is Eric J. Bowersox , +# for Silverwrist Design Studios. Portions created by Eric J. Bowersox are +# Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. +# +# Contributor(s): +# --------------------------------------------------------------------------------- +# This file has been localized for the en_US locale +context.param.ser=Unable to serialize context parameter of class {0}. +no.sidebox=Unable to find definition for sidebox with ID #{0}. +property.deserialize=The value of property "{0}" could not be deserialized. +no.sbtype=Unable to find sidebox type factory for type namespace {0}, name {1}. diff --git a/src/venice-base/com/silverwrist/venice/sidebox/SideboxOps.java b/src/venice-base/com/silverwrist/venice/sidebox/SideboxOps.java new file mode 100644 index 0000000..7fd358b --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/sidebox/SideboxOps.java @@ -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 . + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT + * WARRANTY OF ANY KIND, either express or implied. See the License for the specific + * language governing rights and limitations under the License. + * + * The Original Code is the Venice Web Communities System. + * + * The Initial Developer of the Original Code is Eric J. Bowersox , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.sidebox; + +import com.silverwrist.dynamo.db.OpsBase; +import com.silverwrist.dynamo.except.*; +import com.silverwrist.dynamo.iface.*; +import com.silverwrist.dynamo.util.*; + +abstract class SideboxOps extends OpsBase +{ + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + protected SideboxOps(DBConnectionPool pool) + { + super(pool); + + } // end constructor + + /*-------------------------------------------------------------------------------- + * Abstract operations + *-------------------------------------------------------------------------------- + */ + + abstract int[] getSideboxIDList(int uid, int context_nsid, String context_name, Object context_param) + throws DatabaseException; + + abstract PropertyKey getSideboxType(int sbid) throws DatabaseException; + + abstract PropertyKey getSideboxIdentity(int sbid) throws DatabaseException; + + abstract Object getSideboxProperty(int sbid, PropertyKey key) throws DatabaseException; + + /*-------------------------------------------------------------------------------- + * External static operations + *-------------------------------------------------------------------------------- + */ + + static SideboxOps get(DBConnectionPool pool) throws ConfigException + { + return (SideboxOps)get(pool,SideboxOps.class.getClassLoader(),SideboxOps.class.getName() + "_","SideboxOps"); + + } // end get + +} // end class SideboxOps diff --git a/src/venice-base/com/silverwrist/venice/sidebox/SideboxOps_mysql.java b/src/venice-base/com/silverwrist/venice/sidebox/SideboxOps_mysql.java new file mode 100644 index 0000000..b4f029d --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/sidebox/SideboxOps_mysql.java @@ -0,0 +1,304 @@ +/* + * The contents of this file are subject to the Mozilla Public License Version 1.1 + * (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at . + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT + * WARRANTY OF ANY KIND, either express or implied. See the License for the specific + * language governing rights and limitations under the License. + * + * The Original Code is the Venice Web Communities System. + * + * The Initial Developer of the Original Code is Eric J. Bowersox , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.sidebox; + +import java.sql.*; +import java.util.*; +import org.apache.log4j.Logger; +import com.silverwrist.util.*; +import com.silverwrist.dynamo.except.*; +import com.silverwrist.dynamo.iface.*; +import com.silverwrist.dynamo.util.*; + +public class SideboxOps_mysql extends SideboxOps +{ + /*-------------------------------------------------------------------------------- + * Static data members + *-------------------------------------------------------------------------------- + */ + + private static final Logger logger = Logger.getLogger(SideboxOps_mysql.class); + + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + private PropertySerializer m_psz; // reference to property serializer + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public SideboxOps_mysql(DBConnectionPool pool) + { + super(pool); + m_psz = (PropertySerializer)(pool.queryService(PropertySerializer.class)); + + } // end constructor + + /*-------------------------------------------------------------------------------- + * Internal operations + *-------------------------------------------------------------------------------- + */ + + private final String serializeContextParam(Object param) throws DatabaseException + { + if (param==null) + return null; + String s = m_psz.serializeProperty(param); + if (s==null) + { // serialization exception - throw it + DatabaseException de = new DatabaseException(SideboxOps_mysql.class,"SideboxMessages","context.param.ser"); + de.setParameter(0,param.getClass().getName()); + throw de; + + } // end if + + return s; + + } // end serializeContextParam + + /*-------------------------------------------------------------------------------- + * Overrides from class OpsBase + *-------------------------------------------------------------------------------- + */ + + public void dispose() + { + m_psz = null; + super.dispose(); + + } // end dispose + + /*-------------------------------------------------------------------------------- + * Abstract implementations from class SideboxOps + *-------------------------------------------------------------------------------- + */ + + int[] getSideboxIDList(int uid, int context_nsid, String context_name, Object context_param) throws DatabaseException + { + String context_param_ser = serializeContextParam(context_param); + Connection conn = null; + PreparedStatement stmt = null; + ResultSet rs = null; + LinkedList tmp_list = new LinkedList(); + int total = 0; + + if (logger.isDebugEnabled()) + logger.debug("Getting sidebox list for UID #" + uid); + + try + { // get a connection + conn = getConnection(); + + // create and execute the statement + if (context_param_ser==null) + stmt = conn.prepareStatement("SELECT sbid FROM sbox_deploy WHERE uid = ? AND ctx_nsid = ? AND ctx_name = ? " + + "AND param IS NULL ORDER BY seq;"); + else + { // use the version with the parameter + stmt = conn.prepareStatement("SELECT sbid FROM sbox_deploy WHERE uid = ? AND ctx_nsid = ? AND ctx_name = ? " + + "AND param = ? ORDER BY seq;"); + stmt.setString(4,context_param_ser); + + } // end else + + stmt.setInt(1,uid); + stmt.setInt(2,context_nsid); + stmt.setString(3,context_name); + rs = stmt.executeQuery(); + + // build the temporary return arrays + int curptr = 0; + int[] cur = new int[16]; + while (rs.next()) + { // add elements to the array + if (curptr==16) + { // shift array to list + tmp_list.addLast(cur); + cur = new int[16]; + curptr = 0; + + } // end if + + cur[curptr++] = rs.getInt(1); + total++; + + } // end while + + tmp_list.addLast(cur); // add the "tail" to the array + + if (logger.isDebugEnabled()) + logger.debug("found: " + total + " sidebox IDs"); + + } // end try + catch (SQLException e) + { // translate to a general DatabaseException + throw generalException(e); + + } // end catch + finally + { // shut everything down + SQLUtils.shutdown(rs); + SQLUtils.shutdown(stmt); + SQLUtils.shutdown(conn); + + } // end finally + + // Build the return array. + int[] rc = new int[total]; + int outptr = 0; + while (total>0) + { // copy array segments into the full return array + int[] piece = (int[])(tmp_list.removeFirst()); + int ncopy = Math.min(total,16); + System.arraycopy(piece,0,rc,outptr,ncopy); + outptr += ncopy; + total -= ncopy; + + } // end while + + tmp_list.clear(); + return rc; + + } // end getSideboxIDList + + PropertyKey getSideboxType(int sbid) throws DatabaseException + { + Connection conn = null; + PreparedStatement stmt = null; + ResultSet rs = null; + try + { // get a connection + conn = getConnection(); + + // create and execute the statement + stmt = conn.prepareStatement("SELECT type_nsid, type_name FROM sbox_master WHERE sbid = ?;"); + stmt.setInt(1,sbid); + rs = stmt.executeQuery(); + if (rs.next()) + return new PropertyKey(rs.getInt(1),rs.getString(2)); + + // throw an exception if we didn't find it + DatabaseException de = new DatabaseException(SideboxOps_mysql.class,"SideboxMessages","no.sidebox"); + de.setParameter(0,String.valueOf(sbid)); + throw de; + + } // end try + catch (SQLException e) + { // translate to a general DatabaseException + throw generalException(e); + + } // end catch + finally + { // shut everything down + SQLUtils.shutdown(rs); + SQLUtils.shutdown(stmt); + SQLUtils.shutdown(conn); + + } // end finally + + } // end getSideboxType + + PropertyKey getSideboxIdentity(int sbid) throws DatabaseException + { + Connection conn = null; + PreparedStatement stmt = null; + ResultSet rs = null; + try + { // get a connection + conn = getConnection(); + + // create and execute the statement + stmt = conn.prepareStatement("SELECT sb_nsid, sb_name FROM sbox_master WHERE sbid = ?;"); + stmt.setInt(1,sbid); + rs = stmt.executeQuery(); + if (rs.next()) + return new PropertyKey(rs.getInt(1),rs.getString(2)); + + // throw an exception if we didn't find it + DatabaseException de = new DatabaseException(SideboxOps_mysql.class,"SideboxMessages","no.sidebox"); + de.setParameter(0,String.valueOf(sbid)); + throw de; + + } // end try + catch (SQLException e) + { // translate to a general DatabaseException + throw generalException(e); + + } // end catch + finally + { // shut everything down + SQLUtils.shutdown(rs); + SQLUtils.shutdown(stmt); + SQLUtils.shutdown(conn); + + } // end finally + + } // end getSideboxIdentity + + Object getSideboxProperty(int sbid, PropertyKey key) throws DatabaseException + { + Connection conn = null; + PreparedStatement stmt = null; + ResultSet rs = null; + String rc_str = null; + try + { // get a connection + conn = getConnection(); + + // look up the property + stmt = conn.prepareStatement("SELECT prop_value FROM sbox_props WHERE sbid = ? AND nsid = ? AND prop_name = ?;"); + stmt.setInt(1,sbid); + stmt.setInt(2,key.getNamespaceID()); + stmt.setString(3,key.getName()); + rs = stmt.executeQuery(); + if (!(rs.next())) + return null; // property not found + + rc_str = rs.getString(1); + + } // end try + catch (SQLException e) + { // translate to a general DatabaseException + throw generalException(e); + + } // end catch + finally + { // shut everything down + SQLUtils.shutdown(rs); + SQLUtils.shutdown(stmt); + SQLUtils.shutdown(conn); + + } // end finally + + // Deserialize the property value. + Object rc = m_psz.deserializeProperty(rc_str); + if (rc!=null) + return rc; + + // deserialization exception - throw it + DatabaseException de = new DatabaseException(SideboxOps_mysql.class,"SideboxMessages","property.deserialize"); + de.setParameter(0,key.getName()); + throw de; + + } // end getSideboxProperty + +} // end class SideboxOps_mysql diff --git a/src/venice-base/com/silverwrist/venice/sidebox/SideboxService.java b/src/venice-base/com/silverwrist/venice/sidebox/SideboxService.java new file mode 100644 index 0000000..a751ba6 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/sidebox/SideboxService.java @@ -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 . + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT + * WARRANTY OF ANY KIND, either express or implied. See the License for the specific + * language governing rights and limitations under the License. + * + * The Original Code is the Venice Web Communities System. + * + * The Initial Developer of the Original Code is Eric J. Bowersox , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.sidebox; + +import java.util.List; +import com.silverwrist.dynamo.except.DynamoException; +import com.silverwrist.dynamo.iface.Request; + +public interface SideboxService +{ + public List getSideboxes(Request req, String context_namespace, String context_name, Object context_param) + throws DynamoException; + +} // end interface SideboxService diff --git a/src/venice-base/com/silverwrist/venice/sidebox/test/TestSideboxes.java b/src/venice-base/com/silverwrist/venice/sidebox/test/TestSideboxes.java new file mode 100644 index 0000000..c924748 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/sidebox/test/TestSideboxes.java @@ -0,0 +1,100 @@ +/* + * The contents of this file are subject to the Mozilla Public License Version 1.1 + * (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at . + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT + * WARRANTY OF ANY KIND, either express or implied. See the License for the specific + * language governing rights and limitations under the License. + * + * The Original Code is the Venice Web Communities System. + * + * The Initial Developer of the Original Code is Eric J. Bowersox , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.sidebox.test; + +import com.silverwrist.dynamo.except.*; +import com.silverwrist.dynamo.iface.*; +import com.silverwrist.venice.content.*; +import com.silverwrist.venice.iface.*; + +public class TestSideboxes implements SideboxTypeFactory +{ + /*-------------------------------------------------------------------------------- + * Internal class for sidebox factory + *-------------------------------------------------------------------------------- + */ + + private static class TestFactory implements SideboxFactory + { + /*==================================================================== + * Attributes + *==================================================================== + */ + + private String m_title; + private String m_body; + + /*==================================================================== + * Constructor + *==================================================================== + */ + + TestFactory(String title, String body) + { + m_title = title; + m_body = body; + + } // end constructor + + /*==================================================================== + * Implementations from interface SideboxFactory + *==================================================================== + */ + + public Sidebox createSidebox(Request req) + { + return new StringSidebox(m_body,m_title); + + } // end createSidebox + + } // end class TestFactory + + /*-------------------------------------------------------------------------------- + * Static data members + *-------------------------------------------------------------------------------- + */ + + public static final String NAMESPACE = "http://www.silverwrist.com/NS/venice/2003/05/31/test.sideboxes"; + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public TestSideboxes() + { // do nothing + } // end constructor + + /*-------------------------------------------------------------------------------- + * Implementations from interface SideboxTypeFactory + *-------------------------------------------------------------------------------- + */ + + public SideboxFactory createFactory(String type_namespace, String type_name, String box_namespace, String box_name, + ObjectProvider properties) throws DynamoException + { + if (box_name.equals("test1")) + return new TestFactory("Number One","The quick brown fox jumped over the lazy dog."); + else if (box_name.equals("test2")) + return new TestFactory("List Test","
  • First
  • Second
  • Third
"); + else + throw new DynamoException("invalid sidebox"); + + } // end createFactory + +} // end class TestSideboxes diff --git a/venice-data/scripts/top.js b/venice-data/scripts/top.js index ab505da..6405872 100644 --- a/venice-data/scripts/top.js +++ b/venice-data/scripts/top.js @@ -21,6 +21,8 @@ importPackage(Packages.com.silverwrist.dynamo.util); importClass(Packages.com.silverwrist.venice.VeniceNamespaces); importPackage(Packages.com.silverwrist.venice.content); importPackage(Packages.com.silverwrist.venice.frame); +importPackage(Packages.com.silverwrist.venice.iface); +importPackage(Packages.com.silverwrist.venice.sidebox); req = bsf.lookupBean("request"); req_help = bsf.lookupBean("request_help"); @@ -52,15 +54,8 @@ page_content.add(lipsum); // END TEMPORARY STUFF // Create the sidebox list. -// BEGIN TEMPORARY STUFF - -sidebox_list = new ArrayList(); -tmp = new StringSidebox("The quick brown fox jumped over the lazy dog.","Number One"); -sidebox_list.add(tmp); -tmp = new StringSidebox("
  • First
  • Second
  • Third
","List Test"); -sidebox_list.add(tmp); - -// END TEMPORARY STUFF +sideboxes = vcast.querySideboxService(req_help.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"venice-sidebox")); +sidebox_list = sideboxes.getSideboxes(req,VeniceNamespaces.SIDEBOX_CONTEXT_NAMESPACE,"top",null); // Create the master view and return it. rc = new SideboxView(page_content,sidebox_list);