KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jinterop > dcom > test > MSInternetExplorer


1 package org.jinterop.dcom.test;
2
3 import java.net.UnknownHostException JavaDoc;
4 import java.util.ArrayList JavaDoc;
5
6 import org.jinterop.dcom.common.JIException;
7 import org.jinterop.dcom.common.JIInterfaceDefinition;
8 import org.jinterop.dcom.common.JIJavaCoClass;
9 import org.jinterop.dcom.common.JIMethodDescriptor;
10 import org.jinterop.dcom.core.IJIComObject;
11 import org.jinterop.dcom.core.JIComServer;
12 import org.jinterop.dcom.core.JIFlags;
13 import org.jinterop.dcom.core.JIInterfacePointer;
14 import org.jinterop.dcom.core.JIParameterObject;
15 import org.jinterop.dcom.core.JIProgId;
16 import org.jinterop.dcom.core.JISession;
17 import org.jinterop.dcom.core.JIString;
18 import org.jinterop.dcom.core.JIVariant;
19 import org.jinterop.dcom.win32.ComFactory;
20 import org.jinterop.dcom.win32.IJIDispatch;
21
22 public class MSInternetExplorer {
23     
24     private JIComServer comServer = null;
25     private JISession session = null;
26     private IJIComObject ieObject = null;
27     private IJIDispatch ieObjectDispatch = null;
28     private String JavaDoc identifier = null;
29     public MSInternetExplorer(String JavaDoc address, String JavaDoc[] args) throws JIException, UnknownHostException JavaDoc
30     {
31         session = JISession.createSession(args[1],args[2],args[3]);
32         comServer = new JIComServer(JIProgId.valueOf(session,"InternetExplorer.Application"),address,session);
33         ieObject = comServer.createInstance();
34         IJIComObject ieObjectWebBrowser2 = (IJIComObject)ieObject.queryInterface("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E");
35         ieObjectDispatch = (IJIDispatch)ComFactory.createCOMInstance(IJIDispatch.IID,ieObject);
36         
37     }
38     
39     private void setVisible() throws JIException
40     {
41         
42         int dispId = ieObjectDispatch.getIDsOfNames("Visible");
43         ieObjectDispatch.put(dispId,new JIVariant(Boolean.TRUE));
44         ieObjectDispatch.put("AddressBar",new JIVariant(Boolean.TRUE));
45         ieObjectDispatch.put("MenuBar",new JIVariant(Boolean.TRUE));
46         ieObjectDispatch.put("ToolBar",new JIVariant(Boolean.TRUE));
47         
48     }
49     
50     private void navigateToUrl(String JavaDoc url) throws JIException
51     {
52         //ieObjectDispatch.put("Top",new JIVariant(new Integer(600)));
53
//ieObjectDispatch.put("Left",new JIVariant(new Integer(700)));
54
ieObjectDispatch.callMethod("Navigate2",new Object JavaDoc[]{new JIString(url),JIVariant.OPTIONAL_PARAM,JIVariant.OPTIONAL_PARAM,JIVariant.OPTIONAL_PARAM,JIVariant.OPTIONAL_PARAM});
55     }
56     
57     private void attachCallBack() throws JIException
58     {
59         
60     /**
61      * The JIJavaCOClass is a representation for a Java server class. It's there so that when we get to the next version of the library, I am able to support full bi-directional access. Currently, you can implement any IDL of an existing COM server using the JIJavaCOClass and
62      * pass it's interface pointer instead of the original COM server and it will work fine. Similar mechanism is exploited for call backs.In our case I had to implement DWebBrowserEvents interface.
63      *
64      * IJavaCoClass javaComponent = new JIJavaCoClass(new JIInterfaceDefinition("45B5FC0C-FAC2-42bd-923E-2B221A89E092"),DWebBrowserEvents2.class);
65      *
66      * This definition create a Java component with an IID of 45B5FC0C-FAC2-42bd-923E-2B221A89E092...I just made this one up for uniquely classifying this class...you can equate this to a lib identifier of COM IDL. This is required if there are multilple interfaces being implemented in the same Java Class.
67      * If you have only one...you can put it's IID here. I just did not do it for showing the user a possiblity.
68      *
69      * The JIJavaCOClass has the option of instantiating the DWebBrowserEvents.class or it could use another ctor to pass an already instantiated object. In latter scenario, the object would be used as target for the events instead of instantiating a new one from DWebBrowserEvents.class.
70      * Now that we have a Java server, we need to define the methods\events it will handle.
71      *
72      * This is done using the Method descriptors which are themselves described using the Parameter Objects.
73      *
74      * JIParameterObject propertyChangeObject = new JIParameterObject();
75      *
76      * This creates a Parameter Object, capable of defining a IN or OUT type for a Method.
77      *
78      * like:-
79      * propertyChangeObject.addInParamAsType(JIString.class,JIFlags.FLAG_NULL);
80      *
81      * JIMethodDescriptor methodDescriptor = new JIMethodDescriptor("PropertyChange",0x70,propertyChangeObject);
82      * javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
83      *
84      * This declares a method descriptor. The first parameter in the ctor is the API name of the api to implement, the second one is it's OP number.
85      * This one can be obtained from the IDL\TypeLib. And the third param is the parameterObject describing the input\output types of this method.
86      * If you do not want to use this ctor, there is another, which sequentially increments the method numbers starting from 1.
87      * The calls below add a new interface IID to this Java server. It simply means that the server supports this interface definition.
88      *
89      * ArrayList list = new ArrayList();
90      * list.add("34A715A0-6587-11D0-924A-0020AFC7AC4D");
91      * javaComponent.setSupportedEventInterfaces(list);
92      *
93      * This will be the list of all COM interfaces which this Java class supports or implements.
94      *
95      * The next call attaches the event handler (our JIJavaCoClass) to the actual COM server for recieving events for the interface identified by the IID.
96      * There can be many such calls on the same COM server for different IIDs.
97      * identifier = ComFactory.attachEventHandler(ieObject,"34A715A0-6587-11D0-924A-0020AFC7AC4D",JIInterfacePointer.getInterfacePointer(session,javaComponent));
98      *
99      * Now whether you use IJIDispatch or not, events will work regardless of that. The COM object you have to use in the attachEventHandler is the COM Object on
100      * which you did the queryinterface for the IJIDispatch.
101      *
102      **/

103         JIJavaCoClass javaComponent = new JIJavaCoClass(new JIInterfaceDefinition("45B5FC0C-FAC2-42bd-923E-2B221A89E092"),DWebBrowserEvents2.class);
104         
105         JIParameterObject propertyChangeObject = new JIParameterObject();
106         propertyChangeObject.addInParamAsType(JIString.class,JIFlags.FLAG_NULL);
107         JIMethodDescriptor methodDescriptor = new JIMethodDescriptor("PropertyChange",0x70,propertyChangeObject);
108         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
109         
110         
111         JIParameterObject navigateObject = new JIParameterObject();
112         navigateObject.addInParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL);
113         navigateObject.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
114         navigateObject.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
115         navigateObject.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
116         navigateObject.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
117         navigateObject.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
118         navigateObject.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
119         methodDescriptor = new JIMethodDescriptor("BeforeNavigate2",0xFA,navigateObject);
120         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
121         
122         JIParameterObject StatusTextChange = new JIParameterObject();
123         StatusTextChange.addInParamAsType(JIString.class,JIFlags.FLAG_NULL);
124         methodDescriptor = new JIMethodDescriptor("StatusTextChange",0x66,StatusTextChange);
125         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
126         
127         JIParameterObject ProgressChange = new JIParameterObject();
128         ProgressChange.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
129         ProgressChange.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
130         methodDescriptor = new JIMethodDescriptor("ProgressChange",0x6c,ProgressChange);
131         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
132         
133         JIParameterObject CommandStateChange = new JIParameterObject();
134         CommandStateChange.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
135         CommandStateChange.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
136         methodDescriptor = new JIMethodDescriptor("CommandStateChange",0x69,CommandStateChange);
137         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
138         
139         JIParameterObject DownloadBegin = new JIParameterObject();
140         methodDescriptor = new JIMethodDescriptor("DownloadBegin",0x6a,DownloadBegin);
141         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
142         
143         JIParameterObject DownloadComplete = new JIParameterObject();
144         methodDescriptor = new JIMethodDescriptor("DownloadComplete",0x68,DownloadComplete);
145         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
146         
147         JIParameterObject TitleChange = new JIParameterObject();
148         TitleChange.addInParamAsType(JIString.class,JIFlags.FLAG_NULL);
149         methodDescriptor = new JIMethodDescriptor("TitleChange",0x71,TitleChange);
150         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
151         
152         JIParameterObject NewWindow2 = new JIParameterObject();
153         NewWindow2.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
154         NewWindow2.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
155         methodDescriptor = new JIMethodDescriptor("NewWindow2",0xfb,NewWindow2);
156         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
157         
158         JIParameterObject NavigateComplete2 = new JIParameterObject();
159         NavigateComplete2.addInParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL);
160         NavigateComplete2.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
161         methodDescriptor = new JIMethodDescriptor("NavigateComplete2",0xfc,NavigateComplete2);
162         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
163         
164         JIParameterObject DocumentComplete = new JIParameterObject();
165         DocumentComplete.addInParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL);
166         DocumentComplete.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
167         methodDescriptor = new JIMethodDescriptor("DocumentComplete",0x103,DocumentComplete);
168         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
169         
170         JIParameterObject OnQuit = new JIParameterObject();
171         methodDescriptor = new JIMethodDescriptor("OnQuit",0xfd,OnQuit);
172         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
173         
174         JIParameterObject OnVisible = new JIParameterObject();
175         OnVisible.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
176         methodDescriptor = new JIMethodDescriptor("OnVisible",0xfe,OnVisible);
177         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
178         
179         JIParameterObject OnToolBar = new JIParameterObject();
180         OnToolBar.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
181         methodDescriptor = new JIMethodDescriptor("OnToolBar",0xff,OnToolBar);
182         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
183         
184         JIParameterObject OnMenuBar = new JIParameterObject();
185         OnMenuBar.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
186         methodDescriptor = new JIMethodDescriptor("OnMenuBar",0x100,OnMenuBar);
187         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
188         
189         JIParameterObject OnStatusBar = new JIParameterObject();
190         OnStatusBar.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
191         methodDescriptor = new JIMethodDescriptor("OnStatusBar",0x101,OnStatusBar);
192         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
193         
194         JIParameterObject OnFullScreen = new JIParameterObject();
195         OnFullScreen.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
196         methodDescriptor = new JIMethodDescriptor("OnFullScreen",0x102,OnFullScreen);
197         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
198         
199         JIParameterObject OnTheaterMode = new JIParameterObject();
200         OnTheaterMode.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
201         methodDescriptor = new JIMethodDescriptor("OnTheaterMode",0x104,OnTheaterMode);
202         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
203         
204         JIParameterObject WindowSetResizable = new JIParameterObject();
205         WindowSetResizable.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
206         methodDescriptor = new JIMethodDescriptor("WindowSetResizable",0x106,WindowSetResizable);
207         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
208         
209         JIParameterObject WindowSetLeft = new JIParameterObject();
210         WindowSetLeft.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
211         methodDescriptor = new JIMethodDescriptor("WindowSetLeft",0x108,WindowSetLeft);
212         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
213         
214         JIParameterObject WindowSetTop = new JIParameterObject();
215         WindowSetTop.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
216         methodDescriptor = new JIMethodDescriptor("WindowSetTop",0x109,WindowSetTop);
217         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
218         
219         JIParameterObject WindowSetWidth = new JIParameterObject();
220         WindowSetWidth.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
221         methodDescriptor = new JIMethodDescriptor("WindowSetWidth",0x10a,WindowSetWidth);
222         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
223         
224         JIParameterObject WindowSetHeight = new JIParameterObject();
225         WindowSetHeight.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
226         methodDescriptor = new JIMethodDescriptor("WindowSetHeight",0x10b,WindowSetHeight);
227         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
228         
229         JIParameterObject WindowClosing = new JIParameterObject();
230         WindowClosing.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
231         WindowClosing.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
232         methodDescriptor = new JIMethodDescriptor("WindowClosing",0x107,WindowClosing);
233         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
234         
235         JIParameterObject ClientToHostWindow = new JIParameterObject();
236         ClientToHostWindow.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
237         ClientToHostWindow.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
238         methodDescriptor = new JIMethodDescriptor("ClientToHostWindow",0x10c,ClientToHostWindow);
239         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
240         
241         JIParameterObject SetSecureLockIcon = new JIParameterObject();
242         SetSecureLockIcon.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
243         methodDescriptor = new JIMethodDescriptor("SetSecureLockIcon",0x10d,SetSecureLockIcon);
244         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
245         
246         JIParameterObject FileDownload = new JIParameterObject();
247         FileDownload.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
248         FileDownload.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
249         methodDescriptor = new JIMethodDescriptor("FileDownload",0x10e,FileDownload);
250         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
251         
252         JIParameterObject NavigateError = new JIParameterObject();
253         NavigateError.addInParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL);
254         NavigateError.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
255         NavigateError.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
256         NavigateError.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
257         NavigateError.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
258         methodDescriptor = new JIMethodDescriptor("NavigateError",0x10f,NavigateError);
259         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
260         
261         JIParameterObject NewWindow3 = new JIParameterObject();
262         NewWindow3.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
263         NewWindow3.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
264         NewWindow3.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
265         NewWindow3.addInParamAsType(JIString.class,JIFlags.FLAG_NULL);
266         NewWindow3.addInParamAsType(JIString.class,JIFlags.FLAG_NULL);
267         methodDescriptor = new JIMethodDescriptor("NewWindow3",0x111,NewWindow3);
268         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
269         
270         JIParameterObject PrintTemplateInstantiation = new JIParameterObject();
271         PrintTemplateInstantiation.addInParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL);
272         methodDescriptor = new JIMethodDescriptor("PrintTemplateInstantiation",0xe1,PrintTemplateInstantiation);
273         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
274         
275         JIParameterObject PrintTemplateTeardown = new JIParameterObject();
276         PrintTemplateTeardown.addInParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL);
277         methodDescriptor = new JIMethodDescriptor("PrintTemplateTeardown",0xe2,PrintTemplateTeardown);
278         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
279         
280         JIParameterObject SetPhishingFilterStatus = new JIParameterObject();
281         SetPhishingFilterStatus.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
282         methodDescriptor = new JIMethodDescriptor("SetPhishingFilterStatus",0x11A,SetPhishingFilterStatus );
283         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
284         
285         JIParameterObject WindowStateChanged = new JIParameterObject();
286         WindowStateChanged.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
287         WindowStateChanged.addInParamAsType(Integer JavaDoc.class,JIFlags.FLAG_NULL);
288         methodDescriptor = new JIMethodDescriptor("WindowStateChanged",0x11B,WindowStateChanged);
289         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
290         
291         
292         JIParameterObject UpdatePageStatus = new JIParameterObject();
293         UpdatePageStatus.addInParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL);
294         UpdatePageStatus.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
295         UpdatePageStatus.addInParamAsType(JIVariant.class,JIFlags.FLAG_NULL);
296         methodDescriptor = new JIMethodDescriptor("UpdatePageStatus",0xe3,UpdatePageStatus);
297         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
298         
299         JIParameterObject PrivacyImpactedStateChange = new JIParameterObject();
300         PrivacyImpactedStateChange.addInParamAsType(Boolean JavaDoc.class,JIFlags.FLAG_NULL);
301         methodDescriptor = new JIMethodDescriptor("PrivacyImpactedStateChange",0x110,PrivacyImpactedStateChange);
302         javaComponent.getInterfaceDefinition().addMethodDescriptor(methodDescriptor);
303
304         
305         ArrayList JavaDoc list = new ArrayList JavaDoc();
306         list.add("34A715A0-6587-11D0-924A-0020AFC7AC4D");
307         javaComponent.setSupportedEventInterfaces(list);
308         
309         
310         
311         identifier = ComFactory.attachEventHandler(ieObject,"34A715A0-6587-11D0-924A-0020AFC7AC4D",JIInterfacePointer.getInterfacePointer(session,javaComponent));
312         try {
313             Thread.sleep(5000);
314         } catch (InterruptedException JavaDoc e) {
315             // TODO Auto-generated catch block
316
e.printStackTrace();
317         } //for call backs
318
}
319     
320     private void detachCallBack() throws JIException
321     {
322         ComFactory.detachEventHandler(ieObject,identifier);
323         JISession.destroySession(ieObjectDispatch.getAssociatedSession());
324     }
325     
326     
327     public static void main(String JavaDoc[] args) {
328
329          try {
330
331                 if (args.length < 4)
332                 {
333                     System.out.println("Please provide address domain username password");
334                     return;
335                 }
336                 
337                 MSInternetExplorer internetExplorer = new MSInternetExplorer(args[0],args);
338                 internetExplorer.setVisible();
339                 internetExplorer.attachCallBack();
340                 internetExplorer.navigateToUrl("www.rediff.com");
341                 Thread.sleep(30000); //for call backs
342
internetExplorer.detachCallBack();
343          
344          } catch (Exception JavaDoc e) {
345             // TODO Auto-generated catch block
346
e.printStackTrace();
347         }
348         
349     }
350     
351
352 }
353
354
Popular Tags