public SubscribeBinding() {
super("subscribe");
}
public Object parse(Element element, Parse parse, Parser parser) {
SubscribeOperation subscribeOperation = new SubscribeOperation();
// these are the different ways of specifying observables:
// <subscribe [context='contextName'] [event(s)='...']... /> will use the context as the observable
// <subscribe [context='contextName'] object(s)='objectName' [event(s)='...'] ... /> will use the object(s) with the given name in the specified context
// <subscribe [context='contextName'] to='wire-events' event(s)='...' [object(s)='...'] ... /> will listen to wire events of a specific object in the specified context
// context
String contextName = XmlUtil.attribute(element, "context");
subscribeOperation.setContextName(contextName);
// to
String to = XmlUtil.attribute(element, "to");
if ("wire-events".equalsIgnoreCase(to)) {
subscribeOperation.setWireEvents(true);
}
// events
List<String> eventNames = XmlUtil.parseList(element, "event");
subscribeOperation.setEventNames(eventNames);
// objects
List<String> objectNames = XmlUtil.parseList(element, "object");
subscribeOperation.setObjectNames(objectNames);
// method & args
String methodName = XmlUtil.attribute(element, "method");
subscribeOperation.setMethodName(methodName);
List<Element> argElements = XmlUtil.elements(element, "arg");
Parser wireParser = (Parser) parser;
List<ArgDescriptor> argDescriptors = wireParser.parseArgs(argElements, parse);
subscribeOperation.setArgDescriptors(argDescriptors);
return subscribeOperation;
}