1 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 ; 35 import java.util.HashMap ; 36 import java.util.Locale ; 37 import java.util.Date ; 38 import java.text.DateFormat ; 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 { 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 ("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 idParam = appleRequest.getSitemapParameter("id"); 58 if (idParam != null) { 59 long id; 60 try { 61 id = Long.parseLong(idParam); 62 } catch (NumberFormatException e) { 63 throw new Exception ("Invalid task ID: " + idParam); 64 } 65 if (request.getMethod().equals("POST")) { 66 String 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 ("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 locale = WikiHelper.getLocale(appleRequest.getCocoonRequest()); 80 annotateTasks(tasksDocument.getTasks().getTaskArray(), repository, locale); 81 82 Map viewData = new HashMap (); 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 locale) { 93 DateFormat 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 ownerName; 98 try { 99 ownerName = userManager.getUserDisplayName(ownerId); 100 } catch (RepositoryException e) { 101 ownerName = "(error retrieving owner name)"; 102 } 103 Date startedAt = tasksXml[i].getStartedAt().getTime(); 104 Date 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 |