View Javadoc

1   package org.apache.maven.xdoc;
2   
3   /* ====================================================================
4    *   Licensed to the Apache Software Foundation (ASF) under one or more
5    *   contributor license agreements.  See the NOTICE file distributed with
6    *   this work for additional information regarding copyright ownership.
7    *   The ASF licenses this file to You under the Apache License, Version 2.0
8    *   (the "License"); you may not use this file except in compliance with
9    *   the License.  You may obtain a copy of the License at
10   *
11   *       http://www.apache.org/licenses/LICENSE-2.0
12   *
13   *   Unless required by applicable law or agreed to in writing, software
14   *   distributed under the License is distributed on an "AS IS" BASIS,
15   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   *   See the License for the specific language governing permissions and
17   *   limitations under the License.
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       * @see org.apache.commons.jelly.Tag#doTag(org.apache.commons.jelly.XMLOutput)
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  }