completed the transition away from features and toward "services" - the old
database-based configuration has been replaced with the new XML-based one. This paves the way for further modularization of the code.
This commit is contained in:
		
							parent
							
								
									85518ca0d5
								
							
						
					
					
						commit
						f5a5009932
					
				@ -53,7 +53,7 @@
 | 
			
		||||
    <!-- Members service -->
 | 
			
		||||
    <service id="Members" index="4">
 | 
			
		||||
      <setup default="true" locked="true"/>
 | 
			
		||||
      <access permission="Community.Read"/>
 | 
			
		||||
      <access permission="Community.Read" role="Community.Member"/>
 | 
			
		||||
      <link sequence="4800" href="members?sig=${cid}" type="servlet">Members</link>
 | 
			
		||||
    </service>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -198,22 +198,6 @@ CREATE TABLE refcategory (
 | 
			
		||||
    UNIQUE INDEX display (parent, name)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# A reference to feature codes and what they mean.
 | 
			
		||||
CREATE TABLE refsigftr (
 | 
			
		||||
    ftr_code SMALLINT NOT NULL PRIMARY KEY,
 | 
			
		||||
    is_default TINYINT DEFAULT 0,
 | 
			
		||||
    is_locked TINYINT DEFAULT 0,
 | 
			
		||||
    is_hidden TINYINT DEFAULT 0,
 | 
			
		||||
    require_read TINYINT DEFAULT 1,
 | 
			
		||||
    sequence SMALLINT NOT NULL,
 | 
			
		||||
    min_level SMALLINT UNSIGNED DEFAULT 0,
 | 
			
		||||
    symbol CHAR(4) NOT NULL,
 | 
			
		||||
    name VARCHAR(64) NOT NULL,
 | 
			
		||||
    applet VARCHAR(64) NOT NULL,
 | 
			
		||||
    UNIQUE INDEX name_x (name),
 | 
			
		||||
    UNIQUE index sequence_x (sequence)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# The table mapping SIGs and their associated features.
 | 
			
		||||
CREATE TABLE sigftrs (
 | 
			
		||||
    sigid INT NOT NULL,
 | 
			
		||||
@ -472,18 +456,18 @@ INSERT INTO refaudit (type, descr) VALUES
 | 
			
		||||
    (111,     'Admin Change User Account'),
 | 
			
		||||
    (112,     'Admin Set Account Security'),
 | 
			
		||||
    (113,     'Admin Lock/Unlock Account'),
 | 
			
		||||
    (201,     'Create New SIG'),
 | 
			
		||||
    (202,     'Set SIG Membership'),
 | 
			
		||||
    (203,     'Set SIG Contact Info'),
 | 
			
		||||
    (204,     'Set SIG Feature Set'),
 | 
			
		||||
    (205,     'Set SIG Name'),
 | 
			
		||||
    (206,     'Set SIG Alias'),
 | 
			
		||||
    (207,     'Set SIG Category'),
 | 
			
		||||
    (208,     'Set SIG Hiding Information'),
 | 
			
		||||
    (209,     'Set SIG Members-Only Flag'),
 | 
			
		||||
    (210,     'Set SIG Join Key'),
 | 
			
		||||
    (211,     'Set SIG Security Levels'),
 | 
			
		||||
    (212,     'Delete SIG'),
 | 
			
		||||
    (201,     'Create New Community'),
 | 
			
		||||
    (202,     'Set Community Membership'),
 | 
			
		||||
    (203,     'Set Community Contact Info'),
 | 
			
		||||
    (204,     'Set Community Services'),
 | 
			
		||||
    (205,     'Set Community Name'),
 | 
			
		||||
    (206,     'Set Community Alias'),
 | 
			
		||||
    (207,     'Set Community Category'),
 | 
			
		||||
    (208,     'Set Community Hiding Information'),
 | 
			
		||||
    (209,     'Set Community Members-Only Flag'),
 | 
			
		||||
    (210,     'Set Community Join Key'),
 | 
			
		||||
    (211,     'Set Community Security Levels'),
 | 
			
		||||
    (212,     'Delete Community'),
 | 
			
		||||
    (301,     'Create New Conference'),
 | 
			
		||||
    (302,     'Set Conference Security Levels'),
 | 
			
		||||
    (303,     'Set Conference Name'),
 | 
			
		||||
@ -874,15 +858,6 @@ INSERT INTO refcategory (catid, parent, symlink, name) VALUES
 | 
			
		||||
# Make sure the special "System" category is hidden.
 | 
			
		||||
UPDATE refcategory SET hide_dir = 1, hide_search = 1 WHERE catid = 15;
 | 
			
		||||
 | 
			
		||||
# Populate the Features reference table.
 | 
			
		||||
INSERT INTO refsigftr (ftr_code, is_default, is_locked, is_hidden, require_read, sequence, min_level,
 | 
			
		||||
                       symbol, name, applet) VALUES
 | 
			
		||||
    (0, 1, 1, 1, 0, 4900,  0,     'PROF', 'Profile',               'sigprofile'),
 | 
			
		||||
    (1, 1, 1, 1, 0, 5000,  57000, 'ADMN', 'Administration',        'sigadmin'),
 | 
			
		||||
    (2, 0, 1, 1, 0, 10000, 63000, 'SYSA', 'System Administration', 'sysadmin'),
 | 
			
		||||
    (3, 1, 0, 0, 1, 500,   0,     'CONF', 'Conferences',           'confops'),
 | 
			
		||||
    (4, 1, 1, 0, 1, 4800,  0,     'MEMB', 'Members',               'members');
 | 
			
		||||
 | 
			
		||||
# Create the initial advertisements (quotes).
 | 
			
		||||
INSERT INTO adverts (imagepath) VALUES
 | 
			
		||||
    ('images/ads/Brown.gif'),
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,7 @@ package com.silverwrist.venice.core;
 | 
			
		||||
import java.util.BitSet;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import com.silverwrist.venice.except.AccessError;
 | 
			
		||||
import com.silverwrist.venice.except.DataException;
 | 
			
		||||
import com.silverwrist.venice.except.EmailException;
 | 
			
		||||
@ -68,13 +69,11 @@ public interface CommunityContext extends SearchMode
 | 
			
		||||
 | 
			
		||||
  public abstract void putContactInfo(ContactInfo ci) throws DataException, AccessError;
 | 
			
		||||
 | 
			
		||||
  public abstract BitSet getFeatures();
 | 
			
		||||
  public abstract Set getServices();
 | 
			
		||||
 | 
			
		||||
  public abstract void setFeatures(BitSet feature_set, BitSet mask) throws DataException, AccessError;
 | 
			
		||||
  public abstract Set getConfiguredServices();
 | 
			
		||||
 | 
			
		||||
  public abstract List getCommunityFeaturesList();
 | 
			
		||||
 | 
			
		||||
  public abstract String getDefaultApplet();
 | 
			
		||||
  public abstract void setServiceEnable(ServiceToken token, boolean enable) throws AccessError, DataException;
 | 
			
		||||
 | 
			
		||||
  public abstract void setName(String name) throws DataException, AccessError;
 | 
			
		||||
 | 
			
		||||
@ -98,9 +97,9 @@ public interface CommunityContext extends SearchMode
 | 
			
		||||
 | 
			
		||||
  public abstract void setMembersOnly(boolean flag) throws DataException, AccessError;
 | 
			
		||||
 | 
			
		||||
  public abstract short getInitialFeatureIndex();
 | 
			
		||||
  public abstract ServiceToken getDefaultService();
 | 
			
		||||
 | 
			
		||||
  public abstract void setInitialFeatureIndex(short ndx) throws DataException, AccessError;
 | 
			
		||||
  public abstract void setDefaultService(ServiceToken token) throws AccessError, DataException;
 | 
			
		||||
 | 
			
		||||
  public abstract String getJoinKey() throws DataException, AccessError;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,16 +17,14 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.core;
 | 
			
		||||
 | 
			
		||||
public interface CommunityFeature
 | 
			
		||||
public interface ServiceGroup
 | 
			
		||||
{
 | 
			
		||||
  public abstract int getFeatureCode();
 | 
			
		||||
  public static final int SVCGRP_GLOBAL = 0;
 | 
			
		||||
 | 
			
		||||
  public abstract String getSymbol();
 | 
			
		||||
  public static final int SVCGRP_COMMUNITY = 1;
 | 
			
		||||
 | 
			
		||||
  public abstract String getName();
 | 
			
		||||
  public static final int SVCGRP_USER = 2;
 | 
			
		||||
 | 
			
		||||
  public abstract String getApplet();
 | 
			
		||||
  public static final int NUM_SVCGRPS = 3;
 | 
			
		||||
 | 
			
		||||
  public abstract int getSequence();
 | 
			
		||||
 | 
			
		||||
} // end interface CommunityFeature
 | 
			
		||||
} // end interface ServiceGroup
 | 
			
		||||
							
								
								
									
										110
									
								
								src/com/silverwrist/venice/core/ServiceToken.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								src/com/silverwrist/venice/core/ServiceToken.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,110 @@
 | 
			
		||||
/*
 | 
			
		||||
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 | 
			
		||||
 * (the "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
 | 
			
		||||
 * 
 | 
			
		||||
 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
 | 
			
		||||
 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
			
		||||
 * language governing rights and limitations under the License.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.core;
 | 
			
		||||
 | 
			
		||||
public class ServiceToken implements Comparable, ServiceGroup
 | 
			
		||||
{
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Attributes
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private int group;
 | 
			
		||||
  private String symbol;
 | 
			
		||||
  private int index;
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  protected ServiceToken(int group, String symbol, int index)
 | 
			
		||||
  {
 | 
			
		||||
    this.group = group;
 | 
			
		||||
    this.symbol = symbol;
 | 
			
		||||
    this.index = index;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Overrides from class Object
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public boolean equals(Object o)
 | 
			
		||||
  {
 | 
			
		||||
    if ((o==null) || !(o instanceof ServiceToken))
 | 
			
		||||
      return false;
 | 
			
		||||
    ServiceToken other = (ServiceToken)o;
 | 
			
		||||
    return ((this.group==other.group) && (this.symbol.equals(other.symbol)));
 | 
			
		||||
 | 
			
		||||
  } // end equals
 | 
			
		||||
 | 
			
		||||
  public int hashCode()
 | 
			
		||||
  {
 | 
			
		||||
    return (group << 24) ^ symbol.hashCode();
 | 
			
		||||
 | 
			
		||||
  } // end hashCode
 | 
			
		||||
 | 
			
		||||
  public String toString()
 | 
			
		||||
  {
 | 
			
		||||
    return symbol;
 | 
			
		||||
 | 
			
		||||
  } // end toString
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Implementations from interface Comparable
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public int compareTo(Object o)
 | 
			
		||||
  {
 | 
			
		||||
    if (o==null)
 | 
			
		||||
      throw new NullPointerException("compareTo null object!");
 | 
			
		||||
    ServiceToken other = (ServiceToken)o;  // may throw ClassCastException
 | 
			
		||||
    int rc = this.group - other.group;
 | 
			
		||||
    if (rc!=0)
 | 
			
		||||
      return rc;
 | 
			
		||||
    return this.symbol.compareTo(other.symbol);
 | 
			
		||||
 | 
			
		||||
  } // end compareTo
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * External operations
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public final int getGroup()
 | 
			
		||||
  {
 | 
			
		||||
    return group;
 | 
			
		||||
 | 
			
		||||
  } // end getGroup
 | 
			
		||||
 | 
			
		||||
  public final String getSymbol()
 | 
			
		||||
  {
 | 
			
		||||
    return symbol;
 | 
			
		||||
 | 
			
		||||
  } // end getSymbol
 | 
			
		||||
 | 
			
		||||
  public final int getIndex()
 | 
			
		||||
  {
 | 
			
		||||
    return index;
 | 
			
		||||
 | 
			
		||||
  } // end getIndex
 | 
			
		||||
 | 
			
		||||
} // end class ServiceToken
 | 
			
		||||
@ -27,16 +27,12 @@ import com.silverwrist.venice.except.DataException;
 | 
			
		||||
import com.silverwrist.venice.except.EmailException;
 | 
			
		||||
import com.silverwrist.venice.htmlcheck.HTMLChecker;
 | 
			
		||||
 | 
			
		||||
public interface VeniceEngine extends SearchMode
 | 
			
		||||
public interface VeniceEngine extends SearchMode, ServiceGroup
 | 
			
		||||
{
 | 
			
		||||
  public abstract void initialize(Document config, String app_root) throws ConfigException, DataException;
 | 
			
		||||
 | 
			
		||||
  public abstract void shutdown() throws ConfigException;
 | 
			
		||||
 | 
			
		||||
  public abstract int getNumFeatures();
 | 
			
		||||
 | 
			
		||||
  public abstract BitSet getAllFeaturesMask();
 | 
			
		||||
 | 
			
		||||
  public abstract UserContext createUserContext(String remote_addr) throws DataException;
 | 
			
		||||
 | 
			
		||||
  public abstract String getEmailAddressForUser(String username) throws DataException, AccessError;
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,7 @@ import com.silverwrist.venice.core.*;
 | 
			
		||||
import com.silverwrist.venice.core.internals.*;
 | 
			
		||||
import com.silverwrist.venice.except.*;
 | 
			
		||||
import com.silverwrist.venice.security.AuditRecord;
 | 
			
		||||
import com.silverwrist.venice.svc.*;
 | 
			
		||||
 | 
			
		||||
class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
{
 | 
			
		||||
@ -94,17 +95,17 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
  private boolean hidden_search;        // hidden from keyword searches?
 | 
			
		||||
  private boolean members_only;         // only members allowed in this community?
 | 
			
		||||
  private boolean is_admin;             // is this the administrative community?
 | 
			
		||||
  private short initial_feature;        // the "initial" feature to display for this community
 | 
			
		||||
  private String name;                  // the name of this community
 | 
			
		||||
  private String language;              // the default language code
 | 
			
		||||
  private String synopsis;              // the synopsis of the community
 | 
			
		||||
  private String rules;                 // the community "rules"
 | 
			
		||||
  private String alias;                 // the community alias value
 | 
			
		||||
  private boolean public_comm;          // is this a public community?
 | 
			
		||||
  private BitSet features;              // set of available features
 | 
			
		||||
  private ObjectCache conf_objcache = new ObjectCache(new ConferenceCommunityContextImplCreator());
 | 
			
		||||
  private boolean deleted = false;      // has this community been deleted?
 | 
			
		||||
  private OptionSet flags;              // property flags
 | 
			
		||||
  private HashSet services;             // services for this community
 | 
			
		||||
  private ServiceToken initial_service; // the initial service
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -152,13 +153,18 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
 | 
			
		||||
      } // end while
 | 
			
		||||
 | 
			
		||||
      // get the community feature set
 | 
			
		||||
      // get the set of community services
 | 
			
		||||
      services = new HashSet();
 | 
			
		||||
      sql.setLength(0);
 | 
			
		||||
      sql.append("SELECT ftr_code FROM sigftrs WHERE sigid = ").append(cid).append(';');
 | 
			
		||||
      rs = stmt.executeQuery(sql.toString());
 | 
			
		||||
      features = new BitSet();
 | 
			
		||||
      while (rs.next())
 | 
			
		||||
	features.set(rs.getInt("ftr_code"));
 | 
			
		||||
      { // get the service tokens and return them
 | 
			
		||||
	ServiceToken token = env.getSCM().getTokenForIndex(ServiceControl.SVCGRP_COMMUNITY,rs.getInt(1));
 | 
			
		||||
	if (token!=null)
 | 
			
		||||
	  services.add(token);
 | 
			
		||||
 | 
			
		||||
      } // end while
 | 
			
		||||
 | 
			
		||||
    } // end try
 | 
			
		||||
    catch (SQLException e)
 | 
			
		||||
@ -178,7 +184,7 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
  protected CommunityCoreData(EnvEngine env, int cid, java.util.Date creation,
 | 
			
		||||
			      String name, String alias, int host_uid, String language, String synopsis,
 | 
			
		||||
			      String rules, String joinkey, boolean hide_dir, boolean hide_search,
 | 
			
		||||
			      BitSet features)
 | 
			
		||||
			      int[] levels, Set services)
 | 
			
		||||
  {
 | 
			
		||||
    if (logger.isDebugEnabled())
 | 
			
		||||
      logger.debug("new CommunityCoreData for BRAND NEW COMMUNITY " + cid);
 | 
			
		||||
@ -188,11 +194,11 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
    this.created = creation;
 | 
			
		||||
    this.last_access = creation;
 | 
			
		||||
    this.last_update = creation;
 | 
			
		||||
    this.read_level = new_env.getDefaultRole("Community.Read").getLevel();
 | 
			
		||||
    this.write_level = new_env.getDefaultRole("Community.Write").getLevel();
 | 
			
		||||
    this.create_level = new_env.getDefaultRole("Community.Create").getLevel();
 | 
			
		||||
    this.delete_level = new_env.getDefaultRole("Community.Delete").getLevel();
 | 
			
		||||
    this.join_level = new_env.getDefaultRole("Community.Join").getLevel();
 | 
			
		||||
    this.read_level = levels[0];
 | 
			
		||||
    this.write_level = levels[1];
 | 
			
		||||
    this.create_level = levels[2];
 | 
			
		||||
    this.delete_level = levels[3];
 | 
			
		||||
    this.join_level = levels[4];
 | 
			
		||||
    this.contactid = -1;
 | 
			
		||||
    this.host_uid = host_uid;
 | 
			
		||||
    this.category_id = 0;
 | 
			
		||||
@ -200,15 +206,15 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
    this.hidden_search = hide_search;
 | 
			
		||||
    this.members_only = true;
 | 
			
		||||
    this.is_admin = false;
 | 
			
		||||
    this.initial_feature = 0;
 | 
			
		||||
    this.name = name;
 | 
			
		||||
    this.language = language;
 | 
			
		||||
    this.synopsis = synopsis;
 | 
			
		||||
    this.rules = rules;
 | 
			
		||||
    this.alias = alias;
 | 
			
		||||
    this.public_comm = StringUtil.isStringEmpty(joinkey);
 | 
			
		||||
    this.features = (BitSet)(features.clone());
 | 
			
		||||
    this.flags = new OptionSet();
 | 
			
		||||
    this.services = new HashSet(services);
 | 
			
		||||
    this.initial_service = env.getSCM().getTokenForIndex(ServiceControl.SVCGRP_COMMUNITY,0);
 | 
			
		||||
    if (env.getEngine().getParamBoolean(EngineBackend.BP_POSTPICTURES))
 | 
			
		||||
      flags.set(BP_POSTPICTURES);
 | 
			
		||||
 | 
			
		||||
@ -237,7 +243,6 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
    hidden_search = rs.getBoolean("hide_search");
 | 
			
		||||
    members_only = rs.getBoolean("membersonly");
 | 
			
		||||
    is_admin = rs.getBoolean("is_admin");
 | 
			
		||||
    initial_feature = rs.getShort("init_ftr");
 | 
			
		||||
    name = rs.getString("signame");
 | 
			
		||||
    language = rs.getString("language");
 | 
			
		||||
    synopsis = rs.getString("synopsis");
 | 
			
		||||
@ -251,6 +256,7 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
    else  // Admin is NEVER a public community!
 | 
			
		||||
      public_comm = false;
 | 
			
		||||
    alias = rs.getString("alias");
 | 
			
		||||
    initial_service = env.getSCM().getTokenForIndex(ServiceControl.SVCGRP_COMMUNITY,rs.getShort("init_ftr"));
 | 
			
		||||
 | 
			
		||||
    if (logger.isDebugEnabled())
 | 
			
		||||
      logger.debug("Loaded data for community \"" + name + "\" (ID " + cid + ", alias '" + alias
 | 
			
		||||
@ -578,17 +584,53 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
 | 
			
		||||
  } // end putContactInfo
 | 
			
		||||
 | 
			
		||||
  public BitSet getFeatureSet()
 | 
			
		||||
  public Set getServices()
 | 
			
		||||
  {
 | 
			
		||||
    return (BitSet)(features.clone());
 | 
			
		||||
    return Collections.unmodifiableSet((Set)(services.clone()));
 | 
			
		||||
 | 
			
		||||
  } // end getFeatureSet
 | 
			
		||||
  } // end getServices
 | 
			
		||||
 | 
			
		||||
  public synchronized void putFeatureSet(EnvCommunity outer, BitSet set) throws DataException
 | 
			
		||||
  public Set getServices(EnvCommunity outer)
 | 
			
		||||
  {
 | 
			
		||||
    HashSet tmp = new HashSet();
 | 
			
		||||
    Iterator it = services.iterator();
 | 
			
		||||
    while (it.hasNext())
 | 
			
		||||
    { // get the service associated with the token
 | 
			
		||||
      ServiceToken token = (ServiceToken)(it.next());
 | 
			
		||||
      CommService svc = (CommService)(env.getSCM().getServiceForToken(token));
 | 
			
		||||
 | 
			
		||||
      // Check the permission first.
 | 
			
		||||
      String perm = svc.getPermission();
 | 
			
		||||
      if (perm!=null)
 | 
			
		||||
      { // test the permission against the outer environment
 | 
			
		||||
	if (!(outer.testPermission(perm)))
 | 
			
		||||
	  continue;  // permission failed - just go on to the next one
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
 | 
			
		||||
      if (outer.satisfy(svc.getRole()))
 | 
			
		||||
	tmp.add(token);
 | 
			
		||||
 | 
			
		||||
    } // end getServices
 | 
			
		||||
 | 
			
		||||
    if (tmp.isEmpty())
 | 
			
		||||
      return Collections.EMPTY_SET;
 | 
			
		||||
    else
 | 
			
		||||
      return Collections.unmodifiableSet(tmp);
 | 
			
		||||
 | 
			
		||||
  } // end getServices
 | 
			
		||||
 | 
			
		||||
  public synchronized void setServiceEnable(EnvCommunity outer, ServiceToken token, boolean enable)
 | 
			
		||||
      throws DataException
 | 
			
		||||
  {
 | 
			
		||||
    if (deleted)
 | 
			
		||||
      throw new DataException("This community has been deleted.");
 | 
			
		||||
 | 
			
		||||
    if (enable && services.contains(token))
 | 
			
		||||
      return;
 | 
			
		||||
    if (!enable && !(services.contains(token)))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
    Connection conn = null;  // database connection
 | 
			
		||||
    AuditRecord ar = null;   // audit record
 | 
			
		||||
      
 | 
			
		||||
@ -599,35 +641,26 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
      stmt.executeUpdate("LOCK TABLES sigftrs WRITE;");
 | 
			
		||||
 | 
			
		||||
      try
 | 
			
		||||
      { // first, delete all the old entries
 | 
			
		||||
	StringBuffer sql = new StringBuffer("DELETE FROM sigftrs WHERE sigid = ");
 | 
			
		||||
	sql.append(cid).append(';');
 | 
			
		||||
	stmt.executeUpdate(sql.toString());
 | 
			
		||||
 | 
			
		||||
	// now, add all the new entries
 | 
			
		||||
	sql.setLength(0);
 | 
			
		||||
	for (int i=0; i<set.length(); i++)
 | 
			
		||||
	{ // test all the bits in the new feature set
 | 
			
		||||
	  if (set.get(i))
 | 
			
		||||
	  { // append the appropriate element to the SQL statement we're building
 | 
			
		||||
	    if (sql.length()==0)
 | 
			
		||||
	      sql.append("INSERT INTO sigftrs (sigid, ftr_code) VALUES ");
 | 
			
		||||
	    else
 | 
			
		||||
	      sql.append(", ");
 | 
			
		||||
	    sql.append('(').append(cid).append(", ").append(i).append(')');
 | 
			
		||||
 | 
			
		||||
	  } // end if
 | 
			
		||||
 | 
			
		||||
	} // end for
 | 
			
		||||
 | 
			
		||||
	if (sql.length()>0)
 | 
			
		||||
	{ // add the features to the database
 | 
			
		||||
	  sql.append(';');
 | 
			
		||||
	  stmt.executeUpdate(sql.toString());
 | 
			
		||||
      { // execute the right statement
 | 
			
		||||
	StringBuffer sql;
 | 
			
		||||
	if (enable)
 | 
			
		||||
	{ // create an INSERT statement
 | 
			
		||||
	  sql = new StringBuffer("INSERT INTO sigftrs (sigid, ftr_code) VALUES (");
 | 
			
		||||
	  sql.append(cid).append(", ").append(token.getIndex()).append(");");
 | 
			
		||||
 | 
			
		||||
	} // end if
 | 
			
		||||
	else
 | 
			
		||||
	{ // create a DELETE statement
 | 
			
		||||
	  sql = new StringBuffer("DELETE FROM sigftrs WHERE sigid = ");
 | 
			
		||||
	  sql.append(cid).append(" AND ftr_code = ").append(token.getIndex()).append(';');
 | 
			
		||||
 | 
			
		||||
	features = set;
 | 
			
		||||
	} // end else
 | 
			
		||||
 | 
			
		||||
	stmt.executeUpdate(sql.toString());
 | 
			
		||||
	if (enable)
 | 
			
		||||
	  services.add(token);
 | 
			
		||||
	else
 | 
			
		||||
	  services.remove(token);
 | 
			
		||||
 | 
			
		||||
      } // end try
 | 
			
		||||
      finally
 | 
			
		||||
@ -665,21 +698,7 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
 | 
			
		||||
    } // end finally
 | 
			
		||||
 | 
			
		||||
  } // end putFeatureSet
 | 
			
		||||
 | 
			
		||||
  public List getCommunityFeaturesList(int level)
 | 
			
		||||
  {
 | 
			
		||||
    return env.getEngine().getCommunityFeatureSet(features,level,canReadCommunitySubObjects(level));
 | 
			
		||||
 | 
			
		||||
  } // end getCommunityFeaturesList
 | 
			
		||||
 | 
			
		||||
  public String getDefaultApplet()
 | 
			
		||||
  {
 | 
			
		||||
    StringBuffer buf = new StringBuffer(env.getEngine().getAppletForFeature(initial_feature));
 | 
			
		||||
    buf.append("?sig=").append(cid);
 | 
			
		||||
    return buf.toString();
 | 
			
		||||
 | 
			
		||||
  } // end getDefaultApplet
 | 
			
		||||
  } // end setServiceEnable
 | 
			
		||||
 | 
			
		||||
  public synchronized void setName(EnvCommunity outer, String name) throws DataException
 | 
			
		||||
  {
 | 
			
		||||
@ -1076,13 +1095,13 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
 | 
			
		||||
  } // end setMembersOnly
 | 
			
		||||
 | 
			
		||||
  public short getInitialFeatureIndex()
 | 
			
		||||
  public ServiceToken getDefaultService()
 | 
			
		||||
  {
 | 
			
		||||
    return initial_feature;
 | 
			
		||||
    return initial_service;
 | 
			
		||||
 | 
			
		||||
  } // end getInitialFeatureIndex
 | 
			
		||||
  } // end getDefaultService
 | 
			
		||||
 | 
			
		||||
  public synchronized void setInitialFeatureIndex(short ndx) throws DataException
 | 
			
		||||
  public synchronized void setDefaultService(ServiceToken token) throws DataException
 | 
			
		||||
  {
 | 
			
		||||
    if (deleted)
 | 
			
		||||
      throw new DataException("This community has been deleted.");
 | 
			
		||||
@ -1094,11 +1113,11 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
      conn = env.getConnection();
 | 
			
		||||
      Statement stmt = conn.createStatement();
 | 
			
		||||
      StringBuffer sql = new StringBuffer("UPDATE sigs SET init_ftr = ");
 | 
			
		||||
      sql.append(ndx).append(", lastupdate = '");
 | 
			
		||||
      sql.append(token.getIndex()).append(", lastupdate = '");
 | 
			
		||||
      java.util.Date now = new java.util.Date();
 | 
			
		||||
      sql.append(SQLUtil.encodeDate(now)).append("' WHERE sigid = ").append(cid).append(';');
 | 
			
		||||
      stmt.executeUpdate(sql.toString());
 | 
			
		||||
      initial_feature = ndx;
 | 
			
		||||
      initial_service = token;
 | 
			
		||||
      last_update = now;
 | 
			
		||||
 | 
			
		||||
    } // end try
 | 
			
		||||
@ -1114,7 +1133,7 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
 | 
			
		||||
    } // end finally
 | 
			
		||||
 | 
			
		||||
  } // end setInitialFeatureIndex
 | 
			
		||||
  } // end setDefaultService
 | 
			
		||||
 | 
			
		||||
  public String getJoinKey() throws DataException
 | 
			
		||||
  {
 | 
			
		||||
@ -1435,17 +1454,13 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
 | 
			
		||||
  } // end getMemberCount
 | 
			
		||||
 | 
			
		||||
  public boolean isFeaturePresent(String symbol)
 | 
			
		||||
  public boolean hasService(ServiceToken token)
 | 
			
		||||
  {
 | 
			
		||||
    if (deleted)
 | 
			
		||||
      return false;
 | 
			
		||||
    int ndx = env.getEngine().getFeatureIndexBySymbol(symbol);
 | 
			
		||||
    if (ndx>=0)
 | 
			
		||||
      return features.get(ndx);
 | 
			
		||||
    else
 | 
			
		||||
      return false;
 | 
			
		||||
    return services.contains(token);
 | 
			
		||||
 | 
			
		||||
  } // end isFeaturePresent
 | 
			
		||||
  } // end hasService
 | 
			
		||||
 | 
			
		||||
  public synchronized ConferenceCommunityContext getConferenceDataObject(int confid) throws DataException
 | 
			
		||||
  {
 | 
			
		||||
@ -1954,12 +1969,11 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
				       boolean hide_search) throws DataException, AccessError
 | 
			
		||||
  {
 | 
			
		||||
    Connection conn = null;    // database connection
 | 
			
		||||
    BitSet def_features = env.getEngine().getDefaultFeaturesMask();
 | 
			
		||||
    int new_cid;               // ID of the new community
 | 
			
		||||
    java.util.Date creation;   // creation date!
 | 
			
		||||
    AuditRecord ar = null;     // the audit record
 | 
			
		||||
    CommunityCoreData comm;    // the new community that gets returned
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
    try
 | 
			
		||||
    { // get a database connection and create the appropriate SELECT statement
 | 
			
		||||
      conn = env.getConnection();
 | 
			
		||||
@ -1981,14 +1995,15 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
		   + "rules, joinkey, alias) VALUES ('");
 | 
			
		||||
	creation = new java.util.Date();
 | 
			
		||||
	String creation_str = SQLUtil.encodeDate(creation);
 | 
			
		||||
	int level_read = env.getCommunityDefaultRole("Community.Read").getLevel();
 | 
			
		||||
	int level_write = env.getCommunityDefaultRole("Community.Write").getLevel();
 | 
			
		||||
	int level_create = env.getCommunityDefaultRole("Community.Create").getLevel();
 | 
			
		||||
	int level_delete = env.getCommunityDefaultRole("Community.Delete").getLevel();
 | 
			
		||||
	int level_join = env.getCommunityDefaultRole("Community.Join").getLevel();
 | 
			
		||||
	int[] levels = new int[5];
 | 
			
		||||
	levels[0] = env.getCommunityDefaultRole("Community.Read").getLevel();
 | 
			
		||||
	levels[1] = env.getCommunityDefaultRole("Community.Write").getLevel();
 | 
			
		||||
	levels[2] = env.getCommunityDefaultRole("Community.Create").getLevel();
 | 
			
		||||
	levels[3] = env.getCommunityDefaultRole("Community.Delete").getLevel();
 | 
			
		||||
	levels[4] = env.getCommunityDefaultRole("Community.Join").getLevel();
 | 
			
		||||
	sql.append(creation).append("', '").append(creation).append("', '").append(creation).append("', ");
 | 
			
		||||
	sql.append(level_read).append(", ").append(level_write).append(", ").append(level_create).append(", ");
 | 
			
		||||
	sql.append(level_delete).append(", ").append(level_join).append(", ").append(host_uid).append(", ");
 | 
			
		||||
	sql.append(levels[0]).append(", ").append(levels[1]).append(", ").append(levels[2]).append(", ");
 | 
			
		||||
	sql.append(levels[3]).append(", ").append(levels[4]).append(", ").append(host_uid).append(", ");
 | 
			
		||||
	sql.append(hide_dir ? '1' : '0').append(", ").append(hide_search ? '1' : '0').append(", ");
 | 
			
		||||
	sql.append(SQLUtil.encodeStringArg(name)).append(", ").append(SQLUtil.encodeStringArg(language));
 | 
			
		||||
	sql.append(", ").append(SQLUtil.encodeStringArg(synopsis)).append(", ");
 | 
			
		||||
@ -2011,22 +2026,22 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
 | 
			
		||||
	} // end else
 | 
			
		||||
 | 
			
		||||
	if (def_features.length()>0)
 | 
			
		||||
	{ // need to build the community's defined feature set
 | 
			
		||||
	// Assign the new community the default services for new communities.
 | 
			
		||||
	Set default_service = env.getSCM().getDefaultServices(ServiceControl.SVCGRP_COMMUNITY);
 | 
			
		||||
	if (default_service.size()>0)
 | 
			
		||||
	{ // build the communty's defined service set
 | 
			
		||||
	  sql.setLength(0);
 | 
			
		||||
	  for (int i=0; i<def_features.length(); i++)
 | 
			
		||||
	  { // look for set bits in the feature set
 | 
			
		||||
	    if (def_features.get(i))
 | 
			
		||||
	    { // build up the SQL statement piece by piece
 | 
			
		||||
	      if (sql.length()==0)
 | 
			
		||||
		sql.append("INSERT INTO sigftrs (sigid, ftr_code) VALUES ");
 | 
			
		||||
	      else
 | 
			
		||||
		sql.append(", ");
 | 
			
		||||
	      sql.append('(').append(new_cid).append(", ").append(i).append(')');
 | 
			
		||||
 | 
			
		||||
	    } // end if
 | 
			
		||||
 | 
			
		||||
	  } // end for
 | 
			
		||||
	  Iterator it = default_service.iterator();
 | 
			
		||||
	  while (it.hasNext())
 | 
			
		||||
	  { // appeand each clause to the string in turn
 | 
			
		||||
	    ServiceToken token = (ServiceToken)(it.next());
 | 
			
		||||
	    if (sql.length()==0)
 | 
			
		||||
	      sql.append("INSERT INTO sigftrs (sigid, ftr_code) VALUES ");
 | 
			
		||||
	    else
 | 
			
		||||
	      sql.append(", ");
 | 
			
		||||
	    sql.append('(').append(new_cid).append(", ").append(token.getIndex()).append(')');
 | 
			
		||||
	    
 | 
			
		||||
	  } // end while
 | 
			
		||||
 | 
			
		||||
	  // close out the SQL statement
 | 
			
		||||
	  sql.append(';');
 | 
			
		||||
@ -2050,7 +2065,7 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
 | 
			
		||||
	// Create the CommunityCoreData object representing this community and register it with the engine's
 | 
			
		||||
	// community data object cache.
 | 
			
		||||
	comm = new CommunityCoreData(env,new_cid,creation,name,alias,host_uid,language,synopsis,rules,joinkey,
 | 
			
		||||
				     hide_dir,hide_search,def_features);
 | 
			
		||||
				     hide_dir,hide_search,levels,default_service);
 | 
			
		||||
	comm.newProperties(conn);
 | 
			
		||||
 | 
			
		||||
      } // end try
 | 
			
		||||
 | 
			
		||||
@ -27,6 +27,7 @@ import com.silverwrist.venice.db.*;
 | 
			
		||||
import com.silverwrist.venice.except.*;
 | 
			
		||||
import com.silverwrist.venice.security.AuditRecord;
 | 
			
		||||
import com.silverwrist.venice.security.Role;
 | 
			
		||||
import com.silverwrist.venice.svc.*;
 | 
			
		||||
 | 
			
		||||
class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
{
 | 
			
		||||
@ -82,6 +83,7 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
  private CommunitySimpleDataCache cache;   // cache object for name and alias
 | 
			
		||||
  private CommunityData data = null;  // the actual community data
 | 
			
		||||
  private boolean deleted = false;    // has this community been deleted?
 | 
			
		||||
  private ServiceToken x_conf_token;  // token for Conferences service
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructors
 | 
			
		||||
@ -97,6 +99,7 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
    this.cid = cid;
 | 
			
		||||
    setMemberValues(granted_level,true,locked);
 | 
			
		||||
    this.cache = new CommunitySimpleDataCache(name,alias);
 | 
			
		||||
    this.x_conf_token = env.getSCM().getTokenForSymbol(ServiceControl.SVCGRP_COMMUNITY,"Conference");
 | 
			
		||||
    
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -111,6 +114,7 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
    this.show_admin = false;
 | 
			
		||||
    this.locked = false;
 | 
			
		||||
    this.cache = new CommunitySimpleDataCache(name,alias);
 | 
			
		||||
    this.x_conf_token = env.getSCM().getTokenForSymbol(ServiceControl.SVCGRP_COMMUNITY,"Conference");
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -124,6 +128,7 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
    this.cache = null;  // no cache required - we have the CommunityData
 | 
			
		||||
    this.data = data;
 | 
			
		||||
    setMemberValues(new_env.getDefaultRole("Community.Creator").getLevel(),true,true);
 | 
			
		||||
    this.x_conf_token = env.getSCM().getTokenForSymbol(ServiceControl.SVCGRP_COMMUNITY,"Conference");
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -198,7 +203,7 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
    if (deleted)
 | 
			
		||||
      throw new DataException("This community has been deleted.");
 | 
			
		||||
 | 
			
		||||
    if (!(getData().isFeaturePresent("CONF")))
 | 
			
		||||
    if (!(getData().hasService(x_conf_token)))
 | 
			
		||||
    { // the community doesn't use conferencing
 | 
			
		||||
      logger.error("the community doesn't use conferencing");
 | 
			
		||||
      throw new AccessError("This community does not use the conferencing feature.");
 | 
			
		||||
@ -206,7 +211,21 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    getData().testMembership(level,is_member);
 | 
			
		||||
    if (!(env.getEngine().canAccessFeature("CONF",level,getData().canReadCommunitySubObjects(level))))
 | 
			
		||||
    CommService svc = (CommService)(env.getSCM().getServiceForToken(x_conf_token));
 | 
			
		||||
    String perm = svc.getPermission();
 | 
			
		||||
    if (perm!=null)
 | 
			
		||||
    { // test the permission
 | 
			
		||||
      if (!(env.testPermission(perm)))
 | 
			
		||||
      { // you can't access the conferences!
 | 
			
		||||
	logger.error("user not permitted to read confs from this community");
 | 
			
		||||
	throw new AccessError("You are not permitted to access this community's conferences.");
 | 
			
		||||
	
 | 
			
		||||
      } // end if
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    Role r = svc.getRole();
 | 
			
		||||
    if (!(r.isSatisfiedBy(level)))
 | 
			
		||||
    { // you can't access the conferences!
 | 
			
		||||
      logger.error("user not permitted to read confs from this community");
 | 
			
		||||
      throw new AccessError("You are not permitted to access this community's conferences.");
 | 
			
		||||
@ -479,64 +498,48 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
 | 
			
		||||
  } // end putContactInfo
 | 
			
		||||
 | 
			
		||||
  public BitSet getFeatures()
 | 
			
		||||
  public Set getServices()
 | 
			
		||||
  {
 | 
			
		||||
    CommunityData d = getDataNE();
 | 
			
		||||
    if (d!=null)
 | 
			
		||||
      return d.getFeatureSet();
 | 
			
		||||
      return d.getServices(env);
 | 
			
		||||
    else
 | 
			
		||||
      return null;
 | 
			
		||||
 | 
			
		||||
  } // end getFeatures
 | 
			
		||||
  } // end getServices
 | 
			
		||||
 | 
			
		||||
  public void setFeatures(BitSet feature_set, BitSet mask) throws DataException, AccessError
 | 
			
		||||
  public Set getConfiguredServices()
 | 
			
		||||
  {
 | 
			
		||||
    CommunityData d = getDataNE();
 | 
			
		||||
    if (d!=null)
 | 
			
		||||
      return d.getServices();
 | 
			
		||||
    else
 | 
			
		||||
      return null;
 | 
			
		||||
 | 
			
		||||
  } // end getConfiguredServices
 | 
			
		||||
 | 
			
		||||
  public void setServiceEnable(ServiceToken token, boolean enable) throws AccessError, DataException
 | 
			
		||||
  {
 | 
			
		||||
    if (token.getGroup()!=ServiceToken.SVCGRP_COMMUNITY)
 | 
			
		||||
      throw new IllegalArgumentException("Not a community service token.");
 | 
			
		||||
    Service svc = env.getSCM().getServiceForToken(token);
 | 
			
		||||
    if (svc==null)
 | 
			
		||||
      throw new IllegalArgumentException("Invalid service token.");
 | 
			
		||||
 | 
			
		||||
    getData().testMembership(level,is_member);
 | 
			
		||||
    if (!(getData().canModifyCommunityProfile(level)))
 | 
			
		||||
    { // this user can't modify the community feature set
 | 
			
		||||
      logger.error("user not permitted to modify the community's feature set");
 | 
			
		||||
      throw new AccessError("You are not permitted to modify the community's feature set.");
 | 
			
		||||
      logger.error("user not permitted to modify the community's information");
 | 
			
		||||
      throw new AccessError("You are not permitted to modify the community's information.");
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    // Adjust the "mask"...this function cannot affect the set of "locked" features.
 | 
			
		||||
    BitSet real_mask = (BitSet)(mask.clone());
 | 
			
		||||
    real_mask.andNot(env.getEngine().getLockedFeaturesMask());
 | 
			
		||||
    if (svc.isLocked())
 | 
			
		||||
      return;  // can't modify the state of a locked service
 | 
			
		||||
 | 
			
		||||
    // Figure out which bits are being carried over from the old feature set.
 | 
			
		||||
    BitSet new_features = getData().getFeatureSet();
 | 
			
		||||
    new_features.andNot(real_mask);
 | 
			
		||||
    getData().setServiceEnable(env,token,enable);
 | 
			
		||||
 | 
			
		||||
    // Figure out which bits are being set by the new feature set.
 | 
			
		||||
    BitSet update_bits = (BitSet)(feature_set.clone());
 | 
			
		||||
    update_bits.and(real_mask);
 | 
			
		||||
 | 
			
		||||
    // Put the features together to result in the final feature set, which we set down in
 | 
			
		||||
    // the "back end" class.
 | 
			
		||||
    new_features.or(update_bits);
 | 
			
		||||
    getData().putFeatureSet(env,new_features);
 | 
			
		||||
 | 
			
		||||
  } // end setFeatures
 | 
			
		||||
 | 
			
		||||
  public List getCommunityFeaturesList()
 | 
			
		||||
  {
 | 
			
		||||
    CommunityData d = getDataNE();
 | 
			
		||||
    if (d!=null)
 | 
			
		||||
      return d.getCommunityFeaturesList(level);
 | 
			
		||||
    else
 | 
			
		||||
      return null;
 | 
			
		||||
 | 
			
		||||
  } // end getCommunityFeaturesList
 | 
			
		||||
 | 
			
		||||
  public String getDefaultApplet()
 | 
			
		||||
  {
 | 
			
		||||
    CommunityData d = getDataNE();
 | 
			
		||||
    if (d!=null)
 | 
			
		||||
      return d.getDefaultApplet();
 | 
			
		||||
    else
 | 
			
		||||
      return null;
 | 
			
		||||
 | 
			
		||||
  } // end getDefaultApplet
 | 
			
		||||
  } // end setServiceEnable
 | 
			
		||||
 | 
			
		||||
  public void setName(String name) throws DataException, AccessError
 | 
			
		||||
  {
 | 
			
		||||
@ -710,25 +713,25 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
 | 
			
		||||
  } // end setMembersOnly
 | 
			
		||||
 | 
			
		||||
  public short getInitialFeatureIndex()
 | 
			
		||||
  public ServiceToken getDefaultService()
 | 
			
		||||
  {
 | 
			
		||||
    CommunityData d = getDataNE();
 | 
			
		||||
    if (d!=null)
 | 
			
		||||
      return d.getInitialFeatureIndex();
 | 
			
		||||
      return d.getDefaultService();
 | 
			
		||||
    else
 | 
			
		||||
      return 0;
 | 
			
		||||
      return null;
 | 
			
		||||
 | 
			
		||||
  } // end getInitialFeatureIndex
 | 
			
		||||
  } // end getDefaultService
 | 
			
		||||
 | 
			
		||||
  public void setInitialFeatureIndex(short ndx) throws DataException, AccessError
 | 
			
		||||
  public void setDefaultService(ServiceToken token) throws AccessError, DataException
 | 
			
		||||
  {
 | 
			
		||||
    if (!(env.getEngine().isValidInitialFeatureIndex(ndx)))
 | 
			
		||||
    { // the mode is not valid
 | 
			
		||||
      logger.error("feature index value " + String.valueOf(ndx) + " is not valid");
 | 
			
		||||
      throw new IllegalArgumentException("invalid initial feature index");
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    if (token.getGroup()!=ServiceToken.SVCGRP_COMMUNITY)
 | 
			
		||||
      throw new IllegalArgumentException("Not a community service token.");
 | 
			
		||||
    Service svc = env.getSCM().getServiceForToken(token);
 | 
			
		||||
    if (svc==null)
 | 
			
		||||
      throw new IllegalArgumentException("Invalid service token.");
 | 
			
		||||
    if (!(getData().hasService(token)))
 | 
			
		||||
      throw new DataException("This service is not enabled for this community.");
 | 
			
		||||
    getData().testMembership(level,is_member);
 | 
			
		||||
    if (!(getData().canModifyCommunityProfile(level)))
 | 
			
		||||
    { // this user can't modify the community feature set
 | 
			
		||||
@ -737,9 +740,9 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    getData().setInitialFeatureIndex(ndx);
 | 
			
		||||
    getData().setDefaultService(token);
 | 
			
		||||
 | 
			
		||||
  } // end setInitialFeatureIndex
 | 
			
		||||
  } // end setDefaultService
 | 
			
		||||
 | 
			
		||||
  public String getJoinKey() throws DataException, AccessError
 | 
			
		||||
  {
 | 
			
		||||
@ -1056,7 +1059,7 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
					    boolean hide_list) throws DataException, AccessError
 | 
			
		||||
  {
 | 
			
		||||
    getData().testMembership(level,is_member);
 | 
			
		||||
    if (!(getData().isFeaturePresent("CONF")))
 | 
			
		||||
    if (!(getData().hasService(x_conf_token)))
 | 
			
		||||
    { // we can't create a conference in this community
 | 
			
		||||
      logger.error("this community does not use conferencing");
 | 
			
		||||
      throw new AccessError("You are not permitted to create conferences in this community.");
 | 
			
		||||
@ -1085,7 +1088,7 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
      return false;
 | 
			
		||||
    if (!(d.checkMembership(level,is_member)))
 | 
			
		||||
      return false;
 | 
			
		||||
    if (d.isFeaturePresent("CONF"))
 | 
			
		||||
    if (d.hasService(x_conf_token))
 | 
			
		||||
      return d.canCreateCommunitySubObjects(level);
 | 
			
		||||
    else
 | 
			
		||||
      return false;
 | 
			
		||||
@ -1120,7 +1123,7 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
 | 
			
		||||
      return false;
 | 
			
		||||
    if (!(d.checkMembership(level,is_member)))
 | 
			
		||||
      return false;
 | 
			
		||||
    if (d.isFeaturePresent("CONF"))
 | 
			
		||||
    if (d.hasService(x_conf_token))
 | 
			
		||||
      return d.canCreateCommunitySubObjects(level);
 | 
			
		||||
    else
 | 
			
		||||
      return false;
 | 
			
		||||
 | 
			
		||||
@ -17,17 +17,35 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.core.impl;
 | 
			
		||||
 | 
			
		||||
import java.lang.ref.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import org.apache.log4j.*;
 | 
			
		||||
import org.w3c.dom.*;
 | 
			
		||||
import com.silverwrist.util.*;
 | 
			
		||||
import com.silverwrist.venice.core.ServiceGroup;
 | 
			
		||||
import com.silverwrist.venice.core.ServiceToken;
 | 
			
		||||
import com.silverwrist.venice.except.*;
 | 
			
		||||
import com.silverwrist.venice.security.*;
 | 
			
		||||
import com.silverwrist.venice.svc.*;
 | 
			
		||||
import com.silverwrist.venice.util.XMLLoader;
 | 
			
		||||
 | 
			
		||||
class ServiceControlManager
 | 
			
		||||
class ServiceControlManager implements ServiceControl
 | 
			
		||||
{
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Internal class implementing ServiceTokens that allows them to be constructed
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  static class MyServiceToken extends ServiceToken
 | 
			
		||||
  {
 | 
			
		||||
    public MyServiceToken(int group, String symbol, int index)
 | 
			
		||||
    {
 | 
			
		||||
      super(group,symbol,index);
 | 
			
		||||
 | 
			
		||||
    } // end constructor
 | 
			
		||||
 | 
			
		||||
  } // end class MyServiceToken
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Internal "Community Service Site" class
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
@ -41,6 +59,17 @@ class ServiceControlManager
 | 
			
		||||
 | 
			
		||||
  } // end class MyCommServiceSite
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Internal "Service Predicate" class
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  abstract class ServicePredicate
 | 
			
		||||
  {
 | 
			
		||||
    public abstract boolean test(Service svc);
 | 
			
		||||
 | 
			
		||||
  } // end class ServicePredicate
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Static data members
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
@ -53,15 +82,17 @@ class ServiceControlManager
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private Map comm_symbol_to_service;
 | 
			
		||||
  private Map comm_index_to_service;
 | 
			
		||||
  private Map[] symbol_to_service = new Map[NUM_SVCGRPS];
 | 
			
		||||
  private Map[] index_to_service = new Map[NUM_SVCGRPS];
 | 
			
		||||
  private SoftReference[] list_all_cache = new SoftReference[NUM_SVCGRPS];
 | 
			
		||||
  private SoftReference[] list_default_cache = new SoftReference[NUM_SVCGRPS];
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructors
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  ServiceControlManager(Document cfg, SecurityMonitor sm_global, SecurityMonitor sm_comm)
 | 
			
		||||
  ServiceControlManager(Document cfg, SecurityMonitorEnvironment sm_env)
 | 
			
		||||
      throws ConfigException
 | 
			
		||||
  {
 | 
			
		||||
    XMLLoader loader = XMLLoader.get();
 | 
			
		||||
@ -70,12 +101,16 @@ class ServiceControlManager
 | 
			
		||||
    NodeList nl;
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    symbol_to_service[SVCGRP_GLOBAL] = Collections.EMPTY_MAP;
 | 
			
		||||
    index_to_service[SVCGRP_GLOBAL] = Collections.EMPTY_MAP;
 | 
			
		||||
 | 
			
		||||
    // Get the "community" section
 | 
			
		||||
    Element sect = root_h.getSubElement("community");
 | 
			
		||||
    if (sect!=null)
 | 
			
		||||
    { // load the services for the section
 | 
			
		||||
      HashMap tmp_symbol_to_service = new HashMap();
 | 
			
		||||
      HashMap tmp_index_to_service = new HashMap();
 | 
			
		||||
      SecurityMonitor sm_comm = sm_env.getMonitor("Community");
 | 
			
		||||
      nl = sect.getChildNodes();
 | 
			
		||||
      for (i=0; i<nl.getLength(); i++)
 | 
			
		||||
      { // get each element node...
 | 
			
		||||
@ -83,30 +118,40 @@ class ServiceControlManager
 | 
			
		||||
	if ((n.getNodeType()==Node.ELEMENT_NODE) && (n.getNodeName().equals("service")))
 | 
			
		||||
	{ // create the appropriate service settings
 | 
			
		||||
	  CommService svc = initCommunityService((Element)n,sm_comm);
 | 
			
		||||
	  tmp_symbol_to_service.put(svc.getSymbol(),svc);
 | 
			
		||||
	  tmp_index_to_service.put(new Integer(svc.getIndex()),svc);
 | 
			
		||||
	  tmp_symbol_to_service.put(svc.getToken().getSymbol(),svc);
 | 
			
		||||
	  tmp_index_to_service.put(new Integer(svc.getToken().getIndex()),svc);
 | 
			
		||||
 | 
			
		||||
	} // end if
 | 
			
		||||
 | 
			
		||||
      } // end for
 | 
			
		||||
 | 
			
		||||
      if (tmp_symbol_to_service.size()>0)
 | 
			
		||||
	comm_symbol_to_service = Collections.unmodifiableMap(tmp_symbol_to_service);
 | 
			
		||||
	symbol_to_service[SVCGRP_COMMUNITY] = Collections.unmodifiableMap(tmp_symbol_to_service);
 | 
			
		||||
      else
 | 
			
		||||
	comm_symbol_to_service = Collections.EMPTY_MAP;
 | 
			
		||||
	symbol_to_service[SVCGRP_COMMUNITY] = Collections.EMPTY_MAP;
 | 
			
		||||
      if (tmp_index_to_service.size()>0)
 | 
			
		||||
	comm_index_to_service = Collections.unmodifiableMap(tmp_index_to_service);
 | 
			
		||||
	index_to_service[SVCGRP_COMMUNITY] = Collections.unmodifiableMap(tmp_index_to_service);
 | 
			
		||||
      else
 | 
			
		||||
	comm_index_to_service = Collections.EMPTY_MAP;
 | 
			
		||||
	index_to_service[SVCGRP_COMMUNITY] = Collections.EMPTY_MAP;
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
    else
 | 
			
		||||
    { // no community services - undo this
 | 
			
		||||
      comm_symbol_to_service = Collections.EMPTY_MAP;
 | 
			
		||||
      comm_index_to_service = Collections.EMPTY_MAP;
 | 
			
		||||
      symbol_to_service[SVCGRP_COMMUNITY] = Collections.EMPTY_MAP;
 | 
			
		||||
      index_to_service[SVCGRP_COMMUNITY] = Collections.EMPTY_MAP;
 | 
			
		||||
 | 
			
		||||
    } // end else
 | 
			
		||||
 | 
			
		||||
    symbol_to_service[SVCGRP_USER] = Collections.EMPTY_MAP;
 | 
			
		||||
    index_to_service[SVCGRP_USER] = Collections.EMPTY_MAP;
 | 
			
		||||
 | 
			
		||||
    for (i=0; i<NUM_SVCGRPS; i++)
 | 
			
		||||
    { // blank out all our cache arrays
 | 
			
		||||
      list_all_cache[i] = null;
 | 
			
		||||
      list_default_cache[i] = null;
 | 
			
		||||
 | 
			
		||||
    } // end for
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
@ -114,31 +159,158 @@ class ServiceControlManager
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private CommService initCommunityService(Element root, SecurityMonitor sm) throws ConfigException
 | 
			
		||||
  private static final ServiceToken newToken(int group, Element service) throws ConfigException
 | 
			
		||||
  {
 | 
			
		||||
    XMLLoader loader = XMLLoader.get();
 | 
			
		||||
 | 
			
		||||
    // Load the symbol and index from the root element.
 | 
			
		||||
    String symbol = loader.configGetAttribute(service,"id");
 | 
			
		||||
    int index = loader.configGetAttributeInt(service,"index");
 | 
			
		||||
 | 
			
		||||
    return new MyServiceToken(group,symbol,index);
 | 
			
		||||
 | 
			
		||||
  } // end newToken
 | 
			
		||||
 | 
			
		||||
  private final CommService initCommunityService(Element root, SecurityMonitor sm) throws ConfigException
 | 
			
		||||
  {
 | 
			
		||||
    ServiceToken token = newToken(SVCGRP_COMMUNITY,root);
 | 
			
		||||
    CommService svc;
 | 
			
		||||
    // FUTURE: do a create of a specific class
 | 
			
		||||
    svc = new StaticCommService();
 | 
			
		||||
    svc.initialize(root,sm,new MyCommServiceSite());
 | 
			
		||||
    svc.initialize(token,root,sm,new MyCommServiceSite());
 | 
			
		||||
    return svc;
 | 
			
		||||
 | 
			
		||||
  } // end initCommunityService
 | 
			
		||||
 | 
			
		||||
  private final synchronized Set listServices(int group, ServicePredicate predicate)
 | 
			
		||||
  {
 | 
			
		||||
    HashSet tmp = new HashSet();
 | 
			
		||||
    Iterator it = symbol_to_service[group].values().iterator();
 | 
			
		||||
    while (it.hasNext())
 | 
			
		||||
    { // get each service in turn
 | 
			
		||||
      Service svc = (Service)(it.next());
 | 
			
		||||
      if (predicate.test(svc))
 | 
			
		||||
	tmp.add(svc.getToken());
 | 
			
		||||
 | 
			
		||||
    } // end while
 | 
			
		||||
 | 
			
		||||
    if (tmp.isEmpty())
 | 
			
		||||
      return Collections.EMPTY_SET;
 | 
			
		||||
    else
 | 
			
		||||
      return Collections.unmodifiableSet(tmp);
 | 
			
		||||
    
 | 
			
		||||
  } // end listCommunities
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Implementations from interface ServiceControl
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public Set getAllServices(int group)
 | 
			
		||||
  {
 | 
			
		||||
    if ((group<0) || (group>=NUM_SVCGRPS))
 | 
			
		||||
      throw new IndexOutOfBoundsException("group index not valid");
 | 
			
		||||
    synchronized (this)
 | 
			
		||||
    { // extract the reference
 | 
			
		||||
      Set rc = null;
 | 
			
		||||
      if (list_all_cache[group]!=null)
 | 
			
		||||
	rc = (Set)(list_all_cache[group].get());
 | 
			
		||||
      if (rc==null)
 | 
			
		||||
      { // need to regenerate the set
 | 
			
		||||
	rc = listServices(group,new ServicePredicate(){
 | 
			
		||||
	    public final boolean test(Service svc) { return true; }
 | 
			
		||||
	  });
 | 
			
		||||
 | 
			
		||||
	// cache the result
 | 
			
		||||
	list_all_cache[group] = new SoftReference(rc);
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
 | 
			
		||||
      return rc;
 | 
			
		||||
 | 
			
		||||
    } // end synchronized block
 | 
			
		||||
 | 
			
		||||
  } // end getAllServices
 | 
			
		||||
 | 
			
		||||
  public Set getDefaultServices(int group)
 | 
			
		||||
  {
 | 
			
		||||
    if ((group<0) || (group>=NUM_SVCGRPS))
 | 
			
		||||
      throw new IndexOutOfBoundsException("group index not valid");
 | 
			
		||||
    synchronized (this)
 | 
			
		||||
    { // extract the reference
 | 
			
		||||
      Set rc = null;
 | 
			
		||||
      if (list_default_cache[group]!=null)
 | 
			
		||||
	rc = (Set)(list_default_cache[group].get());
 | 
			
		||||
      if (rc==null)
 | 
			
		||||
      { // need to regenerate the set
 | 
			
		||||
	rc = listServices(group,new ServicePredicate(){
 | 
			
		||||
	    public final boolean test(Service svc) { return svc.isDefault(); }
 | 
			
		||||
	  });
 | 
			
		||||
 | 
			
		||||
	// cache the result
 | 
			
		||||
	list_default_cache[group] = new SoftReference(rc);
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
 | 
			
		||||
      return rc;
 | 
			
		||||
 | 
			
		||||
    } // end synchronized block
 | 
			
		||||
 | 
			
		||||
  } // end getDefaultServices
 | 
			
		||||
 | 
			
		||||
  public Service getServiceForSymbol(int group, String sym)
 | 
			
		||||
  {
 | 
			
		||||
    if ((group<0) || (group>=NUM_SVCGRPS))
 | 
			
		||||
      throw new IndexOutOfBoundsException("group index not valid");
 | 
			
		||||
    return (Service)(symbol_to_service[group].get(sym));
 | 
			
		||||
 | 
			
		||||
  } // end getServiceForSymbol
 | 
			
		||||
 | 
			
		||||
  public Service getServiceForToken(ServiceToken token)
 | 
			
		||||
  {
 | 
			
		||||
    return this.getServiceForSymbol(token.getGroup(),token.getSymbol());
 | 
			
		||||
 | 
			
		||||
  } // end getServiceForToken
 | 
			
		||||
 | 
			
		||||
  public ServiceToken getTokenForIndex(int group, int ndx)
 | 
			
		||||
  {
 | 
			
		||||
    if ((group<0) || (group>=NUM_SVCGRPS))
 | 
			
		||||
      throw new IndexOutOfBoundsException("group index not valid");
 | 
			
		||||
    Service svc = (Service)(index_to_service[group].get(new Integer(ndx)));
 | 
			
		||||
    return ((svc==null) ? null : svc.getToken());
 | 
			
		||||
 | 
			
		||||
  } // end getTokenForIndex
 | 
			
		||||
 | 
			
		||||
  public ServiceToken getTokenForSymbol(int group, String sym)
 | 
			
		||||
  {
 | 
			
		||||
    Service svc = this.getServiceForSymbol(group,sym);
 | 
			
		||||
    return ((svc==null) ? null : svc.getToken());
 | 
			
		||||
 | 
			
		||||
  } // end getTokenForSymbol
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * External operations
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public final void shutdown()
 | 
			
		||||
  public final synchronized void shutdown()
 | 
			
		||||
  {
 | 
			
		||||
    Iterator it = comm_symbol_to_service.values().iterator();
 | 
			
		||||
    while (it.hasNext())
 | 
			
		||||
    { // shut down each service in turn
 | 
			
		||||
      CommService svc = (CommService)(it.next());
 | 
			
		||||
      svc.shutdown();
 | 
			
		||||
    for (int i=0; i<NUM_SVCGRPS; i++)
 | 
			
		||||
    { // shutdown all three lists of services
 | 
			
		||||
      Iterator it = symbol_to_service[i].values().iterator();
 | 
			
		||||
      while (it.hasNext())
 | 
			
		||||
      { // shut down each service in turn
 | 
			
		||||
	Service svc = (Service)(it.next());
 | 
			
		||||
	svc.shutdown();
 | 
			
		||||
 | 
			
		||||
    } // end while
 | 
			
		||||
      } // end while
 | 
			
		||||
 | 
			
		||||
      symbol_to_service[i] = Collections.EMPTY_MAP;
 | 
			
		||||
 | 
			
		||||
    } // end for
 | 
			
		||||
 | 
			
		||||
  } // end shutdown
 | 
			
		||||
 | 
			
		||||
} // end class ServiceControlManager
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -19,10 +19,10 @@ package com.silverwrist.venice.core.impl;
 | 
			
		||||
 | 
			
		||||
import org.w3c.dom.*;
 | 
			
		||||
import com.silverwrist.util.*;
 | 
			
		||||
import com.silverwrist.venice.core.ServiceToken;
 | 
			
		||||
import com.silverwrist.venice.except.*;
 | 
			
		||||
import com.silverwrist.venice.security.*;
 | 
			
		||||
import com.silverwrist.venice.svc.*;
 | 
			
		||||
import com.silverwrist.venice.util.XMLLoader;
 | 
			
		||||
 | 
			
		||||
class StaticCommService implements CommService
 | 
			
		||||
{
 | 
			
		||||
@ -31,8 +31,7 @@ class StaticCommService implements CommService
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private String symbol;
 | 
			
		||||
  private int index;
 | 
			
		||||
  private ServiceToken token;
 | 
			
		||||
  private boolean is_default;
 | 
			
		||||
  private boolean is_locked;
 | 
			
		||||
  private SecurityMonitor secmon;
 | 
			
		||||
@ -45,21 +44,45 @@ class StaticCommService implements CommService
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public StaticCommService()
 | 
			
		||||
  {
 | 
			
		||||
  { // do nothing
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Implementations from interface Service
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public void shutdown()
 | 
			
		||||
  { // do nothing
 | 
			
		||||
  } // end shutdown
 | 
			
		||||
 | 
			
		||||
  public ServiceToken getToken()
 | 
			
		||||
  {
 | 
			
		||||
    return token;
 | 
			
		||||
 | 
			
		||||
  } // end getToken
 | 
			
		||||
 | 
			
		||||
  public boolean isDefault()
 | 
			
		||||
  {
 | 
			
		||||
    return is_default;
 | 
			
		||||
 | 
			
		||||
  } // end isDefault
 | 
			
		||||
 | 
			
		||||
  public boolean isLocked()
 | 
			
		||||
  {
 | 
			
		||||
    return is_locked;
 | 
			
		||||
 | 
			
		||||
  } // end isLocked
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Implementations from interface CommunityService
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public void initialize(Element root, SecurityMonitor sm, CommServiceSite site) throws ConfigException
 | 
			
		||||
  public void initialize(ServiceToken token, Element root, SecurityMonitor sm, CommServiceSite site)
 | 
			
		||||
      throws ConfigException
 | 
			
		||||
  {
 | 
			
		||||
    XMLLoader loader = XMLLoader.get();
 | 
			
		||||
 | 
			
		||||
    // Load the symbol and index from the root element.
 | 
			
		||||
    symbol = loader.configGetAttribute(root,"id");
 | 
			
		||||
    index = loader.configGetAttributeInt(root,"index");
 | 
			
		||||
    this.token = token;
 | 
			
		||||
 | 
			
		||||
    // Get the setup from the subelement.
 | 
			
		||||
    DOMElementHelper h = new DOMElementHelper(root);
 | 
			
		||||
@ -116,20 +139,16 @@ class StaticCommService implements CommService
 | 
			
		||||
 | 
			
		||||
  } // end initialize
 | 
			
		||||
 | 
			
		||||
  public void shutdown()
 | 
			
		||||
  { // do nothing
 | 
			
		||||
  } // end shutdown
 | 
			
		||||
 | 
			
		||||
  public String getSymbol()
 | 
			
		||||
  public String getPermission()
 | 
			
		||||
  {
 | 
			
		||||
    return symbol;
 | 
			
		||||
    return permission;
 | 
			
		||||
 | 
			
		||||
  } // end getSymbol
 | 
			
		||||
  } // end getPermission
 | 
			
		||||
 | 
			
		||||
  public int getIndex()
 | 
			
		||||
  public Role getRole()
 | 
			
		||||
  {
 | 
			
		||||
    return index;
 | 
			
		||||
    return role;
 | 
			
		||||
 | 
			
		||||
  } // end getIndex
 | 
			
		||||
  } // end getRole
 | 
			
		||||
 | 
			
		||||
} // end class StaticCommService
 | 
			
		||||
 | 
			
		||||
@ -37,100 +37,6 @@ import com.silverwrist.venice.util.XMLLoader;
 | 
			
		||||
 | 
			
		||||
public class VeniceEngineImpl implements VeniceEngine, EngineBackend
 | 
			
		||||
{
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Internal class storing feature information.
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  class VeniceFeatureDef implements CommunityFeature
 | 
			
		||||
  {
 | 
			
		||||
    int code;
 | 
			
		||||
    String symbol;
 | 
			
		||||
    String name;
 | 
			
		||||
    String applet;
 | 
			
		||||
    boolean is_default;
 | 
			
		||||
    boolean is_locked;
 | 
			
		||||
    boolean is_hidden;
 | 
			
		||||
    boolean requires_read;
 | 
			
		||||
    int sequence;
 | 
			
		||||
    int min_level;
 | 
			
		||||
    
 | 
			
		||||
    VeniceFeatureDef(int code, ResultSet rs) throws SQLException
 | 
			
		||||
    {
 | 
			
		||||
      this.code = code;
 | 
			
		||||
      this.is_default = rs.getBoolean("is_default");
 | 
			
		||||
      this.is_locked = rs.getBoolean("is_locked");
 | 
			
		||||
      this.is_hidden = rs.getBoolean("is_hidden");
 | 
			
		||||
      this.requires_read = rs.getBoolean("require_read");
 | 
			
		||||
      this.sequence = rs.getInt("sequence");
 | 
			
		||||
      this.min_level = rs.getInt("min_level");
 | 
			
		||||
      this.symbol = rs.getString("symbol");
 | 
			
		||||
      this.name = rs.getString("name");
 | 
			
		||||
      this.applet = rs.getString("applet");
 | 
			
		||||
 | 
			
		||||
    } // end constructor
 | 
			
		||||
 | 
			
		||||
    public int getFeatureCode()
 | 
			
		||||
    {
 | 
			
		||||
      return code;
 | 
			
		||||
 | 
			
		||||
    } // end getFeatureCode
 | 
			
		||||
 | 
			
		||||
    public String getSymbol()
 | 
			
		||||
    {
 | 
			
		||||
      return symbol;
 | 
			
		||||
 | 
			
		||||
    } // end getSymbol
 | 
			
		||||
 | 
			
		||||
    public String getName()
 | 
			
		||||
    {
 | 
			
		||||
      return name;
 | 
			
		||||
 | 
			
		||||
    } // end getName
 | 
			
		||||
 | 
			
		||||
    public String getApplet()
 | 
			
		||||
    {
 | 
			
		||||
      return applet;
 | 
			
		||||
 | 
			
		||||
    } // end getApplet
 | 
			
		||||
 | 
			
		||||
    public int getSequence()
 | 
			
		||||
    {
 | 
			
		||||
      return sequence;
 | 
			
		||||
 | 
			
		||||
    } // end getSequence
 | 
			
		||||
 | 
			
		||||
    boolean featureAllowed(int level, boolean has_read)
 | 
			
		||||
    {
 | 
			
		||||
      if (level<min_level)
 | 
			
		||||
	return false;
 | 
			
		||||
      if (requires_read)
 | 
			
		||||
	return has_read;
 | 
			
		||||
      else
 | 
			
		||||
	return true;
 | 
			
		||||
 | 
			
		||||
    } // end featureAllowed
 | 
			
		||||
 | 
			
		||||
    boolean isVisible()
 | 
			
		||||
    {
 | 
			
		||||
      return !is_hidden;
 | 
			
		||||
 | 
			
		||||
    } // end isVisible
 | 
			
		||||
 | 
			
		||||
    boolean isLocked()
 | 
			
		||||
    {
 | 
			
		||||
      return is_locked;
 | 
			
		||||
 | 
			
		||||
    } // end isLocked
 | 
			
		||||
 | 
			
		||||
    boolean isDefault()
 | 
			
		||||
    {
 | 
			
		||||
      return is_default;
 | 
			
		||||
 | 
			
		||||
    } // end isDefault
 | 
			
		||||
 | 
			
		||||
  } // end class VeniceFeatureDef
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Internal class storing side box information.
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
@ -347,8 +253,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
 | 
			
		||||
  private javax.mail.Session mailsession = null;      // email session object
 | 
			
		||||
  private StockMessages stock_messages = null;        // stock messages holder
 | 
			
		||||
  private ObjectCache comm_objcache = new ObjectCache(new CommunityCoreDataCreator());
 | 
			
		||||
  private VeniceFeatureDef[] features;                // master feature table
 | 
			
		||||
  private Hashtable feature_syms = new Hashtable();   // hashtable mapping symbols to features
 | 
			
		||||
  private ObjectCache conf_objcache = new ObjectCache(new ConferenceCoreDataCreator());
 | 
			
		||||
  private HTMLCheckerConfig[] html_configs;           // holder for HTML checker configurations
 | 
			
		||||
  private int[] gp_ints;                              // global integer parameters
 | 
			
		||||
@ -760,8 +664,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
 | 
			
		||||
      // Now done with the sidebox config...
 | 
			
		||||
      // Load the services config file.
 | 
			
		||||
      subdoc = loader.loadConfigDocument(services_config);
 | 
			
		||||
      // TODO: following needs to use the sm_env
 | 
			
		||||
      scmgr = new ServiceControlManager(subdoc,global_security,community_security);
 | 
			
		||||
      scmgr = new ServiceControlManager(subdoc,sm_env);
 | 
			
		||||
 | 
			
		||||
    } // end try
 | 
			
		||||
    catch (ConfigException ce)
 | 
			
		||||
@ -773,7 +676,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
 | 
			
		||||
    } // end catch
 | 
			
		||||
 | 
			
		||||
    // Initialize the environment.
 | 
			
		||||
    env = new EnvEngine(this,datapool);
 | 
			
		||||
    env = new EnvEngine(this,datapool,scmgr);
 | 
			
		||||
 | 
			
		||||
    for (i=0; i<sideboxes.length; i++) // insert sideboxes into hashtable
 | 
			
		||||
      sidebox_ids.put(new Integer(sideboxes[i].getID()),sideboxes[i]);
 | 
			
		||||
@ -786,26 +689,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
 | 
			
		||||
    try
 | 
			
		||||
    { // get a connection from the data pool
 | 
			
		||||
      conn = env.getConnection();
 | 
			
		||||
 | 
			
		||||
      // load the master feature table
 | 
			
		||||
      Statement stmt = conn.createStatement();
 | 
			
		||||
      ResultSet rs = stmt.executeQuery("SELECT * FROM refsigftr ORDER BY ftr_code;");
 | 
			
		||||
      VeniceFeatureDef[] tmp_array = new VeniceFeatureDef[64];
 | 
			
		||||
      int max_value = -1;
 | 
			
		||||
      while (rs.next())
 | 
			
		||||
      { // store the values as we get them
 | 
			
		||||
	int ndx = rs.getInt("ftr_code");
 | 
			
		||||
	tmp_array[ndx] = new VeniceFeatureDef(ndx,rs);
 | 
			
		||||
	if (ndx>max_value)
 | 
			
		||||
	  max_value = ndx;
 | 
			
		||||
 | 
			
		||||
      } // end while
 | 
			
		||||
 | 
			
		||||
      // store the real feature table as an array
 | 
			
		||||
      features = new VeniceFeatureDef[++max_value];
 | 
			
		||||
      System.arraycopy(tmp_array,0,features,0,max_value);
 | 
			
		||||
      if (logger.isDebugEnabled())
 | 
			
		||||
	logger.debug(max_value + " features loaded from database");
 | 
			
		||||
 | 
			
		||||
      // load the global defaults
 | 
			
		||||
      loadDefaults(stmt);
 | 
			
		||||
@ -823,9 +707,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
 | 
			
		||||
 | 
			
		||||
    } // end finally
 | 
			
		||||
 | 
			
		||||
    for (i=0; i<features.length; i++) // insert feature symbols into hashtable
 | 
			
		||||
      feature_syms.put(features[i].getSymbol(),features[i]);
 | 
			
		||||
 | 
			
		||||
    // Here is where we create the HTML Checker and all the goodies it relies on.
 | 
			
		||||
    // Start by creating some of the subsidiary objects that get added to HTML Checker configs.
 | 
			
		||||
    EmailRewriter email_rewriter = new EmailRewriter();
 | 
			
		||||
@ -920,25 +801,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
 | 
			
		||||
 | 
			
		||||
  } // end shutdown
 | 
			
		||||
 | 
			
		||||
  public int getNumFeatures()
 | 
			
		||||
  {
 | 
			
		||||
    checkInitialized();
 | 
			
		||||
    return features.length;
 | 
			
		||||
 | 
			
		||||
  } // end getNumFeatures
 | 
			
		||||
 | 
			
		||||
  public BitSet getAllFeaturesMask()
 | 
			
		||||
  {
 | 
			
		||||
    checkInitialized();
 | 
			
		||||
    BitSet rc = new BitSet();
 | 
			
		||||
    for (int i=0; i<features.length; i++)
 | 
			
		||||
      if (features[i].isVisible())
 | 
			
		||||
	rc.set(i);
 | 
			
		||||
 | 
			
		||||
    return rc;
 | 
			
		||||
 | 
			
		||||
  } // end getAllFeaturesMask
 | 
			
		||||
 | 
			
		||||
  public UserContext createUserContext(String remote_addr) throws DataException
 | 
			
		||||
  {
 | 
			
		||||
    checkInitialized();
 | 
			
		||||
@ -1825,84 +1687,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
 | 
			
		||||
 | 
			
		||||
  } // end detachCommunityDataObject
 | 
			
		||||
 | 
			
		||||
  public BitSet getLockedFeaturesMask()
 | 
			
		||||
  {
 | 
			
		||||
    checkInitialized();
 | 
			
		||||
    BitSet rc = new BitSet();
 | 
			
		||||
    for (int i=0; i<features.length; i++)
 | 
			
		||||
      if (features[i].isLocked())
 | 
			
		||||
	rc.set(i);
 | 
			
		||||
 | 
			
		||||
    return rc;
 | 
			
		||||
 | 
			
		||||
  } // end getLockedFeaturesMask
 | 
			
		||||
 | 
			
		||||
  public List getCommunityFeatureSet(BitSet enabled_features, int level, boolean read_privs)
 | 
			
		||||
  {
 | 
			
		||||
    checkInitialized();
 | 
			
		||||
    ArrayList rc = new ArrayList();
 | 
			
		||||
    for (int i=0; i<features.length; i++)
 | 
			
		||||
      if (enabled_features.get(i) && features[i].featureAllowed(level,read_privs))
 | 
			
		||||
      { // this feature must be included in the eventual output set
 | 
			
		||||
	CommunityFeature elt = features[i];
 | 
			
		||||
	boolean insert_me = true;
 | 
			
		||||
	for (int j=0; insert_me && (j<rc.size()); j++)
 | 
			
		||||
	  if (elt.getSequence()<((CommunityFeature)(rc.get(j))).getSequence())
 | 
			
		||||
	  { // put the item in the list
 | 
			
		||||
	    rc.add(j,elt);
 | 
			
		||||
	    insert_me = false;
 | 
			
		||||
 | 
			
		||||
	  } // end if and for
 | 
			
		||||
 | 
			
		||||
	if (insert_me)  // insert at end by default
 | 
			
		||||
	  rc.add(elt);
 | 
			
		||||
 | 
			
		||||
      } // end if and for
 | 
			
		||||
 | 
			
		||||
    if (logger.isDebugEnabled())
 | 
			
		||||
      logger.debug("getCommunityFeatureSet() loaded " + rc.size() + " elements");
 | 
			
		||||
 | 
			
		||||
    return Collections.unmodifiableList(rc);  // wrap the vector for return
 | 
			
		||||
 | 
			
		||||
  } // end getCommunityFeatureSet
 | 
			
		||||
 | 
			
		||||
  public String getAppletForFeature(int code)
 | 
			
		||||
  {
 | 
			
		||||
    checkInitialized();
 | 
			
		||||
    if ((code<0) || (code>=features.length))
 | 
			
		||||
    { // the index is out of bounds!
 | 
			
		||||
      logger.error("getAppletForFeature(" + code + ") => out of range");
 | 
			
		||||
      throw new IndexOutOfBoundsException("invalid feature code");
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    String rc = features[code].getApplet();
 | 
			
		||||
    if (logger.isDebugEnabled())
 | 
			
		||||
      logger.debug("getAppletForFeature(" + code + ") => \"" + rc + "\"");
 | 
			
		||||
    return rc;
 | 
			
		||||
 | 
			
		||||
  } // end getAppletForFeature
 | 
			
		||||
 | 
			
		||||
  public boolean isValidInitialFeatureIndex(short ndx)
 | 
			
		||||
  {
 | 
			
		||||
    if ((ndx<0) || (ndx>=features.length))
 | 
			
		||||
      return false;
 | 
			
		||||
    return features[ndx].isVisible();
 | 
			
		||||
 | 
			
		||||
  } // end isValidInitialFeatureIndex
 | 
			
		||||
 | 
			
		||||
  public BitSet getDefaultFeaturesMask()
 | 
			
		||||
  {
 | 
			
		||||
    checkInitialized();
 | 
			
		||||
    BitSet rc = new BitSet();
 | 
			
		||||
    for (int i=0; i<features.length; i++)
 | 
			
		||||
      if (features[i].isDefault())
 | 
			
		||||
	rc.set(i);
 | 
			
		||||
 | 
			
		||||
    return rc;
 | 
			
		||||
 | 
			
		||||
  } // end getDefaultFeaturesMask
 | 
			
		||||
 | 
			
		||||
  public void registerNewCommunity(CommunityData comm)
 | 
			
		||||
  {
 | 
			
		||||
    checkInitialized();
 | 
			
		||||
@ -1913,26 +1697,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
 | 
			
		||||
 | 
			
		||||
  } // end registerNewCommunity
 | 
			
		||||
 | 
			
		||||
  public int getFeatureIndexBySymbol(String symbol)
 | 
			
		||||
  {
 | 
			
		||||
    VeniceFeatureDef fd = (VeniceFeatureDef)(feature_syms.get(symbol));
 | 
			
		||||
    if (fd!=null)
 | 
			
		||||
      return fd.getFeatureCode();
 | 
			
		||||
    else
 | 
			
		||||
      return -1;
 | 
			
		||||
 | 
			
		||||
  } // end getFeatureIndexBySymbol
 | 
			
		||||
 | 
			
		||||
  public boolean canAccessFeature(String symbol, int level, boolean has_read)
 | 
			
		||||
  {
 | 
			
		||||
    VeniceFeatureDef fd = (VeniceFeatureDef)(feature_syms.get(symbol));
 | 
			
		||||
    if (fd!=null)
 | 
			
		||||
      return fd.featureAllowed(level,has_read);
 | 
			
		||||
    else
 | 
			
		||||
      return false;
 | 
			
		||||
 | 
			
		||||
  } // end canAccessFeature
 | 
			
		||||
 | 
			
		||||
  public ConferenceData getConferenceDataObject(int confid) throws DataException
 | 
			
		||||
  {
 | 
			
		||||
    checkInitialized();
 | 
			
		||||
 | 
			
		||||
@ -20,8 +20,10 @@ package com.silverwrist.venice.core.internals;
 | 
			
		||||
import java.util.BitSet;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import com.silverwrist.venice.core.CommunityProperties;
 | 
			
		||||
import com.silverwrist.venice.core.ContactInfo;
 | 
			
		||||
import com.silverwrist.venice.core.ServiceToken;
 | 
			
		||||
import com.silverwrist.venice.except.AccessError;
 | 
			
		||||
import com.silverwrist.venice.except.DataException;
 | 
			
		||||
 | 
			
		||||
@ -69,13 +71,12 @@ public interface CommunityData
 | 
			
		||||
 | 
			
		||||
  public abstract void putContactInfo(EnvCommunity outer, ContactInfo ci) throws DataException;
 | 
			
		||||
 | 
			
		||||
  public abstract BitSet getFeatureSet();
 | 
			
		||||
  public abstract Set getServices();
 | 
			
		||||
 | 
			
		||||
  public abstract void putFeatureSet(EnvCommunity outer, BitSet set) throws DataException;
 | 
			
		||||
  public abstract Set getServices(EnvCommunity outer);
 | 
			
		||||
 | 
			
		||||
  public abstract List getCommunityFeaturesList(int level);
 | 
			
		||||
 | 
			
		||||
  public abstract String getDefaultApplet();
 | 
			
		||||
  public abstract void setServiceEnable(EnvCommunity outer, ServiceToken token, boolean enable)
 | 
			
		||||
      throws DataException;
 | 
			
		||||
 | 
			
		||||
  public abstract void setName(EnvCommunity outer, String name) throws DataException;
 | 
			
		||||
 | 
			
		||||
@ -102,9 +103,9 @@ public interface CommunityData
 | 
			
		||||
 | 
			
		||||
  public abstract void setMembersOnly(EnvCommunity outer, boolean flag) throws DataException;
 | 
			
		||||
 | 
			
		||||
  public abstract short getInitialFeatureIndex();
 | 
			
		||||
  public abstract ServiceToken getDefaultService();
 | 
			
		||||
 | 
			
		||||
  public abstract void setInitialFeatureIndex(short ndx) throws DataException;
 | 
			
		||||
  public abstract void setDefaultService(ServiceToken token) throws DataException;
 | 
			
		||||
 | 
			
		||||
  public abstract String getJoinKey() throws DataException;
 | 
			
		||||
 | 
			
		||||
@ -130,7 +131,7 @@ public interface CommunityData
 | 
			
		||||
 | 
			
		||||
  public abstract int getMemberCount(boolean include_hidden) throws DataException;
 | 
			
		||||
 | 
			
		||||
  public abstract boolean isFeaturePresent(String symbol);
 | 
			
		||||
  public abstract boolean hasService(ServiceToken token);
 | 
			
		||||
 | 
			
		||||
  public abstract ConferenceCommunityContext getConferenceDataObject(int confid) throws DataException;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -71,22 +71,8 @@ public interface EngineBackend
 | 
			
		||||
 | 
			
		||||
  public abstract void detachCommunityDataObject(int cid);
 | 
			
		||||
 | 
			
		||||
  public abstract BitSet getLockedFeaturesMask();
 | 
			
		||||
 | 
			
		||||
  public abstract List getCommunityFeatureSet(BitSet enabled_features, int level, boolean read_privs);
 | 
			
		||||
 | 
			
		||||
  public abstract String getAppletForFeature(int code);
 | 
			
		||||
 | 
			
		||||
  public abstract boolean isValidInitialFeatureIndex(short ndx);
 | 
			
		||||
 | 
			
		||||
  public abstract BitSet getDefaultFeaturesMask();
 | 
			
		||||
 | 
			
		||||
  public abstract void registerNewCommunity(CommunityData comm);
 | 
			
		||||
 | 
			
		||||
  public abstract int getFeatureIndexBySymbol(String symbol);
 | 
			
		||||
 | 
			
		||||
  public abstract boolean canAccessFeature(String symbol, int level, boolean has_read);
 | 
			
		||||
 | 
			
		||||
  public abstract ConferenceData getConferenceDataObject(int confid) throws DataException;
 | 
			
		||||
 | 
			
		||||
  public abstract void detachConferenceDataObject(int confid);
 | 
			
		||||
 | 
			
		||||
@ -136,6 +136,12 @@ public class EnvCommunity extends EnvUser
 | 
			
		||||
 | 
			
		||||
  } // end testPermission
 | 
			
		||||
 | 
			
		||||
  public boolean satisfy(Role role)
 | 
			
		||||
  {
 | 
			
		||||
    return role.isSatisfiedBy(comm.realCommunityLevel());
 | 
			
		||||
 | 
			
		||||
  } // end satisfy
 | 
			
		||||
 | 
			
		||||
  public boolean testPermission(String symbol)
 | 
			
		||||
  {
 | 
			
		||||
    if (   symbol.equals(PERM_READ) || symbol.equals(PERM_WRITE) || symbol.equals(PERM_CREATE)
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,7 @@
 | 
			
		||||
package com.silverwrist.venice.core.internals;
 | 
			
		||||
 | 
			
		||||
import com.silverwrist.venice.except.AccessError;
 | 
			
		||||
import com.silverwrist.venice.security.Role;
 | 
			
		||||
import com.silverwrist.venice.security.SecurityMonitor;
 | 
			
		||||
 | 
			
		||||
public class EnvConference extends EnvCommunity
 | 
			
		||||
@ -92,6 +93,12 @@ public class EnvConference extends EnvCommunity
 | 
			
		||||
 | 
			
		||||
  } // end testPermission
 | 
			
		||||
 | 
			
		||||
  public boolean satisfy(Role role)
 | 
			
		||||
  {
 | 
			
		||||
    return role.isSatisfiedBy(conf.env_getConfLevel());
 | 
			
		||||
 | 
			
		||||
  } // end satisfy
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * External operations
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,7 @@ import com.silverwrist.venice.core.SecurityInfo;
 | 
			
		||||
import com.silverwrist.venice.db.*;
 | 
			
		||||
import com.silverwrist.venice.except.AccessError;
 | 
			
		||||
import com.silverwrist.venice.security.*;
 | 
			
		||||
import com.silverwrist.venice.svc.ServiceControl;
 | 
			
		||||
 | 
			
		||||
public class EnvEngine
 | 
			
		||||
{
 | 
			
		||||
@ -34,16 +35,18 @@ public class EnvEngine
 | 
			
		||||
 | 
			
		||||
  private EngineBackend engine;       // the engine
 | 
			
		||||
  private DataPool datapool;          // the database pool
 | 
			
		||||
  private ServiceControl scon;        // the service controller
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructors
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public EnvEngine(EngineBackend engine, DataPool datapool)
 | 
			
		||||
  public EnvEngine(EngineBackend engine, DataPool datapool, ServiceControl scon)
 | 
			
		||||
  {
 | 
			
		||||
    this.engine = engine;
 | 
			
		||||
    this.datapool = datapool;
 | 
			
		||||
    this.scon = scon;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -51,6 +54,7 @@ public class EnvEngine
 | 
			
		||||
  {
 | 
			
		||||
    this.engine = other.engine;
 | 
			
		||||
    this.datapool = other.datapool;
 | 
			
		||||
    this.scon = other.scon;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -82,6 +86,12 @@ public class EnvEngine
 | 
			
		||||
 | 
			
		||||
  } // end getDataPool
 | 
			
		||||
 | 
			
		||||
  public final ServiceControl getSCM()
 | 
			
		||||
  {
 | 
			
		||||
    return scon;
 | 
			
		||||
 | 
			
		||||
  } // end getSCM
 | 
			
		||||
 | 
			
		||||
  public final Connection getConnection() throws SQLException
 | 
			
		||||
  {
 | 
			
		||||
    return datapool.getConnection();
 | 
			
		||||
 | 
			
		||||
@ -73,15 +73,45 @@ public class EnvUser extends EnvEngine
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Overrides from class EnvEngine
 | 
			
		||||
   * Internal operations
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  protected SecurityMonitor getStaticMonitor()
 | 
			
		||||
  protected boolean testPermissionDynamic(String symbol, String errormsg) throws AccessError
 | 
			
		||||
  {
 | 
			
		||||
    return sm;
 | 
			
		||||
    if (symbol.equals(PERM_CREATECOMMUNITY))
 | 
			
		||||
    { // the Create Community permission test
 | 
			
		||||
      Role r = getEngine().getParamRole(EngineBackend.ROLEP_CREATECOMMUNITY);
 | 
			
		||||
      if (r.isSatisfiedBy(user.realBaseLevel()))
 | 
			
		||||
	return true;
 | 
			
		||||
      logger.error("testPermission() fail for permission " + PERM_CREATECOMMUNITY);
 | 
			
		||||
      if (errormsg==null)
 | 
			
		||||
	errormsg = "You are not authorized to create new communities.";
 | 
			
		||||
      throw new AccessError(errormsg);
 | 
			
		||||
 | 
			
		||||
  } // end getStaticMonitor
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  } // end testPermission
 | 
			
		||||
 | 
			
		||||
  protected boolean testPermissionDynamic(String symbol)
 | 
			
		||||
  {
 | 
			
		||||
    if (symbol.equals(PERM_CREATECOMMUNITY))
 | 
			
		||||
    { // do the "Create Community" test here
 | 
			
		||||
      Role r = getEngine().getParamRole(EngineBackend.ROLEP_CREATECOMMUNITY);
 | 
			
		||||
      return r.isSatisfiedBy(user.realBaseLevel());
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  } // end testPermission
 | 
			
		||||
 | 
			
		||||
  protected int levelSelf()
 | 
			
		||||
  {
 | 
			
		||||
    return user.realBaseLevel();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * External operations
 | 
			
		||||
@ -120,6 +150,8 @@ public class EnvUser extends EnvEngine
 | 
			
		||||
 | 
			
		||||
  public boolean testPermission(String symbol, String errormsg) throws AccessError
 | 
			
		||||
  {
 | 
			
		||||
    if (testPermissionDynamic(symbol,errormsg))
 | 
			
		||||
      return true;
 | 
			
		||||
    if (symbol.equals(PERM_CREATECOMMUNITY))
 | 
			
		||||
    { // the Create Community permission test
 | 
			
		||||
      Role r = getEngine().getParamRole(EngineBackend.ROLEP_CREATECOMMUNITY);
 | 
			
		||||
@ -149,6 +181,12 @@ public class EnvUser extends EnvEngine
 | 
			
		||||
 | 
			
		||||
  } // end testPermission
 | 
			
		||||
 | 
			
		||||
  public boolean satisfy(Role role)
 | 
			
		||||
  {
 | 
			
		||||
    return role.isSatisfiedBy(user.realBaseLevel());
 | 
			
		||||
 | 
			
		||||
  } // end satisfy
 | 
			
		||||
 | 
			
		||||
  public final UserBackend getUser()
 | 
			
		||||
  {
 | 
			
		||||
    return user;
 | 
			
		||||
 | 
			
		||||
@ -20,12 +20,20 @@ package com.silverwrist.venice.servlets;
 | 
			
		||||
import java.io.*;
 | 
			
		||||
import javax.servlet.*;
 | 
			
		||||
import javax.servlet.http.*;
 | 
			
		||||
import org.apache.log4j.*;
 | 
			
		||||
import com.silverwrist.venice.core.*;
 | 
			
		||||
import com.silverwrist.venice.except.*;
 | 
			
		||||
import com.silverwrist.venice.servlets.format.*;
 | 
			
		||||
 | 
			
		||||
public class CommunityFrontEnd extends VeniceServlet
 | 
			
		||||
{
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Static data members
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private static Category logger = Category.getInstance(CommunityFrontEnd.class);
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Overrides from class HttpServlet
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
@ -56,7 +64,9 @@ public class CommunityFrontEnd extends VeniceServlet
 | 
			
		||||
      CommunityContext comm = user.getCommunityContext(alias);
 | 
			
		||||
 | 
			
		||||
      // get the default servlet from the community context
 | 
			
		||||
      String def_servlet = comm.getDefaultApplet();
 | 
			
		||||
      String def_servlet = rdat.getDefaultServletAddress(comm);
 | 
			
		||||
      if (logger.isDebugEnabled())
 | 
			
		||||
	logger.debug("CommunityFrontEnd bouncing to: " + def_servlet);
 | 
			
		||||
      if (def_servlet==null)
 | 
			
		||||
      { // return the default servlet
 | 
			
		||||
	changeMenuTop(request);
 | 
			
		||||
@ -65,7 +75,7 @@ public class CommunityFrontEnd extends VeniceServlet
 | 
			
		||||
      } // end if
 | 
			
		||||
 | 
			
		||||
      // and go there
 | 
			
		||||
      throw new RedirectResult(def_servlet);
 | 
			
		||||
      throw new RedirectResult(def_servlet,true);
 | 
			
		||||
 | 
			
		||||
    } // end try
 | 
			
		||||
    catch (DataException de)
 | 
			
		||||
 | 
			
		||||
@ -35,6 +35,7 @@ public class RedirectResult extends ExecuteResult
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private String target;
 | 
			
		||||
  private boolean absolute;
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -45,6 +46,15 @@ public class RedirectResult extends ExecuteResult
 | 
			
		||||
  {
 | 
			
		||||
    super();
 | 
			
		||||
    this.target = target;
 | 
			
		||||
    this.absolute = false;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  public RedirectResult(String target, boolean absolute)
 | 
			
		||||
  {
 | 
			
		||||
    super();
 | 
			
		||||
    this.target = target;
 | 
			
		||||
    this.absolute = absolute;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -55,6 +65,13 @@ public class RedirectResult extends ExecuteResult
 | 
			
		||||
 | 
			
		||||
  public void execute(RenderData rdat) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if (absolute)
 | 
			
		||||
    { // allow us to explicitly specify absolute redirection
 | 
			
		||||
      rdat.redirectAbsolute(target);
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    for (int i=0; i<absolute_prefixes.length; i++)
 | 
			
		||||
      if (target.startsWith(absolute_prefixes[i]))
 | 
			
		||||
      { // this is an absolute redirection...do it!
 | 
			
		||||
 | 
			
		||||
@ -579,6 +579,12 @@ public class RenderConfig implements ColorSelectors
 | 
			
		||||
 | 
			
		||||
  } // end createCommunityMenu
 | 
			
		||||
 | 
			
		||||
  String getDefaultServletAddress(RenderData rdat, CommunityContext comm)
 | 
			
		||||
  {
 | 
			
		||||
    return comm_menu_fact.getDefaultServletAddress(rdat,comm);
 | 
			
		||||
 | 
			
		||||
  } // end getDefaultServletAddress
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Static operations for use by VeniceServlet
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@ -25,6 +25,7 @@ import javax.servlet.http.*;
 | 
			
		||||
import org.apache.log4j.*;
 | 
			
		||||
import com.silverwrist.util.IOUtil;
 | 
			
		||||
import com.silverwrist.util.StringUtil;
 | 
			
		||||
import com.silverwrist.venice.core.CommunityContext;
 | 
			
		||||
import com.silverwrist.venice.core.IDUtils;
 | 
			
		||||
import com.silverwrist.venice.core.UserContext;
 | 
			
		||||
import com.silverwrist.venice.core.VeniceEngine;
 | 
			
		||||
@ -334,6 +335,12 @@ public class RenderData implements ColorSelectors
 | 
			
		||||
 | 
			
		||||
  } // end getPhotoNotAvailURL
 | 
			
		||||
 | 
			
		||||
  public String getDefaultServletAddress(CommunityContext comm)
 | 
			
		||||
  {
 | 
			
		||||
    return rconf.getDefaultServletAddress(this,comm);
 | 
			
		||||
 | 
			
		||||
  } // end getDefaultServletAddress
 | 
			
		||||
 | 
			
		||||
  public String formatDateForDisplay(Date date)
 | 
			
		||||
  {
 | 
			
		||||
    if (display_date==null)
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@ import javax.servlet.*;
 | 
			
		||||
import javax.servlet.http.*;
 | 
			
		||||
import com.silverwrist.venice.core.*;
 | 
			
		||||
import com.silverwrist.venice.except.*;
 | 
			
		||||
import com.silverwrist.venice.security.Role;
 | 
			
		||||
 | 
			
		||||
public class ViewCommunityMembers implements JSPRender, SearchMode
 | 
			
		||||
{
 | 
			
		||||
@ -329,4 +330,12 @@ public class ViewCommunityMembers implements JSPRender, SearchMode
 | 
			
		||||
 | 
			
		||||
  } // end getItem
 | 
			
		||||
 | 
			
		||||
  public boolean isCommunityAdmin(UserFound uf)
 | 
			
		||||
  {
 | 
			
		||||
    SecurityInfo sinf = comm.getSecurityInfo();
 | 
			
		||||
    Role r = sinf.getRole("Community.Host");
 | 
			
		||||
    return r.isSatisfiedBy(uf.getLevel());
 | 
			
		||||
 | 
			
		||||
  } // end isCommunityAdmin
 | 
			
		||||
 | 
			
		||||
} // end class ViewCommunityMembers
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,7 @@ package com.silverwrist.venice.servlets.format.menus;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import org.w3c.dom.*;
 | 
			
		||||
import com.silverwrist.venice.except.*;
 | 
			
		||||
import com.silverwrist.venice.servlets.format.RenderData;
 | 
			
		||||
import com.silverwrist.venice.util.XMLLoader;
 | 
			
		||||
 | 
			
		||||
class CommunityLeftMenuEntry implements Comparable
 | 
			
		||||
@ -114,4 +115,10 @@ class CommunityLeftMenuEntry implements Comparable
 | 
			
		||||
 | 
			
		||||
  } // end resolveItem
 | 
			
		||||
 | 
			
		||||
  final String getServletAddress(RenderData rdat, Map vars)
 | 
			
		||||
  {
 | 
			
		||||
    return item.getAddress(rdat,vars);
 | 
			
		||||
 | 
			
		||||
  } // end getServletAddress
 | 
			
		||||
 | 
			
		||||
} // end class CommunityLeftMenuEntry
 | 
			
		||||
 | 
			
		||||
@ -21,6 +21,7 @@ import java.util.*;
 | 
			
		||||
import org.w3c.dom.*;
 | 
			
		||||
import com.silverwrist.venice.core.*;
 | 
			
		||||
import com.silverwrist.venice.except.*;
 | 
			
		||||
import com.silverwrist.venice.servlets.format.RenderData;
 | 
			
		||||
 | 
			
		||||
public class CommunityLeftMenuFactory
 | 
			
		||||
{
 | 
			
		||||
@ -30,6 +31,7 @@ public class CommunityLeftMenuFactory
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private List entries;
 | 
			
		||||
  private Map map_symbol;
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -42,6 +44,7 @@ public class CommunityLeftMenuFactory
 | 
			
		||||
    { // look for community services
 | 
			
		||||
      NodeList nl = comm_sect.getChildNodes();
 | 
			
		||||
      ArrayList tmp_entries = new ArrayList(nl.getLength());
 | 
			
		||||
      HashMap tmp_map = new HashMap();
 | 
			
		||||
      for (int i=0; i<nl.getLength(); i++)
 | 
			
		||||
      { // get each node and see if it's a service node
 | 
			
		||||
	Node n = nl.item(i);
 | 
			
		||||
@ -49,25 +52,35 @@ public class CommunityLeftMenuFactory
 | 
			
		||||
	{ // create a template LeftMenuEntry and add it
 | 
			
		||||
	  CommunityLeftMenuEntry ent = new CommunityLeftMenuEntry((Element)n);
 | 
			
		||||
	  tmp_entries.add(ent);
 | 
			
		||||
	  tmp_map.put(ent.getSymbol(),ent);
 | 
			
		||||
 | 
			
		||||
	} // end if
 | 
			
		||||
 | 
			
		||||
      } // end for
 | 
			
		||||
 | 
			
		||||
      if (tmp_entries.isEmpty())
 | 
			
		||||
      { // dummy it all out
 | 
			
		||||
	entries = Collections.EMPTY_LIST;
 | 
			
		||||
	map_symbol = Collections.EMPTY_MAP;
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
      else
 | 
			
		||||
      { // sort the list by sequence before we save it
 | 
			
		||||
	if (tmp_entries.size()>1)
 | 
			
		||||
	  Collections.sort(tmp_entries);
 | 
			
		||||
	tmp_entries.trimToSize();
 | 
			
		||||
	entries = Collections.unmodifiableList(tmp_entries);
 | 
			
		||||
	map_symbol = Collections.unmodifiableMap(tmp_map);
 | 
			
		||||
 | 
			
		||||
      } // end else
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
    else // no communty services - initialize to null
 | 
			
		||||
    else
 | 
			
		||||
    { // no communty services - initialize to null
 | 
			
		||||
      entries = Collections.EMPTY_LIST;
 | 
			
		||||
      map_symbol = Collections.EMPTY_MAP;
 | 
			
		||||
 | 
			
		||||
    } // end else
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -78,19 +91,15 @@ public class CommunityLeftMenuFactory
 | 
			
		||||
 | 
			
		||||
  public CommunityLeftMenu createMenu(CommunityContext comm)
 | 
			
		||||
  {
 | 
			
		||||
    // N.B. This implementation will change once the engine uses the SCM to return the defined
 | 
			
		||||
    // community services.
 | 
			
		||||
 | 
			
		||||
    List items;
 | 
			
		||||
    if (entries.size()>0)
 | 
			
		||||
    { // Get the community features list and stash the indexes in a set.
 | 
			
		||||
    { // Get the community services and stash the symbols in a set.
 | 
			
		||||
      HashSet defined = new HashSet();
 | 
			
		||||
      List ftr_list = comm.getCommunityFeaturesList();
 | 
			
		||||
      Iterator it = ftr_list.iterator();
 | 
			
		||||
      Iterator it = comm.getServices().iterator();
 | 
			
		||||
      while (it.hasNext())
 | 
			
		||||
      { // add each index to the set
 | 
			
		||||
	CommunityFeature ftr = (CommunityFeature)(it.next());
 | 
			
		||||
	defined.add(new Integer(ftr.getFeatureCode()));
 | 
			
		||||
      { // add each symbol to the set
 | 
			
		||||
	ServiceToken token = (ServiceToken)(it.next());
 | 
			
		||||
	defined.add(token.getSymbol());
 | 
			
		||||
	
 | 
			
		||||
      } // end while
 | 
			
		||||
 | 
			
		||||
@ -104,7 +113,7 @@ public class CommunityLeftMenuFactory
 | 
			
		||||
      while (it.hasNext())
 | 
			
		||||
      { // get this entry and see if there's a match in the set
 | 
			
		||||
	CommunityLeftMenuEntry ntry = (CommunityLeftMenuEntry)(it.next());
 | 
			
		||||
	if (defined.contains(new Integer(ntry.getIndex())))
 | 
			
		||||
	if (defined.contains(ntry.getSymbol()))
 | 
			
		||||
	  tmp_items.add(ntry.resolveItem(vars));
 | 
			
		||||
 | 
			
		||||
      } // end while
 | 
			
		||||
@ -127,4 +136,21 @@ public class CommunityLeftMenuFactory
 | 
			
		||||
 | 
			
		||||
  } // end createMenu
 | 
			
		||||
 | 
			
		||||
  public String getDefaultServletAddress(RenderData rdat, CommunityContext comm)
 | 
			
		||||
  {
 | 
			
		||||
    ServiceToken token = comm.getDefaultService();
 | 
			
		||||
    if (token==null)
 | 
			
		||||
      return null;
 | 
			
		||||
    CommunityLeftMenuEntry ent = (CommunityLeftMenuEntry)(map_symbol.get(token.getSymbol()));
 | 
			
		||||
    if (ent==null)
 | 
			
		||||
      return null;
 | 
			
		||||
 | 
			
		||||
    // Create the map used to replace the variables in the servlet address.
 | 
			
		||||
    HashMap vars = new HashMap();
 | 
			
		||||
    vars.put("cid",String.valueOf(comm.getCommunityID()));
 | 
			
		||||
 | 
			
		||||
    return ent.getServletAddress(rdat,vars);
 | 
			
		||||
 | 
			
		||||
  } // end getDefaultServletAddress
 | 
			
		||||
 | 
			
		||||
} // end class CommunityLeftMenuFactory
 | 
			
		||||
 | 
			
		||||
@ -145,4 +145,23 @@ class LinkItem implements ComponentRender, ColorSelectors
 | 
			
		||||
 | 
			
		||||
  } // end renderHere
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * External operations
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  final String getAddress(RenderData rdat, Map vars)
 | 
			
		||||
  {
 | 
			
		||||
    String s = StringUtil.replaceAllVariables(href,vars);
 | 
			
		||||
    if (type.equals(ABSOLUTE))
 | 
			
		||||
      return s;
 | 
			
		||||
    else if (type.equals(SERVLET))
 | 
			
		||||
      return rdat.getEncodedServletPath(s);
 | 
			
		||||
    else if (type.equals(FRAME))
 | 
			
		||||
      return rdat.getEncodedServletPath("frame/" + s);
 | 
			
		||||
    else
 | 
			
		||||
      return null;
 | 
			
		||||
 | 
			
		||||
  } // end getAddress
 | 
			
		||||
 | 
			
		||||
} // end class LinkItem
 | 
			
		||||
 | 
			
		||||
@ -18,18 +18,18 @@
 | 
			
		||||
package com.silverwrist.venice.svc;
 | 
			
		||||
 | 
			
		||||
import org.w3c.dom.Element;
 | 
			
		||||
import com.silverwrist.venice.core.ServiceToken;
 | 
			
		||||
import com.silverwrist.venice.except.ConfigException;
 | 
			
		||||
import com.silverwrist.venice.security.Role;
 | 
			
		||||
import com.silverwrist.venice.security.SecurityMonitor;
 | 
			
		||||
 | 
			
		||||
public interface CommService
 | 
			
		||||
public interface CommService extends Service
 | 
			
		||||
{
 | 
			
		||||
  public abstract void initialize(Element root, SecurityMonitor sm, CommServiceSite site)
 | 
			
		||||
  public abstract void initialize(ServiceToken token, Element root, SecurityMonitor sm, CommServiceSite site)
 | 
			
		||||
      throws ConfigException;
 | 
			
		||||
 | 
			
		||||
  public abstract void shutdown();
 | 
			
		||||
  public abstract String getPermission();
 | 
			
		||||
 | 
			
		||||
  public abstract String getSymbol();
 | 
			
		||||
 | 
			
		||||
  public abstract int getIndex();
 | 
			
		||||
  public abstract Role getRole();
 | 
			
		||||
 | 
			
		||||
} // end interface CommService
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										32
									
								
								src/com/silverwrist/venice/svc/Service.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/com/silverwrist/venice/svc/Service.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
/*
 | 
			
		||||
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 | 
			
		||||
 * (the "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
 | 
			
		||||
 * 
 | 
			
		||||
 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
 | 
			
		||||
 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
			
		||||
 * language governing rights and limitations under the License.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.svc;
 | 
			
		||||
 | 
			
		||||
import com.silverwrist.venice.core.ServiceToken;
 | 
			
		||||
 | 
			
		||||
public interface Service
 | 
			
		||||
{
 | 
			
		||||
  public abstract void shutdown();
 | 
			
		||||
 | 
			
		||||
  public abstract ServiceToken getToken();
 | 
			
		||||
 | 
			
		||||
  public abstract boolean isDefault();
 | 
			
		||||
 | 
			
		||||
  public abstract boolean isLocked();
 | 
			
		||||
 | 
			
		||||
} // end interface Service
 | 
			
		||||
							
								
								
									
										38
									
								
								src/com/silverwrist/venice/svc/ServiceControl.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/com/silverwrist/venice/svc/ServiceControl.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
			
		||||
/*
 | 
			
		||||
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 | 
			
		||||
 * (the "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
 | 
			
		||||
 * 
 | 
			
		||||
 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
 | 
			
		||||
 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
			
		||||
 * language governing rights and limitations under the License.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.svc;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import com.silverwrist.venice.core.ServiceGroup;
 | 
			
		||||
import com.silverwrist.venice.core.ServiceToken;
 | 
			
		||||
 | 
			
		||||
public interface ServiceControl extends ServiceGroup
 | 
			
		||||
{
 | 
			
		||||
  public abstract Set getAllServices(int group);
 | 
			
		||||
 | 
			
		||||
  public abstract Set getDefaultServices(int group);
 | 
			
		||||
 | 
			
		||||
  public abstract Service getServiceForSymbol(int group, String sym);
 | 
			
		||||
 | 
			
		||||
  public abstract Service getServiceForToken(ServiceToken token);
 | 
			
		||||
 | 
			
		||||
  public abstract ServiceToken getTokenForIndex(int group, int ndx);
 | 
			
		||||
 | 
			
		||||
  public abstract ServiceToken getTokenForSymbol(int group, String sym);
 | 
			
		||||
 | 
			
		||||
} // end interface ServiceControl
 | 
			
		||||
@ -18,7 +18,6 @@
 | 
			
		||||
<%@ page import = "java.util.*" %>
 | 
			
		||||
<%@ page import = "com.silverwrist.util.StringUtil" %>
 | 
			
		||||
<%@ page import = "com.silverwrist.venice.core.*" %>
 | 
			
		||||
<%@ page import = "com.silverwrist.venice.security.Capability" %>
 | 
			
		||||
<%@ page import = "com.silverwrist.venice.servlets.Variables" %>
 | 
			
		||||
<%@ page import = "com.silverwrist.venice.servlets.format.*" %>
 | 
			
		||||
<%
 | 
			
		||||
@ -129,7 +128,7 @@
 | 
			
		||||
          <%= StringUtil.encodeHTML(uf.getGivenName()) %> <%= StringUtil.encodeHTML(uf.getFamilyName()) %>,
 | 
			
		||||
          from <%= StringUtil.encodeHTML(uf.getLocality()) %>, <%= StringUtil.encodeHTML(uf.getRegion()) %>
 | 
			
		||||
          <%= uf.getCountry() %>
 | 
			
		||||
          <% if (Capability.isCommunityAdmin(uf.getLevel())) { %>
 | 
			
		||||
          <% if (data.isCommunityAdmin(uf)) { %>
 | 
			
		||||
            <IMG SRC="<%= rdat.getFullImagePath("tag_host.gif") %>" ALT="Host!" HSPACE=2 VSPACE=0 BORDER=0
 | 
			
		||||
                 WIDTH=40 HEIGHT=20 ALIGN=BOTTOM>
 | 
			
		||||
          <% } // end if %>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user