1 16 package org.outerj.daisy.frontend.admin; 17 18 import org.outerj.daisy.frontend.util.AbstractDaisyApple; 19 import org.outerj.daisy.frontend.util.FormHelper; 20 import org.outerj.daisy.frontend.PageContext; 21 import org.outerj.daisy.frontend.SkinConfHelper; 22 import org.outerj.daisy.frontend.WikiHelper; 23 import org.outerj.daisy.repository.Repository; 24 import org.outerj.daisy.repository.user.UserManager; 25 import org.outerj.daisy.repository.acl.AccessManager; 26 import org.outerj.daisy.repository.acl.Acl; 27 import org.outerj.daisy.repository.acl.AclSubjectType; 28 import org.apache.cocoon.components.flow.apples.AppleRequest; 29 import org.apache.cocoon.components.flow.apples.AppleResponse; 30 import org.apache.cocoon.forms.formmodel.Form; 31 import org.apache.cocoon.forms.formmodel.Repeater; 32 import org.apache.cocoon.forms.binding.Binding; 33 import org.apache.cocoon.forms.FormContext; 34 import org.apache.avalon.framework.service.Serviceable; 35 import org.apache.avalon.framework.service.ServiceManager; 36 import org.apache.avalon.framework.service.ServiceException; 37 38 import java.util.Map ; 39 import java.util.HashMap ; 40 import java.util.Locale ; 41 42 45 public class AclEditorApple extends AbstractDaisyApple implements Serviceable { 46 private ServiceManager serviceManager; 47 private Form form; 48 private Binding binding; 49 private boolean init = false; 50 private Map viewData; 51 private Locale locale; 52 private Acl acl; 53 54 public void service(ServiceManager serviceManager) throws ServiceException { 55 this.serviceManager = serviceManager; 56 } 57 58 protected void processInternal(AppleRequest appleRequest, AppleResponse appleResponse) throws Exception { 59 if (!init) { 60 Repository repository = WikiHelper.getRepository(appleRequest.getCocoonRequest(), serviceManager); 61 AccessManager accessManager = repository.getAccessManager(); 62 63 form = FormHelper.createForm(serviceManager, "resources/form/acl_definition.xml"); 64 binding = FormHelper.createBinding(serviceManager, "resources/form/acl_binding.xml"); 65 locale = WikiHelper.getLocale(appleRequest.getCocoonRequest()); 66 67 acl = accessManager.getStagingAcl(); 68 binding.loadFormFromModel(form, acl); 69 annotateSubjectValues(form, repository); 70 71 viewData = new HashMap (); 72 viewData.put("submitPath", getPath()); 73 viewData.put("pageContext", new PageContext(getMountPoint(), repository, getLayoutType(), getSkin(), SkinConfHelper.getGlobalSkinConf(serviceManager), getContext())); 74 viewData.put("CocoonFormsInstance", form); 75 viewData.put("locale", locale); 76 viewData.put("entityName", "acl"); 77 78 init = true; 79 80 appleResponse.redirectTo(getPath()); 81 } else { 82 String methodName = appleRequest.getCocoonRequest().getMethod(); 83 if (methodName.equals("GET")) { 84 appleResponse.sendPage("Form-acl-Pipe", viewData); 86 } else if (methodName.equals("POST")) { 87 boolean endProcessing = form.process(new FormContext(appleRequest.getCocoonRequest(), locale)); 89 90 if (!endProcessing) { 91 appleResponse.sendPage("Form-acl-Pipe", viewData); 92 } else { 93 binding.saveFormToModel(form, acl); 94 acl.save(); 95 appleResponse.redirectTo(getMountPoint() + "/admin"); 96 } 97 } else { 98 throw new Exception ("Unsupported HTTP method: " + methodName); 99 } 100 } 101 } 102 103 private String getPath() { 104 return getMountPoint() + "/admin/acl/staging/edit/" + getContinuationId(); 105 } 106 107 private void annotateSubjectValues(Form form, Repository repository) { 108 UserManager userManager = repository.getUserManager(); 109 Repeater objectsRepeater = (Repeater)form.getChild("objects"); 110 for (int i = 0; i < objectsRepeater.getSize(); i++) { 111 Repeater entriesRepeater = (Repeater)objectsRepeater.getRow(i).getChild("entries"); 112 for (int k = 0; k < entriesRepeater.getSize(); k++) { 113 Repeater.RepeaterRow entry = entriesRepeater.getRow(k); 114 AclSubjectType subjectType = (AclSubjectType)entry.getChild("subjectType").getValue(); 115 long subjectValue; 116 subjectValue = ((Long )entry.getChild("subjectValue").getValue()).longValue(); 117 if (subjectType == AclSubjectType.ROLE) { 118 String roleName = null; 119 try { 120 roleName = userManager.getRole(subjectValue, false).getName(); 121 } catch (Exception e) { 122 roleName = "(error)"; 123 } 124 entry.getChild("subjectValueLabel").setValue(roleName); 125 } else if (subjectType == AclSubjectType.USER) { 126 String userName = null; 127 try { 128 userName = userManager.getUser(subjectValue, false).getLogin(); 129 } catch (Exception e) { 130 userName = "(error)"; 131 } 132 entry.getChild("subjectValueLabel").setValue(userName); 133 } 134 } 135 } 136 } 137 } 138 | Popular Tags |