/* * 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); } }