KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > publisher > serverimpl > CommonPublisher


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc;
36
37 import java.util.List JavaDoc;
38 import java.util.ArrayList JavaDoc;
39 import java.io.File JavaDoc;
40
41 /**
42  * This component provides no services of its own, but registers an extension called
43  * "Publisher" with the repository.
44  *
45  * @avalon.component version="1.0" name="publisher" lifestyle="singleton"
46  */

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 JavaDoc repoUser;
52     private String JavaDoc repoPassword;
53     private Repository repository;
54     private File JavaDoc pubRequestsRoot;
55
56     /**
57      * @avalon.dependency key="repository-manager" type="org.outerj.daisy.repository.RepositoryManager"
58      * @avalon.dependency key="extensionRegistrar" type="org.outerj.daisy.repository.ExtensionRegistrar"
59      */

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 JavaDoc pubRequestDir = PropertyResolver.resolveProperties(configuration.getChild("publisherRequestDirectory").getValue());
74         pubRequestsRoot = new File JavaDoc(pubRequestDir);
75         // Note: the existance of the pubRequestsRoot directory is not check on purpose. It is optional
76
// and this avoids the need to configure it for e.g. development installations.
77
}
78
79     public void initialize() throws Exception JavaDoc {
80         RepositoryManager repositoryManager = (RepositoryManager)serviceManager.lookup("repository-manager");
81         try {
82             repository = repositoryManager.getRepository(new Credentials(repoUser, repoPassword));
83         } catch (Throwable JavaDoc e) {
84             throw new Exception JavaDoc("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 JavaDoc, RepositoryException {
95         List JavaDoc errors = new ArrayList JavaDoc();
96         XmlOptions xmlOptions = new XmlOptions();
97         xmlOptions.setErrorListener(errors);
98         boolean valid = publisherRequestDocument.validate(xmlOptions);
99
100         if (!valid) {
101             StringBuffer JavaDoc errorsAsString = new StringBuffer JavaDoc();
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 JavaDoc e) {
115             if (e instanceof RepositoryException) {
116                 throw (RepositoryException)e;
117             } else if (e instanceof SAXException JavaDoc) {
118                 throw (SAXException JavaDoc)e;
119             } else {
120                 throw new PublisherException("Error while building publisher request.", e);
121             }
122         }
123     }
124
125     public PublisherRequest lookupPublisherRequest(String JavaDoc pubReqSetName, Document document, Version version)
126             throws PublisherException, SAXException JavaDoc, RepositoryException {
127         return publisherRequestResolver.lookupPublisherRequest(pubReqSetName, document, version);
128     }
129
130     private class MyExtensionProvider implements ExtensionProvider {
131         public Object JavaDoc createExtension(Repository repository) {
132             return new PublisherImpl(repository, CommonPublisher.this, getLogger());
133         }
134     }
135 }
136
Popular Tags