/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.client.forms.components.model; import com.eas.client.forms.HasJsValue; import com.eas.client.forms.components.rt.HasValue; import com.eas.script.Scripts; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import jdk.nashorn.api.scripting.JSObject; import jdk.nashorn.internal.runtime.JSType; /** * Interface for scalar data-aware widget. Scalar widget views and edits a value * from particular object and particular field of a js object. * * @param <V> * @author mg */ public interface ModelWidget<V> extends TableCellRenderer, TableCellEditor, HasValue<V>, HasJsValue { public static Object getPathData(JSObject anElement, String aPath) { if (aPath != null && !aPath.isEmpty()) { JSObject target = anElement; String[] path = aPath.split("\\."); String propName = path[0]; for (int i = 1; i < path.length; i++) { Object oTarget = target.getMember(propName); propName = path[i]; if (!(oTarget instanceof JSObject)) { propName = null; break; } else { target = (JSObject) oTarget; } } Object value = null; if (propName != null) { if (Scripts.isInitialized()/* Carzy designer :(*/) { value = Scripts.getSpace().toJava(target.getMember(propName)); } else { value = target.getMember(propName); if (JSType.nullOrUndefined(value)) { value = null; } } } else { Logger.getLogger(ModelWidget.class.getName()).log(Level.FINE, PROPERTY_PATH_MISSING_MSG, aPath); } return value; } else { return null; } } public static void setPathData(JSObject anElement, String aPath, Object aValue) { if (aPath != null && !aPath.isEmpty()) { JSObject target = anElement; String[] path = aPath.split("\\."); String propName = path[0]; for (int i = 1; i < path.length; i++) { Object oTarget = target.getMember(propName); propName = path[i]; if (!(oTarget instanceof JSObject)) { propName = null; break; } else { target = (JSObject) oTarget; } } if (propName != null) { Object jsData = Scripts.isInitialized()/* Carzy designer :(*/ ? Scripts.getSpace().toJs(aValue) : aValue; target.setMember(propName, jsData); } else { Logger.getLogger(ModelWidget.class.getName()).log(Level.FINE, PROPERTY_PATH_MISSING_MSG, aPath); } } else { Logger.getLogger(ModelWidget.class.getName()).log(Level.FINE, "Property path missing"); } } static final String PROPERTY_PATH_MISSING_MSG = "Property path: {0} doesn't exist."; public boolean isFieldContentModified(); public void injectPublished(JSObject aPublished); public JSObject getOnRender(); public void setOnRender(JSObject aValue); public JSObject getOnSelect(); public void setOnSelect(JSObject aValue); public boolean isSelectOnly(); public void setSelectOnly(boolean aValue); public JSObject getData(); public void setData(JSObject aData); public String getField(); public void setField(String aFieldPath) throws Exception; public boolean getNullable(); public void setNullable(boolean aValue); }