01: /*
02: * Copyright 2007 Outerthought bvba and Schaubroeck nv
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16: package org.outerj.daisy.workflow.serverimpl.httpconnector.handlers;
17:
18: import org.outerj.daisy.httpconnector.spi.HttpUtil;
19: import org.outerj.daisy.httpconnector.spi.RequestHandlerSupport;
20: import org.outerj.daisy.repository.Repository;
21: import org.outerj.daisy.workflow.WorkflowManager;
22: import org.outerj.daisy.workflow.WfPoolManager;
23: import org.outerj.daisy.workflow.WfListHelper;
24: import org.outerj.daisy.xmlutil.LocalSAXParserFactory;
25: import org.outerj.daisy.util.HttpConstants;
26: import org.apache.xmlbeans.XmlOptions;
27: import org.outerx.daisy.x10Workflow.UsersDocument;
28:
29: import javax.servlet.http.HttpServletRequest;
30: import javax.servlet.http.HttpServletResponse;
31: import java.util.Map;
32: import java.util.List;
33:
34: public class PoolMembershipHandler extends
35: AbstractWorkflowRequestHandler {
36: public void handleRequest(Map matchMap, HttpServletRequest request,
37: HttpServletResponse response, Repository repository,
38: RequestHandlerSupport support) throws Exception {
39: long id = HttpUtil.parseId("pool", (String) matchMap.get("1"));
40:
41: WorkflowManager workflowManager = (WorkflowManager) repository
42: .getExtension("WorkflowManager");
43: WfPoolManager poolManager = workflowManager.getPoolManager();
44:
45: if (request.getMethod().equals(HttpConstants.GET)) {
46: List<Long> userIds = poolManager.getUsersForPool(id);
47: WfListHelper.getUserIdsAsXml(userIds).save(
48: response.getOutputStream());
49: } else if (request.getMethod().equals(HttpConstants.POST)) {
50: String action = HttpUtil.getStringParam(request, "action");
51: if (action.equals("add") || action.equals("remove")) {
52: XmlOptions xmlOptions = new XmlOptions()
53: .setLoadUseXMLReader(LocalSAXParserFactory
54: .newXmlReader());
55: UsersDocument usersDocument = UsersDocument.Factory
56: .parse(request.getInputStream(), xmlOptions);
57:
58: if (action.equals("add")) {
59: poolManager.addUsersToPool(id, usersDocument
60: .getUsers().getIdList());
61: } else {
62: poolManager.removeUsersFromPool(id, usersDocument
63: .getUsers().getIdList());
64: }
65: } else if (action.equals("clear")) {
66: poolManager.clearPool(id);
67: } else {
68: HttpUtil
69: .sendCustomError(
70: "Invalid value for action parameter: "
71: + action,
72: HttpConstants._400_Bad_Request,
73: response);
74: }
75: } else {
76: response.sendError(HttpConstants._405_Method_Not_Allowed);
77: }
78: }
79:
80: public String getPathPattern() {
81: return "/pool/*/membership";
82: }
83: }
|