1 16 package org.outerj.daisy.frontend.admin; 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.ResourceNotFoundException; 22 import org.apache.cocoon.environment.Request; 23 import org.apache.avalon.framework.service.Serviceable; 24 import org.apache.avalon.framework.service.ServiceManager; 25 import org.apache.avalon.framework.service.ServiceException; 26 import org.apache.xmlbeans.XmlObject; 27 import org.outerj.daisy.frontend.util.XmlObjectXMLizable; 28 import org.outerj.daisy.frontend.util.AbstractDaisyApple; 29 import org.outerj.daisy.frontend.PageContext; 30 import org.outerj.daisy.frontend.SkinConfHelper; 31 import org.outerj.daisy.frontend.WikiHelper; 32 import org.outerj.daisy.repository.Repository; 33 34 import java.util.Map ; 35 import java.util.HashMap ; 36 37 public class AdminApple extends AbstractDaisyApple implements StatelessAppleController, Serviceable { 38 private ServiceManager serviceManager; 39 private Repository repository; 40 private static Map ENTITY_HANDLERS; 41 static { 42 ENTITY_HANDLERS = new HashMap (); 43 ENTITY_HANDLERS.put(DocumentTypeHandler.NAME, new DocumentTypeHandler()); 44 ENTITY_HANDLERS.put(FieldTypeHandler.NAME, new FieldTypeHandler()); 45 ENTITY_HANDLERS.put(PartTypeHandler.NAME, new PartTypeHandler()); 46 ENTITY_HANDLERS.put(UserHandler.NAME, new UserHandler()); 47 ENTITY_HANDLERS.put(RoleHandler.NAME, new RoleHandler()); 48 ENTITY_HANDLERS.put(BranchHandler.NAME, new BranchHandler()); 49 ENTITY_HANDLERS.put(LanguageHandler.NAME, new LanguageHandler()); 50 ENTITY_HANDLERS.put(CollectionHandler.NAME, new CollectionHandler()); 51 } 52 53 public void service(ServiceManager serviceManager) throws ServiceException { 54 this.serviceManager = serviceManager; 55 } 56 57 protected void processInternal(AppleRequest appleRequest, final AppleResponse appleResponse) throws Exception { 58 repository = WikiHelper.getRepository(appleRequest.getCocoonRequest(), serviceManager); 59 60 String resource = appleRequest.getSitemapParameter("resource"); 61 EntityHandler entityHandler = (EntityHandler)ENTITY_HANDLERS.get(resource); 62 if (entityHandler == null) 63 throw new ResourceNotFoundException("Unknown admin resource: " + resource); 64 65 Request request = appleRequest.getCocoonRequest(); 66 String method = request.getMethod(); 67 if (method.equals("POST")) { 68 String action = request.getParameter("action"); 69 String idParam = request.getParameter("id"); 70 71 if (action == null || action.equals("") || idParam == null || idParam.equals("")) 72 throw new Exception ("Invalid request: missing request parameters."); 73 74 if (action.equals("delete")) { 75 long id = Long.parseLong(idParam); 76 entityHandler.deleteEntity(id, repository); 77 } else { 78 throw new Exception ("Unsupported action: " + action); 79 } 80 } 81 82 Map viewData = new HashMap (); 84 viewData.put("pageXml", new XmlObjectXMLizable(entityHandler.getEntityList(repository))); 85 viewData.put("pageContext", new PageContext(getMountPoint(), repository, getLayoutType(), getSkin(), SkinConfHelper.getGlobalSkinConf(serviceManager), getContext())); 86 viewData.put("entityName", entityHandler.getEntityName().toLowerCase()); 87 appleResponse.sendPage("EntitiesPipe", viewData); 88 } 89 90 interface EntityHandler { 91 String getEntityName(); 92 93 void deleteEntity(long id, Repository repository) throws Exception ; 94 95 XmlObject getEntityList(Repository repository) throws Exception ; 96 } 97 98 public static class DocumentTypeHandler implements EntityHandler { 99 public static final String NAME = "documentType"; 100 101 public String getEntityName() { 102 return NAME; 103 } 104 105 public void deleteEntity(long id, Repository repository) throws Exception { 106 repository.getRepositorySchema().deleteDocumentType(id); 107 } 108 109 public XmlObject getEntityList(Repository repository) throws Exception { 110 return repository.getRepositorySchema().getAllDocumentTypes(false).getXml(); 111 } 112 } 113 114 public static class PartTypeHandler implements EntityHandler { 115 public static final String NAME = "partType"; 116 117 public String getEntityName() { 118 return NAME; 119 } 120 121 public void deleteEntity(long id, Repository repository) throws Exception { 122 repository.getRepositorySchema().deletePartType(id); 123 } 124 125 public XmlObject getEntityList(Repository repository) throws Exception { 126 return repository.getRepositorySchema().getAllPartTypes(false).getXml(); 127 } 128 } 129 130 public static class FieldTypeHandler implements EntityHandler { 131 public static final String NAME = "fieldType"; 132 133 public String getEntityName() { 134 return NAME; 135 } 136 137 public void deleteEntity(long id, Repository repository) throws Exception { 138 repository.getRepositorySchema().deleteFieldType(id); 139 } 140 141 public XmlObject getEntityList(Repository repository) throws Exception { 142 return repository.getRepositorySchema().getAllFieldTypes(false).getXml(); 143 } 144 } 145 146 public static class CollectionHandler implements EntityHandler { 147 public static final String NAME = "collection"; 148 149 public String getEntityName() { 150 return NAME; 151 } 152 153 public void deleteEntity(long id, Repository repository) throws Exception { 154 repository.getCollectionManager().deleteCollection(id); 155 } 156 157 public XmlObject getEntityList(Repository repository) throws Exception { 158 return repository.getCollectionManager().getCollections(false).getXml(); 159 } 160 } 161 162 public static class RoleHandler implements EntityHandler { 163 public static final String NAME = "role"; 164 165 public String getEntityName() { 166 return NAME; 167 } 168 169 public void deleteEntity(long id, Repository repository) throws Exception { 170 repository.getUserManager().deleteRole(id); 171 } 172 173 public XmlObject getEntityList(Repository repository) throws Exception { 174 return repository.getUserManager().getRoles().getXml(); 175 } 176 } 177 178 public static class UserHandler implements EntityHandler { 179 public static final String NAME = "user"; 180 181 public String getEntityName() { 182 return NAME; 183 } 184 185 public void deleteEntity(long id, Repository repository) throws Exception { 186 repository.getUserManager().deleteUser(id); 187 } 188 189 public XmlObject getEntityList(Repository repository) throws Exception { 190 return repository.getUserManager().getUsers().getXml(); 191 } 192 } 193 194 public static class BranchHandler implements EntityHandler { 195 public static final String NAME = "branch"; 196 197 public String getEntityName() { 198 return NAME; 199 } 200 201 public void deleteEntity(long id, Repository repository) throws Exception { 202 repository.getVariantManager().deleteBranch(id); 203 } 204 205 public XmlObject getEntityList(Repository repository) throws Exception { 206 return repository.getVariantManager().getAllBranches(false).getXml(); 207 } 208 } 209 210 public static class LanguageHandler implements EntityHandler { 211 public static final String NAME = "language"; 212 213 public String getEntityName() { 214 return NAME; 215 } 216 217 public void deleteEntity(long id, Repository repository) throws Exception { 218 repository.getVariantManager().deleteLanguage(id); 219 } 220 221 public XmlObject getEntityList(Repository repository) throws Exception { 222 return repository.getVariantManager().getAllLanguages(false).getXml(); 223 } 224 } 225 } 226 | Popular Tags |