@Override public String stringify(Object object) { if (object instanceof JSObject) { final JSObject jso = (JSObject) object; if (jso.isFunction()) { Object call = jso.call(jso); return stringify(coerce(call)); } } return super.stringify(object); }
@Override public Object coerce(Object object) { if (object instanceof JSObject) { final JSObject jso = (JSObject) object; if (jso.isFunction()) { return new TemplateFunction() { @Override public String apply(String s) { Object call = jso.call(jso, s); return call == null ? null : call.toString(); } }; } else if (jso.isArray()) { // Let's see what it is really. Maybe it is a list. return new ArrayList(((Map) jso).values()); } } return super.coerce(object); } }
public void insertElementAtCursor() { try { if (insertable && rowsModel.getData() != null && rowsModel.getData().hasMember("splice")) { ListSelectionModel columnSelection = saveColumnsSelection(); JSObject ldata = rowsModel.getData(); JSObject jsSplice = (JSObject) ldata.getMember("splice"); JSObject jsIndexOf = (JSObject) ldata.getMember("indexOf"); Object oElementClass = ldata.getMember("elementClass"); JSObject jsElementClass = oElementClass instanceof JSObject && ((JSObject) oElementClass).isFunction() ? (JSObject) oElementClass : null; JSObject jsCreated = jsElementClass != null ? (JSObject) jsElementClass.newObject(new Object[]{}) : Scripts.getSpace().makeObj(); JSObject jsCursor = getCurrentRow(); rowsSelectionModel.removeListSelectionListener(generalSelectionChangesReflector); if (rowsModel instanceof ArrayTreedModel) { Object parentValue = jsCursor != null ? ModelWidget.getPathData(jsCursor, parentField) : null; int length = JSType.toInteger(ldata.getMember("length")); int cursorAt = JSType.toInteger(jsIndexOf.call(ldata, new Object[]{jsCursor})); int insertAt = cursorAt >= 0 && cursorAt < length ? cursorAt + 1 : length; jsSplice.call(ldata, new Object[]{insertAt, 0, jsCreated}); ModelWidget.setPathData(jsCreated, parentField, parentValue); } else { int cursorAt = rowsSelectionModel.getLeadSelectionIndex(); int insertAt = cursorAt >= 0 && cursorAt < length ? cursorAt + 1 : length; jsSplice.call(ldata, new Object[]{insertAt, 0, jsCreated});
@ScriptFunction(jsDoc = QUERY_JSDOC, params = {"params", "onSuccess", "onFailure"}) public JSObject query(JSObject aParams, JSObject aOnSuccess, JSObject aOnFailure) throws Exception { Query copied = query.copy(); aParams.keySet().forEach((String pName) -> { Parameter p = copied.getParameters().get(pName); if (p != null) { Object jsValue = aParams.getMember(pName); p.setValue(Scripts.getSpace().toJava(jsValue)); } }); return copied.execute(Scripts.getSpace(), aOnSuccess != null ? (JSObject v) -> { aOnSuccess.call(null, new Object[]{v}); } : null, aOnFailure != null ? (Exception ex) -> { aOnFailure.call(null, new Object[]{ex.getMessage()}); } : null); }
protected void fireRequeried() { if (onRequeried != null) { try { JSObject event = Scripts.getSpace().makeObj(); event.setMember("source", published); onRequeried.call(published, new Object[]{event}); } catch (Exception ex) { Logger.getLogger(ApplicationEntity.class.getName()).log(Level.SEVERE, null, ex); } } }
@Override public boolean contains(String aName, String aKey) { Object value = delegate.getMember(aName); if (value == null) { throw new NullPointerException("No mapped value for '" + aName + "(" + aKey + ")'"); } else if (value instanceof JSObject) { if (!((JSObject) value).isFunction()) { return ((JSObject) value).hasMember(aKey); } else { return false; } } else if (value instanceof Map) { return ((Map) value).containsKey(aKey); } else { throw new IllegalArgumentException("Non-mapped property for '" + aName + "(" + aKey + ")'"); } }
public void deleteSelectedElements() { if (deletable && rowsModel.getData() != null && rowsModel.getData().hasMember("splice")) { JSObject ldata = rowsModel.getData(); JSObject jsSplice = (JSObject) ldata.getMember("splice"); ListSelectionModel wasSeletedRows = saveRowsSelection(); ListSelectionModel wasSeletedColumns = saveColumnsSelection(); int length = JSType.toInteger(ldata.getMember("length")); for (int i = length - 1; i >= 0; i--) { Object oElement = ldata.getSlot(i); if (elements.contains(oElement)) { jsSplice.call(ldata, new Object[]{i, 1});
public JSObject readJsArray(Collection<Map<String, Object>> aCollection) { JSObject result = makeArray(); JSObject jsPush = (JSObject) result.getMember("push"); aCollection.forEach((Map<String, Object> aItem) -> { JSObject jsItem = makeObj(); aItem.entrySet().forEach((Map.Entry<String, Object> aItemContent) -> { jsItem.setMember(aItemContent.getKey(), toJs(aItemContent.getValue())); }); jsPush.call(result, new Object[]{jsItem}); }); return result; }
@Override public DynaProperty[] getDynaProperties() { if (properties.isEmpty()) { delegate.keySet().forEach((String key) -> { Object oMember = delegate.getMember(key); if (!(oMember instanceof JSObject) || !((JSObject) oMember).isFunction()) { properties.put(key, new DynaProperty(key)); } }); } return properties.values().toArray(new DynaProperty[]{}); }
@Override public Object getMember(String name) { return delegate.getMember(name); }
protected List<ChangeValue> parseObjectProperties(Object oData) throws Exception { List<ChangeValue> data = new ArrayList<>(); if (oData instanceof JSObject) { JSObject sValue = (JSObject) oData; sValue.keySet().stream().forEach((sValueName) -> { Object oValueValue = sValue.getMember(sValueName); Object convertedValueValue = space.toJava(oValueValue); data.add(new ChangeValue(sValueName, convertedValueValue)); }); } return data; }
@Override public void valueChanged(ListSelectionEvent e) { try { if (!try2StopAnyEditing()) { try2CancelAnyEditing(); } Object oModelData = field != null && !field.isEmpty() ? ModelWidget.getPathData(data, field) : data; JSObject modelData = oModelData instanceof JSObject ? (JSObject) oModelData : null; if (modelData != null) { JSObject jsNewCursor = rowsSelectionModel.getLeadSelectionIndex() != -1 ? elementByViewIndex(rowsSelectionModel.getLeadSelectionIndex()) : null; if (modelData.hasMember(cursorProperty)) { modelData.setMember(cursorProperty, jsNewCursor); } } repaint(); } catch (Exception ex) { Logger.getLogger(ModelGrid.class.getName()).log(Level.SEVERE, null, ex); } if (onItemSelected != null) { try { JSObject jsItem = elementByViewIndex(rowsSelectionModel.getLeadSelectionIndex()); onItemSelected.call(getPublished(), new Object[]{new com.eas.client.forms.events.ItemEvent(ModelGrid.this, jsItem).getPublished()}); } catch (Exception ex) { Logger.getLogger(ModelGrid.class.getName()).log(Level.SEVERE, null, ex); } } } }
public static void readFields(JSObject pa, Fields aFields) { int length = JSType.toInteger(pa.getMember("length")); for (int i = 0; i < length; i++) { JSObject po = (JSObject)pa.getSlot(i); assert po != null; String name = JSType.toString(po.getMember(NAME_PROP_NAME)); String desc = JSType.toString(po.getMember(DESCRIPTION_PROP_NAME)); String type = po.hasMember(TYPE_PROP_NAME) && po.getMember(TYPE_PROP_NAME) != null ? JSType.toString(po.getMember(TYPE_PROP_NAME)) : null; boolean pk = JSType.toBoolean(po.getMember(PK_PROP_NAME)); boolean nullable = JSType.toBoolean(po.getMember(NULLABLE_PROP_NAME)); Field f = aFields instanceof Parameters ? new Parameter(name) : new Field(name); f.setDescription(desc); f.setType(type); f.setPk(pk); f.setNullable(nullable); aFields.add(f); } } }
public JSObject createModule(String aModuleName) { assert lookupInGlobalFunc != null : SCRIPT_NOT_INITIALIZED; JSObject jsConstructor = lookup(aModuleName); if (jsConstructor != null && jsConstructor.isFunction()) { return (JSObject) jsConstructor.newObject(new Object[]{}); } else { return null; } }
@Override public String apply(String s) { Object call = jso.call(jso, s); return call == null ? null : call.toString(); } };
boolean hasFunction(String funcName) { final Object member = plugin.get(funcName); if (!(member instanceof JSObject)) { return false; } return ((JSObject) member).isFunction(); }
public int elementToIndex(JSObject anElement) { if (locator == null) { locator = new HashMap<>(); int length = JSType.toInteger(data.getMember("length")); if (length != Integer.MAX_VALUE) { for (int i = 0; i < length; i++) { Object oElement = data.getSlot(i); locator.put(oElement, i); } } } Integer idx = locator.get(anElement); return idx != null ? idx : -1; }