/* StubEvent.java
Purpose:
Description:
History:
Fri Jun 10 16:05:12 TST 2011, Created by tomyeh
Copyright (C) 2011 Potix Corporation. All Rights Reserved.
*/
package org.zkoss.zk.ui.event;
import java.util.Map;
import org.zkoss.zk.au.AuRequest;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.sys.StubComponent;
/**
* The event sent from a stub component ({@link org.zkoss.zk.ui.sys.StubComponent}.
* <p>The target component ({@link #getTarget}) is the nearest non-stub
* parent. While the stub component causes the event to be sent can be
* found by use of {@link #getId}, if it is assigned with an ID.
*
* @author tomyeh
* @since 6.0.0
*/
public class StubEvent extends Event {
private final String _cmd, _uuid, _id;
private final Map<String, Object> _data;
/** Converts an AU request to a stub event.
*/
public static final StubEvent getStubEvent(AuRequest request) {
final Component target = request.getComponent();
final Map<String, Object> data = request.getData();
final String uuid = request.getUuid();
return new StubEvent("onStub", target, request.getCommand(), uuid, getId(target, uuid), data);
}
private static final String getId(Component comp, String uuid) {
if (comp instanceof StubComponent)
return ((StubComponent) comp).getId(uuid);
if (comp != null) {
String id = comp.getId();
if (id != null && id.length() > 0)
return id;
}
return null;
}
/** Returns the ID of the stub component sending the request,
* or null if not available.
*/
public String getId() {
return _id;
}
/** Constructs a check-relevant event.
* @param id the ID of the stub component causes this event.
*/
public StubEvent(String name, Component target, String cmd, String uuid, String id, Map<String, Object> data) {
super(name, target);
_cmd = cmd;
_uuid = uuid;
_id = id;
_data = data;
}
public StubEvent(StubEvent evt, Component target) {
this(evt.getName(), target, evt._cmd, evt._uuid, evt._id, evt._data);
}
/** Returns the command of the AU request, such as onChange.
*/
public String getCommand() {
return _cmd;
}
/** Returns the UUID of the stub component sending the request.
*/
public String getUuid() {
return _uuid;
}
/** Returns the data carried in the request.
* The content depends on the request ({@link AuRequest}).
*/
public Map<String, Object> getRequestData() {
return _data;
}
}