/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package org.apache.jmeter.protocol.smtp.sampler.protocol;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.security.KeyStore;
import java.security.SecureRandom;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;

import org.apache.commons.io.IOUtils;

/**
 * This class implements an SSLSocketFactory which supports a local truststore.
 */
public class LocalTrustStoreSSLSocketFactory extends SSLSocketFactory  {

    private final SSLSocketFactory factory;

    public LocalTrustStoreSSLSocketFactory(File truststore){
        SSLContext sslcontext = null;
        try {
            KeyStore ks = KeyStore.getInstance("JKS"); // $NON-NLS-1$
            InputStream stream = null;
            try {
                stream = new BufferedInputStream(new FileInputStream(truststore));
                ks.load(stream, null);
            } finally {
                IOUtils.closeQuietly(stream);
            }

            TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init(ks);
            TrustManager[] trustmanagers = tmf.getTrustManagers();
            sslcontext = SSLContext.getInstance("TLS"); // $NON-NLS-1$
            sslcontext.init( null, trustmanagers, new SecureRandom());
        } catch (Exception e) {
            throw new RuntimeException("Could not create the SSL context",e);
        }
        factory = sslcontext.getSocketFactory();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Socket createSocket( Socket socket, String s, int i, boolean
            flag)
            throws IOException {
        return factory.createSocket( socket, s, i, flag);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Socket createSocket( InetAddress inaddr, int i,
            InetAddress inaddr1, int j) throws IOException {
        return factory.createSocket( inaddr, i, inaddr1, j);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Socket createSocket( InetAddress inaddr, int i) throws
            IOException {
        return factory.createSocket( inaddr, i);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Socket createSocket( String s, int i, InetAddress inaddr, int j)
    throws IOException {
        return factory.createSocket( s, i, inaddr, j);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Socket createSocket( String s, int i) throws IOException {
        return factory.createSocket( s, i);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Socket createSocket() throws IOException {
        return factory.createSocket();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String[] getDefaultCipherSuites() {
        return factory.getSupportedCipherSuites();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String[] getSupportedCipherSuites() {
        return factory.getSupportedCipherSuites();
    }
}

@@ -1712,16 +1712,25 @@
         
+try (File
 InputStr
@@ -1733,17 +1733,21 @@
 tStream 
-s
+fileS
 tream = 
@@ -1743,27 +1743,54 @@
 leStream = n
-ull
+ew FileInputStream(truststore)
 ;%0A          
@@ -1787,38 +1787,32 @@
             
-try %7B%0A
         
         stre
@@ -1799,23 +1799,27 @@
         
-       
+InputStream
  stream 
@@ -1848,41 +1848,22 @@
 eam(
-new FileInputStream(truststore));
+fileStream)) %7B
 %0A   
@@ -1915,78 +1915,8 @@
    %7D
- finally %7B%0A                IOUtils.closeQuietly(stream);%0A            %7D
 %0A%0A  

Use try-with statement.