public static ImageIcon load( String aResourceName, String aCalledFromFile, Scripts.Space aSpace, Consumer<ImageIcon> onSuccess, Consumer<Exception> onFailure) throws Exception { if (onSuccess != null) { ScriptedResource._load( aResourceName, aCalledFromFile, aSpace, (Object aLoaded) -> { if (aLoaded instanceof byte[]) { byte[] content = (byte[]) aLoaded; onSuccess.accept(new ImageIcon(content)); } else { if (onFailure != null) { onFailure.accept( new IllegalArgumentException(aResourceName + " is not a binary resource")); } } }, (Exception ex) -> { if (onFailure != null) { onFailure.accept(ex); } }); return null; } else { Object loaded = ScriptedResource._load(aResourceName, aCalledFromFile, aSpace); if (loaded instanceof byte[]) { byte[] content = (byte[]) loaded; return new ImageIcon(content); } else { throw new IllegalArgumentException(aResourceName + " is not a binary resource"); } } }
@Override public JSObject execute( Scripts.Space aSpace, Consumer<JSObject> onSuccess, Consumer<Exception> onFailure) throws Exception { assert Scripts.getSpace() == aSpace : "Scripts.Space TLS assumption failed"; if (onSuccess != null) { ScriptedResource._require( new String[] {entityName}, null, aSpace, new HashSet<>(), (Void v) -> { JSObject source = aSpace.createModule(entityName); if (source.hasMember("fetch")) { Object oFetch = source.getMember("fetch"); if (oFetch instanceof JSObject) { JSObject jsFetch = (JSObject) oFetch; if (jsFetch.isFunction()) { JSObject jsParams = aSpace.makeObj(); for (int i = 0; i < params.getParametersCount(); i++) { Parameter p = params.get(i + 1); jsParams.setMember(p.getName(), aSpace.toJs(p.getValue())); } final ExecutionChecker exChecker = new ExecutionChecker(); Object oRowset = jsFetch.call( source, aSpace.toJs( new Object[] { jsParams, new AbstractJSObject() { @Override public Object call(final Object thiz, final Object... args) { if (exChecker.isExecutionNeeded()) { try { JSObject jsRowset = args.length > 0 ? (JSObject) aSpace.toJava(args[0]) : null; try { onSuccess.accept(jsRowset); } catch (Exception ex) { Logger.getLogger(ScriptedQuery.class.getName()) .log(Level.SEVERE, null, ex); } } catch (Exception ex) { if (onFailure != null) { onFailure.accept(ex); } } } return null; } }, new AbstractJSObject() { @Override public Object call(final Object thiz, final Object... args) { if (exChecker.isExecutionNeeded()) { if (onFailure != null) { if (args.length > 0) { if (args[0] instanceof Exception) { onFailure.accept((Exception) args[0]); } else { onFailure.accept( new Exception( String.valueOf(aSpace.toJava(args[0])))); } } else { onFailure.accept( new Exception( "No error information from fetch method")); } } } return null; } } })); if (!JSType.nullOrUndefined(oRowset)) { onSuccess.accept((JSObject) aSpace.toJava(oRowset)); exChecker.setExecutionNeeded(false); } } } } }, onFailure); return null; } else { JSObject source = aSpace.createModule(entityName); if (source.hasMember("fetch")) { Object oFetch = source.getMember("fetch"); if (oFetch instanceof JSObject) { JSObject jsFetch = (JSObject) oFetch; if (jsFetch.isFunction()) { JSObject jsParams = aSpace.makeObj(); Object oRowset = jsFetch.call(source, aSpace.toJs(new Object[] {jsParams})); if (!JSType.nullOrUndefined(oRowset)) { return (JSObject) aSpace.toJava(oRowset); } } } } return null; } }
/** * @param args the command line arguments * @throws IOException * @throws Exception */ public static void main(String[] args) throws IOException, Exception { checkUserHome(); GeneralResourceProvider.registerDrivers(); parseArgs(args); if (url == null || url.isEmpty()) { throw new IllegalArgumentException("Application url (-url parameter) is required."); } SSLContext sslContext = PlatypusConnection.createSSLContext(); ScriptedDatabasesClient serverCoreDbClient; if (url.toLowerCase().startsWith("file")) { File f = new File(new URI(url)); if (f.exists() && f.isDirectory()) { Logger.getLogger(ServerMain.class.getName()) .log(Level.INFO, "Application is located at: {0}", f.getPath()); GeneralResourceProvider.registerDrivers(); ScriptsConfigs scriptsConfigs = new ScriptsConfigs(); ServerTasksScanner tasksScanner = new ServerTasksScanner(scriptsConfigs); ApplicationSourceIndexer indexer = new ApplicationSourceIndexer(f.getPath(), tasksScanner); // TODO: add command line argument "watch" after watcher refactoring // indexer.watch(); Scripts.initBIO(threadsConfig.getMaxServicesTreads()); int maxWorkerThreads = parseNumWorkerThreads(); ThreadPoolExecutor serverProcessor = new ThreadPoolExecutor( maxWorkerThreads, maxWorkerThreads, 3L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), new DeamonThreadFactory("TSA-", false)); serverProcessor.allowCoreThreadTimeOut(true); Scripts.initTasks( (Runnable aTask) -> { serverProcessor.submit(aTask); }); serverCoreDbClient = new ScriptedDatabasesClient( defDatasource, indexer, true, tasksScanner.getValidators(), threadsConfig.getMaxJdbcTreads()); QueriesProxy<SqlQuery> queries = new LocalQueriesProxy(serverCoreDbClient, indexer); serverCoreDbClient.setQueries(queries); PlatypusServer server = new PlatypusServer( indexer, new LocalModulesProxy(indexer, new ModelsDocuments(), appElement), queries, serverCoreDbClient, sslContext, parseListenAddresses(), parsePortsProtocols(), parsePortsSessionIdleTimeouts(), parsePortsSessionIdleCheckIntervals(), serverProcessor, scriptsConfigs, appElement); serverCoreDbClient.setContextHost(server); ScriptedResource.init(server, ScriptedResource.lookupPlatypusJs()); SensorsFactory.init(server.getAcceptorsFactory()); RetranslateFactory.init(server.getRetranslateFactory()); // server.start(tasksScanner.getResidents(), tasksScanner.getAcceptors()); } else { throw new IllegalArgumentException( "applicationUrl: " + url + " doesn't point to existent directory."); } } else { throw new Exception("Unknown protocol in url: " + url); } }