IIOPFactories.java revision 608:7e06bf1dcb09
1/*
2 * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.corba.se.spi.ior.iiop ;
27
28import org.omg.CORBA_2_3.portable.InputStream ;
29
30import com.sun.corba.se.spi.ior.Identifiable ;
31import com.sun.corba.se.spi.ior.IdentifiableFactory ;
32import com.sun.corba.se.spi.ior.EncapsulationFactoryBase ;
33import com.sun.corba.se.spi.ior.ObjectId ;
34import com.sun.corba.se.spi.ior.ObjectKeyTemplate ;
35
36import com.sun.corba.se.spi.ior.iiop.IIOPAddress ;
37import com.sun.corba.se.spi.ior.iiop.IIOPProfileTemplate ;
38import com.sun.corba.se.spi.ior.iiop.GIOPVersion ;
39
40import com.sun.corba.se.spi.orb.ORB ;
41
42import com.sun.corba.se.impl.encoding.MarshalInputStream ;
43
44import com.sun.corba.se.impl.ior.iiop.IIOPAddressImpl ;
45import com.sun.corba.se.impl.ior.iiop.CodeSetsComponentImpl ;
46import com.sun.corba.se.impl.ior.iiop.AlternateIIOPAddressComponentImpl ;
47import com.sun.corba.se.impl.ior.iiop.JavaCodebaseComponentImpl ;
48import com.sun.corba.se.impl.ior.iiop.MaxStreamFormatVersionComponentImpl ;
49import com.sun.corba.se.impl.ior.iiop.JavaSerializationComponent;
50import com.sun.corba.se.impl.ior.iiop.ORBTypeComponentImpl ;
51import com.sun.corba.se.impl.ior.iiop.IIOPProfileImpl ;
52import com.sun.corba.se.impl.ior.iiop.IIOPProfileTemplateImpl ;
53import com.sun.corba.se.impl.ior.iiop.RequestPartitioningComponentImpl ;
54import com.sun.corba.se.impl.orbutil.ORBConstants;
55import com.sun.corba.se.impl.orbutil.ORBConstants;
56
57import org.omg.IOP.TAG_ALTERNATE_IIOP_ADDRESS ;
58import org.omg.IOP.TAG_CODE_SETS ;
59import org.omg.IOP.TAG_JAVA_CODEBASE ;
60import org.omg.IOP.TAG_RMI_CUSTOM_MAX_STREAM_FORMAT ;
61import org.omg.IOP.TAG_ORB_TYPE ;
62import org.omg.IOP.TAG_INTERNET_IOP ;
63
64/** This class provides all of the factories for the IIOP profiles and
65 * components.  This includes direct construction of profiles and templates,
66 * as well as constructing factories that can be registered with an
67 * IdentifiableFactoryFinder.
68 */
69public abstract class IIOPFactories {
70    private IIOPFactories() {}
71
72    public static IdentifiableFactory makeRequestPartitioningComponentFactory()
73    {
74        return new EncapsulationFactoryBase(ORBConstants.TAG_REQUEST_PARTITIONING_ID) {
75            public Identifiable readContents(InputStream in)
76            {
77                int threadPoolToUse = in.read_ulong();
78                Identifiable comp =
79                    new RequestPartitioningComponentImpl(threadPoolToUse);
80                return comp;
81            }
82        };
83    }
84
85    public static RequestPartitioningComponent makeRequestPartitioningComponent(
86            int threadPoolToUse)
87    {
88        return new RequestPartitioningComponentImpl(threadPoolToUse);
89    }
90
91    public static IdentifiableFactory makeAlternateIIOPAddressComponentFactory()
92    {
93        return new EncapsulationFactoryBase(TAG_ALTERNATE_IIOP_ADDRESS.value) {
94            public Identifiable readContents( InputStream in )
95            {
96                IIOPAddress addr = new IIOPAddressImpl( in ) ;
97                Identifiable comp =
98                    new AlternateIIOPAddressComponentImpl( addr ) ;
99                return comp ;
100            }
101        } ;
102    }
103
104    public static AlternateIIOPAddressComponent makeAlternateIIOPAddressComponent(
105        IIOPAddress addr )
106    {
107        return new AlternateIIOPAddressComponentImpl( addr ) ;
108    }
109
110    public static IdentifiableFactory makeCodeSetsComponentFactory()
111    {
112        return new EncapsulationFactoryBase(TAG_CODE_SETS.value) {
113            public Identifiable readContents( InputStream in )
114            {
115                return new CodeSetsComponentImpl( in ) ;
116            }
117        } ;
118    }
119
120    public static CodeSetsComponent makeCodeSetsComponent( ORB orb )
121    {
122        return new CodeSetsComponentImpl( orb ) ;
123    }
124
125    public static IdentifiableFactory makeJavaCodebaseComponentFactory()
126    {
127        return new EncapsulationFactoryBase(TAG_JAVA_CODEBASE.value) {
128            public Identifiable readContents( InputStream in )
129            {
130                String url = in.read_string() ;
131                Identifiable comp = new JavaCodebaseComponentImpl( url ) ;
132                return comp ;
133            }
134        } ;
135    }
136
137    public static JavaCodebaseComponent makeJavaCodebaseComponent(
138        String codebase )
139    {
140        return new JavaCodebaseComponentImpl( codebase ) ;
141    }
142
143    public static IdentifiableFactory makeORBTypeComponentFactory()
144    {
145        return new EncapsulationFactoryBase(TAG_ORB_TYPE.value) {
146            public Identifiable readContents( InputStream in )
147            {
148                int type = in.read_ulong() ;
149                Identifiable comp = new ORBTypeComponentImpl( type ) ;
150                return comp ;
151            }
152        } ;
153    }
154
155    public static ORBTypeComponent makeORBTypeComponent( int type )
156    {
157        return new ORBTypeComponentImpl( type ) ;
158    }
159
160    public static IdentifiableFactory makeMaxStreamFormatVersionComponentFactory()
161    {
162        return new EncapsulationFactoryBase(TAG_RMI_CUSTOM_MAX_STREAM_FORMAT.value) {
163            public Identifiable readContents(InputStream in)
164            {
165                byte version = in.read_octet() ;
166                Identifiable comp = new MaxStreamFormatVersionComponentImpl(version);
167                return comp ;
168            }
169        };
170    }
171
172    public static MaxStreamFormatVersionComponent makeMaxStreamFormatVersionComponent()
173    {
174        return new MaxStreamFormatVersionComponentImpl() ;
175    }
176
177    public static IdentifiableFactory makeJavaSerializationComponentFactory() {
178        return new EncapsulationFactoryBase(
179                                ORBConstants.TAG_JAVA_SERIALIZATION_ID) {
180            public Identifiable readContents(InputStream in) {
181                byte version = in.read_octet();
182                Identifiable cmp = new JavaSerializationComponent(version);
183                return cmp;
184            }
185        };
186    }
187
188    public static JavaSerializationComponent makeJavaSerializationComponent() {
189        return JavaSerializationComponent.singleton();
190    }
191
192    public static IdentifiableFactory makeIIOPProfileFactory()
193    {
194        return new EncapsulationFactoryBase(TAG_INTERNET_IOP.value) {
195            public Identifiable readContents( InputStream in )
196            {
197                Identifiable result = new IIOPProfileImpl( in ) ;
198                return result ;
199            }
200        } ;
201    }
202
203    public static IIOPProfile makeIIOPProfile( ORB orb, ObjectKeyTemplate oktemp,
204        ObjectId oid, IIOPProfileTemplate ptemp )
205    {
206        return new IIOPProfileImpl( orb, oktemp, oid, ptemp ) ;
207    }
208
209    public static IIOPProfile makeIIOPProfile( ORB orb,
210        org.omg.IOP.TaggedProfile profile )
211    {
212        return new IIOPProfileImpl( orb, profile ) ;
213    }
214
215    public static IdentifiableFactory makeIIOPProfileTemplateFactory()
216    {
217        return new EncapsulationFactoryBase(TAG_INTERNET_IOP.value) {
218            public Identifiable readContents( InputStream in )
219            {
220                Identifiable result = new IIOPProfileTemplateImpl( in ) ;
221                return result ;
222            }
223        } ;
224    }
225
226    public static IIOPProfileTemplate makeIIOPProfileTemplate( ORB orb,
227        GIOPVersion version, IIOPAddress primary )
228    {
229        return new IIOPProfileTemplateImpl( orb, version, primary ) ;
230    }
231
232    public static IIOPAddress makeIIOPAddress( ORB orb, String host, int port )
233    {
234        return new IIOPAddressImpl( orb, host, port ) ;
235    }
236
237    public static IIOPAddress makeIIOPAddress( InputStream is )
238    {
239        return new IIOPAddressImpl( is ) ;
240    }
241}
242