bugfix to display of community hide mode

This commit is contained in:
Eric J. Bowersox 2004-07-22 09:06:16 +00:00
parent 1c245749f7
commit 1351306780
12 changed files with 704 additions and 146 deletions

View File

@ -652,11 +652,12 @@ the community's host, or via an invitation e-mail message. Please enter it in th
<choice id="1">Private</choice> <choice id="1">Private</choice>
</list> </list>
<text name="joinkey" capt="Join key" capt2="(for private communities)" size="32" maxlength="64"/> <text name="joinkey" capt="Join key" capt2="(for private communities)" size="32" maxlength="64"/>
<list name="hidemode" capt="Community visibility" required="true"> <enumlist name="hidemode" capt="Community visibility" required="true"
<choice id="0">Show in both directory and search</choice> enumClass="com.silverwrist.venice.core.CommunityHideMode">
<choice id="1">Hide in directory, but not in search</choice> <choice id="NONE">Show in both directory and search</choice>
<choice id="2">Hide in both directory and search</choice> <choice id="DIRECTORY">Hide in directory, but not in search</choice>
</list> <choice id="BOTH">Hide in both directory and search</choice>
</enumlist>
<imagebutton id="create"/> <imagebutton id="create"/>
<imagebutton id="cancel"/> <imagebutton id="cancel"/>
</dialog> </dialog>
@ -688,11 +689,12 @@ the community's host, or via an invitation e-mail message. Please enter it in th
</list> </list>
<text name="joinkey" capt="Join key" capt2="(for private communities)" size="32" maxlength="64"/> <text name="joinkey" capt="Join key" capt2="(for private communities)" size="32" maxlength="64"/>
<checkbox name="membersonly" capt="Allow only members to access this community"/> <checkbox name="membersonly" capt="Allow only members to access this community"/>
<list name="hidemode" capt="Community visibility" required="true"> <enumlist name="hidemode" capt="Community visibility" required="true"
<choice id="0">Show in both directory and search</choice> enumClass="com.silverwrist.venice.core.CommunityHideMode">
<choice id="1">Hide in directory, but not in search</choice> <choice id="NONE">Show in both directory and search</choice>
<choice id="2">Hide in both directory and search</choice> <choice id="DIRECTORY">Hide in directory, but not in search</choice>
</list> <choice id="BOTH">Hide in both directory and search</choice>
</enumlist>
<rolelist name="read_lvl" capt="Security level required to read contents" required="true"/> <rolelist name="read_lvl" capt="Security level required to read contents" required="true"/>
<rolelist name="write_lvl" capt="Security level required to update profile" required="true"/> <rolelist name="write_lvl" capt="Security level required to update profile" required="true"/>
<rolelist name="create_lvl" capt="Security level required to create new subobjects" required="true"/> <rolelist name="create_lvl" capt="Security level required to create new subobjects" required="true"/>

View File

@ -8,9 +8,9 @@
// //
// The Original Code is the Venice Web Communities 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@ricochet.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) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. // Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
// //
// Contributor(s): // Contributor(s):
@ -76,12 +76,10 @@ if (op=="create")
} // end if } // end if
my_hidemode = parseInt(dlg.getValue("hidemode"),10); // get the hide mode
// Create the new community context. // Create the new community context.
new_comm = rinput.user.createCommunity(dlg.getValue("name"),my_alias,dlg.getValue("language"), new_comm = rinput.user.createCommunity(dlg.getValue("name"),my_alias,dlg.getValue("language"),
dlg.getValue("synopsis"),dlg.getValue("rules"),my_joinkey, dlg.getValue("synopsis"),dlg.getValue("rules"),my_joinkey,
my_hidemode); dlg.getValue("hidemode"));
// Get the new community's contact record and fill in the pieces of info we know. // Get the new community's contact record and fill in the pieces of info we know.
ci = new_comm.getContactInfo(); ci = new_comm.getContactInfo();

View File

@ -8,9 +8,9 @@
// //
// The Original Code is the Venice Web Communities 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@ricochet.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) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. // Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
// //
// Contributor(s): // Contributor(s):
@ -102,6 +102,7 @@ if ("GET"==rinput.verb)
if (comm.membersOnly) if (comm.membersOnly)
dlg.setValue("membersonly",1); dlg.setValue("membersonly",1);
logger.debug("Community's hidemode is " + comm.hideMode);
dlg.setValue("hidemode",comm.hideMode); dlg.setValue("hidemode",comm.hideMode);
dlg.setValue("read_lvl",comm.readLevel); dlg.setValue("read_lvl",comm.readLevel);
dlg.setValue("write_lvl",comm.writeLevel); dlg.setValue("write_lvl",comm.writeLevel);
@ -193,7 +194,7 @@ if (op=="update")
comm.joinKey = null; comm.joinKey = null;
comm.membersOnly = dlg.getValue("membersonly").booleanValue(); comm.membersOnly = dlg.getValue("membersonly").booleanValue();
comm.setHideMode(parseInt(dlg.getValue("hidemode"),10)); comm.setHideMode(dlg.getValue("hidemode"));
comm.setSecurityLevels(parseInt(dlg.getValue("read_lvl"),10),parseInt(dlg.getValue("write_lvl"),10), comm.setSecurityLevels(parseInt(dlg.getValue("read_lvl"),10),parseInt(dlg.getValue("write_lvl"),10),
parseInt(dlg.getValue("create_lvl"),10),parseInt(dlg.getValue("delete_lvl"),10), parseInt(dlg.getValue("create_lvl"),10),parseInt(dlg.getValue("delete_lvl"),10),
parseInt(dlg.getValue("join_lvl"),10)); parseInt(dlg.getValue("join_lvl"),10));

View File

@ -9,9 +9,9 @@
* *
* The Original Code is the Venice Web Communities 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@ricochet.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) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
*/ */
@ -27,167 +27,159 @@ import com.silverwrist.venice.except.EmailException;
public interface CommunityContext extends SearchMode public interface CommunityContext extends SearchMode
{ {
public static final int HIDE_NONE = 0; public int getCommunityID();
public static final int HIDE_DIRECTORY = 1;
public static final int HIDE_BOTH = 2;
public abstract int getCommunityID(); public String getName();
public abstract String getName(); public String getAlias();
public abstract String getAlias(); public boolean isMember();
public abstract boolean isMember(); public boolean isAdmin();
public abstract boolean isAdmin(); public boolean isPublicCommunity();
public abstract boolean isPublicCommunity(); public int getCategoryID();
public abstract int getCategoryID(); public CategoryDescriptor getCategory() throws DataException;
public abstract CategoryDescriptor getCategory() throws DataException; public String getSynopsis();
public abstract String getSynopsis(); public int getHostUID();
public abstract int getHostUID(); public UserProfile getHostProfile() throws DataException;
public abstract UserProfile getHostProfile() throws DataException; public String getLanguageCode();
public abstract String getLanguageCode(); public String getLanguageFullName();
public abstract String getLanguageFullName(); public String getRules();
public abstract String getRules(); public Date getCreationDate();
public abstract Date getCreationDate(); public Date getLastAccessDate();
public abstract Date getLastAccessDate(); public Date getLastUpdateDate();
public abstract Date getLastUpdateDate(); public ContactInfo getContactInfo() throws DataException;
public abstract ContactInfo getContactInfo() throws DataException; public void putContactInfo(ContactInfo ci) throws DataException, AccessError;
public abstract void putContactInfo(ContactInfo ci) throws DataException, AccessError; public Set getServices();
public abstract Set getServices(); public Set getConfiguredServices();
public abstract Set getConfiguredServices(); public void setServiceEnable(ServiceToken token, boolean enable) throws AccessError, DataException;
public abstract void setServiceEnable(ServiceToken token, boolean enable) throws AccessError, DataException; public void setName(String name) throws DataException, AccessError;
public abstract void setName(String name) throws DataException, AccessError; public void setAlias(String alias) throws DataException, AccessError;
public abstract void setAlias(String alias) throws DataException, AccessError; public void setCategoryID(int catid) throws DataException, AccessError;
public abstract void setCategoryID(int catid) throws DataException, AccessError; public void setCategory(CategoryDescriptor cat) throws DataException, AccessError;
public abstract void setCategory(CategoryDescriptor cat) throws DataException, AccessError; public void setSynopsis(String synopsis) throws DataException, AccessError;
public abstract void setSynopsis(String synopsis) throws DataException, AccessError; public void setLanguage(String language) throws DataException, AccessError;
public abstract void setLanguage(String language) throws DataException, AccessError; public void setRules(String rules) throws DataException, AccessError;
public abstract void setRules(String rules) throws DataException, AccessError; public CommunityHideMode getHideMode();
public abstract int getHideMode(); public void setHideMode(CommunityHideMode mode) throws DataException, AccessError;
public abstract void setHideMode(int mode) throws DataException, AccessError; public boolean getMembersOnly();
public abstract boolean getMembersOnly(); public void setMembersOnly(boolean flag) throws DataException, AccessError;
public abstract void setMembersOnly(boolean flag) throws DataException, AccessError; public ServiceToken getDefaultService();
public abstract ServiceToken getDefaultService(); public void setDefaultService(ServiceToken token) throws AccessError, DataException;
public abstract void setDefaultService(ServiceToken token) throws AccessError, DataException; public String getJoinKey() throws DataException, AccessError;
public abstract String getJoinKey() throws DataException, AccessError; public void setJoinKey(String key) throws DataException, AccessError;
public abstract void setJoinKey(String key) throws DataException, AccessError; public int getReadLevel() throws DataException, AccessError;
public abstract int getReadLevel() throws DataException, AccessError; public int getWriteLevel() throws DataException, AccessError;
public abstract int getWriteLevel() throws DataException, AccessError; public int getCreateLevel() throws DataException, AccessError;
public abstract int getCreateLevel() throws DataException, AccessError; public int getDeleteLevel() throws DataException, AccessError;
public abstract int getDeleteLevel() throws DataException, AccessError; public int getJoinLevel() throws DataException, AccessError;
public abstract int getJoinLevel() throws DataException, AccessError; public void setSecurityLevels(int read, int write, int create, int delete, int join)
public abstract void setSecurityLevels(int read, int write, int create, int delete, int join)
throws DataException, AccessError; throws DataException, AccessError;
public abstract boolean canAdministerCommunity(); public boolean canAdministerCommunity();
public abstract boolean canModifyProfile(); public boolean canModifyProfile();
public abstract boolean isAdminCommunity(); public boolean isAdminCommunity();
public abstract void join(String joinkey) throws DataException, AccessError; public void join(String joinkey) throws DataException, AccessError;
public abstract void unjoin() throws DataException, AccessError; public void unjoin() throws DataException, AccessError;
public abstract int getMemberCount() throws DataException; public int getMemberCount() throws DataException;
public abstract boolean canUnjoin(); public boolean canUnjoin();
public abstract boolean canJoin(); public boolean canJoin();
public abstract List getConferences() throws DataException, AccessError; public List getConferences() throws DataException, AccessError;
public abstract ConferenceContext getConferenceContext(int confid) throws DataException, AccessError; public ConferenceContext getConferenceContext(int confid) throws DataException, AccessError;
public abstract ConferenceContext getConferenceContext(String alias) throws DataException, AccessError; public ConferenceContext getConferenceContext(String alias) throws DataException, AccessError;
public abstract ConferenceContext createConference(String name, String alias, String description, public ConferenceContext createConference(String name, String alias, String description,
boolean pvt, boolean hide_list) boolean pvt, boolean hide_list) throws DataException, AccessError;
throws DataException, AccessError;
public abstract boolean canCreateConference(); public boolean canCreateConference();
public abstract List searchForMembers(int field, int mode, String term, int offset, int count) public List searchForMembers(int field, int mode, String term, int offset, int count) throws DataException;
throws DataException;
public abstract int getSearchMemberCount(int field, int mode, String term) throws DataException; public int getSearchMemberCount(int field, int mode, String term) throws DataException;
public abstract List getMemberList() throws DataException; public List getMemberList() throws DataException;
public abstract boolean canManageConferences(); public boolean canManageConferences();
public abstract int getMemberLevel(int uid) throws DataException, AccessError; public int getMemberLevel(int uid) throws DataException, AccessError;
public abstract void setMembership(int uid, int new_level) public void setMembership(int uid, int new_level) throws DataException, AccessError;
throws DataException, AccessError;
public abstract boolean canDelete(); public boolean canDelete();
public abstract void delete() throws DataException, AccessError; public void delete() throws DataException, AccessError;
public abstract void deleteCommunity() throws DataException, AccessError; public void deleteCommunity() throws DataException, AccessError;
public abstract void sendInvitation(String address, String personal_message) public void sendInvitation(String address, String personal_message)
throws AccessError, DataException, EmailException; throws AccessError, DataException, EmailException;
public abstract boolean canSendInvitation(); public boolean canSendInvitation();
public abstract List getAuditRecords(int offset, int count) throws AccessError, DataException; public List getAuditRecords(int offset, int count) throws AccessError, DataException;
public abstract int getAuditRecordCount() throws AccessError, DataException; public int getAuditRecordCount() throws AccessError, DataException;
public abstract CommunityProperties getProperties() throws DataException, AccessError; public CommunityProperties getProperties() throws DataException, AccessError;
public abstract void setProperties(CommunityProperties props) throws DataException, AccessError; public void setProperties(CommunityProperties props) throws DataException, AccessError;
public abstract SecurityInfo getSecurityInfo(); public SecurityInfo getSecurityInfo();
public abstract boolean canMassMail(); public boolean canMassMail();
public abstract void massMail(String subject, String text) throws AccessError, DataException; public void massMail(String subject, String text) throws AccessError, DataException;
public abstract List searchPosts(String search_terms, int offset, int count) public List searchPosts(String search_terms, int offset, int count) throws AccessError, DataException;
throws AccessError, DataException;
public abstract int getSearchPostCount(String search_terms) throws AccessError, DataException; public int getSearchPostCount(String search_terms) throws AccessError, DataException;
} // end interface CommunityContext } // end interface CommunityContext

View File

@ -0,0 +1,165 @@
/*
* 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@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.core;
import java.util.*;
public final class CommunityHideMode implements Comparable
{
/*--------------------------------------------------------------------------------
* Static data members
*--------------------------------------------------------------------------------
*/
private static ArrayList s_order_list = null;
private static HashMap s_name_to_enum = null;
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private String m_name;
private String m_to_string;
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
private CommunityHideMode(String name)
{
m_name = name;
if (s_order_list==null)
s_order_list = new ArrayList();
s_order_list.add(this);
if (s_name_to_enum==null)
s_name_to_enum = new HashMap();
s_name_to_enum.put(name,this);
m_to_string = "CommunityHideMode[" + name + "]";
} // end constructor
/*--------------------------------------------------------------------------------
* Overrides from class Object
*--------------------------------------------------------------------------------
*/
public String toString()
{
return m_to_string;
} // end toString
public int hashCode()
{
return m_name.hashCode();
} // end hashCode
public boolean equals(Object other)
{
if (other==null)
return false;
if (other==this)
return true;
if (!(other instanceof CommunityHideMode))
return false;
return m_name.equals(((CommunityHideMode)other).m_name);
} // end equals
/*--------------------------------------------------------------------------------
* Implementations from class Comparable
*--------------------------------------------------------------------------------
*/
public int compareTo(Object other)
{
if (other==null)
throw new NullPointerException();
if (!(other instanceof CommunityHideMode))
throw new ClassCastException();
return m_name.compareTo(((CommunityHideMode)other).m_name);
} // end compareTo
/*--------------------------------------------------------------------------------
* External operations
*--------------------------------------------------------------------------------
*/
public Class getEnumClass()
{
return CommunityHideMode.class;
} // end getEnumClass
public String getName()
{
return m_name;
} // end getName
/*--------------------------------------------------------------------------------
* External static operations
*--------------------------------------------------------------------------------
*/
public static CommunityHideMode getEnum(String name)
{
if (s_name_to_enum==null)
return null;
return (CommunityHideMode)(s_name_to_enum.get(name));
} // end getEnum
public static Map getEnumMap()
{
if (s_name_to_enum==null)
return Collections.EMPTY_MAP;
else
return Collections.unmodifiableMap(s_name_to_enum);
} // end getEnumMap
public static List getEnumList()
{
if (s_order_list==null)
return Collections.EMPTY_LIST;
else
return Collections.unmodifiableList(s_order_list);
} // end getEnumList
public static Iterator iterator()
{
return getEnumList().iterator();
} // end iterator
/*--------------------------------------------------------------------------------
* Enumerated type values
*--------------------------------------------------------------------------------
*/
public static final CommunityHideMode NONE = new CommunityHideMode("NONE");
public static final CommunityHideMode DIRECTORY = new CommunityHideMode("DIRECTORY");
public static final CommunityHideMode BOTH = new CommunityHideMode("BOTH");
} // end class CommunityHideMode

View File

@ -85,7 +85,7 @@ public interface UserContext extends SearchMode
public int getSearchCategoryCount(int mode, String term) throws DataException; public int getSearchCategoryCount(int mode, String term) throws DataException;
public CommunityContext createCommunity(String name, String alias, String language, String synopsis, public CommunityContext createCommunity(String name, String alias, String language, String synopsis,
String rules, String joinkey, int hide_mode) String rules, String joinkey, CommunityHideMode hide_mode)
throws DataException, AccessError; throws DataException, AccessError;
public boolean canCreateCommunity(); public boolean canCreateCommunity();

View File

@ -655,29 +655,28 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
} // end setRules } // end setRules
public int getHideMode() public CommunityHideMode getHideMode()
{ {
CommunityData d = getDataNE(); CommunityData d = getDataNE();
CommunityHideMode rc = null;
if (d==null) if (d==null)
return HIDE_NONE; rc = CommunityHideMode.NONE;
if (d.getHideSearch()) else if (d.getHideSearch())
return HIDE_BOTH; rc = CommunityHideMode.BOTH;
else if (d.getHideDirectory()) else if (d.getHideDirectory())
return HIDE_DIRECTORY; rc = CommunityHideMode.DIRECTORY;
else else
return HIDE_NONE; rc = CommunityHideMode.NONE;
if (logger.isDebugEnabled())
logger.debug("getHideMode() => " + rc);
return rc;
} // end getHideMode } // end getHideMode
public void setHideMode(int mode) throws DataException, AccessError public void setHideMode(CommunityHideMode mode) throws DataException, AccessError
{ {
if ((mode!=HIDE_NONE) && (mode!=HIDE_DIRECTORY) && (mode!=HIDE_BOTH)) if (logger.isDebugEnabled())
{ // the mode is not valid logger.debug("setHideMode(" + mode + ") entry");
logger.error("mode value " + mode + " is not valid");
throw new IllegalArgumentException("invalid hide mode value");
} // end if
getData().testMembership(level,is_member); getData().testMembership(level,is_member);
if (!(getData().canModifyCommunityProfile(level))) if (!(getData().canModifyCommunityProfile(level)))
{ // this user can't modify the community feature set { // this user can't modify the community feature set
@ -693,8 +692,8 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
} // end if } // end if
boolean hide_dir = (mode!=HIDE_NONE); boolean hide_dir = (CommunityHideMode.NONE.equals(mode) ? false : true);
boolean hide_search = (mode==HIDE_BOTH); boolean hide_search = CommunityHideMode.BOTH.equals(mode);
getData().setHideFlags(env,hide_dir,hide_search); getData().setHideFlags(env,hide_dir,hide_search);
} // end setHideMode } // end setHideMode

View File

@ -987,14 +987,14 @@ class UserContextImpl implements UserContext, ServiceProvider, PropertyProvider
} // end getSearchCategoryCount } // end getSearchCategoryCount
public CommunityContext createCommunity(String name, String alias, String language, String synopsis, public CommunityContext createCommunity(String name, String alias, String language, String synopsis,
String rules, String joinkey, int hide_mode) String rules, String joinkey, CommunityHideMode hide_mode)
throws DataException, AccessError throws DataException, AccessError
{ {
env.testPermission(EnvUser.PERM_CREATECOMMUNITY,"You are not authorized to create new communities."); env.testPermission(EnvUser.PERM_CREATECOMMUNITY,"You are not authorized to create new communities.");
// Convert the "hide mode" value into the two hide flags. // Convert the "hide mode" value into the two hide flags.
boolean hide_dir = (hide_mode!=CommunityContext.HIDE_NONE); boolean hide_dir = (CommunityHideMode.NONE.equals(hide_mode) ? false : true);
boolean hide_search = (hide_mode==CommunityContext.HIDE_BOTH); boolean hide_search = CommunityHideMode.BOTH.equals(hide_mode);
// Create the new community's database entries and internal data. // Create the new community's database entries and internal data.
CommunityData new_comm = CommunityCoreData.createCommunity(globalsite,env,name,alias,uid,language, CommunityData new_comm = CommunityCoreData.createCommunity(globalsite,env,name,alias,uid,language,

View File

@ -37,10 +37,10 @@ public class DialogElementLoader
private static final Class[] init_classes = { private static final Class[] init_classes = {
CategoryHeader.class, CheckBoxField.class, CommunityLogoField.class, CountryListField.class, CategoryHeader.class, CheckBoxField.class, CommunityLogoField.class, CountryListField.class,
DateField.class, EMailAddressField.class, HiddenField.class, ImageButton.class, IntegerField.class, DateField.class, EMailAddressField.class, EnumPickListField.class, HiddenField.class,
IPAddressField.class, LanguageListField.class, LocaleListField.class, PasswordField.class, ImageButton.class, IntegerField.class, IPAddressField.class, LanguageListField.class,
RoleListField.class, StaticPickListField.class, TextField.class, TimeZoneListField.class, LocaleListField.class, PasswordField.class, RoleListField.class, StaticPickListField.class,
UserPhotoField.class, VeniceIDField.class TextField.class, TimeZoneListField.class, UserPhotoField.class, VeniceIDField.class
}; };
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------

View File

@ -0,0 +1,363 @@
/*
* 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@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.ui.dlg;
import java.io.IOException;
import java.lang.reflect.*;
import java.util.*;
import org.w3c.dom.*;
import com.silverwrist.util.*;
import com.silverwrist.venice.except.*;
import com.silverwrist.venice.ui.*;
import com.silverwrist.venice.util.XMLLoader;
public class EnumPickListField extends PickListField
{
/*--------------------------------------------------------------------------------
* Internal class for translating between strings and enums
*--------------------------------------------------------------------------------
*/
static class EnumExtractor
{
/*====================================================================
* Attributes
*====================================================================
*/
private Class m_klass;
private Method m_getname;
private Map m_valmap;
private List m_list;
/*====================================================================
* Constructor
*====================================================================
*/
EnumExtractor(String klassname)
{
try
{ // load the class
m_klass = Class.forName(klassname);
// get the "getName" method
m_getname = m_klass.getMethod("getName",NO_PARAMS);
// get the "getEnumMap" method and call it to get the value map
Method m = m_klass.getMethod("getEnumMap",NO_PARAMS);
m_valmap = (Map)(m.invoke(null,NO_ARGS));
// get the "getEnumList" method and call it to get the value list
m = m_klass.getMethod("getEnumList",NO_PARAMS);
m_list = (List)(m.invoke(null,NO_ARGS));
} // end try
catch (ClassNotFoundException e)
{ // bounce me
throw new VeniceRuntimeException("class not found: " + klassname,e);
} // end catch
catch (NoSuchMethodException e)
{ // bounce me
throw new VeniceRuntimeException("method failure",e);
} // end catch
catch (IllegalAccessException e)
{ // bounce me
throw new VeniceRuntimeException("illegal access",e);
} // end catch
catch (IllegalArgumentException e)
{ // bounce me
throw new VeniceRuntimeException("illegal argument",e);
} // end catch
catch (InvocationTargetException e)
{ // an exception got thrown
throw new VeniceRuntimeException("target threw something",e);
} // end catch
} // end constructor
/*====================================================================
* External operations
*====================================================================
*/
final boolean isInstance(Object o)
{
return m_klass.isInstance(o);
} // end isInstance
final String getNameFromEnum(Object enum)
{
try
{ // invoke the method to return the name
return (String)(m_getname.invoke(enum,NO_ARGS));
} // end try
catch (IllegalAccessException e)
{ // bounce me
throw new VeniceRuntimeException("illegal access",e);
} // end catch
catch (IllegalArgumentException e)
{ // bounce me
throw new VeniceRuntimeException("illegal argument",e);
} // end catch
catch (InvocationTargetException e)
{ // an exception got thrown
throw new VeniceRuntimeException("target threw something",e);
} // end catch
} // end getNameFromEnum
final Object getEnumFromName(String name)
{
return m_valmap.get(name);
} // end getEnumFromName
} // end class EnumExtractor
/*--------------------------------------------------------------------------------
* Internal class holding choices
*--------------------------------------------------------------------------------
*/
static class PickListChoice
{
/*====================================================================
* Attributes
*====================================================================
*/
private String m_name;
private String m_value;
/*====================================================================
* Constructor
*====================================================================
*/
PickListChoice(String name, String value)
{
m_name = name;
m_value = value;
} // end constructor
/*====================================================================
* External operations
*====================================================================
*/
final String getName()
{
return m_name;
} // end getName
final String getValue()
{
return m_value;
} // end getValue
} // end class PickListChoice
/*--------------------------------------------------------------------------------
* Static data members
*--------------------------------------------------------------------------------
*/
public static final String TAGNAME = "enumlist";
private static final Class[] NO_PARAMS = new Class[0];
private static final Object[] NO_ARGS = new Object[0];
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private EnumExtractor m_extractor;
/*--------------------------------------------------------------------------------
* Constructors
*--------------------------------------------------------------------------------
*/
public EnumPickListField(String name, String caption, String caption2, boolean required, String classname,
String clist)
{
super(name,caption,caption2,required,Collections.EMPTY_LIST);
setChoicesList(createChoiceListFromString(classname,clist));
} // end constructor
public EnumPickListField(Element elt) throws ConfigException
{
super(elt,Collections.EMPTY_LIST);
setChoicesList(createChoiceListFromXML(elt));
} // end constructor
protected EnumPickListField(EnumPickListField other)
{
super(other);
m_extractor = other.m_extractor;
} // end constructor
/*--------------------------------------------------------------------------------
* Internal operations
*--------------------------------------------------------------------------------
*/
private final List createChoiceListFromString(String classname, String s)
{
m_extractor = new EnumExtractor(classname);
char separator = s.charAt(0);
String work = s.substring(1);
ArrayList tmp = new ArrayList();
while (work!=null)
{ // split up the "choice list" string into name/value pairs
int p = work.indexOf(separator);
if (p<0)
break;
String n1 = work.substring(0,p);
work = work.substring(p+1);
p = work.indexOf(separator);
String v1;
if (p<0)
{ // take the rest of the string
v1 = work;
work = null;
} // end if
else
{ // chop the string off the end
v1 = work.substring(0,p);
work = work.substring(p+1);
if (work.length()==0)
work = null;
} // end else
if (m_extractor.getEnumFromName(n1)!=null)
tmp.add(new PickListChoice(n1,v1));
} // end while
tmp.trimToSize();
if (tmp.isEmpty())
return Collections.EMPTY_LIST;
else
return Collections.unmodifiableList(tmp);
} // end createChoiceListFromString
private final List createChoiceListFromXML(Element elt) throws ConfigException
{
XMLLoader loader = XMLLoader.get();
m_extractor = new EnumExtractor(loader.configGetAttribute(elt,"enumClass"));
NodeList nl = elt.getChildNodes();
ArrayList tmp = new ArrayList();
for (int i=0; i<nl.getLength(); i++)
{ // look for associated elements
Node n = nl.item(i);
if (n.getNodeType()==Node.ELEMENT_NODE)
{ // make sure we have a <choice/> element here
loader.configVerifyNodeName(n,"choice",elt);
String n1 = loader.configGetAttribute((Element)n,"id");
String v1 = loader.configGetText((Element)n);
if (m_extractor.getEnumFromName(n1)!=null)
tmp.add(new PickListChoice(n1,v1));
} // end if
// else just ignore that
} // end for
tmp.trimToSize();
if (tmp.isEmpty())
return Collections.EMPTY_LIST;
else
return Collections.unmodifiableList(tmp);
} // end createChoiceListFromXML
/*--------------------------------------------------------------------------------
* Overrides from class PickListField
*--------------------------------------------------------------------------------
*/
protected String getChoiceName(Object o)
{
return ((PickListChoice)o).getName();
} // end getChoiceName
protected String getChoiceValue(Object o)
{
return ((PickListChoice)o).getValue();
} // end getChoiceValue
/*--------------------------------------------------------------------------------
* Implementations from interface DialogField
*--------------------------------------------------------------------------------
*/
public Object getValue()
{
Object o = super.getValue();
if (o==null)
return null;
return m_extractor.getEnumFromName(o.toString());
} // end getValue
public void setValue(Object o)
{
if (o==null)
{ // null value
super.setValue(null);
return;
} // end if
if (!(m_extractor.isInstance(o)))
throw new IllegalArgumentException("not a valid enum instance");
super.setValue(m_extractor.getNameFromEnum(o));
} // end setValue
public DialogField duplicate()
{
return new EnumPickListField(this);
} // end duplicate
} // end class EnumPickListField

View File

@ -19,6 +19,7 @@ package com.silverwrist.venice.ui.dlg;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import org.apache.log4j.*;
import org.w3c.dom.*; import org.w3c.dom.*;
import com.silverwrist.util.*; import com.silverwrist.util.*;
import com.silverwrist.venice.except.*; import com.silverwrist.venice.except.*;
@ -26,12 +27,19 @@ import com.silverwrist.venice.ui.*;
public abstract class PickListField extends BaseDialogField public abstract class PickListField extends BaseDialogField
{ {
/*--------------------------------------------------------------------------------
* Static data members
*--------------------------------------------------------------------------------
*/
private static Logger logger = Logger.getLogger(PickListField.class);
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Attributes * Attributes
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private List choices; private List m_choices;
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructors * Constructors
@ -41,21 +49,21 @@ public abstract class PickListField extends BaseDialogField
protected PickListField(String name, String caption, String caption2, boolean required, List choices) protected PickListField(String name, String caption, String caption2, boolean required, List choices)
{ {
super(false,name,caption,caption2,required); super(false,name,caption,caption2,required);
this.choices = choices; m_choices = choices;
} // end constructor } // end constructor
protected PickListField(Element elt, List choices) throws ConfigException protected PickListField(Element elt, List choices) throws ConfigException
{ {
super(false,elt,true,true); super(false,elt,true,true);
this.choices = choices; m_choices = choices;
} // end constructor } // end constructor
protected PickListField(PickListField other) protected PickListField(PickListField other)
{ {
super(other); super(other);
this.choices = other.choices; m_choices = other.m_choices;
} // end constructor } // end constructor
@ -79,18 +87,33 @@ public abstract class PickListField extends BaseDialogField
if (!isEnabled()) if (!isEnabled())
out.write(" disabled=\"disabled\""); out.write(" disabled=\"disabled\"");
out.write(">\n"); out.write(">\n");
Iterator it = choices.iterator();
String val = getStringValue(); String val = getStringValue();
while (it.hasNext()) boolean not_selected = true;
for (Iterator it=m_choices.iterator(); it.hasNext(); )
{ // loop through the list and render the choices { // loop through the list and render the choices
Object ch = it.next(); Object ch = it.next();
String ch_name = getChoiceName(ch); String ch_name = getChoiceName(ch);
out.write("<option value=\"" + ch_name + "\""); out.write("<option value=\"" + ch_name + "\"");
if (ch_name.equals(val)) if (ch_name.equals(val))
{ // found the selected element
out.write(" selected=\"selected\""); out.write(" selected=\"selected\"");
not_selected = false;
} // end if
out.write(">" + StringUtil.encodeHTML(getChoiceValue(ch)) + "</option>\n"); out.write(">" + StringUtil.encodeHTML(getChoiceValue(ch)) + "</option>\n");
} // end while } // end for
if (not_selected && isEnabled())
{ // aw, shit! there's no selected item!
logger.warn("PickListField \"" + getName() + "\" did not find a match for selected value \"" + val + "\"");
ArrayList tmp = new ArrayList(m_choices.size());
for (Iterator it=m_choices.iterator(); it.hasNext(); )
tmp.add(getChoiceName(it.next()));
logger.warn("Possible choices were: " + tmp);
} // end if
out.write("</select>\n"); // all done out.write("</select>\n"); // all done
@ -103,13 +126,13 @@ public abstract class PickListField extends BaseDialogField
public List getChoicesList() public List getChoicesList()
{ {
return choices; return m_choices;
} // end getChoicesList } // end getChoicesList
public void setChoicesList(List list) public void setChoicesList(List list)
{ {
this.choices = list; m_choices = list;
} // end setChoicesList } // end setChoicesList

View File

@ -9,9 +9,9 @@
* *
* The Original Code is the Venice Web Communities 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@ricochet.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) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
*/ */
@ -34,25 +34,40 @@ public class StaticPickListField extends PickListField
static class PickListChoice static class PickListChoice
{ {
private String name; /*====================================================================
private String value; * Attributes
*====================================================================
*/
private String m_name;
private String m_value;
/*====================================================================
* Constructor
*====================================================================
*/
PickListChoice(String name, String value) PickListChoice(String name, String value)
{ {
this.name = name; m_name = name;
this.value = value; m_value = value;
} // end constructor } // end constructor
/*====================================================================
* External operations
*====================================================================
*/
final String getName() final String getName()
{ {
return name; return m_name;
} // end getName } // end getName
final String getValue() final String getValue()
{ {
return value; return m_value;
} // end getValue } // end getValue