com.silverwrist.venice.conf.impl.ConferenceManager.java Source code

Java tutorial

Introduction

Here is the source code for com.silverwrist.venice.conf.impl.ConferenceManager.java

Source

/*
 * 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.impl;

import java.security.acl.AclNotFoundException;
import java.util.*;
import org.apache.commons.collections.*;
import com.silverwrist.dynamo.db.NamespaceCache;
import com.silverwrist.dynamo.db.UserManagement;
import com.silverwrist.dynamo.except.*;
import com.silverwrist.dynamo.iface.*;
import com.silverwrist.dynamo.security.SecurityReferenceMonitor;
import com.silverwrist.venice.iface.*;
import com.silverwrist.venice.conf.ConfNamespaces;
import com.silverwrist.venice.conf.iface.*;
import com.silverwrist.venice.conf.obj.*;

public class ConferenceManager implements ConferenceAccessObject {
    /*--------------------------------------------------------------------------------
     * Attributes
     *--------------------------------------------------------------------------------
     */

    private DynamicImplConferenceAccess m_dobj; // DynamicObject implementation
    private UseCount m_uc; // use count interface
    private ConferenceManagerOps m_ops; // operations object
    private NamespaceCache m_nscache; // namespace cache
    private SecurityReferenceMonitor m_srm; // security reference monitor
    private UserManagement m_users; // user management object
    private ReferenceMap m_confs; // cache for conference objects

    /*--------------------------------------------------------------------------------
     * Constructor
     *--------------------------------------------------------------------------------
     */

    public ConferenceManager(UseCount uc, DBConnectionPool pool, NamespaceCache nscache,
            SecurityReferenceMonitor srm, UserManagement users) throws ModuleException {
        try { // initialize everything
            m_dobj = new DynamicImplConferenceAccess(this);
            m_uc = uc;
            uc.incrementUseCount();
            m_ops = ConferenceManagerOps.get(pool);

        } // end try
        catch (ConfigException e) { // convert it to a ModuleException
            uc.decrementUseCount();
            throw new ModuleException(e);

        } // end catch

        m_nscache = nscache;
        m_srm = srm;
        m_users = users;
        m_confs = new ReferenceMap(ReferenceMap.HARD, ReferenceMap.SOFT);

    } // end constructor

    /*--------------------------------------------------------------------------------
     * Internal operations
     *--------------------------------------------------------------------------------
     */

    private final ConferenceImpl loadConference(Map params) {
        Integer key = (Integer) (params.get(ConferenceManagerOps.KEY_CONFID));
        ConferenceImpl rc = (ConferenceImpl) (m_confs.get(key));
        if (rc == null) { // create a new conference implementation object and save it
            rc = new ConferenceImpl(m_ops.getConferenceOps(), m_nscache, m_srm, m_users, params);
            m_confs.put(key, rc);

        } // end if

        return rc;

    } // end loadConference

    /*--------------------------------------------------------------------------------
     * 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 ConferenceAccessObject
     *--------------------------------------------------------------------------------
     */

    public List getConferences(DynamoUser user, VeniceCommunity comm) throws DatabaseException {
        boolean show_hidden = false;
        try { // do we want to show hidden conferences?
            show_hidden = comm.getAcl().testPermission(user, ConfNamespaces.PERMISSIONS_NAMESPACE, "see.hidden");

        } // end try
        catch (AclNotFoundException e) { // convert the AclNotFoundException
            DatabaseException de = new DatabaseException(ConferenceManager.class, "ConferenceMessages",
                    "no.community.acl", e);
            de.setParameter(0, comm.getName());
            throw de;

        } // end catch

        List in_list = m_ops.getConferences(comm.getCID());
        if (in_list.isEmpty())
            return Collections.EMPTY_LIST;

        ArrayList rc = new ArrayList();
        Iterator it = in_list.iterator();
        while (it.hasNext()) { // get each data element and convert it
            Map d = (Map) (it.next());
            if (show_hidden || !(((Boolean) (d.get(ConferenceManagerOps.KEY_HIDE))).booleanValue())) { // skip hidden conferences if we don't have the "show hidden" permission
                ConferenceImpl conf = loadConference(d);
                rc.add(new LinkedConferenceImpl(m_ops.getLinkedConferenceOps(), conf, comm, m_srm, d));

            } // end if

        } // end while

        if (rc.isEmpty())
            return Collections.EMPTY_LIST;
        rc.trimToSize();
        return Collections.unmodifiableList(rc);

    } // end getConferences

    public VeniceConference getConference(int confid) throws DatabaseException {
        Map d = m_ops.getConferenceData(confid);
        if (d == null) { // throw the not-found exception
            DatabaseException de = new DatabaseException(ConferenceManager.class, "ConferenceMessages",
                    "confid.notfound");
            de.setParameter(0, String.valueOf(confid));
            throw de;

        } // end if

        return loadConference(d);

    } // end getConference

    public VeniceConference getConference(String alias) throws DatabaseException {
        Map d = m_ops.getConferenceData(alias);
        if (d == null) { // throw the not-found exception
            DatabaseException de = new DatabaseException(ConferenceManager.class, "ConferenceMessages",
                    "confalias.notfound");
            de.setParameter(0, alias);
            throw de;

        } // end if

        return loadConference(d);

    } // end getConference

    public VeniceLinkedConference getLinkedConference(VeniceCommunity comm, int confid) throws DatabaseException {
        Map d = m_ops.getConferenceData(comm.getCID(), confid);
        if (d == null) { // throw the not-found exception
            DatabaseException de = new DatabaseException(ConferenceManager.class, "ConferenceMessages",
                    "confid.comm.notfound");
            de.setParameter(0, String.valueOf(confid));
            de.setParameter(1, comm.getName());
            throw de;

        } // end if

        ConferenceImpl conf = loadConference(d);
        return new LinkedConferenceImpl(m_ops.getLinkedConferenceOps(), conf, comm, m_srm, d);

    } // end getLinkedConference

    public VeniceLinkedConference getLinkedConference(VeniceCommunity comm, String alias) throws DatabaseException {
        Map d = m_ops.getConferenceData(comm.getCID(), alias);
        if (d == null) { // throw the not-found exception
            DatabaseException de = new DatabaseException(ConferenceManager.class, "ConferenceMessages",
                    "confalias.comm.notfound");
            de.setParameter(0, alias);
            de.setParameter(1, comm.getName());
            throw de;

        } // end if

        ConferenceImpl conf = loadConference(d);
        return new LinkedConferenceImpl(m_ops.getLinkedConferenceOps(), conf, comm, m_srm, d);

    } // end getLinkedConference

    /*--------------------------------------------------------------------------------
     * External operations
     *--------------------------------------------------------------------------------
     */

    public void dispose() {
        m_nscache = null;
        m_srm = null;
        m_users = null;
        m_ops.dispose();
        m_ops = null;
        m_uc.decrementUseCount();
        m_uc = null;

    } // end dispose

} // end class ConferenceManager