tied the UniStore into the Index Manager by providing resolvers for the Index

Manager to use to retrieve UniStore messages
This commit is contained in:
Eric J. Bowersox 2003-06-14 08:30:48 +00:00
parent 3328e56f07
commit ce27befa54
4 changed files with 141 additions and 0 deletions

View File

@ -92,4 +92,10 @@ public interface Namespaces
public static final String UNISTORE_PERMISSIONS_NAMESPACE =
"http://www.silverwrist.com/NS/dynamo/2003/06/10/unistore.permissions";
/**
* Default resolvers namespace for the Index Manager.
*/
public static final String DEFAULT_INDEX_RESOLVERS_NAMESPACE =
"http://www.silverwrist.com/NS/dynamo/2003/06/14/std.index.resolvers";
} // end interface Namespaces

View File

@ -55,4 +55,10 @@ public class IndexException extends ExternalException
} // end constructor
public IndexException(DatabaseException de)
{
super(de);
} // end constructor
} // end class IndexException

View File

@ -22,6 +22,7 @@ import org.apache.log4j.Logger;
import org.w3c.dom.*;
import com.silverwrist.util.*;
import com.silverwrist.util.xml.*;
import com.silverwrist.dynamo.Namespaces;
import com.silverwrist.dynamo.db.NamespaceCache;
import com.silverwrist.dynamo.db.UserManagement;
import com.silverwrist.dynamo.event.*;
@ -32,6 +33,118 @@ import com.silverwrist.dynamo.util.*;
public class UniStoreManager implements NamedObject, ComponentInitialize, ComponentShutdown, UniStore
{
/*--------------------------------------------------------------------------------
* Internal class for resolving message references
*--------------------------------------------------------------------------------
*/
private class UniStoreResolver implements IndexedObjectResolver
{
/*====================================================================
* Constructor
*====================================================================
*/
UniStoreResolver()
{ // do nothing
} // end constructor
/*====================================================================
* Implementations from interface IndexedObjectResolver
*====================================================================
*/
public String getResolverTag(Object obj) throws IndexException
{
if (obj instanceof UniStoreMessage)
return String.valueOf(((UniStoreMessage)obj).getMessageID());
else if (obj instanceof UniStorePart)
return String.valueOf(((UniStorePart)obj).getMessageID());
else
throw new IndexException(UniStoreManager.class,"UniStoreMessages","resolver.must.be.message");
} // end getResolverTag
public Object resolveObject(String tag) throws IndexException
{
try
{ // parse tag into longint, get the message
return UniStoreManager.this.getMessage(Long.parseLong(tag));
} // end try
catch (NumberFormatException nfe)
{ // not a valid number
throw new IndexException(UniStoreManager.class,"UniStoreMessages","invalid.tag");
} // end catch
catch (DatabaseException de)
{ // just translate it straight across
throw new IndexException(de);
} // end catch
} // end resolveObject
} // end class UniStoreResolver
/*--------------------------------------------------------------------------------
* Internal class for resolving message part references
*--------------------------------------------------------------------------------
*/
private class UniStorePartResolver implements IndexedObjectResolver
{
/*====================================================================
* Constructor
*====================================================================
*/
UniStorePartResolver()
{ // do nothing
} // end constructor
/*====================================================================
* Implementations from interface IndexedObjectResolver
*====================================================================
*/
public String getResolverTag(Object obj) throws IndexException
{
if (obj instanceof UniStoreTextPart)
{ // return the message ID and the part namespace and name
QualifiedNameKey qname = ((UniStorePart)obj).getPartIdentity();
return String.valueOf(((UniStorePart)obj).getMessageID()) + "|" + qname.getNamespace() + "|" + qname.getName();
} // end if
else
throw new IndexException(UniStoreManager.class,"UniStoreMessages","resolver.must.be.textpart");
} // end getResolverTag
public Object resolveObject(String tag) throws IndexException
{
try
{ // break up the tag and resolve it into a UniStoreTextPart
String[] bits = StringUtils.split1(tag,'|',3);
UniStoreMessage msg = UniStoreManager.this.getMessage(Long.parseLong(bits[0]));
return msg.getTextPart(bits[1],bits[2]);
} // end try
catch (NumberFormatException nfe)
{ // not a valid number
throw new IndexException(UniStoreManager.class,"UniStoreMessages","invalid.tag");
} // end catch
catch (DatabaseException de)
{ // just translate it straight across
throw new IndexException(de);
} // end catch
} // end resolveObject
} // end class UniStorePartResolver
/*--------------------------------------------------------------------------------
* Static data members
*--------------------------------------------------------------------------------
@ -57,6 +170,8 @@ public class UniStoreManager implements NamedObject, ComponentInitialize, Compon
private UserManagement m_users; // user management object
private PostDynamicUpdate m_post; // dynamic update posting
private HardSoftCache m_msgcache; // message cache
private ComponentShutdown m_res1;
private ComponentShutdown m_res2;
/*--------------------------------------------------------------------------------
* Constructor
@ -158,6 +273,13 @@ public class UniStoreManager implements NamedObject, ComponentInitialize, Compon
m_users = (UserManagement)(GetObjectUtils.getDynamoComponent(services,UserManagement.class,users_name));
m_post = (PostDynamicUpdate)(services.queryService(PostDynamicUpdate.class));
// Register our index resolvers.
IndexManagerConfig imcfg = (IndexManagerConfig)(services.queryService(IndexManagerConfig.class));
m_res1 = imcfg.registerResolver(Namespaces.DEFAULT_INDEX_RESOLVERS_NAMESPACE,"unistore.message",
new UniStoreResolver());
m_res2 = imcfg.registerResolver(Namespaces.DEFAULT_INDEX_RESOLVERS_NAMESPACE,"unistore.message.part",
new UniStorePartResolver());
} // end initialize
/*--------------------------------------------------------------------------------
@ -167,6 +289,10 @@ public class UniStoreManager implements NamedObject, ComponentInitialize, Compon
public void shutdown()
{
m_res1.shutdown();
m_res1 = null;
m_res2.shutdown();
m_res2 = null;
m_msgcache.clear();
m_post = null;
m_srm = null;

View File

@ -32,3 +32,6 @@ no.deletePart=You are not authorized to delete a part from message #{0} in the U
part.deleted=This part has been deleted.
no.deleteMessage=You are not authorized to delete message #{0} in the Universal Message Store.
message.deleted=This message has been deleted.
resolver.must.be.message=The object passed to the resolver must be a UniStoreMessage.
invalid.tag=The message tag passed to the resolver was invalid.
resolver.must.be.textpart=The object passed to the resolver must be a UniStoreTextPart.