xref: /AOO41X/main/extensions/test/ole/callUnoToJava.htm (revision ff0525f24f03981d56b7579b645949f111420994)
1<!--***********************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements.  See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership.  The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License.  You may obtain a copy of the License at
10 *
11 *   http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied.  See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 ***********************************************************-->
21<HTML>
22<HEAD>
23<META NAME="GENERATOR" Content="Microsoft Developer Studio">
24<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
25<TITLE>Document Title</TITLE>
26</HEAD>
27<BODY id=theBody>
28
29<script language="JScript">
30function callOleTest(    id)
31{
32    var factory= new ActiveXObject("com.sun.star.ServiceManager");
33    var oletest= factory.createInstance("oletest.OleTest");
34//  alert(oletest);
35
36    switch( id)
37    {
38        case 1: // Test simple call of JScript object function from UNO
39        oletest.testInterface( new XCallback_Impl, 1);
40        break;
41
42        case 2:
43        // return value is the parameter object
44        oletest.testInterface( new XCallback_Impl, 2);
45        break;
46        //##################################################
47        // OUT parameter
48        //##################################################
49        case 3: // Test out parameter of type interface
50        oletest.testInterface( new XCallback_Impl, 3);
51        break;
52        case 4: // Test out parameter of type struct
53        oletest.testInterface( new XCallback_Impl, 4);
54        break;
55        case 5: // Test out parameter of type enum
56        oletest.testInterface( new XCallback_Impl, 5);
57        break;
58        case 6: // Test out parameter of type sequence<any>
59        oletest.testInterface( new XCallback_Impl, 6);
60        break;
61        case 7: // Test out parameter of type any
62        oletest.testInterface( new XCallback_Impl, 7);
63        break;
64        case 8: // Test out parameter of type bool
65        oletest.testInterface( new XCallback_Impl, 8);
66        break;
67        case 9: // Test out parameter of type char
68        oletest.testInterface( new XCallback_Impl, 9);
69        break;
70        case 10: // Test out parameter of type string
71        oletest.testInterface( new XCallback_Impl, 10);
72        break;
73        case 11: // Test out parameter of type float
74        oletest.testInterface( new XCallback_Impl, 11);
75        break;
76        case 12: // Test out parameter of type double
77        oletest.testInterface( new XCallback_Impl, 12);
78        break;
79        case 13: // Test out parameter of type byte
80        oletest.testInterface( new XCallback_Impl, 13);
81        break;
82        case 14: // Test out parameter of type short
83        oletest.testInterface( new XCallback_Impl, 14);
84        break;
85        case 15: // Test out parameter of type long
86        oletest.testInterface( new XCallback_Impl, 15);
87        break;
88        case 30: //  outValuesMixed
89        oletest.testInterface( new XCallback_Impl, 30);
90        break;
91        case 31: //  outValuesAll
92        oletest.testInterface( new XCallback_Impl, 31);
93        break;
94        //##################################################
95        // IN/OUT parameter
96        //##################################################
97
98        case 100: // inoutInterface
99        oletest.testInterface( new XCallback_Impl, 100);
100        break;
101        case 101: // inoutStruct
102        oletest.testInterface( new XCallback_Impl, 101);
103        break;
104        case 102: // inoutEnum
105        oletest.testInterface( new XCallback_Impl, 102);
106        break;
107        case 103: // inoutSeqAny
108        oletest.testInterface( new XCallback_Impl, 103);
109        break;
110        case 104: // inoutAny
111        oletest.testInterface( new XCallback_Impl, 104);
112        break;
113        case 105: // inoutBool
114        oletest.testInterface( new XCallback_Impl, 105);
115        break;
116        case 106: // inoutChar
117        oletest.testInterface( new XCallback_Impl, 106);
118        break;
119        case 107: // inoutString
120        oletest.testInterface( new XCallback_Impl, 107);
121        break;
122        case 108: // inoutFloat
123        oletest.testInterface( new XCallback_Impl, 108);
124        break;
125        case 109: // inoutDouble
126        oletest.testInterface( new XCallback_Impl, 109);
127        break;
128        case 110: // inoutByte
129        oletest.testInterface( new XCallback_Impl, 110);
130        break;
131        case 111: // inoutShort
132        oletest.testInterface( new XCallback_Impl, 111);
133        break;
134        case 112: // inoutLong
135        oletest.testInterface( new XCallback_Impl, 112);
136        break;
137        case 120: // inoutValuesAll
138        oletest.testInterface( new XCallback_Impl, 120);
139        break;
140        case 200: // inValues
141        oletest.testInterface( new XCallback_Impl, 200);
142        break;
143
144        // Call a COM object that has not been passed as parameter to a UNO component and
145        // hence no type information are available in the COM wrapper
146//      case 300:
147        //##################################################
148        // Attributes
149        //##################################################
150        case 400:
151        oletest.testInterface( new XCallback_Impl, 400);
152        break;
153
154        case 1000:
155        oletest.testInterface2(new MultiInterface(), 0);
156        break;
157    }
158
159}
160
161
162
163// The class --------------------------------------------
164
165function XCallback_Impl()
166{
167
168    // XCallback
169    this._environment= "JScript";
170
171    this.func1= XCallback_Impl_func1;
172    this.returnInterface= XCallback_Impl_returnInterface;
173    // #################################################
174    // OUT parameter
175    //###################################################
176    this.outInterface= XCallback_Impl_outInterface;
177    this.outStruct= XCallback_Impl_outStruct;
178    this.outEnum= XCallback_Impl_outEnum;
179    this.outSeqAny= XCallback_Impl_outSeqAny;
180    this.outAny= XCallback_Impl_outAny;
181    this.outBool= XCallback_Impl_outBool;
182    this.outChar= XCallback_Impl_outChar;
183    this.outString= XCallback_Impl_outString;
184    this.outFloat= XCallback_Impl_outFloat;
185    this.outDouble= XCallback_Impl_outDouble;
186    this.outByte= XCallback_Impl_outByte;
187    this.outShort= XCallback_Impl_outShort;
188    this.outLong= XCallback_Impl_outLong;
189    this.outValuesMixed= XCallback_Impl_outValuesMixed;
190    this.outValuesAll= XCallback_Impl_outValuesAll;
191    // #################################################
192    // IN/ OUT parameter
193    //###################################################
194    this.inoutInterface= XCallback_Impl_inoutInterface;
195    this.inoutStruct= XCallback_Impl_inoutStruct;
196    this.inoutEnum= XCallback_Impl_inoutEnum;
197    this.inoutSeqAny= XCallback_Impl_inoutSeqAny;
198    this.inoutAny= XCallback_Impl_inoutAny;
199    this.inoutBool= XCallback_Impl_inoutBool;
200    this.inoutChar= XCallback_Impl_inoutChar;
201    this.inoutString= XCallback_Impl_inoutString;
202    this.inoutFloat= XCallback_Impl_inoutFloat;
203    this.inoutDouble= XCallback_Impl_inoutDouble;
204    this.inoutByte= XCallback_Impl_inoutByte;
205    this.inoutShort= XCallback_Impl_inoutShort;
206    this.inoutLong= XCallback_Impl_inoutLong;
207    this.inoutValuesAll= XCallback_Impl_inoutValuesAll;
208    // #################################################
209    // IN parameter
210    //##################################################
211    this.inValues= XCallback_Impl_inValues;
212
213    // #################################################
214    // Attributes
215    //##################################################
216    this.simple= new XSimple_Impl();
217
218
219}
220
221
222function XCallback_Impl_func1()
223{
224    alert("XCallback_Impl_func1");
225}
226function XCallback_Impl_returnInterface()
227{
228    alert("XCallback::returnInterface called");
229    return new XSimple_Impl();
230}
231
232function XCallback_Impl_outInterface( outVal)
233{
234    outVal[0]= new XSimple_Impl();
235}
236
237function XCallback_Impl_outLong( outVal)
238{
239    alert("outLong");
240}
241function XCallback_Impl_outStruct( outVal)
242{
243    var factory= new ActiveXObject("com.sun.star.ServiceManager");
244    var starCoreReflection = factory.createInstance("com.sun.star.reflection.CoreReflection");
245    var structClass = starCoreReflection.forName("oletest.SimpleStruct");
246    var outParam= new Array();
247    structClass.createObject(outParam);
248    var aStruct= outParam[0];
249    aStruct.message= "a Struct created in JScript";
250    outVal[0]= aStruct;
251
252}
253function XCallback_Impl_outEnum( outVal)
254{
255    outVal[0]= 2;
256}
257function XCallback_Impl_outSeqAny( outVal)
258{
259    var ar= new Array(1,2,3);
260    outVal[0]= ar;
261}
262function XCallback_Impl_outAny( outVal)
263{
264    outVal[0]= "this is an Any";
265}
266function XCallback_Impl_outBool( outVal)
267{
268    outVal[0]= true;
269}
270function XCallback_Impl_outChar( outVal)
271{
272    outVal[0]= "a";
273}
274function XCallback_Impl_outString( outVal)
275{
276    outVal[0]= "This string was created in JScript";
277}
278function XCallback_Impl_outFloat( outVal)
279{
280    outVal[0]= 3.14;
281}
282function XCallback_Impl_outDouble( outVal)
283{
284    outVal[0]= 3.145;
285}
286function XCallback_Impl_outByte( outVal)
287{
288    outVal[0]= 100;
289}
290function XCallback_Impl_outShort( outVal)
291{
292    outVal[0]= 1000;
293}
294function XCallback_Impl_outLong( outVal)
295{
296    outVal[0]= 1000000;
297}
298function XCallback_Impl_outValuesMixed( inLong, outLong, inString)
299{
300    alert("inVal long: " + inLong +" inString:" + inString);
301    outLong[0]= inLong + 1;
302}
303function XCallback_Impl_outValuesAll( xSimple, aSimpleStruct, aSimpleEnum, seqAny, aAny, aBool,
304                aChar, aString, aFloat, aDouble, aByte, aShort, aLong)
305{
306    this.outInterface( xSimple);
307    this.outStruct( aSimpleStruct);
308    this.outEnum( aSimpleEnum);
309    this.outSeqAny( seqAny);
310    this.outAny( aAny);
311    this.outBool( aBool);
312    this.outChar( aChar);
313    this.outString( aString);
314    this.outFloat( aFloat);
315    this.outDouble( aDouble);
316    this.outByte( aByte);
317    this.outShort( aShort);
318    this.outLong( aLong);
319}
320
321function XCallback_Impl_inoutInterface( val)
322{
323    val[0].func("calling on in parameter");
324    val[0]= new XSimple_Impl();
325}
326function XCallback_Impl_inoutStruct( val)
327{
328    alert( val[0].message);
329    val[0].message= "property message changed in JScript";
330}
331function XCallback_Impl_inoutEnum(val)
332{
333    alert("enum value +" + val);
334    val[0]= 2;
335}
336function XCallback_Impl_inoutSeqAny( val)
337{
338    var vbar = new VBArray(val[0]);
339    var seq= vbar.toArray();
340    alert( seq[0] +" "+seq[1] +" " +seq[2]);
341    val[0]= new Array("jscript1", "jscript2","jscript3");
342}
343function XCallback_Impl_inoutAny(val)
344{
345    alert( "JScript in any: " + val[0]);
346    val[0]= "a string from JScript";
347}
348function XCallback_Impl_inoutBool(val)
349{
350    alert( "JScript in bool: " + val[0]);
351    val[0]= true;
352}
353function XCallback_Impl_inoutChar(val)
354{
355    alert( "JScript in char: " + val[0]);
356    val[0]= 'b';
357}
358function XCallback_Impl_inoutString(val)
359{
360    alert( "JScript in string: " + val[0]);
361    val[0]= " a JScript string";
362}
363function XCallback_Impl_inoutFloat(val)
364{
365    alert( "JScript in float: " + val[0]);
366    val[0]= 4.14;
367}
368function XCallback_Impl_inoutDouble(val)
369{
370    alert( "JScript in double: " + val[0]);
371    val[0]= 4.145;
372}
373
374function XCallback_Impl_inoutByte(val)
375{
376    alert( "JScript in byte: " + val[0]);
377    val[0]= 100;
378}
379function XCallback_Impl_inoutShort(val)
380{
381    alert( "JScript in short: " + val[0]);
382    val[0]= 1000;
383}
384function XCallback_Impl_inoutLong(val)
385{
386    alert( "JScript in long: " + val[0]);
387    val[0]= 100000;
388}
389function XCallback_Impl_inoutValuesAll(aXSimple, aStruct, aEnum, aSeq,
390            aAny, aBool, aChar, aString,  aFloat, aDouble,
391            aByte, aShort,  aLong )
392{
393    this.inoutInterface( aXSimple);
394    this.inoutStruct( aStruct);
395    this.inoutEnum( aEnum);
396    this.inoutSeqAny( aSeq);
397    this.inoutAny( aAny);
398    this.inoutBool( aBool);
399    this.inoutChar( aChar);
400    this.inoutString( aString);
401    this.inoutFloat( aFloat);
402    this.inoutDouble( aDouble);
403    this.inoutByte( aByte);
404    this.inoutShort( aShort);
405    this.inoutLong( aLong);
406}
407
408function XCallback_Impl_inValues( aChar, aLong, aString)
409{
410    alert( "char : " + aChar + " long: " + aLong + " string: " + aString);
411}
412
413
414//################################################################
415// class MultiInterface implements XSimple, XSimple2, XSimple3
416//################################################################
417function MultiInterface()
418{
419    this._environment= "JScript";
420    this._implementedInterfaces= new Array( "oletest.XSimple", "oletest.XSimple2", "oletest.XSimple3");
421    // XSimple ---------------
422    this.getName= MultiInterface_getName;
423    this.func= MultiInterface_func;
424    this.func2= MultiInterface_func2;
425    this.func3= MultiInterface_func3;
426    // XSimple2
427    this.getName2= MultiInterface_getName2;
428    // XSimple3
429    this.getName3= MultiInterface_getName3;
430}
431
432
433function MultiInterface_getName()
434{
435    return "JScript XSimple called";
436}
437function MultiInterface_func( message)
438{
439    alert("JScript object (XSimple)-- " + message);
440}
441
442function MultiInterface_getName2()
443{
444    return "JScript XSimple2 called";
445}
446function MultiInterface_func2( message)
447{
448    alert("JScript object (XSimple2) -- " + message);
449}
450
451function MultiInterface_getName3()
452{
453    return "JScript XSimple3 called";
454}
455function MultiInterface_func3( message)
456{
457    alert("JScript object (XSimple3) -- " + message);
458}
459
460
461
462
463//XCallback_Impl_outValuesMixed( val1, outval, val2)
464//{
465//}
466//XCallback_Impl_outValuesAll( xSimple, aSimpleStruct, aSimpleEnum, seqAny, aAny, aBool,
467//              aChar, aString, aFloat, aDouble, aByte, aShort, aLong, aUShort, aULong)
468//{
469//
470//}
471
472
473
474//  class XSimple_Impl----------------------------------------------------------------------
475function XSimple_Impl()
476{
477    //XSimple
478    this.func= XSimple_Impl_func;
479}
480function XSimple_Impl_func( message)
481{
482    alert( "XSimple called." + message);
483}
484
485
486</script>
487
488
489
490<h2> Object in JScript</h2>
491
492This test passes a XCallback to an UNO function of the UNO test control.
493XCallback is implemented by the JScript class XCallback_Impl. The function
494XCallback::func1 is then called from the UNO test control.
495<br>
496<button onclick='callOleTest( 1)'>go</Button>
497<br>
498On the UNO object the function testInterface is called which takes
499a XCallback as parameter. XCallback is implemented in a JScript object.The function
500returns a XSimple Interface. Then the UNO object calls XSimple::notify. This test shall
501verify the correct conversion of the return value( IDispatch JScript object) to an XSimple object.<br>
502<button onclick='callOleTest( 2)'>go</Button>
503<br>
504<h1> out parameter </h1>
505The a JScript object of class XCallback_Impl is passed to the UNO OleTest Control as parameter.
506According to the buttons the OleTest object calls a function on XCallback_Impl that has appropriate type
507as out parameter.<br>
508<button onclick='callOleTest( 3)'>interface</Button>
509<button onclick='callOleTest( 4)'>struct</Button>
510<button onclick='callOleTest( 5)'>enum</Button>
511<button onclick='callOleTest( 6)'>sequence&lt;any&gt;</Button>
512<button onclick='callOleTest( 7)'>any</Button>
513<button onclick='callOleTest( 8)'>bool</Button>
514<button onclick='callOleTest( 9)'>char</Button>
515<button onclick='callOleTest( 10)'>string</Button>
516<button onclick='callOleTest( 11)'>float</Button>
517<button onclick='callOleTest( 12)'>double</Button>
518<button onclick='callOleTest( 13)'>byte</Button>
519<button onclick='callOleTest( 14)'>short</Button>
520<button onclick='callOleTest( 15)'>long</Button>
521<br>
522Other test with out parameters <br>
523<button onclick='callOleTest( 30)'>outValuesMixed</Button>
524<button onclick='callOleTest( 31)'>outValuesAll</Button>
525<h1> in out parameter </h1>
526<button onclick='callOleTest( 100)'>interface</Button>
527<button onclick='callOleTest( 101)'>struct</Button>
528<button onclick='callOleTest( 102)'>enum</Button>
529<button onclick='callOleTest( 103)'>seqence&lt;any&gt;</Button>
530<button onclick='callOleTest( 104)'>any</Button>
531<button onclick='callOleTest( 105)'>bool</Button>
532<button onclick='callOleTest( 106)'>char</Button>
533<button onclick='callOleTest( 107)'>string</Button>
534<button onclick='callOleTest( 108)'>float</Button>
535<button onclick='callOleTest( 109)'>double</Button>
536<button onclick='callOleTest( 110)'>byte</Button>
537<button onclick='callOleTest( 111)'>short</Button>
538<button onclick='callOleTest( 112)'>long</Button>
539<br>
540<h1> Attributes </h1>
541<button onclick='callOleTest( 400)'>getting XSimple</Button>
542<br>
543
544Other tests with inout parameters <br>
545<button onclick='callOleTest( 120)'>inoutValuesAll</Button>
546<h1>in parameters </h1>
547<button onclick='callOleTest( 200)'>inValues</Button>
548
549<h1> JScript object implements several interfaces </h1>
550<button onclick='callOleTest( 1000)'>go</Button>
551
552
553
554
555</body>
556</html>
557
558
559