207 lines
7.5 KiB
Java
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
|