KickJava   Java API By Example, From Geeks To Geeks.

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


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.apache.cocoon.components.flow.apples.AppleRequest;
19 import org.apache.cocoon.components.flow.apples.AppleResponse;
20 import org.apache.cocoon.forms.formmodel.Form;
21 import org.apache.cocoon.forms.formmodel.Repeater;
22 import org.apache.cocoon.forms.formmodel.Field;
23 import org.apache.cocoon.forms.formmodel.Action;
24 import org.apache.cocoon.forms.binding.Binding;
25 import org.apache.cocoon.forms.event.ActionListener;
26 import org.apache.cocoon.forms.event.ActionEvent;
27 import org.apache.cocoon.forms.FormContext;
28 import org.apache.avalon.framework.service.Serviceable;
29 import org.apache.avalon.framework.service.ServiceManager;
30 import org.apache.avalon.framework.service.ServiceException;
31 import org.apache.avalon.framework.activity.Disposable;
32 import org.outerj.daisy.frontend.util.FormHelper;
33 import org.outerj.daisy.frontend.util.AbstractDaisyApple;
34 import org.outerj.daisy.frontend.PageContext;
35 import org.outerj.daisy.frontend.SkinConfHelper;
36 import org.outerj.daisy.frontend.WikiHelper;
37 import org.outerj.daisy.repository.schema.PartType;
38 import org.outerj.daisy.repository.schema.FieldType;
39 import org.outerj.daisy.repository.schema.RepositorySchema;
40 import org.outerj.daisy.repository.schema.DocumentType;
41 import org.outerj.daisy.repository.Repository;
42
43 import java.util.Map JavaDoc;
44 import java.util.HashMap JavaDoc;
45 import java.util.Locale JavaDoc;
46
47 public class DocumentTypeEditorApple extends AbstractDaisyApple implements Serviceable, Disposable {
48     private ServiceManager serviceManager;
49     private boolean init = false;
50     private Form form;
51     private Binding binding;
52     private Map JavaDoc viewData;
53     private Locale JavaDoc locale;
54     /** The DocumentType we're currently editing. */
55     private DocumentType documentType;
56     private RepositorySchema repositorySchema;
57
58     private AdminLocales adminLocales;
59
60     public void service(ServiceManager serviceManager) throws ServiceException {
61         this.serviceManager = serviceManager;
62         adminLocales = (AdminLocales)serviceManager.lookup(AdminLocales.ROLE);
63     }
64
65     public void dispose() {
66         serviceManager.release(adminLocales);
67     }
68
69     protected void processInternal(AppleRequest appleRequest, AppleResponse appleResponse) throws Exception JavaDoc {
70         if (!init) {
71             locale = WikiHelper.getLocale(appleRequest.getCocoonRequest());
72
73             form = FormHelper.createForm(serviceManager, "resources/form/documenttype_definition.xml");
74             binding = FormHelper.createBinding(serviceManager, "resources/form/documenttype_binding.xml");
75
76             // initialiaze repeater for displaydata with the locales we allow to be edited
77
String JavaDoc[] supportedLocales = adminLocales.getLocales().getAsStrings();
78             Repeater repeater = (Repeater)form.getChild("displaydata");
79             for (int i = 0; i < supportedLocales.length; i++) {
80                 Repeater.RepeaterRow row = repeater.addRow();
81                 row.getChild("locale").setValue(supportedLocales[i]);
82             }
83
84             PartType[] partTypes;
85             FieldType[] fieldTypes;
86
87             Repository repository = WikiHelper.getRepository(appleRequest.getCocoonRequest(), serviceManager);
88             repositorySchema = repository.getRepositorySchema();
89             partTypes = repositorySchema.getAllPartTypes(false).getArray();
90             fieldTypes = repositorySchema.getAllFieldTypes(false).getArray();
91
92             final Field availablePartTypes = (Field)form.getChild("availablePartTypes");
93             availablePartTypes.setSelectionList(partTypes, "id", "name");
94             final Field availableFieldTypes = (Field)form.getChild("availableFieldTypes");
95             availableFieldTypes.setSelectionList(fieldTypes, "id", "name");
96
97             Action addPartType = (Action)form.getChild("addPartType");
98             addPartType.addActionListener(new ActionListener() {
99                 public void actionPerformed(ActionEvent event) {
100                     try {
101                         Long JavaDoc partTypeId = (Long JavaDoc)availablePartTypes.getValue();
102                         PartType partType = repositorySchema.getPartTypeById(partTypeId.longValue(), false);
103                         Repeater.RepeaterRow row = ((Repeater)form.getChild("partTypes")).addRow();
104                         row.getChild("id").setValue(partTypeId);
105                         row.getChild("name").setValue(partType.getName());
106                         row.getChild("required").setValue(Boolean.TRUE);
107                     } catch (Exception JavaDoc e) {
108                         throw new RuntimeException JavaDoc(e);
109                     }
110                 }
111             });
112
113             Action addFieldType = (Action)form.getChild("addFieldType");
114             addFieldType.addActionListener(new ActionListener() {
115                 public void actionPerformed(ActionEvent event) {
116                     try {
117                         Long JavaDoc fieldTypeId = (Long JavaDoc)availableFieldTypes.getValue();
118                         FieldType fieldType = repositorySchema.getFieldTypeById(fieldTypeId.longValue(), false);
119                         Repeater.RepeaterRow row = ((Repeater)form.getChild("fieldTypes")).addRow();
120                         row.getChild("id").setValue(fieldTypeId);
121                         row.getChild("name").setValue(fieldType.getName());
122                         row.getChild("required").setValue(Boolean.TRUE);
123                     } catch (Exception JavaDoc e) {
124                         throw new RuntimeException JavaDoc(e);
125                     }
126                 }
127             });
128
129             String JavaDoc documentTypeId = appleRequest.getSitemapParameter("id", null);
130
131             if (documentTypeId != null) {
132                 documentType = repositorySchema.getDocumentTypeById(Long.parseLong(documentTypeId), true);
133                 binding.loadFormFromModel(form, documentType);
134             } else {
135                 documentTypeId = "new";
136             }
137
138             // Set the Repository as an attribute on the form so that the binding can access it.
139
form.setAttribute("DaisyRepository", repository);
140
141             String JavaDoc path = getMountPoint() + "/admin/documentType/" + documentTypeId + "/edit/" + getContinuationId();
142
143             viewData = new HashMap JavaDoc();
144             viewData.put("submitPath", path);
145             if (documentType != null)
146                 viewData.put("documentType", documentType);
147             viewData.put("locale", locale);
148             viewData.put("pageContext", new PageContext(getMountPoint(), repository, getLayoutType(), getSkin(), SkinConfHelper.getGlobalSkinConf(serviceManager), getContext()));
149             viewData.put("CocoonFormsInstance", form);
150             viewData.put("entityName", "documenttype");
151
152             init = true;
153
154             appleResponse.redirectTo(path);
155         } else {
156             String JavaDoc methodName = appleRequest.getCocoonRequest().getMethod();
157             if (methodName.equals("GET")) {
158                 // display the form
159
appleResponse.sendPage("Form-documenttype-Pipe", viewData);
160             } else if (methodName.equals("POST")) {
161                 // handle a form submit
162
boolean endProcessing = form.process(new FormContext(appleRequest.getCocoonRequest(), locale));
163
164                 if (!endProcessing) {
165                     appleResponse.sendPage("Form-documenttype-Pipe", viewData);
166                 } else {
167                     if (documentType == null) {
168                         documentType = repositorySchema.createDocumentType((String JavaDoc)form.getChild("name").getValue());
169                         viewData.put("documentType", documentType); // for cases where the user goes back
170
}
171                     binding.saveFormToModel(form, documentType);
172                     documentType.save();
173                     appleResponse.redirectTo(getMountPoint() + "/admin/documentType");
174                 }
175             } else {
176                 throw new Exception JavaDoc("Unsupported HTTP method: " + methodName);
177             }
178         }
179     }
180
181 }
182
Popular Tags