package org.argeo.slc.ant.detached;
+import java.util.Properties;
import java.util.UUID;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.ant.spring.MapArg;
import org.argeo.slc.ant.structure.SAwareTask;
import org.argeo.slc.core.SlcException;
import org.argeo.slc.detached.DetachedAnswer;
import org.argeo.slc.detached.DetachedClient;
import org.argeo.slc.detached.DetachedRequest;
+import org.argeo.slc.spring.SpringUtils;
public class SlcDetachedTask extends SAwareTask {
private final static Log log = LogFactory.getLog(SlcDetachedTask.class);
private String client;
private String action;
+ private MapArg properties;
+
@Override
protected void executeActions(String mode) {
- DetachedClient detachedClient = getBean(client);
+ // Find detached client
+ DetachedClient detachedClient = null;
+ if (client != null)
+ detachedClient = getBean(client);
+ else
+ detachedClient = SpringUtils.loadSingleFromContext(getContext(),
+ DetachedClient.class);
+
+ if (detachedClient == null)
+ throw new SlcException("Could not find any detached client.");
+
+ // Prepare and send request
DetachedRequest request = new DetachedRequest(UUID.randomUUID()
.toString());
request.setRef(action);
+
+ if (properties != null) {
+ Properties props = new Properties();
+ props.putAll(properties.getMap());
+ request.setProperties(props);
+ }
+
try {
detachedClient.sendRequest(request);
DetachedAnswer answer = detachedClient.receiveAnswer();
this.action = action;
}
+ public MapArg createProperties() {
+ if (properties == null)
+ properties = new MapArg();
+ else
+ throw new SlcException("Properties already declared.");
+ return properties;
+ }
}