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.variant.VariantManager; 23 import org.outerj.daisy.repository.variant.Branch; 24 import org.outerj.daisy.httpconnector.RequestHandler; 25 import org.outerj.daisy.httpconnector.HttpUtil; 26 import org.outerj.daisy.xmlutil.LocalSAXParserFactory; 27 import org.apache.xmlbeans.XmlObject; 28 import org.apache.xmlbeans.XmlOptions; 29 import org.outerx.daisy.x10.BranchDocument; 30 31 import java.util.Map ; 32 33 public class BranchHandler implements RequestHandler { 34 public String getPathPattern() { 35 return "/branch/*"; 36 } 37 38 public void handleRequest(Map matchMap, HttpRequest request, HttpResponse response, Repository repository) throws Exception { 39 long id = HttpUtil.parseId("branch", (String )matchMap.get("1")); 40 41 VariantManager variantManager = repository.getVariantManager(); 42 43 if (request.getMethod().equals(HttpRequest.__GET)) { 44 Branch branch = variantManager.getBranch(id, true); 45 XmlObject branchDocument = branch.getXml(); 46 branchDocument.save(response.getOutputStream()); 47 response.commit(); 48 } else if (request.getMethod().equals(HttpRequest.__POST)) { 49 Branch branch = variantManager.getBranch(id, true); 51 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 52 BranchDocument branchDocument = BranchDocument.Factory.parse(request.getInputStream(), xmlOptions); 53 BranchDocument.Branch branchXml = branchDocument.getBranch(); 54 if (branch.getUpdateCount() != branchXml.getUpdateCount()) 55 throw new RepositoryException("The branch was updated concurrently."); 56 branch.setAllFromXml(branchXml); 57 branch.save(); 58 59 branchDocument = branch.getXml(); 60 branchDocument.save(response.getOutputStream()); 61 response.commit(); 62 } else if (request.getMethod().equals(HttpRequest.__DELETE)) { 63 variantManager.deleteBranch(id); 64 response.commit(); 65 } else { 66 response.sendError(HttpResponse.__405_Method_Not_Allowed); 67 } 68 } 69 } 70 | Popular Tags |