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.VersionState; 23 import org.outerj.daisy.repository.Version; 24 import org.outerj.daisy.httpconnector.RequestHandler; 25 import org.outerj.daisy.httpconnector.HttpUtil; 26 import org.outerj.daisy.httpconnector.BadRequestException; 27 28 import java.util.Map ; 29 30 public class VersionHandler implements RequestHandler { 31 public String getPathPattern() { 32 return "/document/*/version/*"; 33 } 34 35 public void handleRequest(Map matchMap, HttpRequest request, HttpResponse response, Repository repository) throws Exception { 36 long documentId = HttpUtil.parseId("document", (String )matchMap.get("1")); 37 long versionId = HttpUtil.parseId("version", (String )matchMap.get("2")); 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.getVersion(versionId).getXml().save(response.getOutputStream()); 44 response.commit(); 45 return; 46 } else if (request.getMethod().equals(HttpRequest.__POST)) { 47 String action = request.getParameter("action"); 48 if ("changeState".equals(action)) { 49 String newState = request.getParameter("newState"); 50 if (newState == null) 51 throw new BadRequestException("Missing parameter \"newState\"."); 52 VersionState versionState = VersionState.fromString(newState); 53 Document document = repository.getDocument(documentId, branchId, languageId, true); 54 Version version = document.getVersion(versionId); 55 version.setState(versionState); 56 version.getShallowXml().save(response.getOutputStream()); 57 response.commit(); 58 return; 59 } else { 60 throw new BadRequestException("Unsupported value for \"action\" parameter: " + action); 61 } 62 } else { 63 response.sendError(HttpResponse.__405_Method_Not_Allowed); 64 return; 65 } 66 } 67 } 68 | Popular Tags |