1 package org
.argeo
.cms
.script
;
3 import java
.io
.IOException
;
4 import java
.io
.InputStreamReader
;
8 import javax
.jcr
.Repository
;
9 import javax
.script
.ScriptEngine
;
10 import javax
.script
.ScriptEngineManager
;
11 import javax
.script
.ScriptException
;
13 import org
.apache
.commons
.logging
.Log
;
14 import org
.apache
.commons
.logging
.LogFactory
;
15 import org
.argeo
.cms
.CmsException
;
16 import org
.eclipse
.rap
.rwt
.application
.Application
;
17 import org
.eclipse
.rap
.rwt
.application
.ApplicationConfiguration
;
18 import org
.osgi
.framework
.BundleContext
;
19 import org
.osgi
.framework
.BundleException
;
20 import org
.osgi
.framework
.wiring
.BundleWiring
;
22 public class CmsScriptRwtApplication
implements ApplicationConfiguration
{
23 public final static String APP
= "APP";
24 public final static String BC
= "BC";
26 private final Log log
= LogFactory
.getLog(CmsScriptRwtApplication
.class);
28 BundleContext bundleContext
;
29 Repository repository
;
33 public void init(BundleContext bundleContext
) {
34 this.bundleContext
= bundleContext
;
35 // System.out.println("bundleContext=" + bundleContext);
36 // System.out.println("repository=" + repository);
37 ScriptEngineManager scriptEngineManager
= new ScriptEngineManager();
38 ClassLoader bundleCl
= bundleContext
.getBundle().adapt(BundleWiring
.class).getClassLoader();
39 ClassLoader currentCcl
= Thread
.currentThread().getContextClassLoader();
41 Thread
.currentThread().setContextClassLoader(bundleCl
);
42 engine
= scriptEngineManager
.getEngineByName("JavaScript");
43 } catch (Exception e
) {
46 Thread
.currentThread().setContextClassLoader(currentCcl
);
50 URL appUrl
= bundleContext
.getBundle().getEntry("cms/app.js");
51 // System.out.println("Loading " + appUrl);
52 // System.out.println("Loading " + appUrl.getHost());
53 // System.out.println("Loading " + appUrl.getPath());
55 CmsScriptApp app
= new CmsScriptApp(engine
);
57 engine
.put(BC
, bundleContext
);
58 try (Reader reader
= new InputStreamReader(appUrl
.openStream())) {
60 } catch (IOException
| ScriptException e
) {
61 throw new CmsException("Cannot execute " + appUrl
, e
);
64 if (log
.isDebugEnabled())
65 log
.debug("CMS script app initialized from " + appUrl
);
69 public void destroy(BundleContext bundleContext
) {
74 public void configure(Application application
) {
78 void load(Application application
) {
79 CmsScriptApp app
= getApp();
80 app
.apply(bundleContext
, repository
, application
);
81 if (log
.isDebugEnabled())
82 log
.debug("CMS script app loaded to " + app
.getWebPath());
85 CmsScriptApp
getApp() {
87 throw new IllegalStateException("CMS script app is not initialized");
88 return (CmsScriptApp
) engine
.get(APP
);
94 bundleContext
.getBundle().update();
95 } catch (BundleException e
) {
100 public void setRepository(Repository repository
) {
101 this.repository
= repository
;