/* * 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.orb.etf; import org.jacorb.config.Configurable; import org.jacorb.config.Configuration; import org.jacorb.config.ConfigurationException; import org.omg.ETF.Connection; import org.omg.ETF.Listener; import org.omg.ETF.Profile; import org.omg.IOP.TaggedComponentSeqHolder; import org.omg.IOP.TaggedProfileHolder; import org.omg.RTCORBA.ProtocolProperties; /** * @author Andre Spiegel */ public abstract class FactoriesBase extends org.omg.ETF._FactoriesLocalBase implements Configurable { protected org.jacorb.config.Configuration configuration; public void configure(Configuration configuration) throws ConfigurationException { if (configuration == null) { throw new IllegalArgumentException(); } this.configuration = (org.jacorb.config.Configuration)configuration; } /** * ETF defined operation to create a connection. */ public Connection create_connection(ProtocolProperties props) { Connection result = create_connection_internal (); configureResult (result); return result; } /** * Sub-classes should return the correct type of connection */ protected abstract Connection create_connection_internal (); /** * ETF defined operation to create a connection. */ public Listener create_listener(ProtocolProperties props, int stacksize, short base_priority) { return create_listener_internal (); } /** * Sub-classes should return the correct type of listener */ protected abstract Listener create_listener_internal(); public abstract Profile demarshal_profile(TaggedProfileHolder tagged_profile, TaggedComponentSeqHolder components); // Although not part of the ETF IDL for a Factory object, this is the best // place to add a new method for creating protocol address instances public ProtocolAddressBase create_protocol_address(String addr) throws ConfigurationException { final int address_start = this.match_tag(addr); final ProtocolAddressBase address = create_address_internal(); address.configure(configuration); if (address_start >= 0) { // general form is "prot://address" if (!address.fromString(addr.substring(address_start + 2))) { throw new org.omg.CORBA.INTERNAL("Invalid protocol address string: " + address); } } return address; } /** * Sub-classes should return the correct type of address */ protected abstract ProtocolAddressBase create_address_internal (); public int match_tag(String address) { return -1; } /** * Sub-classes should implement corbaloc decoding */ public abstract Profile decode_corbaloc (String corbaloc); /** * If the object is configurable call configure on it. * @param o */ protected void configureResult (Object o) { if (o instanceof Configurable) { try { ((Configurable)o).configure(configuration); } catch( ConfigurationException e ) { throw new org.omg.CORBA.INTERNAL("ConfigurationException: " + e.toString()); } } } }