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.Document; 22 import org.outerj.daisy.repository.LockType; 23 import org.outerj.daisy.httpconnector.RequestHandler; 24 import org.outerj.daisy.httpconnector.HttpUtil; 25 import org.outerj.daisy.xmlutil.LocalSAXParserFactory; 26 import org.outerx.daisy.x10.LockInfoDocument; 27 import org.apache.xmlbeans.XmlOptions; 28 29 import java.util.Map ; 30 31 public class LockHandler implements RequestHandler { 32 public String getPathPattern() { 33 return "/document/*/lock"; 34 } 35 36 public void handleRequest(Map matchMap, HttpRequest request, HttpResponse response, Repository repository) throws Exception { 37 long documentId = HttpUtil.parseId("document", (String )matchMap.get("1")); 38 long branchId = HttpUtil.getBranchId(request, repository); 39 long languageId = HttpUtil.getLanguageId(request, repository); 40 41 if (request.getMethod().equals(HttpRequest.__GET)) { 42 Document document = repository.getDocument(documentId, branchId, languageId, false); 43 document.getLockInfo(true).getXml().save(response.getOutputStream()); 44 response.commit(); 45 return; 46 } else if (request.getMethod().equals(HttpRequest.__POST)) { 47 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 48 LockInfoDocument lockInfoDocument = LockInfoDocument.Factory.parse(response.getInputStream(), xmlOptions); 49 LockInfoDocument.LockInfo lockInfoXml = lockInfoDocument.getLockInfo(); 50 LockType lockType = LockType.fromString(lockInfoXml.getType().toString()); 51 long duration = lockInfoXml.getDuration(); 52 53 Document document = repository.getDocument(documentId, branchId, languageId, true); 54 document.lock(duration, lockType); 55 document.getLockInfo(false).getXml().save(response.getOutputStream()); 56 response.commit(); 57 return; 58 } else if (request.getMethod().equals(HttpRequest.__DELETE)) { 59 Document document = repository.getDocument(documentId, branchId, languageId, true); 60 document.releaseLock(); 61 document.getLockInfo(false).getXml().save(response.getOutputStream()); 62 response.commit(); 63 return; 64 } else { 65 response.sendError(HttpResponse.__405_Method_Not_Allowed); 66 return; 67 } 68 } 69 } 70 | Popular Tags |