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.httpconnector.RequestHandler; 23 import org.outerj.daisy.httpconnector.HttpUtil; 24 25 import java.util.Map ; 26 import java.io.OutputStream ; 27 import java.io.InputStream ; 28 29 public class PartDataHandler implements RequestHandler { 30 public String getPathPattern() { 31 return "/document/*/version/*/part/*/data"; 32 } 33 34 public void handleRequest(Map matchMap, HttpRequest request, HttpResponse response, Repository repository) throws Exception { 35 long documentId = HttpUtil.parseId("document", (String )matchMap.get("1")); 36 long branchId = HttpUtil.getBranchId(request, repository); 37 long languageId = HttpUtil.getLanguageId(request, repository); 38 long versionId; 39 long partTypeId; 40 41 String versionString = (String )matchMap.get("2"); 42 if (versionString.equals("last")) { 43 Document document = repository.getDocument(documentId, branchId, languageId, false); 44 versionId = document.getLastVersionId(); 45 } else { 46 versionId = HttpUtil.parseId("version", versionString); 47 } 48 49 String partType = (String )matchMap.get("3"); 50 if (partType.length() > 0 && Character.isLetter(partType.charAt(0))) { 51 partTypeId = repository.getRepositorySchema().getPartTypeByName(partType, false).getId(); 52 } else { 53 partTypeId = HttpUtil.parseId("part type", partType); 54 } 55 56 OutputStream os = response.getOutputStream(); 57 byte[] buffer = new byte[BUFFER_SIZE]; 58 InputStream is = repository.getPartData(documentId, branchId, languageId, versionId, partTypeId); 59 try { 60 int read; 61 while ((read = is.read(buffer)) != -1) { 62 os.write(buffer, 0, read); 63 } 64 } finally { 65 is.close(); 66 } 67 68 response.commit(); 69 } 70 71 private static final int BUFFER_SIZE = 32768; 72 } 73 | Popular Tags |