1 16 package org.outerj.daisy.frontend; 17 18 import org.apache.cocoon.components.flow.apples.StatelessAppleController; 19 import org.apache.cocoon.components.flow.apples.AppleRequest; 20 import org.apache.cocoon.components.flow.apples.AppleResponse; 21 import org.apache.cocoon.environment.Request; 22 import org.apache.avalon.framework.service.Serviceable; 23 import org.apache.avalon.framework.service.ServiceManager; 24 import org.apache.avalon.framework.service.ServiceException; 25 import org.apache.xmlbeans.XmlCursor; 26 import org.outerj.daisy.frontend.util.AbstractDaisyApple; 27 import org.outerj.daisy.frontend.util.XmlObjectXMLizable; 28 import org.outerj.daisy.frontend.util.MultiXMLizable; 29 import org.outerj.daisy.repository.Repository; 30 import org.outerj.daisy.repository.RepositoryException; 31 import org.outerj.daisy.repository.variant.VariantManager; 32 import org.outerj.daisy.doctaskrunner.DocumentTaskManager; 33 import org.outerj.daisy.doctaskrunner.TaskDocDetails; 34 import org.outerj.daisy.doctaskrunner.Task; 35 import org.outerx.daisy.x10Doctaskrunner.TaskDocDetailDocument; 36 import org.outerx.daisy.x10Doctaskrunner.TaskDocDetailsDocument; 37 38 import java.util.Map ; 39 import java.util.HashMap ; 40 41 public class DocumentTaskDetailsApple extends AbstractDaisyApple implements StatelessAppleController, Serviceable { 42 private ServiceManager serviceManager; 43 44 public void service(ServiceManager serviceManager) throws ServiceException { 45 this.serviceManager = serviceManager; 46 } 47 48 protected void processInternal(AppleRequest appleRequest, AppleResponse appleResponse) throws Exception { 49 Request request = appleRequest.getCocoonRequest(); 50 Repository repository = WikiHelper.getRepository(request, serviceManager); 51 52 if (repository.isInRole("guest") && repository.getActiveRoleIds().length == 1) 53 throw new Exception ("Document Task functionality not available for guest users."); 54 55 DocumentTaskManager taskManager = (DocumentTaskManager)repository.getExtension("DocumentTaskManager"); 56 57 String idParam = appleRequest.getSitemapParameter("id"); 58 long id; 59 try { 60 id = Long.parseLong(idParam); 61 } catch (NumberFormatException e) { 62 throw new Exception ("Invalid task ID: " + idParam); 63 } 64 TaskDocDetails taskDocDetails = taskManager.getTaskDocDetails(id); 65 TaskDocDetailsDocument taskDocDetailsDocument = taskDocDetails.getXml(); 66 annotateTaskDocDetails(taskDocDetailsDocument.getTaskDocDetails().getTaskDocDetailArray(), repository); 67 Task task = taskManager.getTask(id); 68 69 Map viewData = new HashMap (); 70 viewData.put("pageXml", new MultiXMLizable(new XmlObjectXMLizable(taskDocDetailsDocument), new XmlObjectXMLizable(task.getXml()))); 71 viewData.put("pageContext", new PageContext(getMountPoint(), repository, getLayoutType(), getSkin(), SkinConfHelper.getGlobalSkinConf(serviceManager), getContext())); 72 73 appleResponse.sendPage("DocumentTaskDetailsPipe", viewData); 74 } 75 76 private void annotateTaskDocDetails(TaskDocDetailDocument.TaskDocDetail[] taskDocDetailsXml, Repository repository) { 77 VariantManager variantManager = repository.getVariantManager(); 78 for (int i = 0; i < taskDocDetailsXml.length; i++) { 79 long branchId = taskDocDetailsXml[i].getBranchId(); 80 long languageId = taskDocDetailsXml[i].getLanguageId(); 81 String branch; 82 String language; 83 try { 84 branch = variantManager.getBranch(branchId, false).getName(); 85 } catch (RepositoryException e) { 86 branch = String.valueOf(branchId); 87 } 88 try { 89 language = variantManager.getLanguage(languageId, false).getName(); 90 } catch (RepositoryException e) { 91 language = String.valueOf(languageId); 92 } 93 XmlCursor cursor = taskDocDetailsXml[i].newCursor(); 94 cursor.toNextToken(); 95 cursor.insertAttributeWithValue("branch", branch); 96 cursor.insertAttributeWithValue("language", language); 97 cursor.dispose(); 98 } 99 } 100 } 101 | Popular Tags |