public static ImageIcon load( String aResourceName, String aCalledFromFile, JSObject onSuccess, JSObject onFailure) throws Exception { Scripts.Space space = Scripts.getSpace(); return load( aResourceName, aCalledFromFile, space, onSuccess != null ? (ImageIcon aLoaded) -> { onSuccess.call(null, new Object[] {aLoaded}); } : null, onSuccess != null ? (Exception ex) -> { onFailure.call(null, new Object[] {space.toJs(ex.getMessage())}); } : null); }
@Override public void handle( Session aSession, Consumer<CommitRequest.Response> onSuccess, Consumer<Exception> onFailure) { try { DatabasesClient client = getServerCore().getDatabasesClient(); List<Change> changes = ChangesJSONReader.read(getRequest().getChangesJson(), Scripts.getSpace()); ChangesSortProcess process = new ChangesSortProcess( changes, (Map<String, List<Change>> changeLogs) -> { try { client.commit( changeLogs, (Integer aUpdated) -> { if (onSuccess != null) { onSuccess.accept(new CommitRequest.Response(aUpdated)); } }, onFailure); } catch (Exception ex) { Logger.getLogger(CommitRequestHandler.class.getName()) .log(Level.SEVERE, null, ex); } }, onFailure); if (changes.isEmpty()) { if (onSuccess != null) { onSuccess.accept(new CommitRequest.Response(0)); } } else { changes .stream() .forEach( (change) -> { try { ((LocalQueriesProxy) serverCore.getQueries()) .getQuery( change.entityName, Scripts.getSpace(), (SqlQuery aQuery) -> { if (aQuery.isPublicAccess()) { AccessControlException aex = checkWritePrincipalPermission( (PlatypusPrincipal) Scripts.getContext().getPrincipal(), change.entityName, aQuery.getWriteRoles()); if (aex != null) { process.complete(null, null, aex, null); } else { process.complete(change, aQuery, null, null); } } else { process.complete( null, null, new AccessControlException( String.format( "Public access to query %s is denied while commiting changes for it's entity.", change.entityName)), null); } }, (Exception ex) -> { process.complete(null, null, null, ex); }); } catch (Exception ex) { Logger.getLogger(CommitRequestHandler.class.getName()) .log(Level.SEVERE, null, ex); } }); } } catch (Exception ex) { onFailure.accept(ex); } }
@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; } }