1 16 package org.outerj.daisy.publisher.clientimpl; 17 18 import org.outerj.daisy.publisher.Publisher; 19 import org.outerj.daisy.publisher.BlobInfo; 20 import org.outerj.daisy.repository.VariantKey; 21 import org.outerj.daisy.repository.RepositoryException; 22 import org.outerj.daisy.repository.clientimpl.RemoteRepositoryImpl; 23 import org.outerj.daisy.repository.clientimpl.infrastructure.DaisyHttpClient; 24 import org.outerj.daisy.xmlutil.LocalSAXParserFactory; 25 import org.xml.sax.ContentHandler ; 26 import org.xml.sax.SAXException ; 27 import org.xml.sax.InputSource ; 28 import org.outerx.daisy.x10Publisher.PublisherRequestDocument; 29 import org.apache.commons.httpclient.methods.PostMethod; 30 import org.apache.commons.httpclient.methods.GetMethod; 31 32 import javax.xml.parsers.SAXParser ; 33 import java.util.Map ; 34 import java.util.HashMap ; 35 36 public class RemotePublisher implements Publisher { 37 private RemoteRepositoryImpl repository; 38 39 public RemotePublisher(RemoteRepositoryImpl repository) { 40 this.repository = repository; 41 } 42 43 public BlobInfo getBlobInfo(VariantKey variantKey, String versionSpec, String partType) throws RepositoryException { 44 Map requestParams = new HashMap (); 45 requestParams.put("documentId", String.valueOf(variantKey.getDocumentId())); 46 requestParams.put("branch", String.valueOf(variantKey.getBranchId())); 47 requestParams.put("language", String.valueOf(variantKey.getLanguageId())); 48 requestParams.put("version", versionSpec); 49 requestParams.put("partType", partType); 50 51 GetMethod method = repository.getResource("/publisher/blob", requestParams); 52 return new BlobInfoImpl(method); 53 } 54 55 public void processRequest(PublisherRequestDocument publisherRequestDocument, ContentHandler contentHandler) throws RepositoryException, SAXException { 56 try { 57 DaisyHttpClient httpClient = repository.getHttpClient(); 58 PostMethod method = new PostMethod("/publisher/request"); 59 method.setRequestBody(publisherRequestDocument.newInputStream()); 60 61 try { 62 httpClient.executeMethod(method, null, false); 63 SAXParser parser = LocalSAXParserFactory.getSAXParserFactory().newSAXParser(); 64 parser.getXMLReader().setContentHandler(contentHandler); 65 InputSource is = new InputSource (method.getResponseBodyAsStream()); 66 parser.getXMLReader().parse(is); 67 } finally { 68 method.releaseConnection(); 69 } 70 } catch (Exception e) { 71 if (e instanceof RepositoryException) 72 throw (RepositoryException)e; 73 if (e instanceof SAXException ) 74 throw (SAXException )e; 75 throw new RepositoryException("Error handling publisher request.", e); 76 } 77 } 78 } 79 | Popular Tags |