Package org.jacorb.dds

Source Code of org.jacorb.dds.DomainParticipantFactoryImpl

/*
*  DDS (Data Distribution Service) for JacORB
*
* Copyright (C) 2005-2014 Gerald Brose / The JacORB Team.
* allaoui <fouad.allaoui@gmail.com>, Didier Donsez (didier.donsez@ieee.org)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Coontact: Ahmed yehdih <ahmed.yehdih@gmail.com>, fouad allaoui
* <fouad.allaoui@gmail.com>, Didier Donsez (didier.donsez@ieee.org)
* Contributor(s)
*
**/
package org.jacorb.dds;

import java.util.Iterator;
import java.util.Vector;

import org.jacorb.events.EventChannelImpl;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.dds.DomainParticipant;
import org.omg.dds.DomainParticipantFactory;
import org.omg.dds.DomainParticipantFactoryPOA;
import org.omg.dds.DomainParticipantHelper;
import org.omg.dds.RETCODE_OK;
import org.omg.dds.RETCODE_PRECONDITION_NOT_MET;

/**
* The sole purpose of this class is to allow the creation and destruction of
* DomainParticipant objects. DomainParticipantFactory itself has no factory. It
* is either a pre-existing singleton object that can be accessed by means of
* the get_instance class operation on the DomainParticipantFactory.
*/
public class DomainParticipantFactoryImpl extends DomainParticipantFactoryPOA
{

    private org.omg.CORBA.ORB orb;

    private org.omg.PortableServer.POA poa;

    private org.omg.dds.DomainParticipantQos defaultqos;

    private ThreadSubscriber Consummer;

    private Vector allParticipant;

    private DomainParticipantFactoryImpl impl;

    private DomainParticipantFactory ref;

    /**
     * Sets the pOA attribute of this object
     *
     * @param poa
     *            The new pOA value
     */
    public void setPOA (org.omg.PortableServer.POA poa)
    {
        this.poa = poa;
    }

    /**
     * Sets the oRB attribute of this object
     *
     * @param orb
     *            The new oRB value
     */
    public void setORB (org.omg.CORBA.ORB orb)
    {
        this.orb = orb;
    }

    public DomainParticipantFactoryImpl (org.omg.CORBA.ORB orb,
            org.omg.PortableServer.POA poa)
    {
        this.orb = orb;
        this.poa = poa;
        try
        {
            NamingContextExt nc = NamingContextExtHelper.narrow (orb.resolve_initial_references ("NameService"));
            EventChannelImpl channel = new EventChannelImpl (orb, poa);
            org.omg.CORBA.Object o = poa.servant_to_reference (channel);
            /* event channel used by event service */
            nc.rebind (nc.to_name ("eventchannel"), o);
        }
        catch (Exception e)
        {

        }
        allParticipant = new Vector ();
        /* thread send message for all suscriber */
        Consummer = new ThreadSubscriber (orb, poa);
        Consummer.start ();
    }

    /**
     * This operation creates a new DomainParticipant object. The
     * DomainParticipant signifies that the calling application intends to join
     * the Domain identified by the domainId argument.
     */
    public org.omg.dds.DomainParticipant create_participant (int domainId,
            org.omg.dds.DomainParticipantQos qos,
            org.omg.dds.DomainParticipantListener a_listener)
    {

        org.omg.dds.DomainParticipant ref = null;
        org.jacorb.dds.DomainParticipantImpl impl = new org.jacorb.dds.DomainParticipantImpl (domainId,
                                                                                              qos,
                                                                                              a_listener);
        impl.setORB (orb);
        impl.setPOA (poa);

        try
        {
            // get the root naming context

            ref = has_domainId (domainId);
            if (ref != null) return ref;
            org.omg.CORBA.Object objRef = orb.resolve_initial_references ("NameService");
            // Use NamingContextExt which is part of the Interoperable
            // Naming Service (INS) specification.
            NamingContextExt ncRef = NamingContextExtHelper.narrow (objRef);
            // get object reference from the servant (and implicitly register
            // it)
            org.omg.CORBA.Object oref = poa.servant_to_reference (impl);
            ref = org.omg.dds.DomainParticipantHelper.narrow (oref);

            if (ncRef != null)
            {
                // bind the Object Reference in Naming
                NameComponent path[] = ncRef.to_name (new Integer (domainId).toString ());
                ncRef.rebind (path, ref);
                allParticipant.add (ref);
                Consummer.add (ref);
            }
        }
        catch (Exception e)
        {
        }
        return ref;
    }

    /**
     * This operation deletes an existing DomainParticipant. This operation can
     * only be invoked if all domain entities belonging to the participant have
     * already been deleted.
     *
     * @param a_participant
     * @return RETCODE_OK.value if succes Otherwise the error
     *         PRECONDITION_NOT_MET is returned.
     */
    public int delete_participant (org.omg.dds.DomainParticipant a_participant)
    {

        try
        {
            boolean delete_ok = ((DomainParticipantImpl) poa.reference_to_servant (a_participant)).isDeletable ();
            if (delete_ok)
            {
                org.omg.CORBA.Object objRef = orb.resolve_initial_references ("NameService");
                // Use NamingContextExt which is part of the Interoperable
                // Naming Service (INS) specification.
                NamingContextExt ncRef = NamingContextExtHelper.narrow (objRef);
                String id = new Integer (a_participant.get_domain_id ()).toString ();
                NameComponent path[] = ncRef.to_name (id);
                ncRef.unbind (path);
            }
            else
            {
                return RETCODE_PRECONDITION_NOT_MET.value;
            }
        }
        catch (Exception e)
        {
            System.err.println ("ERROR: " + e);
            e.printStackTrace (System.out);
        }

        return RETCODE_OK.value;
    }

    /**
     * @param domainId
     * @return a participant has a same domainId
     */
    public DomainParticipant has_domainId (int domainId)
    {
        Iterator it = allParticipant.iterator ();
        DomainParticipant temp;
        while (it.hasNext ())
        {
            temp = (DomainParticipant) it.next ();
            if (temp.get_domain_id () == domainId)
            {
                return temp;
            }
        }
        return null;
    }

    /**
     * @param domainId
     * @return a Participant has a same domaiId
     */
    public org.omg.dds.DomainParticipant lookup_participant (int domainId)
    {

        org.omg.dds.DomainParticipant ref = null;
        try
        {
            org.omg.CORBA.Object objRef = orb.resolve_initial_references ("NameService");
            // Use NamingContextExt instead of NamingContext. This is
            // part of the Interoperable naming Service.
            NamingContextExt ncRef = NamingContextExtHelper.narrow (objRef);
            ref = DomainParticipantHelper.narrow (ncRef.resolve_str (new Integer (domainId).toString ()));
        }

        catch (Exception e)
        {
            System.err.println ("ERROR: " + e);
            e.printStackTrace (System.out);
        }
        return ref;
    }

    /**
     * @param qos
     * @return
     */
    public int set_default_participant_qos (org.omg.dds.DomainParticipantQos qos)
    {

        this.defaultqos = qos;
        return 0;
    }

    public void get_default_participant_qos (
            org.omg.dds.DomainParticipantQosHolder qos)
    {

        qos.value = this.defaultqos;
    }

    /**
     * @return Returns the orb.
     */
    public org.omg.CORBA.ORB getOrb ()
    {
        return orb;
    }

    /**
     * @return Returns the poa.
     */
    public org.omg.PortableServer.POA getPoa ()
    {
        return poa;
    }
}
TOP

Related Classes of org.jacorb.dds.DomainParticipantFactoryImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.