MetaObjectFactory.java
/* 
 * ################################################################
 
 * ProActive: The Java(TM) library for Parallel, Distributed, 
 *            Concurrent computing with Security and Mobility
 
 * Copyright (C) 1997-2007 INRIA/University of Nice-Sophia Antipolis
 * Contact: proactive@objectweb.org
 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or any later version.
 *  
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
 * USA
 *  
 *  Initial developer(s):               The ProActive Team
 *                        http://www.inria.fr/oasis/ProActive/contacts.html
 *  Contributor(s): 
 
 * ################################################################
 */ 
package org.objectweb.proactive.core.body;

import java.util.Map;

import org.objectweb.proactive.core.body.ft.protocols.FTManagerFactory;
import org.objectweb.proactive.core.body.migration.MigrationManagerFactory;
import org.objectweb.proactive.core.body.reply.ReplyReceiverFactory;
import org.objectweb.proactive.core.body.request.RequestFactory;
import org.objectweb.proactive.core.body.request.RequestQueueFactory;
import org.objectweb.proactive.core.body.request.RequestReceiverFactory;
import org.objectweb.proactive.core.component.identity.ProActiveComponentFactory;
import org.objectweb.proactive.core.group.spmd.ProActiveSPMDGroupManagerFactory;
import org.objectweb.proactive.core.util.ThreadStoreFactory;
import org.objectweb.proactive.ext.security.ProActiveSecurityManager;


/**
 <p>
 * A class implementing this interface if able to provide instances of factories
 * that can create MetaObjects used in the Body.
 </p>
 *
 @author  ProActive Team
 @version 1.0,  2002/05
 @since   ProActive 0.9.2
 */
public interface MetaObjectFactory {

    /**
     * Creates or reuses a RequestFactory
     @return a new or existing RequestFactory
     @see RequestFactory
     */
    public RequestFactory newRequestFactory();

    /**
     * Creates or reuses a ReplyReceiverFactory
     @return a new or existing ReplyReceiverFactory
     @see ReplyReceiverFactory
     */
    public ReplyReceiverFactory newReplyReceiverFactory();

    /**
     * Creates or reuses a RequestReceiverFactory
     @return a new or existing RequestReceiverFactory
     @see RequestReceiverFactory
     */
    public RequestReceiverFactory newRequestReceiverFactory();

    /**
     * Creates or reuses a RequestQueueFactory
     @return a new or existing RequestQueueFactory
     @see RequestQueueFactory
     */
    public RequestQueueFactory newRequestQueueFactory();

    /**
     * Creates or reuses a MigrationManagerFactory
     @return a new or existing MigrationManagerFactory
     @see MigrationManagerFactory
     */
    public MigrationManagerFactory newMigrationManagerFactory();

    /**
     * Creates or reuses a RemoteBodyFactory
     @return a new or existing RemoteBodyFactory
     @see RemoteBodyFactory
     */
    public RemoteBodyFactory newRemoteBodyFactory();

    /**
     * Creates or reuses a ThreadStoreFactory
     @return a new or existing ThreadStoreFactory
     @see ThreadStoreFactory
     */
    public ThreadStoreFactory newThreadStoreFactory();

    // GROUP

    /**
     * Creates or reuses a ProActiveGroupManagerFactory
     @return a new ProActiveGroupManagerFactory
     */
    public ProActiveSPMDGroupManagerFactory newProActiveSPMDGroupManagerFactory();

    /**
     * creates a ProActiveComponentFactory
     @return a new ProActiveComponentFactory
     */

    // COMPONENTS
    public ProActiveComponentFactory newComponentFactory();

    /**
     * accessor to the parameters of the factory (object-based configurations)
     @return the parameters of the factory
     */

    // COMPONENTS
    public Map getParameters();

    //SECURITY

    /**
     * Creates the ProActiveSecurityManager
     @return a new ProActiveSecurityManager
     @see ProActiveSecurityManager
     */
    public ProActiveSecurityManager getProActiveSecurityManager();

    public void setProActiveSecurityManager(ProActiveSecurityManager psm);

    public Object clone() throws CloneNotSupportedException;

    // FAULT-TOLERANCE

    /**
     * Creates the fault-tolerance manager.
     @return the fault-tolerance manager.
     */
    public FTManagerFactory newFTManagerFactory();
}