venice-dynamo-rewrite/src/conferencing-module/com/silverwrist/venice/conf/module/Controller.java
2003-06-29 07:03:59 +00:00

207 lines
7.5 KiB
Java

/*
* 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) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.conf.module;
import java.security.Principal;
import java.security.acl.*;
import java.util.*;
import org.apache.log4j.Logger;
import com.silverwrist.dynamo.except.*;
import com.silverwrist.dynamo.iface.*;
import com.silverwrist.dynamo.security.SecurityReferenceMonitor;
import com.silverwrist.venice.except.*;
import com.silverwrist.venice.iface.*;
import com.silverwrist.venice.obj.*;
import com.silverwrist.venice.util.*;
import com.silverwrist.venice.conf.ConfNamespaces;
import com.silverwrist.venice.conf.iface.*;
class Controller implements CommunityServiceController
{
/*--------------------------------------------------------------------------------
* Static data members
*--------------------------------------------------------------------------------
*/
private static Logger logger = Logger.getLogger(Controller.class);
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private DynamicImplCommunityServiceController m_dobj;
private UseCount m_uc;
private ConferenceAccessObject m_access;
private String m_srm_name;
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
Controller(UseCount uc, ConferenceAccessObject access, String srm_name)
{
m_dobj = new DynamicImplCommunityServiceController(this);
m_uc = uc;
uc.incrementUseCount();
m_access = access;
m_srm_name = srm_name;
} // end constructor
/*--------------------------------------------------------------------------------
* Implementations from interface DynamicObject
*--------------------------------------------------------------------------------
*/
public Object get(String property_name) throws DynamicObjectException
{
return m_dobj.get(property_name);
} // end get
public void set(String property_name, Object value) throws DynamicObjectException
{
m_dobj.set(property_name,value);
} // end set
public Object call(String method_name, Object[] parameters) throws DynamicObjectException
{
return m_dobj.call(method_name,parameters);
} // end call
public Object call(String method_name, List parameters) throws DynamicObjectException
{
return m_dobj.call(method_name,parameters);
} // end call
public DynamicClass getDClass()
{
return m_dobj.getDClass();
} // end getDClass
/*--------------------------------------------------------------------------------
* Implementations from interface ComponentShutdown
*--------------------------------------------------------------------------------
*/
public void shutdown()
{
m_uc.decrementUseCount();
m_uc = null;
m_access = null;
} // end shutdown
/*--------------------------------------------------------------------------------
* Implementations from interface CommunityServiceController
*--------------------------------------------------------------------------------
*/
public String getDescription()
{
ResourceBundle b = ResourceBundle.getBundle("com.silverwrist.venice.conf.module.ModuleMessages");
return b.getString("description");
} // end getDescription
public void addServiceToCommunity(Request req, VeniceCommunity comm)
throws DatabaseException, CommunityServiceException
{
if (logger.isDebugEnabled())
logger.debug("[Conferencing service] addServiceToCommunity(" + req.toString() + ", " + comm.getName() + ")");
AclEditHelper helper = new AclEditHelper(req,m_srm_name);
DynamoUser hostuser = comm.getHostUser();
DynamoGroup hostgroup = comm.getHostGroup();
try
{ // add the necessary default permissions to the community ACL
DynamoAcl acl = comm.getAcl();
helper.addPermission(hostuser,acl,hostgroup,false,ConfNamespaces.PERMISSIONS_NAMESPACE,"create");
helper.addPermission(hostuser,acl,hostgroup,false,ConfNamespaces.PERMISSIONS_NAMESPACE,"manage.order");
helper.addPermission(hostuser,acl,hostgroup,false,ConfNamespaces.PERMISSIONS_NAMESPACE,"see.hidden");
helper.addPermission(hostuser,acl,hostgroup,false,ConfNamespaces.PERMISSIONS_NAMESPACE,"conference.sequence");
helper.addPermission(hostuser,acl,hostgroup,false,ConfNamespaces.PERMISSIONS_NAMESPACE,"hide.show");
} // end try
catch (AclNotFoundException e)
{ // what happened to the community's ACL?
CommunityServiceException cse = new CommunityServiceException(Controller.class,"ModuleMessages","cse.noAcl",e);
cse.setParameter(0,comm.getName());
throw cse;
} // end catch
catch (NotOwnerException e)
{ // damn! we need to be the ACL owner!
CommunityServiceException cse = new CommunityServiceException(Controller.class,"ModuleMessages",
"cse.notAclOwner",e);
cse.setParameter(0,comm.getName());
throw cse;
} // end catch
} // end addServiceToCommunity
public void removeServiceFromCommunity(Request req, VeniceCommunity comm)
throws DatabaseException, CommunityServiceException
{
if (logger.isDebugEnabled())
logger.debug("[Conferencing service] removeServiceFromCommunity(" + req.toString() + ", " + comm.getName()
+ ")");
AclEditHelper helper = new AclEditHelper(req,m_srm_name);
DynamoUser hostuser = comm.getHostUser();
try
{ // remove permissions from the community ACL
DynamoAcl acl = comm.getAcl();
helper.stripPermission(hostuser,acl,ConfNamespaces.PERMISSIONS_NAMESPACE,"create");
helper.stripPermission(hostuser,acl,ConfNamespaces.PERMISSIONS_NAMESPACE,"manage.order");
helper.stripPermission(hostuser,acl,ConfNamespaces.PERMISSIONS_NAMESPACE,"see.hidden");
helper.stripPermission(hostuser,acl,ConfNamespaces.PERMISSIONS_NAMESPACE,"conference.sequence");
helper.stripPermission(hostuser,acl,ConfNamespaces.PERMISSIONS_NAMESPACE,"hide.show");
} // end try
catch (AclNotFoundException e)
{ // what happened to the community's ACL?
CommunityServiceException cse = new CommunityServiceException(Controller.class,"ModuleMessages","cse.noAcl",e);
cse.setParameter(0,comm.getName());
throw cse;
} // end catch
catch (NotOwnerException e)
{ // damn! we need to be the ACL owner!
CommunityServiceException cse = new CommunityServiceException(Controller.class,"ModuleMessages",
"cse.notAclOwner",e);
cse.setParameter(0,comm.getName());
throw cse;
} // end catch
} // end removeServiceFromCommunity
public DynamicObject getAccessObject()
{
return m_access;
} // end getAccessObject
} // end class Controller