KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > frontend > DocumentTaskApple


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.frontend;
17
18 import org.outerj.daisy.frontend.util.*;
19 import org.outerj.daisy.repository.Repository;
20 import org.outerj.daisy.repository.RepositoryException;
21 import org.outerj.daisy.repository.user.UserManager;
22 import org.outerj.daisy.doctaskrunner.DocumentTaskManager;
23 import org.apache.cocoon.components.flow.apples.StatelessAppleController;
24 import org.apache.cocoon.components.flow.apples.AppleRequest;
25 import org.apache.cocoon.components.flow.apples.AppleResponse;
26 import org.apache.cocoon.environment.Request;
27 import org.apache.avalon.framework.service.Serviceable;
28 import org.apache.avalon.framework.service.ServiceManager;
29 import org.apache.avalon.framework.service.ServiceException;
30 import org.apache.xmlbeans.XmlCursor;
31 import org.outerx.daisy.x10Doctaskrunner.TasksDocument;
32 import org.outerx.daisy.x10Doctaskrunner.TaskDocument;
33
34 import java.util.Map JavaDoc;
35 import java.util.HashMap JavaDoc;
36 import java.util.Locale JavaDoc;
37 import java.util.Date JavaDoc;
38 import java.text.DateFormat JavaDoc;
39
40 public class DocumentTaskApple extends AbstractDaisyApple implements StatelessAppleController, Serviceable {
41     private ServiceManager serviceManager;
42
43     public void service(ServiceManager serviceManager) throws ServiceException {
44         this.serviceManager = serviceManager;
45     }
46
47     protected void processInternal(AppleRequest appleRequest, AppleResponse appleResponse) throws Exception JavaDoc {
48         Request request = appleRequest.getCocoonRequest();
49         Repository repository = WikiHelper.getRepository(request, serviceManager);
50
51         if (repository.isInRole("guest") && repository.getActiveRoleIds().length == 1)
52             throw new Exception JavaDoc("Document Task functionality not available for guest users.");
53
54         DocumentTaskManager taskManager = (DocumentTaskManager)repository.getExtension("DocumentTaskManager");
55         TasksDocument tasksDocument = taskManager.getTasks().getXml();
56
57         String JavaDoc idParam = appleRequest.getSitemapParameter("id");
58         if (idParam != null) {
59             long id;
60             try {
61                 id = Long.parseLong(idParam);
62             } catch (NumberFormatException JavaDoc e) {
63                 throw new Exception JavaDoc("Invalid task ID: " + idParam);
64             }
65             if (request.getMethod().equals("POST")) {
66                 String JavaDoc action = RequestUtil.getStringParameter(request, "action");
67                 if (action.equals("interrupt")) {
68                     taskManager.interruptTask(id);
69                 } else if (action.equals("delete")) {
70                     taskManager.deleteTask(id);
71                 } else {
72                     throw new Exception JavaDoc("Unsupported action parameter value: " + action);
73                 }
74                 appleResponse.redirectTo(getMountPoint() + "/doctask");
75             } else {
76                 throw new HttpMethodNotAllowedException(request.getMethod());
77             }
78         } else if (request.getMethod().equals("GET")) {
79             Locale JavaDoc locale = WikiHelper.getLocale(appleRequest.getCocoonRequest());
80             annotateTasks(tasksDocument.getTasks().getTaskArray(), repository, locale);
81
82             Map JavaDoc viewData = new HashMap JavaDoc();
83             viewData.put("pageXml", new XmlObjectXMLizable(tasksDocument));
84             viewData.put("pageContext", new PageContext(getMountPoint(), repository, getLayoutType(), getSkin(), SkinConfHelper.getGlobalSkinConf(serviceManager), getContext()));
85
86             appleResponse.sendPage("DocumentTasksPipe", viewData);
87         } else {
88             throw new HttpMethodNotAllowedException(request.getMethod());
89         }
90     }
91
92     private void annotateTasks(TaskDocument.Task[] tasksXml, Repository repository, Locale JavaDoc locale) {
93         DateFormat JavaDoc dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, locale);
94         UserManager userManager = repository.getUserManager();
95         for (int i = 0; i < tasksXml.length; i++) {
96             long ownerId = tasksXml[i].getOwnerId();
97             String JavaDoc ownerName;
98             try {
99                 ownerName = userManager.getUserDisplayName(ownerId);
100             } catch (RepositoryException e) {
101                 ownerName = "(error retrieving owner name)";
102             }
103             Date JavaDoc startedAt = tasksXml[i].getStartedAt().getTime();
104             Date JavaDoc finishedAt = tasksXml[i].getFinishedAt() != null ? tasksXml[i].getFinishedAt().getTime() : null;
105             XmlCursor cursor = tasksXml[i].newCursor();
106             cursor.toNextToken();
107             cursor.insertAttributeWithValue("ownerName", ownerName);
108             cursor.insertAttributeWithValue("startedAtFormatted", dateFormat.format(startedAt));
109             if (finishedAt != null)
110                 cursor.insertAttributeWithValue("finishedAtFormatted", dateFormat.format(finishedAt));
111             cursor.dispose();
112         }
113     }
114 }
115
Popular Tags