1 16 package org.outerj.daisy.httpconnector.handlers; 17 18 import org.mortbay.http.HttpRequest; 19 import org.mortbay.http.HttpResponse; 20 import org.outerj.daisy.repository.Repository; 21 import org.outerj.daisy.repository.RepositoryException; 22 import org.outerj.daisy.repository.user.UserManager; 23 import org.outerj.daisy.repository.user.Role; 24 import org.outerj.daisy.httpconnector.RequestHandler; 25 import org.outerj.daisy.xmlutil.LocalSAXParserFactory; 26 import org.outerx.daisy.x10.RoleDocument; 27 import org.apache.xmlbeans.XmlOptions; 28 29 import java.util.Map ; 30 import java.io.IOException ; 31 32 public class RoleHandler implements RequestHandler { 33 public String getPathPattern() { 34 return "/role/*"; 35 } 36 37 public void handleRequest(Map matchMap, HttpRequest request, HttpResponse response, Repository repository) throws Exception { 38 long roleId = Long.parseLong((String )matchMap.get("1")); 39 UserManager userMan = repository.getUserManager(); 40 41 if (request.getMethod().equals(HttpRequest.__GET)) { 42 Role role = userMan.getRole(roleId, true); 43 role.getXml().save(response.getOutputStream()); 44 response.commit(); 45 } else if (request.getMethod().equals(HttpRequest.__POST)) { 46 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 47 RoleDocument roleDocument = RoleDocument.Factory.parse(request.getInputStream(), xmlOptions); 48 RoleDocument.Role roleXml = roleDocument.getRole(); 49 50 Role role = userMan.getRole(roleId, true); 51 updateRoleFromXml(response, roleXml, role); 52 } else if (request.getMethod().equals(HttpRequest.__DELETE)) { 53 userMan.deleteRole(roleId); 54 response.commit(); 55 return; 56 } else { 57 response.sendError(HttpResponse.__405_Method_Not_Allowed); 58 } 59 } 60 61 private void updateRoleFromXml(HttpResponse response, RoleDocument.Role roleXml, Role role) throws RepositoryException, IOException { 62 String roleDescription = roleXml.getDescription(); 63 String roleName = roleXml.getName(); 64 65 if (role.getUpdateCount() != roleXml.getUpdateCount()) 67 throw new RepositoryException("The role was updated by someone else concurrently."); 68 69 role.setDescription(roleDescription); 71 role.setName(roleName); 72 role.save(); 73 74 role.getXml().save(response.getOutputStream()); 75 response.commit(); 76 } 77 } 78 | Popular Tags |