You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2024/06/15 15:07:30 UTC

svn commit: r69775 [19/21] - in /dev/commons/email/2.0.0-M1-RC1: ./ binaries/ site/ site/apidocs/ site/apidocs/legal/ site/apidocs/org/ site/apidocs/org/apache/ site/apidocs/org/apache/commons/ site/apidocs/org/apache/commons/mail2/ site/apidocs/org/ap...

Added: dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/activation/PathDataSource.html
==============================================================================
--- dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/activation/PathDataSource.html (added)
+++ dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/activation/PathDataSource.html Sat Jun 15 15:07:30 2024
@@ -0,0 +1,223 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) -->
+<title>Source code</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="source: package: org.apache.commons.mail2.javax.activation, class: PathDataSource">
+<meta name="generator" content="javadoc/SourceToHTMLConverter">
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body class="source-page">
+<main role="main">
+<div class="source-container">
+<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
+<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one or more</span>
+<span class="source-line-no">003</span><span id="line-3"> * contributor license agreements.  See the NOTICE file distributed with</span>
+<span class="source-line-no">004</span><span id="line-4"> * this work for additional information regarding copyright ownership.</span>
+<span class="source-line-no">005</span><span id="line-5"> * The ASF licenses this file to You under the Apache License, Version 2.0</span>
+<span class="source-line-no">006</span><span id="line-6"> * (the "License"); you may not use this file except in compliance with</span>
+<span class="source-line-no">007</span><span id="line-7"> * the License.  You may obtain a copy of the License at</span>
+<span class="source-line-no">008</span><span id="line-8"> *</span>
+<span class="source-line-no">009</span><span id="line-9"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="source-line-no">010</span><span id="line-10"> *</span>
+<span class="source-line-no">011</span><span id="line-11"> * Unless required by applicable law or agreed to in writing, software</span>
+<span class="source-line-no">012</span><span id="line-12"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<span class="source-line-no">013</span><span id="line-13"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="source-line-no">014</span><span id="line-14"> * See the License for the specific language governing permissions and</span>
+<span class="source-line-no">015</span><span id="line-15"> * limitations under the License.</span>
+<span class="source-line-no">016</span><span id="line-16"> */</span>
+<span class="source-line-no">017</span><span id="line-17"></span>
+<span class="source-line-no">018</span><span id="line-18">package org.apache.commons.mail2.javax.activation;</span>
+<span class="source-line-no">019</span><span id="line-19"></span>
+<span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span>
+<span class="source-line-no">021</span><span id="line-21">import java.io.InputStream;</span>
+<span class="source-line-no">022</span><span id="line-22">import java.io.OutputStream;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.nio.file.Files;</span>
+<span class="source-line-no">024</span><span id="line-24">import java.nio.file.OpenOption;</span>
+<span class="source-line-no">025</span><span id="line-25">import java.nio.file.Path;</span>
+<span class="source-line-no">026</span><span id="line-26">import java.util.Objects;</span>
+<span class="source-line-no">027</span><span id="line-27"></span>
+<span class="source-line-no">028</span><span id="line-28">import javax.activation.DataSource;</span>
+<span class="source-line-no">029</span><span id="line-29">import javax.activation.FileTypeMap;</span>
+<span class="source-line-no">030</span><span id="line-30">import javax.activation.MimetypesFileTypeMap;</span>
+<span class="source-line-no">031</span><span id="line-31"></span>
+<span class="source-line-no">032</span><span id="line-32">/**</span>
+<span class="source-line-no">033</span><span id="line-33"> * A JavaBeans Activation Framework {@link DataSource} that encapsulates a {@link Path}. It provides data typing services via a {@link FileTypeMap} object.</span>
+<span class="source-line-no">034</span><span id="line-34"> *</span>
+<span class="source-line-no">035</span><span id="line-35"> * @see javax.activation.DataSource</span>
+<span class="source-line-no">036</span><span id="line-36"> * @see javax.activation.FileTypeMap</span>
+<span class="source-line-no">037</span><span id="line-37"> * @see javax.activation.MimetypesFileTypeMap</span>
+<span class="source-line-no">038</span><span id="line-38"> *</span>
+<span class="source-line-no">039</span><span id="line-39"> * @since 1.6.0</span>
+<span class="source-line-no">040</span><span id="line-40"> */</span>
+<span class="source-line-no">041</span><span id="line-41">public final class PathDataSource implements DataSource {</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">    /**</span>
+<span class="source-line-no">044</span><span id="line-44">     * The source.</span>
+<span class="source-line-no">045</span><span id="line-45">     */</span>
+<span class="source-line-no">046</span><span id="line-46">    private final Path path;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">    /**</span>
+<span class="source-line-no">049</span><span id="line-49">     * Defaults to {@link FileTypeMap#getDefaultFileTypeMap()}.</span>
+<span class="source-line-no">050</span><span id="line-50">     */</span>
+<span class="source-line-no">051</span><span id="line-51">    private final FileTypeMap typeMap;</span>
+<span class="source-line-no">052</span><span id="line-52"></span>
+<span class="source-line-no">053</span><span id="line-53">    /**</span>
+<span class="source-line-no">054</span><span id="line-54">     * NIO options to open the source Path.</span>
+<span class="source-line-no">055</span><span id="line-55">     */</span>
+<span class="source-line-no">056</span><span id="line-56">    private final OpenOption[] options;</span>
+<span class="source-line-no">057</span><span id="line-57"></span>
+<span class="source-line-no">058</span><span id="line-58">    /**</span>
+<span class="source-line-no">059</span><span id="line-59">     * Creates a new instance from a Path.</span>
+<span class="source-line-no">060</span><span id="line-60">     * &lt;p&gt;</span>
+<span class="source-line-no">061</span><span id="line-61">     * The file will not actually be opened until a method is called that requires the path to be opened.</span>
+<span class="source-line-no">062</span><span id="line-62">     * &lt;/p&gt;</span>
+<span class="source-line-no">063</span><span id="line-63">     * &lt;p&gt;</span>
+<span class="source-line-no">064</span><span id="line-64">     * The type map defaults to {@link FileTypeMap#getDefaultFileTypeMap()}.</span>
+<span class="source-line-no">065</span><span id="line-65">     *</span>
+<span class="source-line-no">066</span><span id="line-66">     * @param path the path</span>
+<span class="source-line-no">067</span><span id="line-67">     */</span>
+<span class="source-line-no">068</span><span id="line-68">    public PathDataSource(final Path path) {</span>
+<span class="source-line-no">069</span><span id="line-69">        this(path, FileTypeMap.getDefaultFileTypeMap());</span>
+<span class="source-line-no">070</span><span id="line-70">    }</span>
+<span class="source-line-no">071</span><span id="line-71"></span>
+<span class="source-line-no">072</span><span id="line-72">    /**</span>
+<span class="source-line-no">073</span><span id="line-73">     * Creates a new instance from a Path.</span>
+<span class="source-line-no">074</span><span id="line-74">     * &lt;p&gt;</span>
+<span class="source-line-no">075</span><span id="line-75">     * The file will not actually be opened until a method is called that requires the path to be opened.</span>
+<span class="source-line-no">076</span><span id="line-76">     * &lt;/p&gt;</span>
+<span class="source-line-no">077</span><span id="line-77">     *</span>
+<span class="source-line-no">078</span><span id="line-78">     * @param path    the path, non-null.</span>
+<span class="source-line-no">079</span><span id="line-79">     * @param typeMap the type map, non-null.</span>
+<span class="source-line-no">080</span><span id="line-80">     * @param options options for opening file streams.</span>
+<span class="source-line-no">081</span><span id="line-81">     */</span>
+<span class="source-line-no">082</span><span id="line-82">    public PathDataSource(final Path path, final FileTypeMap typeMap, final OpenOption... options) {</span>
+<span class="source-line-no">083</span><span id="line-83">        this.path = Objects.requireNonNull(path, "path");</span>
+<span class="source-line-no">084</span><span id="line-84">        this.typeMap = Objects.requireNonNull(typeMap, "typeMap");</span>
+<span class="source-line-no">085</span><span id="line-85">        this.options = options;</span>
+<span class="source-line-no">086</span><span id="line-86">    }</span>
+<span class="source-line-no">087</span><span id="line-87"></span>
+<span class="source-line-no">088</span><span id="line-88">    /**</span>
+<span class="source-line-no">089</span><span id="line-89">     * Gets the MIME type of the data as a String. This method uses the currently installed FileTypeMap. If there is no FileTypeMap explicitly set, the</span>
+<span class="source-line-no">090</span><span id="line-90">     * FileDataSource will call the {@link FileTypeMap#getDefaultFileTypeMap} method to acquire a default FileTypeMap.</span>
+<span class="source-line-no">091</span><span id="line-91">     * &lt;p&gt;</span>
+<span class="source-line-no">092</span><span id="line-92">     * By default, the {@link FileTypeMap} used will be a {@link MimetypesFileTypeMap}.</span>
+<span class="source-line-no">093</span><span id="line-93">     * &lt;/p&gt;</span>
+<span class="source-line-no">094</span><span id="line-94">     *</span>
+<span class="source-line-no">095</span><span id="line-95">     * @return the MIME Type</span>
+<span class="source-line-no">096</span><span id="line-96">     * @see FileTypeMap#getDefaultFileTypeMap</span>
+<span class="source-line-no">097</span><span id="line-97">     */</span>
+<span class="source-line-no">098</span><span id="line-98">    @Override</span>
+<span class="source-line-no">099</span><span id="line-99">    public String getContentType() {</span>
+<span class="source-line-no">100</span><span id="line-100">        return typeMap.getContentType(getName());</span>
+<span class="source-line-no">101</span><span id="line-101">    }</span>
+<span class="source-line-no">102</span><span id="line-102"></span>
+<span class="source-line-no">103</span><span id="line-103">    /**</span>
+<span class="source-line-no">104</span><span id="line-104">     * Gets an InputStream representing the the data and will throw an IOException if it can not do so. This method will return a new instance of InputStream</span>
+<span class="source-line-no">105</span><span id="line-105">     * with each invocation.</span>
+<span class="source-line-no">106</span><span id="line-106">     *</span>
+<span class="source-line-no">107</span><span id="line-107">     * @return an InputStream</span>
+<span class="source-line-no">108</span><span id="line-108">     */</span>
+<span class="source-line-no">109</span><span id="line-109">    @Override</span>
+<span class="source-line-no">110</span><span id="line-110">    public InputStream getInputStream() throws IOException {</span>
+<span class="source-line-no">111</span><span id="line-111">        return Files.newInputStream(path, options);</span>
+<span class="source-line-no">112</span><span id="line-112">    }</span>
+<span class="source-line-no">113</span><span id="line-113"></span>
+<span class="source-line-no">114</span><span id="line-114">    /**</span>
+<span class="source-line-no">115</span><span id="line-115">     * Gets the &lt;em&gt;name&lt;/em&gt; of this object. The FileDataSource will return the file name of the object.</span>
+<span class="source-line-no">116</span><span id="line-116">     *</span>
+<span class="source-line-no">117</span><span id="line-117">     * @return the name of the object or null.</span>
+<span class="source-line-no">118</span><span id="line-118">     * @see javax.activation.DataSource</span>
+<span class="source-line-no">119</span><span id="line-119">     */</span>
+<span class="source-line-no">120</span><span id="line-120">    @Override</span>
+<span class="source-line-no">121</span><span id="line-121">    public String getName() {</span>
+<span class="source-line-no">122</span><span id="line-122">        return Objects.toString(path.getFileName(), null);</span>
+<span class="source-line-no">123</span><span id="line-123">    }</span>
+<span class="source-line-no">124</span><span id="line-124"></span>
+<span class="source-line-no">125</span><span id="line-125">    /**</span>
+<span class="source-line-no">126</span><span id="line-126">     * Gets an OutputStream representing the the data and will throw an IOException if it can not do so. This method will return a new instance of OutputStream</span>
+<span class="source-line-no">127</span><span id="line-127">     * with each invocation.</span>
+<span class="source-line-no">128</span><span id="line-128">     *</span>
+<span class="source-line-no">129</span><span id="line-129">     * @return an OutputStream</span>
+<span class="source-line-no">130</span><span id="line-130">     */</span>
+<span class="source-line-no">131</span><span id="line-131">    @Override</span>
+<span class="source-line-no">132</span><span id="line-132">    public OutputStream getOutputStream() throws IOException {</span>
+<span class="source-line-no">133</span><span id="line-133">        return Files.newOutputStream(path, options);</span>
+<span class="source-line-no">134</span><span id="line-134">    }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136">    /**</span>
+<span class="source-line-no">137</span><span id="line-137">     * Gets the File object that corresponds to this PathDataSource.</span>
+<span class="source-line-no">138</span><span id="line-138">     *</span>
+<span class="source-line-no">139</span><span id="line-139">     * @return the File object for the file represented by this object.</span>
+<span class="source-line-no">140</span><span id="line-140">     */</span>
+<span class="source-line-no">141</span><span id="line-141">    public Path getPath() {</span>
+<span class="source-line-no">142</span><span id="line-142">        return path;</span>
+<span class="source-line-no">143</span><span id="line-143">    }</span>
+<span class="source-line-no">144</span><span id="line-144"></span>
+<span class="source-line-no">145</span><span id="line-145">}</span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
+</html>

Added: dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceBaseResolver.html
==============================================================================
--- dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceBaseResolver.html (added)
+++ dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceBaseResolver.html Sat Jun 15 15:07:30 2024
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) -->
+<title>Source code</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="source: package: org.apache.commons.mail2.javax.resolver, class: DataSourceBaseResolver">
+<meta name="generator" content="javadoc/SourceToHTMLConverter">
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body class="source-page">
+<main role="main">
+<div class="source-container">
+<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
+<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one or more</span>
+<span class="source-line-no">003</span><span id="line-3"> * contributor license agreements.  See the NOTICE file distributed with</span>
+<span class="source-line-no">004</span><span id="line-4"> * this work for additional information regarding copyright ownership.</span>
+<span class="source-line-no">005</span><span id="line-5"> * The ASF licenses this file to You under the Apache License, Version 2.0</span>
+<span class="source-line-no">006</span><span id="line-6"> * (the "License"); you may not use this file except in compliance with</span>
+<span class="source-line-no">007</span><span id="line-7"> * the License.  You may obtain a copy of the License at</span>
+<span class="source-line-no">008</span><span id="line-8"> *</span>
+<span class="source-line-no">009</span><span id="line-9"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="source-line-no">010</span><span id="line-10"> *</span>
+<span class="source-line-no">011</span><span id="line-11"> * Unless required by applicable law or agreed to in writing, software</span>
+<span class="source-line-no">012</span><span id="line-12"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<span class="source-line-no">013</span><span id="line-13"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="source-line-no">014</span><span id="line-14"> * See the License for the specific language governing permissions and</span>
+<span class="source-line-no">015</span><span id="line-15"> * limitations under the License.</span>
+<span class="source-line-no">016</span><span id="line-16"> */</span>
+<span class="source-line-no">017</span><span id="line-17">package org.apache.commons.mail2.javax.resolver;</span>
+<span class="source-line-no">018</span><span id="line-18"></span>
+<span class="source-line-no">019</span><span id="line-19">import org.apache.commons.mail2.javax.DataSourceResolver;</span>
+<span class="source-line-no">020</span><span id="line-20"></span>
+<span class="source-line-no">021</span><span id="line-21">/**</span>
+<span class="source-line-no">022</span><span id="line-22"> * Abstract class for resolvers.</span>
+<span class="source-line-no">023</span><span id="line-23"> *</span>
+<span class="source-line-no">024</span><span id="line-24"> * @since 1.3</span>
+<span class="source-line-no">025</span><span id="line-25"> */</span>
+<span class="source-line-no">026</span><span id="line-26">public abstract class DataSourceBaseResolver implements DataSourceResolver {</span>
+<span class="source-line-no">027</span><span id="line-27"></span>
+<span class="source-line-no">028</span><span id="line-28">    /** Whether to ignore resources not found or complain with an exception. */</span>
+<span class="source-line-no">029</span><span id="line-29">    private final boolean lenient;</span>
+<span class="source-line-no">030</span><span id="line-30"></span>
+<span class="source-line-no">031</span><span id="line-31">    /**</span>
+<span class="source-line-no">032</span><span id="line-32">     * Constructs a new instance.</span>
+<span class="source-line-no">033</span><span id="line-33">     */</span>
+<span class="source-line-no">034</span><span id="line-34">    public DataSourceBaseResolver() {</span>
+<span class="source-line-no">035</span><span id="line-35">        this.lenient = false;</span>
+<span class="source-line-no">036</span><span id="line-36">    }</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38">    /**</span>
+<span class="source-line-no">039</span><span id="line-39">     * Constructs a new instance.</span>
+<span class="source-line-no">040</span><span id="line-40">     *</span>
+<span class="source-line-no">041</span><span id="line-41">     * @param lenient shall we ignore resources not found or throw an exception?</span>
+<span class="source-line-no">042</span><span id="line-42">     */</span>
+<span class="source-line-no">043</span><span id="line-43">    public DataSourceBaseResolver(final boolean lenient) {</span>
+<span class="source-line-no">044</span><span id="line-44">        this.lenient = lenient;</span>
+<span class="source-line-no">045</span><span id="line-45">    }</span>
+<span class="source-line-no">046</span><span id="line-46"></span>
+<span class="source-line-no">047</span><span id="line-47">    /**</span>
+<span class="source-line-no">048</span><span id="line-48">     * Tests whether the argument is a content id.</span>
+<span class="source-line-no">049</span><span id="line-49">     *</span>
+<span class="source-line-no">050</span><span id="line-50">     * @param resourceLocation the resource location to test.</span>
+<span class="source-line-no">051</span><span id="line-51">     * @return true if it is a CID.</span>
+<span class="source-line-no">052</span><span id="line-52">     */</span>
+<span class="source-line-no">053</span><span id="line-53">    protected boolean isCid(final String resourceLocation) {</span>
+<span class="source-line-no">054</span><span id="line-54">        return resourceLocation.startsWith("cid:");</span>
+<span class="source-line-no">055</span><span id="line-55">    }</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57">    /**</span>
+<span class="source-line-no">058</span><span id="line-58">     * Tests whether this a file URL.</span>
+<span class="source-line-no">059</span><span id="line-59">     *</span>
+<span class="source-line-no">060</span><span id="line-60">     * @param urlString the URL string.</span>
+<span class="source-line-no">061</span><span id="line-61">     * @return true if it is a file URL.</span>
+<span class="source-line-no">062</span><span id="line-62">     */</span>
+<span class="source-line-no">063</span><span id="line-63">    protected boolean isFileUrl(final String urlString) {</span>
+<span class="source-line-no">064</span><span id="line-64">        return urlString.startsWith("file:/");</span>
+<span class="source-line-no">065</span><span id="line-65">    }</span>
+<span class="source-line-no">066</span><span id="line-66"></span>
+<span class="source-line-no">067</span><span id="line-67">    /**</span>
+<span class="source-line-no">068</span><span id="line-68">     * Tests whether this a HTTP or HTTPS URL.</span>
+<span class="source-line-no">069</span><span id="line-69">     *</span>
+<span class="source-line-no">070</span><span id="line-70">     * @param urlString the URL string to test.</span>
+<span class="source-line-no">071</span><span id="line-71">     * @return true if it is a HTTP or HTTPS URL.</span>
+<span class="source-line-no">072</span><span id="line-72">     */</span>
+<span class="source-line-no">073</span><span id="line-73">    protected boolean isHttpUrl(final String urlString) {</span>
+<span class="source-line-no">074</span><span id="line-74">        return urlString.startsWith("http://") || urlString.startsWith("https://");</span>
+<span class="source-line-no">075</span><span id="line-75">    }</span>
+<span class="source-line-no">076</span><span id="line-76"></span>
+<span class="source-line-no">077</span><span id="line-77">    /**</span>
+<span class="source-line-no">078</span><span id="line-78">     * Tests whether to ignore resources not found or throw an exception.</span>
+<span class="source-line-no">079</span><span id="line-79">     *</span>
+<span class="source-line-no">080</span><span id="line-80">     * @return the lenient flag.</span>
+<span class="source-line-no">081</span><span id="line-81">     */</span>
+<span class="source-line-no">082</span><span id="line-82">    public boolean isLenient() {</span>
+<span class="source-line-no">083</span><span id="line-83">        return lenient;</span>
+<span class="source-line-no">084</span><span id="line-84">    }</span>
+<span class="source-line-no">085</span><span id="line-85">}</span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
+</html>

Added: dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolver.html
==============================================================================
--- dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolver.html (added)
+++ dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolver.html Sat Jun 15 15:07:30 2024
@@ -0,0 +1,203 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) -->
+<title>Source code</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="source: package: org.apache.commons.mail2.javax.resolver, class: DataSourceClassPathResolver">
+<meta name="generator" content="javadoc/SourceToHTMLConverter">
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body class="source-page">
+<main role="main">
+<div class="source-container">
+<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
+<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one or more</span>
+<span class="source-line-no">003</span><span id="line-3"> * contributor license agreements.  See the NOTICE file distributed with</span>
+<span class="source-line-no">004</span><span id="line-4"> * this work for additional information regarding copyright ownership.</span>
+<span class="source-line-no">005</span><span id="line-5"> * The ASF licenses this file to You under the Apache License, Version 2.0</span>
+<span class="source-line-no">006</span><span id="line-6"> * (the "License"); you may not use this file except in compliance with</span>
+<span class="source-line-no">007</span><span id="line-7"> * the License.  You may obtain a copy of the License at</span>
+<span class="source-line-no">008</span><span id="line-8"> *</span>
+<span class="source-line-no">009</span><span id="line-9"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="source-line-no">010</span><span id="line-10"> *</span>
+<span class="source-line-no">011</span><span id="line-11"> * Unless required by applicable law or agreed to in writing, software</span>
+<span class="source-line-no">012</span><span id="line-12"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<span class="source-line-no">013</span><span id="line-13"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="source-line-no">014</span><span id="line-14"> * See the License for the specific language governing permissions and</span>
+<span class="source-line-no">015</span><span id="line-15"> * limitations under the License.</span>
+<span class="source-line-no">016</span><span id="line-16"> */</span>
+<span class="source-line-no">017</span><span id="line-17">package org.apache.commons.mail2.javax.resolver;</span>
+<span class="source-line-no">018</span><span id="line-18"></span>
+<span class="source-line-no">019</span><span id="line-19">import java.io.IOException;</span>
+<span class="source-line-no">020</span><span id="line-20">import java.io.InputStream;</span>
+<span class="source-line-no">021</span><span id="line-21">import java.net.URL;</span>
+<span class="source-line-no">022</span><span id="line-22"></span>
+<span class="source-line-no">023</span><span id="line-23">import javax.activation.DataSource;</span>
+<span class="source-line-no">024</span><span id="line-24">import javax.activation.FileTypeMap;</span>
+<span class="source-line-no">025</span><span id="line-25">import javax.mail.util.ByteArrayDataSource;</span>
+<span class="source-line-no">026</span><span id="line-26"></span>
+<span class="source-line-no">027</span><span id="line-27">/**</span>
+<span class="source-line-no">028</span><span id="line-28"> * Creates a {@code DataSource} based on an class path.</span>
+<span class="source-line-no">029</span><span id="line-29"> *</span>
+<span class="source-line-no">030</span><span id="line-30"> * @since 1.3</span>
+<span class="source-line-no">031</span><span id="line-31"> */</span>
+<span class="source-line-no">032</span><span id="line-32">public class DataSourceClassPathResolver extends DataSourceBaseResolver {</span>
+<span class="source-line-no">033</span><span id="line-33">    /** The base string of the resource relative to the classpath when resolving relative paths */</span>
+<span class="source-line-no">034</span><span id="line-34">    private final String classPathBase;</span>
+<span class="source-line-no">035</span><span id="line-35"></span>
+<span class="source-line-no">036</span><span id="line-36">    /**</span>
+<span class="source-line-no">037</span><span id="line-37">     * Constructs a new instance.</span>
+<span class="source-line-no">038</span><span id="line-38">     */</span>
+<span class="source-line-no">039</span><span id="line-39">    public DataSourceClassPathResolver() {</span>
+<span class="source-line-no">040</span><span id="line-40">        this("/");</span>
+<span class="source-line-no">041</span><span id="line-41">    }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">    /**</span>
+<span class="source-line-no">044</span><span id="line-44">     * Constructs a new instance.</span>
+<span class="source-line-no">045</span><span id="line-45">     *</span>
+<span class="source-line-no">046</span><span id="line-46">     * @param classPathBase a base class path</span>
+<span class="source-line-no">047</span><span id="line-47">     */</span>
+<span class="source-line-no">048</span><span id="line-48">    public DataSourceClassPathResolver(final String classPathBase) {</span>
+<span class="source-line-no">049</span><span id="line-49">        this(classPathBase, false);</span>
+<span class="source-line-no">050</span><span id="line-50">    }</span>
+<span class="source-line-no">051</span><span id="line-51"></span>
+<span class="source-line-no">052</span><span id="line-52">    /**</span>
+<span class="source-line-no">053</span><span id="line-53">     * Constructs a new instance.</span>
+<span class="source-line-no">054</span><span id="line-54">     *</span>
+<span class="source-line-no">055</span><span id="line-55">     * @param classPathBase a base class path</span>
+<span class="source-line-no">056</span><span id="line-56">     * @param lenient       shall we ignore resources not found or throw an exception?</span>
+<span class="source-line-no">057</span><span id="line-57">     */</span>
+<span class="source-line-no">058</span><span id="line-58">    public DataSourceClassPathResolver(final String classPathBase, final boolean lenient) {</span>
+<span class="source-line-no">059</span><span id="line-59">        super(lenient);</span>
+<span class="source-line-no">060</span><span id="line-60">        this.classPathBase = classPathBase.endsWith("/") ? classPathBase : classPathBase + "/";</span>
+<span class="source-line-no">061</span><span id="line-61">    }</span>
+<span class="source-line-no">062</span><span id="line-62"></span>
+<span class="source-line-no">063</span><span id="line-63">    /**</span>
+<span class="source-line-no">064</span><span id="line-64">     * Gets the class path base.</span>
+<span class="source-line-no">065</span><span id="line-65">     *</span>
+<span class="source-line-no">066</span><span id="line-66">     * @return the classPathBase</span>
+<span class="source-line-no">067</span><span id="line-67">     */</span>
+<span class="source-line-no">068</span><span id="line-68">    public String getClassPathBase() {</span>
+<span class="source-line-no">069</span><span id="line-69">        return classPathBase;</span>
+<span class="source-line-no">070</span><span id="line-70">    }</span>
+<span class="source-line-no">071</span><span id="line-71"></span>
+<span class="source-line-no">072</span><span id="line-72">    /**</span>
+<span class="source-line-no">073</span><span id="line-73">     * Returns the resource name for a given resource location.</span>
+<span class="source-line-no">074</span><span id="line-74">     *</span>
+<span class="source-line-no">075</span><span id="line-75">     * @param resourceLocation the resource location</span>
+<span class="source-line-no">076</span><span id="line-76">     * @return {@link #getClassPathBase()} + {@code resourceLocation}</span>
+<span class="source-line-no">077</span><span id="line-77">     * @see #getClassPathBase()</span>
+<span class="source-line-no">078</span><span id="line-78">     */</span>
+<span class="source-line-no">079</span><span id="line-79">    private String getResourceName(final String resourceLocation) {</span>
+<span class="source-line-no">080</span><span id="line-80">        return (getClassPathBase() + resourceLocation).replace("//", "/");</span>
+<span class="source-line-no">081</span><span id="line-81">    }</span>
+<span class="source-line-no">082</span><span id="line-82"></span>
+<span class="source-line-no">083</span><span id="line-83">    /** {@inheritDoc} */</span>
+<span class="source-line-no">084</span><span id="line-84">    @Override</span>
+<span class="source-line-no">085</span><span id="line-85">    public DataSource resolve(final String resourceLocation) throws IOException {</span>
+<span class="source-line-no">086</span><span id="line-86">        return resolve(resourceLocation, isLenient());</span>
+<span class="source-line-no">087</span><span id="line-87">    }</span>
+<span class="source-line-no">088</span><span id="line-88"></span>
+<span class="source-line-no">089</span><span id="line-89">    /** {@inheritDoc} */</span>
+<span class="source-line-no">090</span><span id="line-90">    @Override</span>
+<span class="source-line-no">091</span><span id="line-91">    public DataSource resolve(final String resourceLocation, final boolean isLenient) throws IOException {</span>
+<span class="source-line-no">092</span><span id="line-92">        try {</span>
+<span class="source-line-no">093</span><span id="line-93">            if (!isCid(resourceLocation) &amp;&amp; !isHttpUrl(resourceLocation)) {</span>
+<span class="source-line-no">094</span><span id="line-94">                final String mimeType = FileTypeMap.getDefaultFileTypeMap().getContentType(resourceLocation);</span>
+<span class="source-line-no">095</span><span id="line-95">                final String resourceName = getResourceName(resourceLocation);</span>
+<span class="source-line-no">096</span><span id="line-96">                try (InputStream inputStream = DataSourceClassPathResolver.class.getResourceAsStream(resourceName)) {</span>
+<span class="source-line-no">097</span><span id="line-97">                    if (inputStream == null) {</span>
+<span class="source-line-no">098</span><span id="line-98">                        if (isLenient) {</span>
+<span class="source-line-no">099</span><span id="line-99">                            return null;</span>
+<span class="source-line-no">100</span><span id="line-100">                        }</span>
+<span class="source-line-no">101</span><span id="line-101">                        throw new IOException("The following class path resource was not found : " + resourceLocation);</span>
+<span class="source-line-no">102</span><span id="line-102">                    }</span>
+<span class="source-line-no">103</span><span id="line-103">                    final ByteArrayDataSource ds = new ByteArrayDataSource(inputStream, mimeType);</span>
+<span class="source-line-no">104</span><span id="line-104">                    // EMAIL-125: set the name of the DataSource to the normalized resource URL</span>
+<span class="source-line-no">105</span><span id="line-105">                    // similar to other DataSource implementations, e.g. FileDataSource, URLDataSource</span>
+<span class="source-line-no">106</span><span id="line-106">                    final URL resource = DataSourceClassPathResolver.class.getResource(resourceName);</span>
+<span class="source-line-no">107</span><span id="line-107">                    if (resource != null) {</span>
+<span class="source-line-no">108</span><span id="line-108">                        ds.setName(resource.toString());</span>
+<span class="source-line-no">109</span><span id="line-109">                    } else if (isLenient) {</span>
+<span class="source-line-no">110</span><span id="line-110">                        return null;</span>
+<span class="source-line-no">111</span><span id="line-111">                    } else {</span>
+<span class="source-line-no">112</span><span id="line-112">                        throw new IOException("The following class path resource was not found : " + resourceName);</span>
+<span class="source-line-no">113</span><span id="line-113">                    }</span>
+<span class="source-line-no">114</span><span id="line-114">                    return ds;</span>
+<span class="source-line-no">115</span><span id="line-115">                }</span>
+<span class="source-line-no">116</span><span id="line-116">            }</span>
+<span class="source-line-no">117</span><span id="line-117">            return null;</span>
+<span class="source-line-no">118</span><span id="line-118">        } catch (final IOException e) {</span>
+<span class="source-line-no">119</span><span id="line-119">            if (isLenient) {</span>
+<span class="source-line-no">120</span><span id="line-120">                return null;</span>
+<span class="source-line-no">121</span><span id="line-121">            }</span>
+<span class="source-line-no">122</span><span id="line-122">            throw e;</span>
+<span class="source-line-no">123</span><span id="line-123">        }</span>
+<span class="source-line-no">124</span><span id="line-124">    }</span>
+<span class="source-line-no">125</span><span id="line-125">}</span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
+</html>

Added: dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolver.html
==============================================================================
--- dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolver.html (added)
+++ dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolver.html Sat Jun 15 15:07:30 2024
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) -->
+<title>Source code</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="source: package: org.apache.commons.mail2.javax.resolver, class: DataSourceCompositeResolver">
+<meta name="generator" content="javadoc/SourceToHTMLConverter">
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body class="source-page">
+<main role="main">
+<div class="source-container">
+<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
+<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one or more</span>
+<span class="source-line-no">003</span><span id="line-3"> * contributor license agreements.  See the NOTICE file distributed with</span>
+<span class="source-line-no">004</span><span id="line-4"> * this work for additional information regarding copyright ownership.</span>
+<span class="source-line-no">005</span><span id="line-5"> * The ASF licenses this file to You under the Apache License, Version 2.0</span>
+<span class="source-line-no">006</span><span id="line-6"> * (the "License"); you may not use this file except in compliance with</span>
+<span class="source-line-no">007</span><span id="line-7"> * the License.  You may obtain a copy of the License at</span>
+<span class="source-line-no">008</span><span id="line-8"> *</span>
+<span class="source-line-no">009</span><span id="line-9"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="source-line-no">010</span><span id="line-10"> *</span>
+<span class="source-line-no">011</span><span id="line-11"> * Unless required by applicable law or agreed to in writing, software</span>
+<span class="source-line-no">012</span><span id="line-12"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<span class="source-line-no">013</span><span id="line-13"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="source-line-no">014</span><span id="line-14"> * See the License for the specific language governing permissions and</span>
+<span class="source-line-no">015</span><span id="line-15"> * limitations under the License.</span>
+<span class="source-line-no">016</span><span id="line-16"> */</span>
+<span class="source-line-no">017</span><span id="line-17">package org.apache.commons.mail2.javax.resolver;</span>
+<span class="source-line-no">018</span><span id="line-18"></span>
+<span class="source-line-no">019</span><span id="line-19">import java.io.IOException;</span>
+<span class="source-line-no">020</span><span id="line-20"></span>
+<span class="source-line-no">021</span><span id="line-21">import javax.activation.DataSource;</span>
+<span class="source-line-no">022</span><span id="line-22"></span>
+<span class="source-line-no">023</span><span id="line-23">import org.apache.commons.mail2.javax.DataSourceResolver;</span>
+<span class="source-line-no">024</span><span id="line-24"></span>
+<span class="source-line-no">025</span><span id="line-25">/**</span>
+<span class="source-line-no">026</span><span id="line-26"> * A composite data source resolver. It allows to resolve data sources coming from multiple locations such as the classpath, the file system or an URL.</span>
+<span class="source-line-no">027</span><span id="line-27"> *</span>
+<span class="source-line-no">028</span><span id="line-28"> * @since 1.3</span>
+<span class="source-line-no">029</span><span id="line-29"> */</span>
+<span class="source-line-no">030</span><span id="line-30">public class DataSourceCompositeResolver extends DataSourceBaseResolver {</span>
+<span class="source-line-no">031</span><span id="line-31"></span>
+<span class="source-line-no">032</span><span id="line-32">    /** The list of resolvers */</span>
+<span class="source-line-no">033</span><span id="line-33">    private final DataSourceResolver[] dataSourceResolvers;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">    /**</span>
+<span class="source-line-no">036</span><span id="line-36">     * Constructs a new instance.</span>
+<span class="source-line-no">037</span><span id="line-37">     *</span>
+<span class="source-line-no">038</span><span id="line-38">     * @param dataSourceResolvers a list of resolvers being used</span>
+<span class="source-line-no">039</span><span id="line-39">     */</span>
+<span class="source-line-no">040</span><span id="line-40">    public DataSourceCompositeResolver(final DataSourceResolver[] dataSourceResolvers) {</span>
+<span class="source-line-no">041</span><span id="line-41">        this.dataSourceResolvers = dataSourceResolvers.clone();</span>
+<span class="source-line-no">042</span><span id="line-42">    }</span>
+<span class="source-line-no">043</span><span id="line-43"></span>
+<span class="source-line-no">044</span><span id="line-44">    /**</span>
+<span class="source-line-no">045</span><span id="line-45">     * Constructs a new instance.</span>
+<span class="source-line-no">046</span><span id="line-46">     *</span>
+<span class="source-line-no">047</span><span id="line-47">     * @param dataSourceResolvers a list of resolvers being used</span>
+<span class="source-line-no">048</span><span id="line-48">     * @param isLenient           shall we ignore resources not found or throw an exception?</span>
+<span class="source-line-no">049</span><span id="line-49">     */</span>
+<span class="source-line-no">050</span><span id="line-50">    public DataSourceCompositeResolver(final DataSourceResolver[] dataSourceResolvers, final boolean isLenient) {</span>
+<span class="source-line-no">051</span><span id="line-51">        super(isLenient);</span>
+<span class="source-line-no">052</span><span id="line-52">        this.dataSourceResolvers = dataSourceResolvers.clone();</span>
+<span class="source-line-no">053</span><span id="line-53">    }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">    /**</span>
+<span class="source-line-no">056</span><span id="line-56">     * Gets the underlying data source resolvers.</span>
+<span class="source-line-no">057</span><span id="line-57">     *</span>
+<span class="source-line-no">058</span><span id="line-58">     * @return underlying data source resolvers</span>
+<span class="source-line-no">059</span><span id="line-59">     */</span>
+<span class="source-line-no">060</span><span id="line-60">    public DataSourceResolver[] getDataSourceResolvers() {</span>
+<span class="source-line-no">061</span><span id="line-61">        // clone the internal array to prevent external modification (see EMAIL-116)</span>
+<span class="source-line-no">062</span><span id="line-62">        return dataSourceResolvers.clone();</span>
+<span class="source-line-no">063</span><span id="line-63">    }</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65">    /** {@inheritDoc} */</span>
+<span class="source-line-no">066</span><span id="line-66">    @Override</span>
+<span class="source-line-no">067</span><span id="line-67">    public DataSource resolve(final String resourceLocation) throws IOException {</span>
+<span class="source-line-no">068</span><span id="line-68">        final DataSource result = resolve(resourceLocation, true);</span>
+<span class="source-line-no">069</span><span id="line-69">        if (isLenient() || result != null) {</span>
+<span class="source-line-no">070</span><span id="line-70">            return result;</span>
+<span class="source-line-no">071</span><span id="line-71">        }</span>
+<span class="source-line-no">072</span><span id="line-72">        throw new IOException("The following resource was not found : " + resourceLocation);</span>
+<span class="source-line-no">073</span><span id="line-73"></span>
+<span class="source-line-no">074</span><span id="line-74">    }</span>
+<span class="source-line-no">075</span><span id="line-75"></span>
+<span class="source-line-no">076</span><span id="line-76">    /** {@inheritDoc} */</span>
+<span class="source-line-no">077</span><span id="line-77">    @Override</span>
+<span class="source-line-no">078</span><span id="line-78">    public DataSource resolve(final String resourceLocation, final boolean isLenient) throws IOException {</span>
+<span class="source-line-no">079</span><span id="line-79">        for (final DataSourceResolver dataSourceResolver : dataSourceResolvers) {</span>
+<span class="source-line-no">080</span><span id="line-80">            final DataSource dataSource = dataSourceResolver.resolve(resourceLocation, isLenient);</span>
+<span class="source-line-no">081</span><span id="line-81">            if (dataSource != null) {</span>
+<span class="source-line-no">082</span><span id="line-82">                return dataSource;</span>
+<span class="source-line-no">083</span><span id="line-83">            }</span>
+<span class="source-line-no">084</span><span id="line-84">        }</span>
+<span class="source-line-no">085</span><span id="line-85">        if (isLenient) {</span>
+<span class="source-line-no">086</span><span id="line-86">            return null;</span>
+<span class="source-line-no">087</span><span id="line-87">        }</span>
+<span class="source-line-no">088</span><span id="line-88">        throw new IOException("The following resource was not found : " + resourceLocation);</span>
+<span class="source-line-no">089</span><span id="line-89">    }</span>
+<span class="source-line-no">090</span><span id="line-90">}</span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
+</html>

Added: dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceFileResolver.html
==============================================================================
--- dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceFileResolver.html (added)
+++ dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceFileResolver.html Sat Jun 15 15:07:30 2024
@@ -0,0 +1,177 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) -->
+<title>Source code</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="source: package: org.apache.commons.mail2.javax.resolver, class: DataSourceFileResolver">
+<meta name="generator" content="javadoc/SourceToHTMLConverter">
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body class="source-page">
+<main role="main">
+<div class="source-container">
+<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
+<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one or more</span>
+<span class="source-line-no">003</span><span id="line-3"> * contributor license agreements.  See the NOTICE file distributed with</span>
+<span class="source-line-no">004</span><span id="line-4"> * this work for additional information regarding copyright ownership.</span>
+<span class="source-line-no">005</span><span id="line-5"> * The ASF licenses this file to You under the Apache License, Version 2.0</span>
+<span class="source-line-no">006</span><span id="line-6"> * (the "License"); you may not use this file except in compliance with</span>
+<span class="source-line-no">007</span><span id="line-7"> * the License.  You may obtain a copy of the License at</span>
+<span class="source-line-no">008</span><span id="line-8"> *</span>
+<span class="source-line-no">009</span><span id="line-9"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="source-line-no">010</span><span id="line-10"> *</span>
+<span class="source-line-no">011</span><span id="line-11"> * Unless required by applicable law or agreed to in writing, software</span>
+<span class="source-line-no">012</span><span id="line-12"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<span class="source-line-no">013</span><span id="line-13"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="source-line-no">014</span><span id="line-14"> * See the License for the specific language governing permissions and</span>
+<span class="source-line-no">015</span><span id="line-15"> * limitations under the License.</span>
+<span class="source-line-no">016</span><span id="line-16"> */</span>
+<span class="source-line-no">017</span><span id="line-17">package org.apache.commons.mail2.javax.resolver;</span>
+<span class="source-line-no">018</span><span id="line-18"></span>
+<span class="source-line-no">019</span><span id="line-19">import java.io.File;</span>
+<span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span>
+<span class="source-line-no">021</span><span id="line-21"></span>
+<span class="source-line-no">022</span><span id="line-22">import javax.activation.DataSource;</span>
+<span class="source-line-no">023</span><span id="line-23">import javax.activation.FileDataSource;</span>
+<span class="source-line-no">024</span><span id="line-24"></span>
+<span class="source-line-no">025</span><span id="line-25">/**</span>
+<span class="source-line-no">026</span><span id="line-26"> * Creates a {@code DataSource} based on a File. The implementation also resolves file resources.</span>
+<span class="source-line-no">027</span><span id="line-27"> *</span>
+<span class="source-line-no">028</span><span id="line-28"> * @since 1.3</span>
+<span class="source-line-no">029</span><span id="line-29"> */</span>
+<span class="source-line-no">030</span><span id="line-30">public class DataSourceFileResolver extends DataSourceBaseResolver {</span>
+<span class="source-line-no">031</span><span id="line-31"></span>
+<span class="source-line-no">032</span><span id="line-32">    /** The base directory of the resource when resolving relative paths */</span>
+<span class="source-line-no">033</span><span id="line-33">    private final File baseDir;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">    /**</span>
+<span class="source-line-no">036</span><span id="line-36">     * Constructs a new instance.</span>
+<span class="source-line-no">037</span><span id="line-37">     */</span>
+<span class="source-line-no">038</span><span id="line-38">    public DataSourceFileResolver() {</span>
+<span class="source-line-no">039</span><span id="line-39">        baseDir = new File(".");</span>
+<span class="source-line-no">040</span><span id="line-40">    }</span>
+<span class="source-line-no">041</span><span id="line-41"></span>
+<span class="source-line-no">042</span><span id="line-42">    /**</span>
+<span class="source-line-no">043</span><span id="line-43">     * Constructs a new instance.</span>
+<span class="source-line-no">044</span><span id="line-44">     *</span>
+<span class="source-line-no">045</span><span id="line-45">     * @param baseDir the base directory of the resource when resolving relative paths</span>
+<span class="source-line-no">046</span><span id="line-46">     */</span>
+<span class="source-line-no">047</span><span id="line-47">    public DataSourceFileResolver(final File baseDir) {</span>
+<span class="source-line-no">048</span><span id="line-48">        this.baseDir = baseDir;</span>
+<span class="source-line-no">049</span><span id="line-49">    }</span>
+<span class="source-line-no">050</span><span id="line-50"></span>
+<span class="source-line-no">051</span><span id="line-51">    /**</span>
+<span class="source-line-no">052</span><span id="line-52">     * Constructs a new instance.</span>
+<span class="source-line-no">053</span><span id="line-53">     *</span>
+<span class="source-line-no">054</span><span id="line-54">     * @param baseDir the base directory of the resource when resolving relative paths</span>
+<span class="source-line-no">055</span><span id="line-55">     * @param lenient shall we ignore resources not found or complain with an exception</span>
+<span class="source-line-no">056</span><span id="line-56">     */</span>
+<span class="source-line-no">057</span><span id="line-57">    public DataSourceFileResolver(final File baseDir, final boolean lenient) {</span>
+<span class="source-line-no">058</span><span id="line-58">        super(lenient);</span>
+<span class="source-line-no">059</span><span id="line-59">        this.baseDir = baseDir;</span>
+<span class="source-line-no">060</span><span id="line-60">    }</span>
+<span class="source-line-no">061</span><span id="line-61"></span>
+<span class="source-line-no">062</span><span id="line-62">    /**</span>
+<span class="source-line-no">063</span><span id="line-63">     * Gets the base directory used for resolving relative resource locations.</span>
+<span class="source-line-no">064</span><span id="line-64">     *</span>
+<span class="source-line-no">065</span><span id="line-65">     * @return the baseUrl</span>
+<span class="source-line-no">066</span><span id="line-66">     */</span>
+<span class="source-line-no">067</span><span id="line-67">    public File getBaseDir() {</span>
+<span class="source-line-no">068</span><span id="line-68">        return baseDir;</span>
+<span class="source-line-no">069</span><span id="line-69">    }</span>
+<span class="source-line-no">070</span><span id="line-70"></span>
+<span class="source-line-no">071</span><span id="line-71">    /** {@inheritDoc} */</span>
+<span class="source-line-no">072</span><span id="line-72">    @Override</span>
+<span class="source-line-no">073</span><span id="line-73">    public DataSource resolve(final String resourceLocation) throws IOException {</span>
+<span class="source-line-no">074</span><span id="line-74">        return resolve(resourceLocation, isLenient());</span>
+<span class="source-line-no">075</span><span id="line-75">    }</span>
+<span class="source-line-no">076</span><span id="line-76"></span>
+<span class="source-line-no">077</span><span id="line-77">    /** {@inheritDoc} */</span>
+<span class="source-line-no">078</span><span id="line-78">    @Override</span>
+<span class="source-line-no">079</span><span id="line-79">    public DataSource resolve(final String resourceLocation, final boolean isLenient) throws IOException {</span>
+<span class="source-line-no">080</span><span id="line-80">        File file;</span>
+<span class="source-line-no">081</span><span id="line-81">        DataSource result = null;</span>
+<span class="source-line-no">082</span><span id="line-82"></span>
+<span class="source-line-no">083</span><span id="line-83">        if (!isCid(resourceLocation)) {</span>
+<span class="source-line-no">084</span><span id="line-84">            file = new File(resourceLocation);</span>
+<span class="source-line-no">085</span><span id="line-85"></span>
+<span class="source-line-no">086</span><span id="line-86">            if (!file.isAbsolute()) {</span>
+<span class="source-line-no">087</span><span id="line-87">                file = getBaseDir() != null ? new File(getBaseDir(), resourceLocation) : new File(resourceLocation);</span>
+<span class="source-line-no">088</span><span id="line-88">            }</span>
+<span class="source-line-no">089</span><span id="line-89"></span>
+<span class="source-line-no">090</span><span id="line-90">            if (file.exists()) {</span>
+<span class="source-line-no">091</span><span id="line-91">                result = new FileDataSource(file);</span>
+<span class="source-line-no">092</span><span id="line-92">            } else if (!isLenient) {</span>
+<span class="source-line-no">093</span><span id="line-93">                throw new IOException("Cant resolve the following file resource :" + file.getAbsolutePath());</span>
+<span class="source-line-no">094</span><span id="line-94">            }</span>
+<span class="source-line-no">095</span><span id="line-95">        }</span>
+<span class="source-line-no">096</span><span id="line-96"></span>
+<span class="source-line-no">097</span><span id="line-97">        return result;</span>
+<span class="source-line-no">098</span><span id="line-98">    }</span>
+<span class="source-line-no">099</span><span id="line-99">}</span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
+</html>

Added: dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourcePathResolver.html
==============================================================================
--- dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourcePathResolver.html (added)
+++ dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourcePathResolver.html Sat Jun 15 15:07:30 2024
@@ -0,0 +1,191 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) -->
+<title>Source code</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="source: package: org.apache.commons.mail2.javax.resolver, class: DataSourcePathResolver">
+<meta name="generator" content="javadoc/SourceToHTMLConverter">
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body class="source-page">
+<main role="main">
+<div class="source-container">
+<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
+<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one or more</span>
+<span class="source-line-no">003</span><span id="line-3"> * contributor license agreements.  See the NOTICE file distributed with</span>
+<span class="source-line-no">004</span><span id="line-4"> * this work for additional information regarding copyright ownership.</span>
+<span class="source-line-no">005</span><span id="line-5"> * The ASF licenses this file to You under the Apache License, Version 2.0</span>
+<span class="source-line-no">006</span><span id="line-6"> * (the "License"); you may not use this file except in compliance with</span>
+<span class="source-line-no">007</span><span id="line-7"> * the License.  You may obtain a copy of the License at</span>
+<span class="source-line-no">008</span><span id="line-8"> *</span>
+<span class="source-line-no">009</span><span id="line-9"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="source-line-no">010</span><span id="line-10"> *</span>
+<span class="source-line-no">011</span><span id="line-11"> * Unless required by applicable law or agreed to in writing, software</span>
+<span class="source-line-no">012</span><span id="line-12"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<span class="source-line-no">013</span><span id="line-13"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="source-line-no">014</span><span id="line-14"> * See the License for the specific language governing permissions and</span>
+<span class="source-line-no">015</span><span id="line-15"> * limitations under the License.</span>
+<span class="source-line-no">016</span><span id="line-16"> */</span>
+<span class="source-line-no">017</span><span id="line-17">package org.apache.commons.mail2.javax.resolver;</span>
+<span class="source-line-no">018</span><span id="line-18"></span>
+<span class="source-line-no">019</span><span id="line-19">import java.io.IOException;</span>
+<span class="source-line-no">020</span><span id="line-20">import java.nio.file.Files;</span>
+<span class="source-line-no">021</span><span id="line-21">import java.nio.file.OpenOption;</span>
+<span class="source-line-no">022</span><span id="line-22">import java.nio.file.Path;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.nio.file.Paths;</span>
+<span class="source-line-no">024</span><span id="line-24"></span>
+<span class="source-line-no">025</span><span id="line-25">import javax.activation.DataSource;</span>
+<span class="source-line-no">026</span><span id="line-26">import javax.activation.FileTypeMap;</span>
+<span class="source-line-no">027</span><span id="line-27"></span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.commons.mail2.javax.activation.PathDataSource;</span>
+<span class="source-line-no">029</span><span id="line-29"></span>
+<span class="source-line-no">030</span><span id="line-30">/**</span>
+<span class="source-line-no">031</span><span id="line-31"> * Creates a {@link DataSource} based on a {@link Path}. The implementation also resolves file resources.</span>
+<span class="source-line-no">032</span><span id="line-32"> *</span>
+<span class="source-line-no">033</span><span id="line-33"> * @since 1.6.0</span>
+<span class="source-line-no">034</span><span id="line-34"> */</span>
+<span class="source-line-no">035</span><span id="line-35">public final class DataSourcePathResolver extends DataSourceBaseResolver {</span>
+<span class="source-line-no">036</span><span id="line-36"></span>
+<span class="source-line-no">037</span><span id="line-37">    /**</span>
+<span class="source-line-no">038</span><span id="line-38">     * The base directory of the resource when resolving relative paths.</span>
+<span class="source-line-no">039</span><span id="line-39">     */</span>
+<span class="source-line-no">040</span><span id="line-40">    private final Path baseDir;</span>
+<span class="source-line-no">041</span><span id="line-41"></span>
+<span class="source-line-no">042</span><span id="line-42">    /**</span>
+<span class="source-line-no">043</span><span id="line-43">     * NIO options to open the data source.</span>
+<span class="source-line-no">044</span><span id="line-44">     */</span>
+<span class="source-line-no">045</span><span id="line-45">    private final OpenOption[] options;</span>
+<span class="source-line-no">046</span><span id="line-46"></span>
+<span class="source-line-no">047</span><span id="line-47">    /**</span>
+<span class="source-line-no">048</span><span id="line-48">     * Constructs a new instance.</span>
+<span class="source-line-no">049</span><span id="line-49">     */</span>
+<span class="source-line-no">050</span><span id="line-50">    public DataSourcePathResolver() {</span>
+<span class="source-line-no">051</span><span id="line-51">        this(Paths.get("."));</span>
+<span class="source-line-no">052</span><span id="line-52">    }</span>
+<span class="source-line-no">053</span><span id="line-53"></span>
+<span class="source-line-no">054</span><span id="line-54">    /**</span>
+<span class="source-line-no">055</span><span id="line-55">     * Constructs a new instance.</span>
+<span class="source-line-no">056</span><span id="line-56">     *</span>
+<span class="source-line-no">057</span><span id="line-57">     * @param baseDir the base directory of the resource when resolving relative paths</span>
+<span class="source-line-no">058</span><span id="line-58">     */</span>
+<span class="source-line-no">059</span><span id="line-59">    public DataSourcePathResolver(final Path baseDir) {</span>
+<span class="source-line-no">060</span><span id="line-60">        this(baseDir, false);</span>
+<span class="source-line-no">061</span><span id="line-61">    }</span>
+<span class="source-line-no">062</span><span id="line-62"></span>
+<span class="source-line-no">063</span><span id="line-63">    /**</span>
+<span class="source-line-no">064</span><span id="line-64">     * Constructs a new instance.</span>
+<span class="source-line-no">065</span><span id="line-65">     *</span>
+<span class="source-line-no">066</span><span id="line-66">     * @param baseDir the base directory of the resource when resolving relative paths</span>
+<span class="source-line-no">067</span><span id="line-67">     * @param lenient shall we ignore resources not found or complain with an exception</span>
+<span class="source-line-no">068</span><span id="line-68">     * @param options options for opening streams.</span>
+<span class="source-line-no">069</span><span id="line-69">     */</span>
+<span class="source-line-no">070</span><span id="line-70">    public DataSourcePathResolver(final Path baseDir, final boolean lenient, final OpenOption... options) {</span>
+<span class="source-line-no">071</span><span id="line-71">        super(lenient);</span>
+<span class="source-line-no">072</span><span id="line-72">        this.baseDir = baseDir;</span>
+<span class="source-line-no">073</span><span id="line-73">        this.options = options;</span>
+<span class="source-line-no">074</span><span id="line-74">    }</span>
+<span class="source-line-no">075</span><span id="line-75"></span>
+<span class="source-line-no">076</span><span id="line-76">    /**</span>
+<span class="source-line-no">077</span><span id="line-77">     * Gets the base directory used for resolving relative resource locations.</span>
+<span class="source-line-no">078</span><span id="line-78">     *</span>
+<span class="source-line-no">079</span><span id="line-79">     * @return the baseUrl</span>
+<span class="source-line-no">080</span><span id="line-80">     */</span>
+<span class="source-line-no">081</span><span id="line-81">    public Path getBaseDir() {</span>
+<span class="source-line-no">082</span><span id="line-82">        return baseDir;</span>
+<span class="source-line-no">083</span><span id="line-83">    }</span>
+<span class="source-line-no">084</span><span id="line-84"></span>
+<span class="source-line-no">085</span><span id="line-85">    /** {@inheritDoc} */</span>
+<span class="source-line-no">086</span><span id="line-86">    @Override</span>
+<span class="source-line-no">087</span><span id="line-87">    public DataSource resolve(final String resourceLocation) throws IOException {</span>
+<span class="source-line-no">088</span><span id="line-88">        return resolve(resourceLocation, isLenient());</span>
+<span class="source-line-no">089</span><span id="line-89">    }</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91">    /** {@inheritDoc} */</span>
+<span class="source-line-no">092</span><span id="line-92">    @Override</span>
+<span class="source-line-no">093</span><span id="line-93">    public DataSource resolve(final String resourceLocation, final boolean isLenient) throws IOException {</span>
+<span class="source-line-no">094</span><span id="line-94">        Path file;</span>
+<span class="source-line-no">095</span><span id="line-95">        DataSource result = null;</span>
+<span class="source-line-no">096</span><span id="line-96"></span>
+<span class="source-line-no">097</span><span id="line-97">        if (!isCid(resourceLocation)) {</span>
+<span class="source-line-no">098</span><span id="line-98">            file = Paths.get(resourceLocation);</span>
+<span class="source-line-no">099</span><span id="line-99"></span>
+<span class="source-line-no">100</span><span id="line-100">            if (!file.isAbsolute()) {</span>
+<span class="source-line-no">101</span><span id="line-101">                file = getBaseDir() != null ? getBaseDir().resolve(resourceLocation) : Paths.get(resourceLocation);</span>
+<span class="source-line-no">102</span><span id="line-102">            }</span>
+<span class="source-line-no">103</span><span id="line-103"></span>
+<span class="source-line-no">104</span><span id="line-104">            if (Files.exists(file)) {</span>
+<span class="source-line-no">105</span><span id="line-105">                result = new PathDataSource(file, FileTypeMap.getDefaultFileTypeMap(), options);</span>
+<span class="source-line-no">106</span><span id="line-106">            } else if (!isLenient) {</span>
+<span class="source-line-no">107</span><span id="line-107">                throw new IOException("Cant resolve the following file resource :" + file.toAbsolutePath());</span>
+<span class="source-line-no">108</span><span id="line-108">            }</span>
+<span class="source-line-no">109</span><span id="line-109">        }</span>
+<span class="source-line-no">110</span><span id="line-110"></span>
+<span class="source-line-no">111</span><span id="line-111">        return result;</span>
+<span class="source-line-no">112</span><span id="line-112">    }</span>
+<span class="source-line-no">113</span><span id="line-113">}</span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
+</html>

Added: dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolver.html
==============================================================================
--- dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolver.html (added)
+++ dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolver.html Sat Jun 15 15:07:30 2024
@@ -0,0 +1,196 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) -->
+<title>Source code</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="source: package: org.apache.commons.mail2.javax.resolver, class: DataSourceUrlResolver">
+<meta name="generator" content="javadoc/SourceToHTMLConverter">
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body class="source-page">
+<main role="main">
+<div class="source-container">
+<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
+<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one or more</span>
+<span class="source-line-no">003</span><span id="line-3"> * contributor license agreements.  See the NOTICE file distributed with</span>
+<span class="source-line-no">004</span><span id="line-4"> * this work for additional information regarding copyright ownership.</span>
+<span class="source-line-no">005</span><span id="line-5"> * The ASF licenses this file to You under the Apache License, Version 2.0</span>
+<span class="source-line-no">006</span><span id="line-6"> * (the "License"); you may not use this file except in compliance with</span>
+<span class="source-line-no">007</span><span id="line-7"> * the License.  You may obtain a copy of the License at</span>
+<span class="source-line-no">008</span><span id="line-8"> *</span>
+<span class="source-line-no">009</span><span id="line-9"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="source-line-no">010</span><span id="line-10"> *</span>
+<span class="source-line-no">011</span><span id="line-11"> * Unless required by applicable law or agreed to in writing, software</span>
+<span class="source-line-no">012</span><span id="line-12"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<span class="source-line-no">013</span><span id="line-13"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="source-line-no">014</span><span id="line-14"> * See the License for the specific language governing permissions and</span>
+<span class="source-line-no">015</span><span id="line-15"> * limitations under the License.</span>
+<span class="source-line-no">016</span><span id="line-16"> */</span>
+<span class="source-line-no">017</span><span id="line-17">package org.apache.commons.mail2.javax.resolver;</span>
+<span class="source-line-no">018</span><span id="line-18"></span>
+<span class="source-line-no">019</span><span id="line-19">import java.io.IOException;</span>
+<span class="source-line-no">020</span><span id="line-20">import java.io.InputStream;</span>
+<span class="source-line-no">021</span><span id="line-21">import java.net.MalformedURLException;</span>
+<span class="source-line-no">022</span><span id="line-22">import java.net.URL;</span>
+<span class="source-line-no">023</span><span id="line-23"></span>
+<span class="source-line-no">024</span><span id="line-24">import javax.activation.DataSource;</span>
+<span class="source-line-no">025</span><span id="line-25">import javax.activation.URLDataSource;</span>
+<span class="source-line-no">026</span><span id="line-26"></span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.commons.mail2.core.EmailUtils;</span>
+<span class="source-line-no">028</span><span id="line-28"></span>
+<span class="source-line-no">029</span><span id="line-29">/**</span>
+<span class="source-line-no">030</span><span id="line-30"> * Creates a {@code DataSource} based on an URL.</span>
+<span class="source-line-no">031</span><span id="line-31"> *</span>
+<span class="source-line-no">032</span><span id="line-32"> * @since 1.3</span>
+<span class="source-line-no">033</span><span id="line-33"> */</span>
+<span class="source-line-no">034</span><span id="line-34">public class DataSourceUrlResolver extends DataSourceBaseResolver {</span>
+<span class="source-line-no">035</span><span id="line-35"></span>
+<span class="source-line-no">036</span><span id="line-36">    /** The base url of the resource when resolving relative paths */</span>
+<span class="source-line-no">037</span><span id="line-37">    private final URL baseUrl;</span>
+<span class="source-line-no">038</span><span id="line-38"></span>
+<span class="source-line-no">039</span><span id="line-39">    /**</span>
+<span class="source-line-no">040</span><span id="line-40">     * Constructs a new instance.</span>
+<span class="source-line-no">041</span><span id="line-41">     *</span>
+<span class="source-line-no">042</span><span id="line-42">     * @param baseUrl the base URL used for resolving relative resource locations</span>
+<span class="source-line-no">043</span><span id="line-43">     */</span>
+<span class="source-line-no">044</span><span id="line-44">    public DataSourceUrlResolver(final URL baseUrl) {</span>
+<span class="source-line-no">045</span><span id="line-45">        this.baseUrl = baseUrl;</span>
+<span class="source-line-no">046</span><span id="line-46">    }</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">    /**</span>
+<span class="source-line-no">049</span><span id="line-49">     * Constructs a new instance.</span>
+<span class="source-line-no">050</span><span id="line-50">     *</span>
+<span class="source-line-no">051</span><span id="line-51">     * @param baseUrl the base URL used for resolving relative resource locations</span>
+<span class="source-line-no">052</span><span id="line-52">     * @param lenient shall we ignore resources not found or complain with an exception</span>
+<span class="source-line-no">053</span><span id="line-53">     */</span>
+<span class="source-line-no">054</span><span id="line-54">    public DataSourceUrlResolver(final URL baseUrl, final boolean lenient) {</span>
+<span class="source-line-no">055</span><span id="line-55">        super(lenient);</span>
+<span class="source-line-no">056</span><span id="line-56">        this.baseUrl = baseUrl;</span>
+<span class="source-line-no">057</span><span id="line-57">    }</span>
+<span class="source-line-no">058</span><span id="line-58"></span>
+<span class="source-line-no">059</span><span id="line-59">    /**</span>
+<span class="source-line-no">060</span><span id="line-60">     * Create an URL based on a base URL and a resource location suitable for loading the resource.</span>
+<span class="source-line-no">061</span><span id="line-61">     *</span>
+<span class="source-line-no">062</span><span id="line-62">     * @param resourceLocation a resource location</span>
+<span class="source-line-no">063</span><span id="line-63">     * @return the corresponding URL</span>
+<span class="source-line-no">064</span><span id="line-64">     * @throws java.net.MalformedURLException creating the URL failed</span>
+<span class="source-line-no">065</span><span id="line-65">     */</span>
+<span class="source-line-no">066</span><span id="line-66">    protected URL createUrl(final String resourceLocation) throws MalformedURLException {</span>
+<span class="source-line-no">067</span><span id="line-67">        // if we get an non-existing base url than the resource can</span>
+<span class="source-line-no">068</span><span id="line-68">        // be directly used to create an URL</span>
+<span class="source-line-no">069</span><span id="line-69">        if (baseUrl == null) {</span>
+<span class="source-line-no">070</span><span id="line-70">            return new URL(resourceLocation);</span>
+<span class="source-line-no">071</span><span id="line-71">        }</span>
+<span class="source-line-no">072</span><span id="line-72">        // if we get an non-existing location what we shall do?</span>
+<span class="source-line-no">073</span><span id="line-73">        if (EmailUtils.isEmpty(resourceLocation)) {</span>
+<span class="source-line-no">074</span><span id="line-74">            throw new IllegalArgumentException("No resource defined");</span>
+<span class="source-line-no">075</span><span id="line-75">        }</span>
+<span class="source-line-no">076</span><span id="line-76">        // if we get a stand-alone resource than ignore the base url</span>
+<span class="source-line-no">077</span><span id="line-77">        if (isFileUrl(resourceLocation) || isHttpUrl(resourceLocation)) {</span>
+<span class="source-line-no">078</span><span id="line-78">            return new URL(resourceLocation);</span>
+<span class="source-line-no">079</span><span id="line-79">        }</span>
+<span class="source-line-no">080</span><span id="line-80">        return new URL(getBaseUrl(), resourceLocation.replace("&amp;amp;", "&amp;"));</span>
+<span class="source-line-no">081</span><span id="line-81">    }</span>
+<span class="source-line-no">082</span><span id="line-82"></span>
+<span class="source-line-no">083</span><span id="line-83">    /**</span>
+<span class="source-line-no">084</span><span id="line-84">     * Gets the base URL used for resolving relative resource locations.</span>
+<span class="source-line-no">085</span><span id="line-85">     *</span>
+<span class="source-line-no">086</span><span id="line-86">     * @return the baseUrl</span>
+<span class="source-line-no">087</span><span id="line-87">     */</span>
+<span class="source-line-no">088</span><span id="line-88">    public URL getBaseUrl() {</span>
+<span class="source-line-no">089</span><span id="line-89">        return baseUrl;</span>
+<span class="source-line-no">090</span><span id="line-90">    }</span>
+<span class="source-line-no">091</span><span id="line-91"></span>
+<span class="source-line-no">092</span><span id="line-92">    /** {@inheritDoc} */</span>
+<span class="source-line-no">093</span><span id="line-93">    @Override</span>
+<span class="source-line-no">094</span><span id="line-94">    public DataSource resolve(final String resourceLocation) throws IOException {</span>
+<span class="source-line-no">095</span><span id="line-95">        return resolve(resourceLocation, isLenient());</span>
+<span class="source-line-no">096</span><span id="line-96">    }</span>
+<span class="source-line-no">097</span><span id="line-97"></span>
+<span class="source-line-no">098</span><span id="line-98">    /** {@inheritDoc} */</span>
+<span class="source-line-no">099</span><span id="line-99">    @Override</span>
+<span class="source-line-no">100</span><span id="line-100">    public DataSource resolve(final String resourceLocation, final boolean isLenient) throws IOException {</span>
+<span class="source-line-no">101</span><span id="line-101">        DataSource result = null;</span>
+<span class="source-line-no">102</span><span id="line-102">        try {</span>
+<span class="source-line-no">103</span><span id="line-103">            if (!isCid(resourceLocation)) {</span>
+<span class="source-line-no">104</span><span id="line-104">                result = new URLDataSource(createUrl(resourceLocation));</span>
+<span class="source-line-no">105</span><span id="line-105">                // validate we can read.</span>
+<span class="source-line-no">106</span><span id="line-106">                try (InputStream inputStream = result.getInputStream()) {</span>
+<span class="source-line-no">107</span><span id="line-107">                    inputStream.read();</span>
+<span class="source-line-no">108</span><span id="line-108">                }</span>
+<span class="source-line-no">109</span><span id="line-109">            }</span>
+<span class="source-line-no">110</span><span id="line-110">            return result;</span>
+<span class="source-line-no">111</span><span id="line-111">        } catch (final IOException e) {</span>
+<span class="source-line-no">112</span><span id="line-112">            if (isLenient) {</span>
+<span class="source-line-no">113</span><span id="line-113">                return null;</span>
+<span class="source-line-no">114</span><span id="line-114">            }</span>
+<span class="source-line-no">115</span><span id="line-115">            throw e;</span>
+<span class="source-line-no">116</span><span id="line-116">        }</span>
+<span class="source-line-no">117</span><span id="line-117">    }</span>
+<span class="source-line-no">118</span><span id="line-118">}</span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
+</html>