KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > websphinx > workbench > Script


1 /*
2  * WebSphinx web-crawling toolkit
3  *
4  * Copyright (c) 1998-2002 Carnegie Mellon University. All rights
5  * reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in
16  * the documentation and/or other materials provided with the
17  * distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
20  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
23  * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  *
31  */

32
33 package websphinx.workbench;
34
35 import websphinx.*;
36 import java.io.IOException JavaDoc;
37 import rcm.awt.PopupDialog;
38
39 public class Script implements Action,LinkPredicate,PagePredicate {
40     String JavaDoc script;
41     boolean asLinkPredicate;
42
43     transient Crawler crawler;
44     transient ScriptInterpreter interp;
45     transient Object JavaDoc function;
46
47     public Script (String JavaDoc script, boolean asLinkPredicate) {
48         this.script = script;
49         this.asLinkPredicate = asLinkPredicate;
50     }
51
52     public String JavaDoc getScript () {
53         return script;
54     }
55
56     public boolean equals (Object JavaDoc object) {
57         if (! (object instanceof Script))
58             return false;
59         Script s = (Script)object;
60         return s.script.equals (script)
61             && s.asLinkPredicate == asLinkPredicate;
62     }
63
64     static String JavaDoc[] argsLink = {"crawler", "link"};
65     static String JavaDoc[] argsPage = {"crawler", "page"};
66
67     public void connected (Crawler crawler) {
68         this.crawler = crawler;
69         interp = Context.getScriptInterpreter ();
70         if (interp != null) {
71             try {
72                  function = interp.lambda (asLinkPredicate
73                                         ? argsLink : argsPage,
74                                        script);
75             } catch (ScriptException e) {
76                 PopupDialog.warn (null, "Script Error", e.toString());
77                 function = null;
78             }
79         }
80     }
81
82     public void disconnected (Crawler crawler) {
83          crawler = null;
84          interp = null;
85          function = null;
86     }
87
88     public boolean shouldVisit (Link link) {
89         try {
90             if (interp == null || function == null)
91                 // FIX: use GUI to signal error
92
throw new ScriptException ("Scripting language is not available");
93
94             Object JavaDoc[] args = new Object JavaDoc[2];
95             args[0] = crawler;
96             args[1] = link;
97             return toBool (interp.apply (function, args));
98         } catch (ScriptException e) {
99             System.err.println (e); // FIX: use GUI when available
100
return false;
101         }
102     }
103
104     public boolean shouldActOn (Page page) {
105         try {
106             if (interp == null || function == null)
107                 throw new ScriptException ("Scripting language is not available");
108
109             Object JavaDoc[] args = new Object JavaDoc[2];
110             args[0] = crawler;
111             args[1] = page;
112             return toBool (interp.apply (function, args));
113         } catch (ScriptException e) {
114             System.err.println (e); // FIX: use GUI when available
115
return false;
116         }
117     }
118
119     public void visit (Page page) {
120         try {
121             if (interp == null || function == null)
122                 // FIX: use GUI to signal error
123
throw new ScriptException ("Scripting language is not available");
124
125             Object JavaDoc[] args = new Object JavaDoc[2];
126             args[0] = crawler;
127             args[1] = page;
128             interp.apply (function, args);
129         } catch (ScriptException e) {
130             throw new RuntimeException JavaDoc (e.toString());
131         }
132     }
133
134     boolean toBool (Object JavaDoc obj) {
135         if (! (obj instanceof Boolean JavaDoc))
136             return false;
137         return ((Boolean JavaDoc)obj).booleanValue();
138     }
139
140 }
141
Popular Tags