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.CollectionManager; 22 import org.outerj.daisy.repository.DocumentCollection; 23 import org.outerj.daisy.repository.RepositoryException; 24 import org.outerj.daisy.httpconnector.RequestHandler; 25 import org.outerj.daisy.httpconnector.HttpUtil; 26 import org.outerj.daisy.xmlutil.LocalSAXParserFactory; 27 import org.outerx.daisy.x10.CollectionDocument; 28 import org.apache.xmlbeans.XmlOptions; 29 30 import java.util.Map ; 31 32 public class CollectionHandler implements RequestHandler { 33 public String getPathPattern() { 34 return "/collection/*"; 35 } 36 37 public void handleRequest(Map matchMap, HttpRequest request, HttpResponse response, Repository repository) throws Exception { 38 long id = HttpUtil.parseId("collection", (String )matchMap.get("1")); 39 CollectionManager collMan = repository.getCollectionManager(); 40 41 if (request.getMethod().equals(HttpRequest.__GET)) { 42 DocumentCollection docColl = collMan.getCollection(id, true); 44 CollectionDocument docCollXml = docColl.getXml(); 45 docCollXml.save(response.getOutputStream()); 46 response.commit(); 47 return; 48 } else if (request.getMethod().equals(HttpRequest.__POST)) { 49 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 50 CollectionDocument collectionDocument = CollectionDocument.Factory.parse(request.getInputStream(), xmlOptions); 51 CollectionDocument.Collection collectionXml = collectionDocument.getCollection(); 52 53 DocumentCollection collection = collMan.getCollection(id, true); 54 55 if (collection.getUpdateCount() != collectionXml.getUpdatecount()) 57 throw new RepositoryException("The collection was updated concurrently."); 58 59 collection.setName(collectionXml.getName()); 61 collection.save(); 62 63 collection.getXml().save(response.getOutputStream()); 64 response.commit(); 65 } else if (request.getMethod().equals(HttpRequest.__DELETE)) { 66 collMan.deleteCollection(id); 67 response.commit(); 68 return; 69 } else { 70 response.sendError(HttpResponse.__405_Method_Not_Allowed); 71 return; 72 } 73 } 74 } 75 | Popular Tags |