Coverage Report - org.apache.commons.mail.resolver.DataSourceCompositeResolver
 
Classes in this File Line Coverage Branch Coverage Complexity
DataSourceCompositeResolver
95%
22/23
90%
9/10
3
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one or more
 3  
  * contributor license agreements.  See the NOTICE file distributed with
 4  
  * this work for additional information regarding copyright ownership.
 5  
  * The ASF licenses this file to You under the Apache License, Version 2.0
 6  
  * (the "License"); you may not use this file except in compliance with
 7  
  * the License.  You may obtain a copy of the License at
 8  
  *
 9  
  *     http://www.apache.org/licenses/LICENSE-2.0
 10  
  *
 11  
  * Unless required by applicable law or agreed to in writing, software
 12  
  * distributed under the License is distributed on an "AS IS" BASIS,
 13  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14  
  * See the License for the specific language governing permissions and
 15  
  * limitations under the License.
 16  
  */
 17  
 package org.apache.commons.mail.resolver;
 18  
 
 19  
 import org.apache.commons.mail.DataSourceResolver;
 20  
 
 21  
 import javax.activation.DataSource;
 22  
 import java.io.IOException;
 23  
 
 24  
 /**
 25  
  * A composite data source resolver. It allows to resolve data sources coming from
 26  
  * multiple locations such as the classpath, the file system or an URL.
 27  
  *
 28  
  * @since 1.3
 29  
  * @version $Id: DataSourceCompositeResolver.java 1420381 2012-12-11 20:18:05Z tn $
 30  
  */
 31  
 public class DataSourceCompositeResolver extends DataSourceBaseResolver
 32  
 {
 33  
     /** the list of resolvers */
 34  
     private final DataSourceResolver[] dataSourceResolvers;
 35  
 
 36  
     /**
 37  
      * Constructor.
 38  
      *
 39  
      * @param dataSourceResolvers a list of of resolvers being used
 40  
      */
 41  
     public DataSourceCompositeResolver(final DataSourceResolver[] dataSourceResolvers)
 42  1
     {
 43  1
         this.dataSourceResolvers = new DataSourceResolver[dataSourceResolvers.length];
 44  1
         System.arraycopy(dataSourceResolvers, 0, this.dataSourceResolvers, 0, dataSourceResolvers.length);
 45  1
     }
 46  
 
 47  
     /**
 48  
      * Constructor.
 49  
      *
 50  
      * @param dataSourceResolvers a list of of resolvers being used
 51  
      * @param isLenient shall we ignore resources not found or throw an exception?
 52  
      */
 53  
     public DataSourceCompositeResolver(final DataSourceResolver[] dataSourceResolvers, final boolean isLenient)
 54  
     {
 55  3
         super(isLenient);
 56  3
         this.dataSourceResolvers = new DataSourceResolver[dataSourceResolvers.length];
 57  3
         System.arraycopy(dataSourceResolvers, 0, this.dataSourceResolvers, 0, dataSourceResolvers.length);
 58  3
     }
 59  
 
 60  
     /**
 61  
      * Get the underlying data source resolvers.
 62  
      *
 63  
      * @return underlying data source resolvers
 64  
      */
 65  
     public DataSourceResolver[] getDataSourceResolvers()
 66  
     {
 67  
         // clone the internal array to prevent external modification (see EMAIL-116)
 68  17
         final DataSourceResolver[] resolvers = new DataSourceResolver[dataSourceResolvers.length];
 69  17
         System.arraycopy(dataSourceResolvers, 0, resolvers, 0, dataSourceResolvers.length);
 70  17
         return resolvers;
 71  
     }
 72  
 
 73  
     /** {@inheritDoc} */
 74  
     public DataSource resolve(String resourceLocation) throws IOException
 75  
     {
 76  4
         DataSource result = resolve(resourceLocation, true);
 77  
 
 78  4
         if (isLenient() || result != null)
 79  
         {
 80  3
             return result;
 81  
         }
 82  
         else
 83  
         {
 84  1
             throw new IOException("The following resource was not found : " + resourceLocation);
 85  
         }
 86  
 
 87  
     }
 88  
 
 89  
     /** {@inheritDoc} */
 90  
     public DataSource resolve(final String resourceLocation, final boolean isLenient) throws IOException
 91  
     {
 92  8
         for (int i = 0; i < getDataSourceResolvers().length; i++)
 93  
         {
 94  7
             DataSourceResolver dataSourceResolver = getDataSourceResolvers()[i];
 95  7
             DataSource dataSource = dataSourceResolver.resolve(resourceLocation, isLenient);
 96  
 
 97  7
             if (dataSource != null)
 98  
             {
 99  3
                 return dataSource;
 100  
             }
 101  
         }
 102  
 
 103  1
         if (isLenient)
 104  
         {
 105  1
             return null;
 106  
         }
 107  
         else
 108  
         {
 109  0
             throw new IOException("The following resource was not found : " + resourceLocation);
 110  
         }
 111  
     }
 112  
 }