+ }
+ }
+
+ if (execute) {
+ DetachedStep step = (DetachedStep) obj;
+ answer = step.execute(detachedContext, request);
+ } else {
+ skippedLog.append("Skipped path " + request.getPath()
+ + " (skipCount=" + skipCount + ")");
+ answer = new DetachedAnswer(request);
+ answer.setStatus(DetachedAnswer.SKIPPED);
+ answer.setLog(skippedLog.toString());
+ }
+ return answer;
+ }
+
+ protected DetachedAnswer processAdminCommand(DetachedAdminCommand obj,
+ DetachedRequest request) {
+ DetachedAnswer answer;
+ if (obj instanceof OpenSession) {
+ if (getCurrentSession() != null)
+ throw new DetachedException(
+ "There is already an open session #"
+ + getCurrentSession().getUuid());
+ sessions.add(((OpenSession) obj).execute(request, bundleContext));
+ answer = new DetachedAnswer(request, "Session #"
+ + getCurrentSession().getUuid() + " open.");
+ } else if (obj instanceof CloseSession) {
+ if (getCurrentSession() == null)
+ throw new DetachedException("There is no open session to close");
+ answer = new DetachedAnswer(request, "Session #"
+ + getCurrentSession().getUuid() + " closed.");
+ answer.setStatus(DetachedAnswer.CLOSED_SESSION);
+ } else {
+ answer = null;
+ }
+ return answer;
+ }