1 package org.apache.maven.xdoc;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import java.io.File;
22 import java.net.MalformedURLException;
23
24 import org.apache.commons.jelly.JellyTagException;
25 import org.apache.commons.jelly.MissingAttributeException;
26 import org.apache.commons.jelly.TagSupport;
27 import org.apache.commons.jelly.XMLOutput;
28
29 import com.werken.forehead.ForeheadClassLoader;
30
31 /**
32 * Add a specific ressource to the current Maven context
33 *
34 * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
35 * @version 1.0
36 */
37 public class GrabClassLoaderTag extends TagSupport {
38 /** Resource to include in the Maven context. */
39 private String resource;
40
41
42
43
44 public void doTag(XMLOutput arg0) throws MissingAttributeException, JellyTagException {
45 if (getContext() == null) {
46 throw new JellyTagException("The current MavenContext is null!");
47 }
48
49 ForeheadClassLoader currentClassLoader = null;
50 try {
51 currentClassLoader = (ForeheadClassLoader) getContext().getClassLoader();
52 } catch (ClassCastException e) {
53 throw new JellyTagException("The current classloader in the MavenContext is not an instance of ForeheadClassLoader");
54 }
55
56 if (currentClassLoader == null) {
57 throw new JellyTagException("No classloader found in the current MavenContext");
58 }
59
60 try {
61 File f = new File(this.resource);
62
63 currentClassLoader.addURL(f.toURL());
64 } catch (MalformedURLException e) {
65 throw new JellyTagException("The directory to include specified by " + getResource() + " is malformed");
66 }
67
68 ForeheadClassLoader newClassLoader = new ForeheadClassLoader(currentClassLoader, currentClassLoader.getName() + "_TEMP");
69 getContext().setClassLoader(newClassLoader);
70 }
71
72 /**
73 * Get the includeDir.
74 *
75 * @return the includeDir.
76 */
77 public String getResource() {
78 return this.resource;
79 }
80 /**
81 * Set the includeDir
82 *
83 * @param includeDir includeDir to set.
84 */
85 public void setResource(String includeDir) {
86 this.resource = includeDir;
87 }
88 }