2011/08/05 - Jakarta Cactus has been retired.

For more information, please explore the Attic.

Clover coverage report - Cactus 1.8dev for J2EE API 1.3
Coverage timestamp: Sun Mar 26 2006 18:50:18 BRT
file stats: LOC: 141   Methods: 4
NCLOC: 69   Classes: 1
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
DefaultWarArchive.java 75% 100% 100% 91.7%
coverage coverage
 1   
 /* 
 2   
  * ========================================================================
 3   
  * 
 4   
  * Copyright 2003 The Apache Software Foundation.
 5   
  *
 6   
  * Licensed under the Apache License, Version 2.0 (the "License");
 7   
  * you may not use this file except in compliance with the License.
 8   
  * You may obtain a copy of the License at
 9   
  * 
 10   
  *   http://www.apache.org/licenses/LICENSE-2.0
 11   
  * 
 12   
  * Unless required by applicable law or agreed to in writing, software
 13   
  * distributed under the License is distributed on an "AS IS" BASIS,
 14   
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15   
  * See the License for the specific language governing permissions and
 16   
  * limitations under the License.
 17   
  * 
 18   
  * ========================================================================
 19   
  */
 20   
 package org.apache.cactus.integration.ant.deployment.webapp;
 21   
 
 22   
 import java.io.File;
 23   
 import java.io.IOException;
 24   
 import java.io.InputStream;
 25   
 import java.util.Iterator;
 26   
 import java.util.List;
 27   
 
 28   
 import javax.xml.parsers.ParserConfigurationException;
 29   
 
 30   
 import org.apache.cactus.integration.ant.deployment.DefaultJarArchive;
 31   
 import org.apache.cactus.integration.ant.deployment.JarArchive;
 32   
 import org.xml.sax.SAXException;
 33   
 
 34   
 /**
 35   
  * Class that encapsulates access to a WAR.
 36   
  * 
 37   
  * @since Cactus 1.5
 38   
  * @version $Id: DefaultWarArchive.java 239003 2004-05-31 20:05:27Z vmassol $
 39   
  */
 40   
 public class DefaultWarArchive extends DefaultJarArchive implements WarArchive
 41   
 {
 42   
     // Instance Variables ------------------------------------------------------
 43   
 
 44   
     /**
 45   
      * The parsed deployment descriptor.
 46   
      */
 47   
     private WebXml webXml;
 48   
 
 49   
     // Constructors ------------------------------------------------------------
 50   
     
 51   
     /**
 52   
      * Constructor.
 53   
      * 
 54   
      * @param theFile The web application archive
 55   
      * @throws IOException If there was a problem reading the WAR
 56   
      */
 57  5
     public DefaultWarArchive(File theFile)
 58   
         throws IOException
 59   
     {
 60  5
         super(theFile);
 61   
     }
 62   
 
 63   
     /**
 64   
      * Constructor.
 65   
      * 
 66   
      * @param theInputStream The input stream for the web application archive
 67   
      * @throws IOException If there was a problem reading the WAR
 68   
      */
 69  5
     public DefaultWarArchive(InputStream theInputStream)
 70   
         throws IOException
 71   
     {
 72  5
         super(theInputStream);
 73   
     }
 74   
 
 75   
     // Public Methods ----------------------------------------------------------
 76   
 
 77   
     /**
 78   
      * @see WarArchive#getWebXml()
 79   
      */
 80  16
     public final WebXml getWebXml()
 81   
         throws IOException, SAXException, ParserConfigurationException
 82   
     {
 83  16
         if (this.webXml == null)
 84   
         {
 85  7
             InputStream in = null;
 86  7
             try
 87   
             {
 88  7
                 in = getResource("WEB-INF/web.xml");
 89  7
                 if (in != null)
 90   
                 {
 91  7
                     this.webXml = WebXmlIo.parseWebXml(in, null);
 92   
                 }
 93   
             }
 94   
             finally
 95   
             {
 96  7
                 if (in != null)
 97   
                 {
 98  7
                     in.close();
 99   
                 }
 100   
             }
 101   
         }
 102  16
         return this.webXml;
 103   
     }
 104   
 
 105   
     /**
 106   
      * Returns whether a class of the specified name is contained in the web-app
 107   
      * archive, either directly in WEB-INF/classes, or in one of the JARs in
 108   
      * WEB-INF/lib.
 109   
      * 
 110   
      * @param theClassName The name of the class to search for
 111   
      * @return Whether the class was found in the archive
 112   
      * @throws IOException If an I/O error occurred reading the archive
 113   
      */
 114  3
     public final boolean containsClass(String theClassName)
 115   
         throws IOException
 116   
     {
 117   
         // Look in WEB-INF/classes first
 118  3
         String resourceName =
 119   
             "WEB-INF/classes/" + theClassName.replace('.', '/') + ".class";
 120  3
         if (getResource(resourceName) != null)
 121   
         {
 122  1
             return true;
 123   
         }
 124   
 
 125   
         // Next scan the JARs in WEB-INF/lib
 126  2
         List jars = getResources("WEB-INF/lib/");
 127  2
         for (Iterator i = jars.iterator(); i.hasNext();)
 128   
         {
 129  1
             JarArchive jar = new DefaultJarArchive(
 130   
                 getResource((String) i.next()));
 131  1
             if (jar.containsClass(theClassName))
 132   
             {
 133  1
                 return true;
 134   
             }
 135   
         }
 136   
 
 137  1
         return false;
 138   
     }
 139   
 
 140   
 }
 141