Package org.jacorb.collection

Source Code of org.jacorb.collection.SequenceFactoryImpl

/*
*        JacORB - a free Java ORB
*
*   Copyright (C) 1999-2014 Gerald Brose / The JacORB Team.
*
*   This library 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 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
*   Library General Public License for more details.
*
*   You should have received a copy of the GNU Library General Public
*   License along with this library; if not, write to the Free
*   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
package org.jacorb.collection;

import org.jacorb.util.ObjectUtil;
import org.omg.CosCollection.CSequence;
import org.omg.CosCollection.CSequenceHelper;
import org.omg.CosCollection.CSequencePOATie;
import org.omg.CosCollection.Collection;
import org.omg.CosCollection.NVPair;
import org.omg.CosCollection.Operations;
import org.omg.CosCollection.OperationsOperations;
import org.omg.CosCollection.ParameterInvalid;
import org.omg.CosCollection.SequenceFactoryPOA;

public class SequenceFactoryImpl extends SequenceFactoryPOA implements
        IteratorFactory
{
    public final static String IMPL_CATEGORY = "ArrayBased";
    private org.omg.PortableServer.POA poa;

    public SequenceFactoryImpl (org.omg.PortableServer.POA poa)
    {
        this.poa = poa;
        try
        {
            poa.servant_to_reference (this);
        }
        catch (Exception e)
        {
            System.out.println ("Internal error: Can not activate factory");
            e.printStackTrace ();
            throw new org.omg.CORBA.INTERNAL ();
        }
    }

    public CSequence create (Operations ops, int expected_size)
    {
        return create (ops, expected_size, poa);
    }

    public CSequence create (String ops_class, int expected_size)
    {
        OperationsOperations ops = null;
        try
        {
            Class operation_class = ObjectUtil.classForName (ops_class);
            ops = (OperationsOperations) operation_class.newInstance ();
        }
        catch (Exception e)
        {
            System.out.println ("Internal error: Can not instantiate object of class \""
                    + ops_class + "\"");
            throw new org.omg.CORBA.INTERNAL ();
        }
        return create (ops, expected_size, poa);
    }

    public CSequence create (OperationsOperations ops, int expected_size,
            org.omg.PortableServer.POA poa)
    {
        SequenceImpl collection = new SequenceImpl (ops, poa, this,
                                                    expected_size);
        CSequence collection_ref = null;
        CSequencePOATie srvnt = new CSequencePOATie (collection);
        try
        {
            collection_ref = CSequenceHelper.narrow (poa.servant_to_reference (srvnt));
            collection.set_servant (srvnt);
        }
        catch (Exception e)
        {
            System.out.println ("Internal error: Can not Activate collection");
            e.printStackTrace ();
            throw new org.omg.CORBA.INTERNAL ();
        }
        return collection_ref;
    }

    public Collection generic_create (NVPair[] parameters)
            throws ParameterInvalid
    {
        NVPairManager pm = new NVPairManager (parameters);
        String implementation_category = pm.find_string_param (CollectionService.IMPL_CAT);
        if (implementation_category != null
                && !implementation_category.equals (IMPL_CATEGORY))
        {
            throw new ParameterInvalid (pm.find_param_idx (CollectionService.IMPL_CAT),
                                        "CollectionFactory : not support implementation category "
                                                + implementation_category);
        }
        Integer size = pm.find_ulong_param (CollectionService.EXP_SIZE);
        if (size == null)
        {
            size = new Integer (10);
        }
        Operations ops = pm.find_operations_param (CollectionService.OPERATIONS);
        if (ops == null)
        {
            String ops_class = pm.find_string_param (CollectionService.OPERATIONS_CLASS);
            if (ops_class == null)
            {
                throw new ParameterInvalid (pm.find_param_idx (CollectionService.OPERATIONS),
                                            "CollectionFactory: OPERATION object not defined");
            }
            return create (ops_class, size.intValue ());
        }
        else
        {
            return create (ops, size.intValue ());
        }
    }

    public PositionalIteratorImpl create_iterator (CollectionImpl collection,
            boolean read_only)
    {
        return create_iterator (collection, read_only, false);
    }

    public PositionalIteratorImpl create_iterator (CollectionImpl collection,
            boolean read_only, boolean reverse)
    {
        return new SequentialIteratorImpl ((SequentialCollectionImpl) collection,
                                           read_only, reverse);
    }
}





TOP

Related Classes of org.jacorb.collection.SequenceFactoryImpl

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.