KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > frontend > admin > AclEditorApple


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.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 JavaDoc;
39 import java.util.HashMap JavaDoc;
40 import java.util.Locale JavaDoc;
41
42 /**
43  * Controller for the editing of an ACL.
44  */

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 JavaDoc viewData;
51     private Locale JavaDoc 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 JavaDoc {
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 JavaDoc();
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 JavaDoc methodName = appleRequest.getCocoonRequest().getMethod();
83             if (methodName.equals("GET")) {
84                 // display the form
85
appleResponse.sendPage("Form-acl-Pipe", viewData);
86             } else if (methodName.equals("POST")) {
87                 // handle a form submit
88
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 JavaDoc("Unsupported HTTP method: " + methodName);
99             }
100         }
101     }
102
103     private String JavaDoc 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 JavaDoc)entry.getChild("subjectValue").getValue()).longValue();
117                 if (subjectType == AclSubjectType.ROLE) {
118                     String JavaDoc roleName = null;
119                     try {
120                         roleName = userManager.getRole(subjectValue, false).getName();
121                     } catch (Exception JavaDoc e) {
122                         roleName = "(error)";
123                     }
124                     entry.getChild("subjectValueLabel").setValue(roleName);
125                 } else if (subjectType == AclSubjectType.USER) {
126                     String JavaDoc userName = null;
127                     try {
128                         userName = userManager.getUser(subjectValue, false).getLogin();
129                     } catch (Exception JavaDoc e) {
130                         userName = "(error)";
131                     }
132                     entry.getChild("subjectValueLabel").setValue(userName);
133                 }
134             }
135         }
136     }
137 }
138
Popular Tags