broke out the object cache functionality; generalized ReadOnlyVector;
finally implemented background sweeps of unreferenced cache objects; anonymous user, when viewing profiles, now sees them as if all "privacy" flags were switched on
This commit is contained in:
parent
15a7fa56d2
commit
7e72407b84
7
TODO
7
TODO
|
@ -2,20 +2,13 @@ Lots!
|
|||
|
||||
- Unimplemented functions on the SIG Administration page:
|
||||
Set SIG Features (sigadmin, command=F)
|
||||
View Audit Records (needs to be added)
|
||||
|
||||
- Unimplemented functions in the system admin menu:
|
||||
Set Global Parameters
|
||||
View/Edit Banned Users
|
||||
User Account Management
|
||||
View Audit Records (needs to be added)
|
||||
(More stuff needs to be added, I'm just not sure what.)
|
||||
|
||||
- Should we provide the sysadmin the ability to disable SIG creation for
|
||||
non-admin users? Maybe there needs to be a "global" set of levels that
|
||||
aren't hardcoded. Where do they get stored? The database? (Maybe the
|
||||
nice shiny new "globals" table?)
|
||||
|
||||
- Unimplemented functions on the Top page:
|
||||
Customize Sideboxes
|
||||
|
||||
|
|
|
@ -40,7 +40,8 @@ CREATE TABLE globals (
|
|||
max_sig_mbr_page INT NOT NULL,
|
||||
max_conf_mbr_page INT NOT NULL,
|
||||
fp_posts INT NOT NULL,
|
||||
num_audit_page INT NOT NULL
|
||||
num_audit_page INT NOT NULL,
|
||||
sig_create_lvl INT NOT NULL
|
||||
);
|
||||
|
||||
# The audit records table. Most "major" events add a record to this table.
|
||||
|
@ -1325,8 +1326,8 @@ INSERT INTO refsigftr (ftr_code, is_default, is_locked, is_hidden, require_read,
|
|||
|
||||
# Initialize the system globals table.
|
||||
INSERT INTO globals (posts_per_page, old_posts_at_top, max_search_page, max_sig_mbr_page, max_conf_mbr_page,
|
||||
fp_posts, num_audit_page)
|
||||
VALUES (20, 2, 20, 50, 50, 10, 100);
|
||||
fp_posts, num_audit_page, sig_create_lvl)
|
||||
VALUES (20, 2, 20, 50, 50, 10, 100, 1000);
|
||||
|
||||
# Add the 'Anonymous Honyak' user to the users table.
|
||||
# (Do 'SELECT * FROM users WHERE is_anon = 1' to retrieve the AC user details.)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Community System.
|
||||
* The 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
|
||||
|
@ -15,11 +15,11 @@
|
|||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.core.impl;
|
||||
package com.silverwrist.util.collections;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
class ReadOnlyVector extends AbstractList
|
||||
public class ReadOnlyVector extends AbstractList
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Attributes
|
||||
|
@ -33,7 +33,7 @@ class ReadOnlyVector extends AbstractList
|
|||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
ReadOnlyVector(Vector vec)
|
||||
public ReadOnlyVector(Vector vec)
|
||||
{
|
||||
my_vec = vec;
|
||||
my_vec.trimToSize();
|
||||
|
@ -70,4 +70,3 @@ class ReadOnlyVector extends AbstractList
|
|||
} // end size
|
||||
|
||||
} // end class ReadOnlyVector
|
||||
|
162
src/com/silverwrist/util/rcache/ReferenceCache.java
Normal file
162
src/com/silverwrist/util/rcache/ReferenceCache.java
Normal file
|
@ -0,0 +1,162 @@
|
|||
/*
|
||||
* 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.util.rcache;
|
||||
|
||||
import java.util.*;
|
||||
import com.silverwrist.util.collections.*;
|
||||
|
||||
public class ReferenceCache
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Attributes
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private HashMap the_data;
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructor
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public ReferenceCache()
|
||||
{
|
||||
the_data = new HashMap();
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External operations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public synchronized ReferencedData get(Object key)
|
||||
{
|
||||
ReferencedData rc = (ReferencedData)(the_data.get(key));
|
||||
if (rc!=null)
|
||||
rc.rd_addRef();
|
||||
return rc;
|
||||
|
||||
} // end get
|
||||
|
||||
public synchronized ReferencedData getOrCreate(Object key, ReferencedDataBuilder builder)
|
||||
throws ReferencedDataBuilderException
|
||||
{
|
||||
ReferencedData rc = (ReferencedData)(the_data.get(key));
|
||||
if (rc==null)
|
||||
{ // use the builder to build one
|
||||
rc = builder.build(key);
|
||||
if (rc!=null)
|
||||
the_data.put(key,rc);
|
||||
|
||||
} // end if
|
||||
else // just add a reference
|
||||
rc.rd_addRef();
|
||||
|
||||
return rc;
|
||||
|
||||
} // end getOrCreate
|
||||
|
||||
public void register(ReferencedData data)
|
||||
{
|
||||
Object key = data.rd_getKey();
|
||||
|
||||
synchronized (this)
|
||||
{ // see if it's in the cache, if not, add it
|
||||
if (the_data.get(key)!=null)
|
||||
throw new ReferenceCacheException("object already in cache",key);
|
||||
|
||||
// dump it in the object cache
|
||||
the_data.put(key,data);
|
||||
|
||||
} // end synchronized block
|
||||
|
||||
} // end register
|
||||
|
||||
public synchronized void detach(Object key)
|
||||
{
|
||||
the_data.remove(key);
|
||||
|
||||
} // end detach
|
||||
|
||||
public void sweep()
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
synchronized (this)
|
||||
{ // bail out early if possible
|
||||
if (the_data.size()==0)
|
||||
return;
|
||||
|
||||
// provide a storage bin for all keys we decide to 86
|
||||
Object keyzap[] = new Object[the_data.size()];
|
||||
Iterator it = the_data.values().iterator();
|
||||
|
||||
while (it.hasNext())
|
||||
{ // check each value we contain in turn
|
||||
ReferencedData rd = (ReferencedData)(it.next());
|
||||
if (rd.rd_unreferenced())
|
||||
keyzap[count++] = rd.rd_getKey();
|
||||
|
||||
} // end while
|
||||
|
||||
for (int i=0; i<count; i++)
|
||||
the_data.remove(keyzap[i]);
|
||||
|
||||
} // end synchronized block
|
||||
|
||||
} // end sweep
|
||||
|
||||
public List sweepReturn()
|
||||
{
|
||||
Vector rc = new Vector();
|
||||
int count = 0;
|
||||
|
||||
synchronized (this)
|
||||
{ // bail out early if possible
|
||||
if (the_data.size()>0)
|
||||
{ // provide a storage bin for all keys we decide to 86
|
||||
Object keyzap[] = new Object[the_data.size()];
|
||||
Iterator it = the_data.values().iterator();
|
||||
|
||||
while (it.hasNext())
|
||||
{ // check each value we contain in turn
|
||||
ReferencedData rd = (ReferencedData)(it.next());
|
||||
if (rd.rd_unreferenced())
|
||||
keyzap[count++] = rd.rd_getKey();
|
||||
else
|
||||
{ // add another reference and tack it onto the list
|
||||
rd.rd_addRef();
|
||||
rc.add(rd);
|
||||
|
||||
} // end else
|
||||
|
||||
} // end while
|
||||
|
||||
for (int i=0; i<count; i++)
|
||||
the_data.remove(keyzap[i]);
|
||||
|
||||
} // end if
|
||||
|
||||
} // end synchronized block
|
||||
|
||||
return new ReadOnlyVector(rc);
|
||||
|
||||
} // end sweepReturn
|
||||
|
||||
} // end ReferenceCache
|
52
src/com/silverwrist/util/rcache/ReferenceCacheException.java
Normal file
52
src/com/silverwrist/util/rcache/ReferenceCacheException.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.util.rcache;
|
||||
|
||||
public class ReferenceCacheException extends RuntimeException
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Attributes
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private Object keyval;
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructor
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public ReferenceCacheException(String msg, Object keyval)
|
||||
{
|
||||
super("[keyval " + keyval.toString() + "]: " + msg);
|
||||
this.keyval = keyval;
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External operations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public Object getKeyVal()
|
||||
{
|
||||
return keyval;
|
||||
|
||||
} // end getKeyVal
|
||||
|
||||
} // end class ReferenceCacheException
|
|
@ -7,7 +7,7 @@
|
|||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Community System.
|
||||
* The 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
|
||||
|
@ -15,7 +15,7 @@
|
|||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.core.impl;
|
||||
package com.silverwrist.util.rcache;
|
||||
|
||||
public interface ReferencedData
|
||||
{
|
||||
|
@ -25,4 +25,6 @@ public interface ReferencedData
|
|||
|
||||
public abstract boolean rd_unreferenced();
|
||||
|
||||
public abstract Object rd_getKey();
|
||||
|
||||
} // end interface ReferencedData
|
24
src/com/silverwrist/util/rcache/ReferencedDataBuilder.java
Normal file
24
src/com/silverwrist/util/rcache/ReferencedDataBuilder.java
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* 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.util.rcache;
|
||||
|
||||
public interface ReferencedDataBuilder
|
||||
{
|
||||
public abstract ReferencedData build(Object key) throws ReferencedDataBuilderException;
|
||||
|
||||
} // end interface ReferencedDataBuilder
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.util.rcache;
|
||||
|
||||
public class ReferencedDataBuilderException extends Exception
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Attributes
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private Exception target;
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructors
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public ReferencedDataBuilderException(Exception target)
|
||||
{
|
||||
super("Error building new object: " + target.getMessage());
|
||||
this.target = target;
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External operations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public Exception getTarget()
|
||||
{
|
||||
return target;
|
||||
|
||||
} // end getTarget
|
||||
|
||||
} // end class ReferencedDataBuilderException
|
|
@ -21,6 +21,7 @@ import java.sql.*;
|
|||
import java.util.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.ParallelRunQueue;
|
||||
import com.silverwrist.util.rcache.ReferenceCache;
|
||||
import com.silverwrist.venice.db.*;
|
||||
import com.silverwrist.venice.core.DataException;
|
||||
import com.silverwrist.venice.core.InternalStateError;
|
||||
|
@ -45,7 +46,7 @@ class BackgroundSIGPurge implements Runnable
|
|||
private int sigid;
|
||||
private int num_confs;
|
||||
private int max_confid;
|
||||
private Hashtable conf_objects;
|
||||
private ReferenceCache conf_refcache;
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructor
|
||||
|
@ -53,7 +54,7 @@ class BackgroundSIGPurge implements Runnable
|
|||
*/
|
||||
|
||||
BackgroundSIGPurge(EngineBackend engine, DataPool datapool, UserBackend user, int sigid, int num_confs,
|
||||
int max_confid, Hashtable conf_objects)
|
||||
int max_confid, ReferenceCache conf_refcache)
|
||||
{
|
||||
this.engine = engine;
|
||||
this.datapool = datapool;
|
||||
|
@ -61,7 +62,7 @@ class BackgroundSIGPurge implements Runnable
|
|||
this.sigid = sigid;
|
||||
this.num_confs = num_confs;
|
||||
this.max_confid = max_confid;
|
||||
this.conf_objects = conf_objects;
|
||||
this.conf_refcache = conf_refcache;
|
||||
|
||||
} // end constructor
|
||||
|
||||
|
@ -100,10 +101,10 @@ class BackgroundSIGPurge implements Runnable
|
|||
for (int i=0; i<conferences; i++)
|
||||
{ // look to see if there's a conference SIG object first
|
||||
Integer key = new Integer(conf_ids[i]);
|
||||
ConferenceSIGContext confobj = (ConferenceSIGContext)(conf_objects.get(key));
|
||||
ConferenceSIGContext confobj = (ConferenceSIGContext)(conf_refcache.get(key));
|
||||
if (confobj!=null)
|
||||
{ // OK, there's an object - do the delete internally and release the object
|
||||
conf_objects.remove(key);
|
||||
conf_refcache.detach(key);
|
||||
confobj.delete(user);
|
||||
confobj.rd_release();
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ package com.silverwrist.venice.core.impl;
|
|||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.collections.*;
|
||||
import com.silverwrist.venice.db.*;
|
||||
import com.silverwrist.venice.core.*;
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ package com.silverwrist.venice.core.impl;
|
|||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.collections.*;
|
||||
import com.silverwrist.venice.db.*;
|
||||
import com.silverwrist.venice.security.AuditRecord;
|
||||
import com.silverwrist.venice.security.DefaultLevels;
|
||||
|
@ -185,6 +186,12 @@ class ConferenceCoreData implements ConferenceData
|
|||
|
||||
} // end rd_unreferenced
|
||||
|
||||
public Object rd_getKey()
|
||||
{
|
||||
return new Integer(confid);
|
||||
|
||||
} // end rd_getKey
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface ConferenceData
|
||||
*--------------------------------------------------------------------------------
|
||||
|
|
|
@ -20,6 +20,7 @@ package com.silverwrist.venice.core.impl;
|
|||
import java.sql.Connection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import com.silverwrist.util.rcache.ReferencedData;
|
||||
import com.silverwrist.venice.core.DataException;
|
||||
|
||||
public interface ConferenceData extends ReferencedData
|
||||
|
|
|
@ -20,6 +20,7 @@ package com.silverwrist.venice.core.impl;
|
|||
import java.sql.Connection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import com.silverwrist.util.rcache.ReferencedData;
|
||||
import com.silverwrist.venice.core.DataException;
|
||||
|
||||
public interface ConferenceSIGContext extends ReferencedData
|
||||
|
|
|
@ -261,6 +261,12 @@ class ConferenceSIGContextImpl implements ConferenceSIGContext
|
|||
|
||||
} // end rd_unreferences
|
||||
|
||||
public Object rd_getKey()
|
||||
{
|
||||
return new Integer(confid);
|
||||
|
||||
} // end rd_getKey
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface ConferenceSIGContext
|
||||
*--------------------------------------------------------------------------------
|
||||
|
|
|
@ -20,6 +20,8 @@ package com.silverwrist.venice.core.impl;
|
|||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.collections.*;
|
||||
import com.silverwrist.util.rcache.ReferencedData;
|
||||
import com.silverwrist.venice.db.*;
|
||||
import com.silverwrist.venice.htmlcheck.*;
|
||||
import com.silverwrist.venice.security.DefaultLevels;
|
||||
|
@ -237,6 +239,8 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
|
|||
if (deleted)
|
||||
throw new DataException("This conference has been deleted.");
|
||||
confdata = sig.getConferenceDataObject(confid);
|
||||
if (confdata!=null)
|
||||
sig.saveMRU("conf",confdata);
|
||||
|
||||
// clear cache when we get the real confdata
|
||||
cache = null;
|
||||
|
@ -257,6 +261,8 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
|
|||
try
|
||||
{ // attempt to load the ConferenceSIGContext
|
||||
confdata = sig.getConferenceDataObject(confid);
|
||||
if (confdata!=null)
|
||||
sig.saveMRU("conf",confdata);
|
||||
|
||||
} // end try
|
||||
catch (DataException e)
|
||||
|
@ -1476,6 +1482,12 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
|
|||
|
||||
} // end realFullName
|
||||
|
||||
public void saveMRU(String tag, ReferencedData data)
|
||||
{
|
||||
sig.saveMRU(tag,data);
|
||||
|
||||
} // end saveMRU
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface SIGBackend
|
||||
*--------------------------------------------------------------------------------
|
||||
|
|
|
@ -38,6 +38,8 @@ public interface EngineBackend
|
|||
public static final int IP_MAXCONFMEMBERDISPLAY = 4;
|
||||
public static final int IP_NUMFRONTPAGEPOSTS = 5;
|
||||
public static final int IP_NUMAUDITRECSPERPAGE = 6;
|
||||
public static final int IP_CREATESIGLVL = 7;
|
||||
public static final int IPC_NUM_PARAMS = 8;
|
||||
|
||||
public abstract SimpleEmailer createEmailer();
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@ import java.sql.*;
|
|||
import java.util.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.StringUtil;
|
||||
import com.silverwrist.util.collections.*;
|
||||
import com.silverwrist.util.rcache.*;
|
||||
import com.silverwrist.venice.db.*;
|
||||
import com.silverwrist.venice.core.*;
|
||||
import com.silverwrist.venice.security.AuditRecord;
|
||||
|
@ -29,6 +31,35 @@ import com.silverwrist.venice.security.DefaultLevels;
|
|||
|
||||
class SIGCoreData implements SIGData, SIGDataBackend
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Internal class that creates new ConferenceSIGContextImpl objects
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected class ConferenceSIGContextImplCreator implements ReferencedDataBuilder
|
||||
{
|
||||
protected ConferenceSIGContextImplCreator()
|
||||
{ // do nothing
|
||||
} // end constructor
|
||||
|
||||
public ReferencedData build(Object key) throws ReferencedDataBuilderException
|
||||
{
|
||||
Integer xconf = (Integer)key;
|
||||
try
|
||||
{ // create the desired object
|
||||
return new ConferenceSIGContextImpl(engine,SIGCoreData.this,datapool,xconf.intValue());
|
||||
|
||||
} // end try
|
||||
catch (DataException e)
|
||||
{ // rethrow as a "wrapped" exception
|
||||
throw new ReferencedDataBuilderException(e);
|
||||
|
||||
} // end catch
|
||||
|
||||
} // end build
|
||||
|
||||
} // end class ConferenceCoreDataCreator
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Static data members
|
||||
*--------------------------------------------------------------------------------
|
||||
|
@ -68,7 +99,8 @@ class SIGCoreData implements SIGData, SIGDataBackend
|
|||
private String alias; // the community alias value
|
||||
private boolean public_sig; // is this a public SIG?
|
||||
private BitSet features; // set of available features
|
||||
private Hashtable conf_objects = new Hashtable(); // holder for ConferenceSIGContextImpl objects
|
||||
private ReferenceCache conf_refcache = new ReferenceCache();
|
||||
private ConferenceSIGContextImplCreator conf_creator = new ConferenceSIGContextImplCreator();
|
||||
private boolean deleted = false; // has this SIG been deleted?
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
|
@ -258,6 +290,12 @@ class SIGCoreData implements SIGData, SIGDataBackend
|
|||
|
||||
} // end rd_unreferenced
|
||||
|
||||
public Object rd_getKey()
|
||||
{
|
||||
return new Integer(sigid);
|
||||
|
||||
} // end rd_getKey
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface SIGData
|
||||
*--------------------------------------------------------------------------------
|
||||
|
@ -1393,25 +1431,21 @@ class SIGCoreData implements SIGData, SIGDataBackend
|
|||
if (logger.isDebugEnabled())
|
||||
logger.debug("getConferenceDataObject(" + confid + ")...");
|
||||
|
||||
Integer the_confid = new Integer(confid);
|
||||
ConferenceSIGContext csc = (ConferenceSIGContext)(conf_objects.get(the_confid));
|
||||
if (csc==null)
|
||||
{ // create a new ConferenceSIGContextImpl object and save it off
|
||||
csc = new ConferenceSIGContextImpl(engine,this,datapool,confid);
|
||||
conf_objects.put(the_confid,csc);
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...created new object");
|
||||
try
|
||||
{ // delegate to the conf_refcache and conf_creator objects
|
||||
return (ConferenceSIGContext)(conf_refcache.getOrCreate(new Integer(confid),conf_creator));
|
||||
|
||||
} // end if
|
||||
} // end try
|
||||
catch (ReferencedDataBuilderException e)
|
||||
{ // this may be a DataException, or it may not
|
||||
Exception e2 = e.getTarget();
|
||||
if (e2 instanceof DataException)
|
||||
throw (DataException)e2;
|
||||
else
|
||||
{ // this is an extra reference to the ConferenceSIGContext
|
||||
csc.rd_addRef();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...using cached object");
|
||||
throw new InternalStateError("unknown creation exception thrown in getConferenceDataObject: "
|
||||
+ e2.getClass().getName(),e2);
|
||||
|
||||
} // end else
|
||||
|
||||
return csc;
|
||||
} // end catch
|
||||
|
||||
} // end getConferenceDataObject
|
||||
|
||||
|
@ -1420,16 +1454,7 @@ class SIGCoreData implements SIGData, SIGDataBackend
|
|||
if (logger.isDebugEnabled())
|
||||
logger.debug("detachConferenceDataObject(" + confid + ")...");
|
||||
|
||||
Integer the_confid = new Integer(confid);
|
||||
ConferenceSIGContext csc = (ConferenceSIGContext)(conf_objects.get(the_confid));
|
||||
if (csc!=null)
|
||||
{ // remove from the hashtable
|
||||
conf_objects.remove(the_confid);
|
||||
csc.rd_release();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...reference released");
|
||||
|
||||
} // end if
|
||||
conf_refcache.detach(new Integer(confid));
|
||||
|
||||
} // end detachConferenceDataObject
|
||||
|
||||
|
@ -1452,17 +1477,7 @@ class SIGCoreData implements SIGData, SIGDataBackend
|
|||
cdata.rd_release();
|
||||
rcs = null;
|
||||
|
||||
synchronized (this)
|
||||
{ // Register this object with our local cache of ConferenceSIGData objects.
|
||||
Integer the_confid = new Integer(conf.getConfID());
|
||||
if (conf_objects.get(the_confid)!=null)
|
||||
throw new InternalStateError("ConfID " + the_confid + " already exists...but it CAN'T HAVE!");
|
||||
|
||||
// throw an extra reference on it and dump it in the object cache
|
||||
conf.rd_addRef();
|
||||
conf_objects.put(the_confid,conf);
|
||||
|
||||
} // end synchronized block
|
||||
conf_refcache.register(conf); // register this object with our local cache
|
||||
|
||||
return conf; // pass it up to the next level
|
||||
|
||||
|
@ -1853,13 +1868,19 @@ class SIGCoreData implements SIGData, SIGDataBackend
|
|||
|
||||
// Delete the rest of the gunk in the background; use another thread to do it.
|
||||
BackgroundSIGPurge purger = new BackgroundSIGPurge(engine,datapool,user,sigid,conf_count,conf_max,
|
||||
conf_objects);
|
||||
conf_refcache);
|
||||
Thread thrd = new Thread(purger);
|
||||
thrd.setPriority(Thread.NORM_PRIORITY-1);
|
||||
thrd.start();
|
||||
|
||||
} // end delete
|
||||
|
||||
public void sweepCache()
|
||||
{
|
||||
conf_refcache.sweep();
|
||||
|
||||
} // end sweepCache
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface SIGDataBackend
|
||||
*--------------------------------------------------------------------------------
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Community System.
|
||||
* The 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
|
||||
|
@ -20,6 +20,7 @@ package com.silverwrist.venice.core.impl;
|
|||
import java.util.BitSet;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import com.silverwrist.util.rcache.ReferencedData;
|
||||
import com.silverwrist.venice.core.AccessError;
|
||||
import com.silverwrist.venice.core.ContactInfo;
|
||||
import com.silverwrist.venice.core.DataException;
|
||||
|
@ -150,4 +151,6 @@ public interface SIGData extends ReferencedData
|
|||
|
||||
public abstract void delete(UserBackend user) throws DataException;
|
||||
|
||||
public abstract void sweepCache();
|
||||
|
||||
} // end interface SIGData
|
||||
|
|
|
@ -21,6 +21,8 @@ import java.sql.*;
|
|||
import java.util.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.StringUtil;
|
||||
import com.silverwrist.util.collections.*;
|
||||
import com.silverwrist.util.rcache.ReferencedData;
|
||||
import com.silverwrist.venice.db.*;
|
||||
import com.silverwrist.venice.security.AuditRecord;
|
||||
import com.silverwrist.venice.security.Capability;
|
||||
|
@ -180,6 +182,8 @@ class SIGUserContextImpl implements SIGContext, SIGBackend
|
|||
if (deleted)
|
||||
throw new DataException("This SIG has been deleted.");
|
||||
sigdata = engine.getSIGDataObject(sigid);
|
||||
if (sigdata!=null)
|
||||
user.saveMRU("sig",sigdata);
|
||||
|
||||
// clear cache when we get the real sigdata
|
||||
cache = null;
|
||||
|
@ -199,6 +203,8 @@ class SIGUserContextImpl implements SIGContext, SIGBackend
|
|||
try
|
||||
{ // attempt to load the SIGDataObject
|
||||
sigdata = engine.getSIGDataObject(sigid);
|
||||
if (sigdata!=null)
|
||||
user.saveMRU("sig",sigdata);
|
||||
|
||||
} // end try
|
||||
catch (DataException e)
|
||||
|
@ -1397,6 +1403,12 @@ class SIGUserContextImpl implements SIGContext, SIGBackend
|
|||
|
||||
} // end realFullName
|
||||
|
||||
public void saveMRU(String tag, ReferencedData data)
|
||||
{
|
||||
user.saveMRU(tag,data);
|
||||
|
||||
} // end saveMRU
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface SIGBackend
|
||||
*--------------------------------------------------------------------------------
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.sql.*;
|
|||
import java.util.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.StringUtil;
|
||||
import com.silverwrist.util.collections.*;
|
||||
import com.silverwrist.venice.db.*;
|
||||
import com.silverwrist.venice.security.AuditRecord;
|
||||
import com.silverwrist.venice.security.Capability;
|
||||
|
|
|
@ -20,6 +20,7 @@ package com.silverwrist.venice.core.impl;
|
|||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.collections.*;
|
||||
import com.silverwrist.venice.db.*;
|
||||
import com.silverwrist.venice.htmlcheck.*;
|
||||
import com.silverwrist.venice.security.AuditRecord;
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
*/
|
||||
package com.silverwrist.venice.core.impl;
|
||||
|
||||
import com.silverwrist.util.rcache.ReferencedData;
|
||||
import com.silverwrist.venice.core.DataException;
|
||||
|
||||
public interface UserBackend
|
||||
|
@ -37,4 +38,6 @@ public interface UserBackend
|
|||
|
||||
public abstract String realFullName() throws DataException;
|
||||
|
||||
public abstract void saveMRU(String tag, ReferencedData data);
|
||||
|
||||
} // end interface UserBackend
|
||||
|
|
|
@ -22,6 +22,8 @@ import java.sql.*;
|
|||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.LocaleFactory;
|
||||
import com.silverwrist.util.StringUtil;
|
||||
import com.silverwrist.util.collections.*;
|
||||
import com.silverwrist.util.rcache.ReferencedData;
|
||||
import com.silverwrist.venice.*;
|
||||
import com.silverwrist.venice.core.*;
|
||||
import com.silverwrist.venice.db.*;
|
||||
|
@ -62,6 +64,7 @@ class UserContextImpl implements UserContext, UserBackend
|
|||
private String full_name = null; // my full name (cached)
|
||||
private Locale my_locale = null; // my default locale (cached)
|
||||
private TimeZone my_tz = null; // my default timezone (cached)
|
||||
private Hashtable mru_cache = new Hashtable(); // MRU cache for ReferencedData objects
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructor
|
||||
|
@ -82,6 +85,14 @@ class UserContextImpl implements UserContext, UserBackend
|
|||
|
||||
protected void finalize()
|
||||
{
|
||||
Iterator it = mru_cache.values().iterator();
|
||||
while (it.hasNext())
|
||||
{ // release all our ReferencedData objects
|
||||
ReferencedData rd = (ReferencedData)(it.next());
|
||||
rd.rd_release();
|
||||
|
||||
} // end while
|
||||
|
||||
engine = null;
|
||||
datapool = null;
|
||||
username = null;
|
||||
|
@ -860,10 +871,10 @@ class UserContextImpl implements UserContext, UserBackend
|
|||
public SIGContext createSIG(String name, String alias, String language, String synopsis, String rules,
|
||||
String joinkey, int hide_mode) throws DataException, AccessError
|
||||
{
|
||||
if (!(Capability.canCreateSIG(level)))
|
||||
if (!canCreateSIG())
|
||||
throw new AccessError("You are not authorized to create new SIGs.");
|
||||
|
||||
// Convert the "hide mode" value int othe two hide flags.
|
||||
// Convert the "hide mode" value into the two hide flags.
|
||||
boolean hide_dir = (hide_mode!=SIGContext.HIDE_NONE);
|
||||
boolean hide_search = (hide_mode==SIGContext.HIDE_BOTH);
|
||||
|
||||
|
@ -884,7 +895,7 @@ class UserContextImpl implements UserContext, UserBackend
|
|||
|
||||
public boolean canCreateSIG()
|
||||
{
|
||||
return Capability.canCreateSIG(level);
|
||||
return (level>=engine.getParamInt(EngineBackend.IP_CREATESIGLVL));
|
||||
|
||||
} // end canCreateSIG
|
||||
|
||||
|
@ -1102,6 +1113,16 @@ class UserContextImpl implements UserContext, UserBackend
|
|||
|
||||
} // end realFullName
|
||||
|
||||
public void saveMRU(String tag, ReferencedData data)
|
||||
{
|
||||
ReferencedData old = (ReferencedData)(mru_cache.get(tag));
|
||||
data.rd_addRef();
|
||||
mru_cache.put(tag,data);
|
||||
if (old!=null)
|
||||
old.rd_release();
|
||||
|
||||
} // end saveMRU
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Operations private to implementation package
|
||||
*--------------------------------------------------------------------------------
|
||||
|
|
|
@ -156,6 +156,7 @@ class UserProfileImpl implements UserProfile
|
|||
ResultSet rs = stmt.executeQuery(sql.toString());
|
||||
if (rs.next())
|
||||
{ // load all the record data
|
||||
boolean me_anon = user.userIsAnonymous();
|
||||
given_name = rs.getString("given_name");
|
||||
family_name = rs.getString("family_name");
|
||||
String blort = rs.getString("middle_init");
|
||||
|
@ -166,7 +167,7 @@ class UserProfileImpl implements UserProfile
|
|||
prefix = rs.getString("prefix");
|
||||
suffix = rs.getString("suffix");
|
||||
company = rs.getString("company");
|
||||
if (!override && rs.getBoolean("pvt_addr"))
|
||||
if (!override && (me_anon || rs.getBoolean("pvt_addr")))
|
||||
{ // enforce address privacy
|
||||
addr1 = null;
|
||||
addr2 = null;
|
||||
|
@ -183,7 +184,7 @@ class UserProfileImpl implements UserProfile
|
|||
region = rs.getString("region");
|
||||
postal_code = rs.getString("pcode");
|
||||
country = rs.getString("country");
|
||||
if (!override && rs.getBoolean("pvt_phone"))
|
||||
if (!override && (me_anon || rs.getBoolean("pvt_phone")))
|
||||
{ // enforce phone privacy
|
||||
phone = null;
|
||||
mobile = null;
|
||||
|
@ -196,13 +197,13 @@ class UserProfileImpl implements UserProfile
|
|||
|
||||
} // end else
|
||||
|
||||
if (!override && rs.getBoolean("pvt_fax"))
|
||||
if (!override && (me_anon || rs.getBoolean("pvt_fax")))
|
||||
fax = null;
|
||||
else
|
||||
fax = rs.getString("fax");
|
||||
|
||||
real_email = rs.getString("email");
|
||||
if (!override && rs.getBoolean("pvt_email"))
|
||||
if (!override && (me_anon || rs.getBoolean("pvt_email")))
|
||||
email = null;
|
||||
else
|
||||
email = real_email;
|
||||
|
|
|
@ -23,6 +23,8 @@ import org.apache.log4j.*;
|
|||
import org.w3c.dom.*;
|
||||
import com.silverwrist.util.StringUtil;
|
||||
import com.silverwrist.util.DOMElementHelper;
|
||||
import com.silverwrist.util.collections.*;
|
||||
import com.silverwrist.util.rcache.*;
|
||||
import com.silverwrist.venice.core.*;
|
||||
import com.silverwrist.venice.db.*;
|
||||
import com.silverwrist.venice.htmlcheck.*;
|
||||
|
@ -278,6 +280,104 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
|||
|
||||
} // end class MasterSideBoxList
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Internal cache sweeper class information.
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected class CacheSweeper implements Runnable
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
for (;;)
|
||||
{ // this is a background thread that runs always
|
||||
try
|
||||
{ // wait for a little while
|
||||
Thread.sleep(10000);
|
||||
|
||||
} // end try
|
||||
catch (InterruptedException e)
|
||||
{ // if we're interrupted, just schedule the next run a little early
|
||||
} // end catch
|
||||
|
||||
// sweep the SIG cache first
|
||||
List sigs = sig_refcache.sweepReturn();
|
||||
Iterator it = sigs.iterator();
|
||||
while (it.hasNext())
|
||||
{ // perform subsweeps on the SIG data
|
||||
SIGData sig = (SIGData)(it.next());
|
||||
sig.sweepCache();
|
||||
sig.rd_release();
|
||||
|
||||
} // end while
|
||||
|
||||
// now sweep other caches
|
||||
conf_refcache.sweep();
|
||||
|
||||
} // end for (ever)
|
||||
|
||||
} // end run
|
||||
|
||||
} // end class CacheSweeper
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Internal class for creating new SIGCoreData objects.
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected class SIGCoreDataCreator implements ReferencedDataBuilder
|
||||
{
|
||||
protected SIGCoreDataCreator()
|
||||
{ // do nothing
|
||||
} // end constructor
|
||||
|
||||
public ReferencedData build(Object key) throws ReferencedDataBuilderException
|
||||
{
|
||||
Integer xsigid = (Integer)key;
|
||||
try
|
||||
{ // create the desired object
|
||||
return new SIGCoreData(VeniceEngineImpl.this,datapool,xsigid.intValue());
|
||||
|
||||
} // end try
|
||||
catch (DataException e)
|
||||
{ // rethrow as a "wrapped" exception
|
||||
throw new ReferencedDataBuilderException(e);
|
||||
|
||||
} // end catch
|
||||
|
||||
} // end build
|
||||
|
||||
} // end class SIGCoreDataCreator
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Internal class for creating new ConferenceCoreData objects.
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected class ConferenceCoreDataCreator implements ReferencedDataBuilder
|
||||
{
|
||||
protected ConferenceCoreDataCreator()
|
||||
{ // do nothing
|
||||
} // end constructor
|
||||
|
||||
public ReferencedData build(Object key) throws ReferencedDataBuilderException
|
||||
{
|
||||
Integer xconf = (Integer)key;
|
||||
try
|
||||
{ // create the desired object
|
||||
return new ConferenceCoreData(VeniceEngineImpl.this,datapool,xconf.intValue());
|
||||
|
||||
} // end try
|
||||
catch (DataException e)
|
||||
{ // rethrow as a "wrapped" exception
|
||||
throw new ReferencedDataBuilderException(e);
|
||||
|
||||
} // end catch
|
||||
|
||||
} // end build
|
||||
|
||||
} // end class ConferenceCoreDataCreator
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Static data values
|
||||
*--------------------------------------------------------------------------------
|
||||
|
@ -296,10 +396,12 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
|||
private Properties email_props = null; // email properties
|
||||
private javax.mail.Session mailsession = null; // email session object
|
||||
private Hashtable stock_messages = null; // stock messages holder
|
||||
private Hashtable sig_objects = new Hashtable(); // holder for SIGCoreData objects
|
||||
private ReferenceCache sig_refcache = new ReferenceCache();
|
||||
private SIGCoreDataCreator sig_creator = new SIGCoreDataCreator();
|
||||
private VeniceFeatureDef[] features; // master feature table
|
||||
private Hashtable feature_syms = new Hashtable(); // hashtable mapping symbols to features
|
||||
private Hashtable conf_objects = new Hashtable(); // holder for ConferenceCoreData objects
|
||||
private ReferenceCache conf_refcache = new ReferenceCache();
|
||||
private ConferenceCoreDataCreator conf_creator = new ConferenceCoreDataCreator();
|
||||
private HTMLCheckerConfig[] html_configs; // holder for HTML checker configurations
|
||||
private int[] gp_ints; // global integer parameters
|
||||
private MasterSideBox[] sideboxes; // master sidebox table
|
||||
|
@ -336,7 +438,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
|||
{
|
||||
final String query =
|
||||
"SELECT posts_per_page, old_posts_at_top, max_search_page, max_sig_mbr_page, max_conf_mbr_page, "
|
||||
+ "fp_posts, num_audit_page FROM globals;";
|
||||
+ "fp_posts, num_audit_page, sig_create_lvl FROM globals;";
|
||||
ResultSet rs = stmt.executeQuery(query);
|
||||
if (!(rs.next()))
|
||||
throw new DataException("Globals table does not appear to be loaded!");
|
||||
|
@ -349,6 +451,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
|||
gp_ints[IP_MAXCONFMEMBERDISPLAY] = rs.getInt(5);
|
||||
gp_ints[IP_NUMFRONTPAGEPOSTS] = rs.getInt(6);
|
||||
gp_ints[IP_NUMAUDITRECSPERPAGE] = rs.getInt(7);
|
||||
gp_ints[IP_CREATESIGLVL] = rs.getInt(8);
|
||||
|
||||
} // end loadDefaults
|
||||
|
||||
|
@ -493,7 +596,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
|||
} // end catch
|
||||
|
||||
// Allocate the global parameter arrays.
|
||||
gp_ints = new int[7];
|
||||
gp_ints = new int[IPC_NUM_PARAMS];
|
||||
|
||||
// initialize anything that requires us to pull from the database
|
||||
Connection conn = null;
|
||||
|
@ -634,6 +737,12 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
|||
cfg.addOutputFilter(html_filter);
|
||||
html_configs[HTMLC_ESCAPE_BODY_PSEUD] = cfg;
|
||||
|
||||
// Start the cache sweeper.
|
||||
Thread thrd = new Thread(new CacheSweeper());
|
||||
thrd.setPriority(Thread.currentThread().getPriority()-2);
|
||||
thrd.setDaemon(true);
|
||||
thrd.start();
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("initialize() complete :-)");
|
||||
|
||||
|
@ -1555,50 +1664,37 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
|||
|
||||
} // end getLanguageNameForCode
|
||||
|
||||
public synchronized SIGData getSIGDataObject(int sigid) throws DataException
|
||||
public SIGData getSIGDataObject(int sigid) throws DataException
|
||||
{
|
||||
checkInitialized();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("getSIGDataObject(" + sigid + ")...");
|
||||
|
||||
Integer the_sigid = new Integer(sigid);
|
||||
SIGData sd = (SIGData)(sig_objects.get(the_sigid));
|
||||
if (sd==null)
|
||||
{ // create a new SIGCoreData object and save it off
|
||||
sd = new SIGCoreData(this,datapool,sigid);
|
||||
sig_objects.put(the_sigid,sd);
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...created new object");
|
||||
try
|
||||
{ // delegate to the sig_refcache and sig_creator objects
|
||||
return (SIGData)(sig_refcache.getOrCreate(new Integer(sigid),sig_creator));
|
||||
|
||||
} // end if
|
||||
} // end try
|
||||
catch (ReferencedDataBuilderException e)
|
||||
{ // this may be a DataException, or it may not
|
||||
Exception e2 = e.getTarget();
|
||||
if (e2 instanceof DataException)
|
||||
throw (DataException)e2;
|
||||
else
|
||||
{ // this is an extra reference to the SIGDataObject
|
||||
sd.rd_addRef();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...using cached object");
|
||||
throw new InternalStateError("unknown creation exception thrown in getSIGDataObject: "
|
||||
+ e2.getClass().getName(),e2);
|
||||
|
||||
} // end else
|
||||
|
||||
return sd;
|
||||
} // end catch
|
||||
|
||||
} // end getSIGDataObject
|
||||
|
||||
public synchronized void detachSIGDataObject(int sigid)
|
||||
public void detachSIGDataObject(int sigid)
|
||||
{
|
||||
checkInitialized();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("detachSIGDataObject(" + sigid + ")...");
|
||||
|
||||
Integer the_sigid = new Integer(sigid);
|
||||
SIGData sd = (SIGData)(sig_objects.get(the_sigid));
|
||||
if (sd!=null)
|
||||
{ // pull the reference out of our hashtable
|
||||
sig_objects.remove(the_sigid);
|
||||
sd.rd_release();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...reference detached");
|
||||
|
||||
} // end if
|
||||
sig_refcache.detach(new Integer(sigid));
|
||||
|
||||
} // end detachSIGDataObject
|
||||
|
||||
|
@ -1680,21 +1776,13 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
|||
|
||||
} // end getDefaultFeaturesMask
|
||||
|
||||
public synchronized void registerNewSIG(SIGData sig)
|
||||
public void registerNewSIG(SIGData sig)
|
||||
{
|
||||
checkInitialized();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("registerNewSIG(" + sig.getID() + ")...");
|
||||
|
||||
Integer the_sigid = new Integer(sig.getID());
|
||||
if (sig_objects.get(the_sigid)!=null)
|
||||
throw new InternalStateError("SIGID " + the_sigid + " already exists...but it CAN'T HAVE!");
|
||||
|
||||
// throw an extra reference on it and dump it in the object cache
|
||||
sig.rd_addRef();
|
||||
sig_objects.put(the_sigid,sig);
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...registered new object");
|
||||
sig_refcache.register(sig);
|
||||
|
||||
} // end registerNewSIG
|
||||
|
||||
|
@ -1718,50 +1806,37 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
|||
|
||||
} // end canAccessFeature
|
||||
|
||||
public synchronized ConferenceData getConferenceDataObject(int confid) throws DataException
|
||||
public ConferenceData getConferenceDataObject(int confid) throws DataException
|
||||
{
|
||||
checkInitialized();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("getConferenceDataObject(" + confid + ")...");
|
||||
|
||||
Integer the_confid = new Integer(confid);
|
||||
ConferenceData cd = (ConferenceData)(conf_objects.get(the_confid));
|
||||
if (cd==null)
|
||||
{ // create a new ConferenceCoreData object and save it off
|
||||
cd = new ConferenceCoreData(this,datapool,confid);
|
||||
conf_objects.put(the_confid,cd);
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...created new object");
|
||||
try
|
||||
{ // delegate to the conf_refcache and conf_creator objects
|
||||
return (ConferenceData)(conf_refcache.getOrCreate(new Integer(confid),conf_creator));
|
||||
|
||||
} // end if
|
||||
} // end try
|
||||
catch (ReferencedDataBuilderException e)
|
||||
{ // this may be a DataException, or it may not
|
||||
Exception e2 = e.getTarget();
|
||||
if (e2 instanceof DataException)
|
||||
throw (DataException)e2;
|
||||
else
|
||||
{ // this is an extra reference to the ConferenceDataObject
|
||||
cd.rd_addRef();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...using cached object");
|
||||
throw new InternalStateError("unknown creation exception thrown in getConferenceDataObject: "
|
||||
+ e2.getClass().getName(),e2);
|
||||
|
||||
} // end else
|
||||
|
||||
return cd;
|
||||
} // end catch
|
||||
|
||||
} // end getConferenceDataObject
|
||||
|
||||
public synchronized void detachConferenceDataObject(int confid)
|
||||
public void detachConferenceDataObject(int confid)
|
||||
{
|
||||
checkInitialized();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("detachConferenceDataObject(" + confid + ")...");
|
||||
|
||||
Integer the_confid = new Integer(confid);
|
||||
ConferenceData cd = (ConferenceData)(conf_objects.get(the_confid));
|
||||
if (cd!=null)
|
||||
{ // remove it from our hashtable
|
||||
conf_objects.remove(the_confid);
|
||||
cd.rd_release();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...detached reference");
|
||||
|
||||
} // end if
|
||||
conf_refcache.detach(new Integer(confid));
|
||||
|
||||
} // end detachConferenceDataObject
|
||||
|
||||
|
@ -1793,21 +1868,13 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
|||
|
||||
} // end saveAuditRecord
|
||||
|
||||
public synchronized void registerNewConference(ConferenceData conf)
|
||||
public void registerNewConference(ConferenceData conf)
|
||||
{
|
||||
checkInitialized();
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("registerNewConference(" + conf.getID() + ")...");
|
||||
|
||||
Integer the_confid = new Integer(conf.getID());
|
||||
if (conf_objects.get(the_confid)!=null)
|
||||
throw new InternalStateError("ConfID " + the_confid + " already exists...but it CAN'T HAVE!");
|
||||
|
||||
// throw an extra reference on it and dump it in the object cache
|
||||
conf.rd_addRef();
|
||||
conf_objects.put(the_confid,conf);
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("...registered new object");
|
||||
conf_refcache.register(conf);
|
||||
|
||||
} // end registerNewConference
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ package com.silverwrist.venice.security;
|
|||
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import com.silverwrist.util.collections.*;
|
||||
import com.silverwrist.venice.db.SQLUtil;
|
||||
import com.silverwrist.venice.core.AuditData;
|
||||
import com.silverwrist.venice.core.DataException;
|
||||
|
@ -26,43 +27,6 @@ import com.silverwrist.venice.core.InternalStateError;
|
|||
|
||||
public class AuditRecord implements AuditData
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Private implementation of ReadOnlyVector
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static class ReadOnlyVector extends AbstractList
|
||||
{
|
||||
private Vector my_vec; // local vector
|
||||
|
||||
ReadOnlyVector(Vector vec)
|
||||
{
|
||||
my_vec = vec;
|
||||
my_vec.trimToSize();
|
||||
|
||||
} // end constructor
|
||||
|
||||
protected void finalize() throws Throwable
|
||||
{
|
||||
my_vec = null;
|
||||
super.finalize();
|
||||
|
||||
} // end finalize
|
||||
|
||||
public Object get(int index)
|
||||
{
|
||||
return my_vec.elementAt(index);
|
||||
|
||||
} // end get
|
||||
|
||||
public int size()
|
||||
{
|
||||
return my_vec.size();
|
||||
|
||||
} // end size
|
||||
|
||||
} // end class ReadOnlyVector
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Internal class for caching description strings on load
|
||||
*--------------------------------------------------------------------------------
|
||||
|
|
|
@ -85,12 +85,6 @@ public class Capability implements SecLevels
|
|||
|
||||
} // end showHiddenSIGMembers
|
||||
|
||||
public static boolean canCreateSIG(int level)
|
||||
{
|
||||
return (level>=GLOBAL_NORMAL);
|
||||
|
||||
} // end canCreateSIG
|
||||
|
||||
public static boolean hideHiddenConferences(int level)
|
||||
{
|
||||
return (level<SIG_ANYADMIN);
|
||||
|
|
|
@ -18,46 +18,10 @@
|
|||
package com.silverwrist.venice.security;
|
||||
|
||||
import java.util.*;
|
||||
import com.silverwrist.util.collections.*;
|
||||
|
||||
public class Role implements Comparable, SecLevels
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Private implementation of ReadOnlyVector
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static class ReadOnlyVector extends AbstractList
|
||||
{
|
||||
private Vector my_vec; // local vector
|
||||
|
||||
ReadOnlyVector(Vector vec)
|
||||
{
|
||||
my_vec = vec;
|
||||
my_vec.trimToSize();
|
||||
|
||||
} // end constructor
|
||||
|
||||
protected void finalize() throws Throwable
|
||||
{
|
||||
my_vec = null;
|
||||
super.finalize();
|
||||
|
||||
} // end finalize
|
||||
|
||||
public Object get(int index)
|
||||
{
|
||||
return my_vec.elementAt(index);
|
||||
|
||||
} // end get
|
||||
|
||||
public int size()
|
||||
{
|
||||
return my_vec.size();
|
||||
|
||||
} // end size
|
||||
|
||||
} // end class ReadOnlyVector
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Static data members
|
||||
*--------------------------------------------------------------------------------
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<% if (rdat.useHTMLComments()) { %><!-- Top content panel --><% } %>
|
||||
<% if (data.displayWelcome()) { %>
|
||||
<% rdat.writeContentHeader(out,rdat.getStockMessage("welcome-top"),null); %>
|
||||
<%= rdat.getStdFontTag(null,1) %><%= rdat.getStockMessage(out,"welcome"); %></FONT><P>
|
||||
<%= rdat.getStdFontTag(null,1) %><%= rdat.getStockMessage("welcome") %></FONT><P>
|
||||
<% } // end if %>
|
||||
<% rdat.writeContentHeader(out,rdat.getStockMessage("currents-top"),null); %>
|
||||
<% int ntp = data.getNumTopPosts(); %>
|
||||
|
|
Loading…
Reference in New Issue
Block a user