package er.extensions.components.javascript;
import java.util.Enumeration;
import org.apache.log4j.Logger;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSMutableDictionary;
import er.extensions.foundation.ERXValueUtilities;
/**
* JavaScript remote execution.
* See: http://developer.apple.com/internet/javascript/iframe.html for details
* @binding sample sample binding explanation
*
* @author ak on Fri May 02 2003
*/
public class ERXJSRemoteCall extends WOComponent {
/**
* Do I need to update serialVersionUID?
* See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the
* <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a>
*/
private static final long serialVersionUID = 1L;
/** logging support */
private static final Logger log = Logger.getLogger(ERXJSRemoteCall.class);
protected NSDictionary _arguments;
protected NSArray _parameters;
protected String _url;
public Object currentValue;
public Object currentKey;
/**
* Public constructor
* @param context the context
*/
public ERXJSRemoteCall(WOContext context) {
super(context);
}
/** component does not synchronize it's variables */
@Override
public boolean synchronizesVariablesWithBindings() { return false; }
@Override
public String name() { return (String)valueForBinding("name");}
public String frameName() { return name() + "Frame";}
public String actionClass() { return (String)valueForBinding("actionClass");}
public String url() {
if(_url == null)
_url = context().directActionURLForActionNamed((actionClass() == null ? "" : actionClass() + "/") + name(), arguments());
return _url;
}
public NSDictionary arguments() {
if(_arguments == null) {
_arguments = new NSMutableDictionary();
for(Enumeration e = bindingKeys().objectEnumerator(); e.hasMoreElements();) {
String s = (String)e.nextElement();
if(s.indexOf("?") == 0) {
Object o = valueForBinding(s);
if(o != null)
((NSMutableDictionary)_arguments).setObjectForKey(s, s.substring(1));
}
}
}
return _arguments;
}
public NSArray parameters() {
if(_parameters == null) {
_parameters = ERXValueUtilities.arrayValue(valueForBinding("parameters"));
}
return _parameters;
}
@Override
public void reset() {
_arguments = null;
_parameters = null;
super.reset();
}
}