/* * 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 . * * 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 , * 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