1 16 package org.outerj.daisy.publisher.serverimpl; 17 18 import org.outerj.daisy.repository.*; 19 import org.outerj.daisy.publisher.serverimpl.resolving.PublisherRequestResolver; 20 import org.outerj.daisy.publisher.serverimpl.requestmodel.PublisherRequest; 21 import org.outerj.daisy.publisher.serverimpl.requestmodel.PublisherRequestBuilder; 22 import org.outerj.daisy.publisher.PublisherException; 23 import org.outerj.daisy.configutil.PropertyResolver; 24 import org.apache.avalon.framework.service.Serviceable; 25 import org.apache.avalon.framework.service.ServiceManager; 26 import org.apache.avalon.framework.service.ServiceException; 27 import org.apache.avalon.framework.activity.Initializable; 28 import org.apache.avalon.framework.logger.AbstractLogEnabled; 29 import org.apache.avalon.framework.configuration.Configurable; 30 import org.apache.avalon.framework.configuration.Configuration; 31 import org.apache.avalon.framework.configuration.ConfigurationException; 32 import org.apache.xmlbeans.XmlOptions; 33 import org.apache.xmlbeans.XmlError; 34 import org.outerx.daisy.x10Publisher.PublisherRequestDocument; 35 import org.xml.sax.SAXException ; 36 37 import java.util.List ; 38 import java.util.ArrayList ; 39 import java.io.File ; 40 41 47 public class CommonPublisher extends AbstractLogEnabled implements Serviceable, Initializable, Configurable { 48 private ServiceManager serviceManager; 49 private ExtensionRegistrar extensionRegistrar; 50 private PublisherRequestResolver publisherRequestResolver; 51 private String repoUser; 52 private String repoPassword; 53 private Repository repository; 54 private File pubRequestsRoot; 55 56 60 public void service(ServiceManager serviceManager) throws ServiceException { 61 this.serviceManager = serviceManager; 62 this.extensionRegistrar = (ExtensionRegistrar)serviceManager.lookup("extensionRegistrar"); 63 } 64 65 public void configure(Configuration configuration) throws ConfigurationException { 66 Configuration repositoryUserConf = configuration.getChild("repositoryUser", false); 67 if (repositoryUserConf == null) 68 throw new ConfigurationException("Missing repositoryUser configuration element."); 69 70 repoUser = repositoryUserConf.getAttribute("login"); 71 repoPassword = repositoryUserConf.getAttribute("password"); 72 73 String pubRequestDir = PropertyResolver.resolveProperties(configuration.getChild("publisherRequestDirectory").getValue()); 74 pubRequestsRoot = new File (pubRequestDir); 75 } 78 79 public void initialize() throws Exception { 80 RepositoryManager repositoryManager = (RepositoryManager)serviceManager.lookup("repository-manager"); 81 try { 82 repository = repositoryManager.getRepository(new Credentials(repoUser, repoPassword)); 83 } catch (Throwable e) { 84 throw new Exception ("Problem getting repository.", e); 85 } finally { 86 serviceManager.release(repositoryManager); 87 } 88 this.publisherRequestResolver = new PublisherRequestResolver(pubRequestsRoot, repository, this, getLogger()); 89 90 ExtensionProvider extensionProvider = new MyExtensionProvider(); 91 extensionRegistrar.registerExtension("Publisher", extensionProvider); 92 } 93 94 public PublisherRequest buildPublisherRequest(PublisherRequestDocument publisherRequestDocument) throws PublisherException, SAXException , RepositoryException { 95 List errors = new ArrayList (); 96 XmlOptions xmlOptions = new XmlOptions(); 97 xmlOptions.setErrorListener(errors); 98 boolean valid = publisherRequestDocument.validate(xmlOptions); 99 100 if (!valid) { 101 StringBuffer errorsAsString = new StringBuffer (); 102 errorsAsString.append("The supplied publisher request does not validate against the publisher request schema: "); 103 for (int i = 0; i < errors.size(); i++) { 104 if (i > 0) 105 errorsAsString.append(", "); 106 XmlError error = (XmlError)errors.get(i); 107 errorsAsString.append(error.toString()); 108 } 109 throw new PublisherException(errorsAsString.toString()); 110 } 111 112 try { 113 return PublisherRequestBuilder.build(publisherRequestDocument.getPublisherRequest(), repository); 114 } catch (Throwable e) { 115 if (e instanceof RepositoryException) { 116 throw (RepositoryException)e; 117 } else if (e instanceof SAXException ) { 118 throw (SAXException )e; 119 } else { 120 throw new PublisherException("Error while building publisher request.", e); 121 } 122 } 123 } 124 125 public PublisherRequest lookupPublisherRequest(String pubReqSetName, Document document, Version version) 126 throws PublisherException, SAXException , RepositoryException { 127 return publisherRequestResolver.lookupPublisherRequest(pubReqSetName, document, version); 128 } 129 130 private class MyExtensionProvider implements ExtensionProvider { 131 public Object createExtension(Repository repository) { 132 return new PublisherImpl(repository, CommonPublisher.this, getLogger()); 133 } 134 } 135 } 136 | Popular Tags |