01 
02 /*
03  *  Descripter 1.0 - Java Script Engines
04  *  Copyright (C) 2010-2015  Jianjun Liu (J.J.Liu)
05  *  
06  *  This program is free software: you can redistribute it and/or modify
07  *  it under the terms of the GNU Affero General Public License as published by
08  *  the Free Software Foundation, either version 3 of the License, or
09  *  (at your option) any later version.
10  *  
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU Affero General Public License for more details.
15  *  
16  *  You should have received a copy of the GNU Affero General Public License
17  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 package org.descripter.js.api;
21 
22 /**
23  * <p>Emulates the global contexts of JavaScript.</p>
24  * 
25  * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.descripter.org" target="_blank">http://www.descripter.org</a>
26  * @since Descripter 1.0
27  */
28 public abstract class Global<W extends Core> extends Script<W>
29 {
30     /**
31      * <p>Constructs a global script context of this type.</p>
32      * @param with The containing {@link Core} context.
33      * @since Descripter 1.0
34      */
35     protected Global(W with) {
36         super(with);
37         if (with != null) {
38             put(with._this, this);
39         }
40     }
41 
42     /**
43      * <p>Returns a string representation of the current object.</p>
44      * @return The string representation of the current object
45      * @since Descripter 1.0
46      */
47     @Override
48     public String toString() {
49         return "[Global object]";
50     }
51 
52     /**
53      * <p>Gets the engine core of this global script context.</p>
54      * @return The engine core of this global script context
55      * @since Descripter 1.0
56      */
57     @Override
58     public W core() {
59         return with;
60     }
61 
62     /**
63      * <p>Creates a global service with the specified {@link java.lang.reflect.Method} of this global script context.</p>
64      * @param method The name of a {@link java.lang.reflect.Method} of this global script context
65      * @since Descripter 1.0
66      */
67     protected final Key globalize(String method) {
68         try {
69             Key k = key(method);
70             put(k, getClass().getMethod(
71                     method,
72                     new Class<?>[]{Script.class, Object[].class}
73             ));
74             return k;
75         } catch (SecurityException e) {
76             throw new RuntimeException(e);
77         } catch (NoSuchMethodException e) {
78             throw new RuntimeException(e);
79         }
80     }
81 }