1 16 package org.outerj.daisy.frontend; 17 18 import org.outerj.daisy.frontend.util.AbstractDaisyApple; 19 import org.outerj.daisy.frontend.util.FormHelper; 20 import org.outerj.daisy.frontend.util.HttpMethodNotAllowedException; 21 import org.outerj.daisy.frontend.components.siteconf.SiteConf; 22 import org.outerj.daisy.repository.Repository; 23 import org.outerj.daisy.repository.Document; 24 import org.outerj.daisy.repository.CollectionManager; 25 import org.outerj.daisy.repository.schema.DocumentType; 26 import org.outerj.daisy.repository.schema.PartTypeUse; 27 import org.apache.cocoon.components.flow.apples.AppleRequest; 28 import org.apache.cocoon.components.flow.apples.AppleResponse; 29 import org.apache.cocoon.components.flow.apples.StatelessAppleController; 30 import org.apache.cocoon.environment.Request; 31 import org.apache.cocoon.forms.formmodel.Form; 32 import org.apache.cocoon.forms.formmodel.MultiValueField; 33 import org.apache.cocoon.forms.formmodel.Field; 34 import org.apache.cocoon.forms.datatype.SelectionList; 35 import org.apache.cocoon.forms.datatype.StaticSelectionList; 36 import org.apache.cocoon.forms.datatype.Datatype; 37 import org.apache.cocoon.forms.util.StringMessage; 38 import org.apache.cocoon.forms.FormContext; 39 import org.apache.avalon.framework.service.Serviceable; 40 import org.apache.avalon.framework.service.ServiceManager; 41 import org.apache.avalon.framework.service.ServiceException; 42 43 import java.util.Locale ; 44 import java.util.Map ; 45 import java.util.HashMap ; 46 47 public class CreatePlaceholderDocApple extends AbstractDaisyApple implements StatelessAppleController, Serviceable { 48 private ServiceManager serviceManager; 49 50 public void service(ServiceManager serviceManager) throws ServiceException { 51 this.serviceManager = serviceManager; 52 } 53 54 protected void processInternal(AppleRequest appleRequest, AppleResponse appleResponse) throws Exception { 55 Request request = appleRequest.getCocoonRequest(); 56 Repository repository = WikiHelper.getRepository(request, serviceManager); 57 Locale locale = WikiHelper.getLocale(request); 58 SiteConf siteConf = WikiHelper.getSiteConf(request); 59 Form form = createForm(repository, locale, siteConf); 60 61 if (request.getMethod().equals("POST")) { 62 boolean success = form.process(new FormContext(request, locale)); 63 if (success) { 64 String name = (String )form.getChild("name").getValue(); 65 long documentTypeId = ((Long )form.getChild("documentType").getValue()).longValue(); 66 long branchId = ((Long )form.getChild("branchId").getValue()).longValue(); 67 long languageId = ((Long )form.getChild("languageId").getValue()).longValue(); 68 Document document = repository.createDocument(name, documentTypeId, branchId, languageId); 69 70 Object [] collectionIds = (Object [])form.getChild("collections").getValue(); 71 CollectionManager collectionManager = repository.getCollectionManager(); 72 for (int i = 0; i < collectionIds.length; i++) { 73 long collectionId = ((Long )collectionIds[i]).longValue(); 74 document.addToCollection(collectionManager.getCollection(collectionId, false)); 75 } 76 77 DocumentType documentType = repository.getRepositorySchema().getDocumentTypeById(documentTypeId, false); 78 PartTypeUse[] partTypeUses = documentType.getPartTypeUses(); 79 for (int i = 0; i < partTypeUses.length; i++) { 80 if (partTypeUses[i].isRequired() && partTypeUses[i].getPartType().isDaisyHtml()) { 81 document.setPart(partTypeUses[i].getPartType().getName(), "text/xml", "<html><body><p>TODO</p></body></html>".getBytes("UTF-8")); 82 } 83 } 84 85 document.save(false); 87 88 Map viewData = new HashMap (); 89 viewData.put("documentId", String.valueOf(document.getId())); 90 viewData.put("mountPoint", WikiHelper.getMountPoint(request)); 91 viewData.put("siteName", siteConf.getName()); 92 viewData.put("name", name); 93 viewData.put("branchId", String.valueOf(branchId)); 94 viewData.put("branch", repository.getVariantManager().getBranch(branchId, false).getName()); 95 viewData.put("languageId", String.valueOf(languageId)); 96 viewData.put("language", repository.getVariantManager().getLanguage(languageId, false).getName()); 97 appleResponse.sendPage("Template-placeholder_finish-Pipe", viewData); 98 return; 99 } 100 } else if (request.getMethod().equals("GET")) { 101 long branchId = RequestUtil.getBranchId(request, siteConf.getBranchId(), repository); 102 long languageId = RequestUtil.getLanguageId(request, siteConf.getLanguageId(), repository); 103 form.getChild("branchId").setValue(new Long (branchId)); 104 form.getChild("languageId").setValue(new Long (languageId)); 105 106 long documentTypeId; 107 if (request.getParameter("documentType") == null) { 108 documentTypeId = siteConf.getDefaultDocumentTypeId(); 109 if (documentTypeId == -1) 110 documentTypeId = repository.getRepositorySchema().getDocumentTypeByName("SimpleDocument", false).getId(); 111 } else { 112 documentTypeId = RequestUtil.getLongParameter(request, "documentType"); 113 } 114 form.getChild("documentType").setValue(new Long (documentTypeId)); 115 } else { 116 throw new HttpMethodNotAllowedException(request.getMethod()); 117 } 118 119 Map viewData = new HashMap (); 120 viewData.put("CocoonFormsInstance", form); 121 viewData.put("locale", locale); 122 viewData.put("mountPoint", WikiHelper.getMountPoint(request)); 123 viewData.put("siteName", siteConf.getName()); 124 viewData.put("branchesArray", repository.getVariantManager().getAllBranches(false).getArray()); 125 viewData.put("languagesArray", repository.getVariantManager().getAllLanguages(false).getArray()); 126 appleResponse.sendPage("DialogForm-placeholder_doc-Pipe", viewData); 127 } 128 129 private Form createForm(Repository repository, Locale locale, SiteConf siteConf) throws Exception { 130 Form form = FormHelper.createForm(serviceManager, "resources/form/placeholder_doc_definition.xml"); 131 132 MultiValueField collectionsField = (MultiValueField)form.getChild("collections"); 133 collectionsField.setSelectionList(repository.getCollectionManager().getCollections(false).getArray(), "id", "name"); 134 collectionsField.setValues(new Long [] {new Long (siteConf.getCollectionId())}); 135 136 Field documentTypeField = (Field)form.getChild("documentType"); 137 DocumentType[] documentTypes = DocumentTypeSelectionApple.getFilteredDocumentTypes(repository, -1); 138 documentTypeField.setSelectionList(createDocumentTypeSelectionList(documentTypes, locale, documentTypeField.getDatatype())); 139 140 return form; 141 } 142 143 144 private SelectionList createDocumentTypeSelectionList(DocumentType[] types, Locale locale, Datatype datatype) { 145 StaticSelectionList selectionList = new StaticSelectionList(datatype); 146 for (int i = 0; i < types.length; i++) { 147 selectionList.addItem(new Long (types[i].getId()), new StringMessage(types[i].getLabel(locale))); 148 } 149 return selectionList; 150 } 151 } 152 | Popular Tags |