]> source.dussan.org Git - archiva.git/blob
cac48637db88b38fad3424824a7de6f053c8adcf
[archiva.git] /
1 package org.codehaus.plexus.spring;\r
2 \r
3 /*\r
4  * Licensed to the Apache Software Foundation (ASF) under one\r
5  * or more contributor license agreements.  See the NOTICE file\r
6  * distributed with this work for additional information\r
7  * regarding copyright ownership.  The ASF licenses this file\r
8  * to you under the Apache License, Version 2.0 (the\r
9  * "License"); you may not use this file except in compliance\r
10  * with the License.  You may obtain a copy of the License at\r
11  *\r
12  *  http://www.apache.org/licenses/LICENSE-2.0\r
13  *\r
14  * Unless required by applicable law or agreed to in writing,\r
15  * software distributed under the License is distributed on an\r
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
17  * KIND, either express or implied.  See the License for the\r
18  * specific language governing permissions and limitations\r
19  * under the License.\r
20  */\r
21 \r
22 import java.io.InputStream;\r
23 \r
24 import javax.xml.transform.Source;\r
25 import javax.xml.transform.Transformer;\r
26 import javax.xml.transform.TransformerFactory;\r
27 import javax.xml.transform.dom.DOMResult;\r
28 import javax.xml.transform.dom.DOMSource;\r
29 import javax.xml.transform.stream.StreamSource;\r
30 \r
31 import org.dom4j.io.DOMReader;\r
32 import org.dom4j.io.OutputFormat;\r
33 import org.dom4j.io.XMLWriter;\r
34 import org.springframework.beans.factory.BeanDefinitionStoreException;\r
35 import org.springframework.beans.factory.xml.BeanDefinitionDocumentReader;\r
36 import org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader;\r
37 import org.springframework.beans.factory.xml.XmlReaderContext;\r
38 import org.w3c.dom.Document;\r
39 \r
40 /**\r
41  * A Spring {@link BeanDefinitionDocumentReader} that converts on the fly the\r
42  * Plexus components descriptor to a spring XML context.\r
43  *\r
44  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>\r
45  */\r
46 public class PlexusBeanDefinitionDocumentReader\r
47     extends DefaultBeanDefinitionDocumentReader\r
48 {\r
49     public void registerBeanDefinitions( Document doc, XmlReaderContext readerContext )\r
50     {\r
51         doc = convertPlexusDescriptorToSpringBeans( doc );\r
52         if ( Boolean.getBoolean( "plexus-spring.debug" ) )\r
53         {\r
54             try\r
55             {\r
56                 XMLWriter writer = new XMLWriter( System.out, OutputFormat.createPrettyPrint() );\r
57                 writer.write( new DOMReader().read( doc ) );\r
58             }\r
59             catch ( Exception e )\r
60             {\r
61                 // ignored\r
62             }\r
63         }\r
64 \r
65         super.registerBeanDefinitions( doc, readerContext );\r
66     }\r
67 \r
68     protected Document convertPlexusDescriptorToSpringBeans( Document doc )\r
69     {\r
70         if ( !"component-set".equals( doc.getDocumentElement().getNodeName() ) )\r
71         {\r
72             return doc;\r
73         }\r
74 \r
75         try\r
76         {\r
77             Source xmlSource = new DOMSource( doc );\r
78             InputStream is = getClass().getResourceAsStream( "PlexusBeanDefinitionDocumentReader.xsl" );\r
79             Source xsltSource = new StreamSource( is );\r
80 \r
81             DOMResult transResult = new DOMResult();\r
82 \r
83             TransformerFactory tf = TransformerFactory.newInstance();\r
84             Transformer t = tf.newTransformer( xsltSource );\r
85             t.transform( xmlSource, transResult );\r
86 \r
87             logger.debug( doc.getDocumentURI() + " successfully translated to spring");\r
88             return (Document) transResult.getNode();\r
89         }\r
90         catch ( Exception e )\r
91         {\r
92             throw new BeanDefinitionStoreException(\r
93                 "Failed to translate plexus component descriptor to Spring XML context", e );\r
94         }\r
95     }\r
96 }\r