All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mule.module.launcher.nativelib.PerAppCopyNativeLibraryFinder Maven / Gradle / Ivy

There is a newer version: 3.9.0
Show newest version
/*
 * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 * The software in this package is published under the terms of the CPAL v1.0
 * license, a copy of which has been included with this distribution in the
 * LICENSE.txt file.
 */

package org.mule.module.launcher.nativelib;

import org.mule.util.FileUtils;

import java.io.File;
import java.io.IOException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * * Finds native libraries in an application's lib folder and creates a copy of
 * each found library inside a temporal application folder.
 */
public class PerAppCopyNativeLibraryFinder extends PerAppNativeLibraryFinder
{

    protected Log logger = LogFactory.getLog(getClass());

    private final File perAppNativeLibs;

    public PerAppCopyNativeLibraryFinder(File libDir, File perAppNativeLibs)
    {
        super(libDir);

        this.perAppNativeLibs = perAppNativeLibs;

        if (this.perAppNativeLibs.exists())
        {
            cleanNativeLibs();
        }
        else
        {
            if (!this.perAppNativeLibs.mkdirs())
            {
                throw new IllegalStateException(String.format("Unable to create application '%s' folder", this.perAppNativeLibs.getAbsolutePath()));
            }
        }
    }

    @Override
    public String findLibrary(String name, String parentLibraryPath)
    {
        String libraryPath = parentLibraryPath;

        if (null == libraryPath)
        {
            libraryPath = findLibraryLocally(name);
        }

        if (libraryPath != null)
        {
            if (logger.isDebugEnabled())
            {
                logger.debug(String.format("Found native library for '%s' on '%s", name, libraryPath));
            }

            final File tempLibrary = copyNativeLibrary(name, libraryPath);
            libraryPath = tempLibrary.getAbsolutePath();

            if (logger.isDebugEnabled())
            {
                logger.debug(String.format("Created native library copy for '%s' on '%s", name, libraryPath));
            }
        }
        return libraryPath;
    }

    private void cleanNativeLibs()
    {
        String[] list = perAppNativeLibs.list();

        if (list != null)
        {
            for (String library : list)
            {
                new File(perAppNativeLibs, library).delete();
            }
        }
    }

    private File copyNativeLibrary(String name, String libraryPath)
    {
        final String nativeLibName = System.mapLibraryName(name);
        final File tempLibrary = new File(perAppNativeLibs, nativeLibName + System.currentTimeMillis());

        try
        {
            final File library = new File(libraryPath);
            FileUtils.copyFile(library, tempLibrary);

            return tempLibrary;
        }
        catch (IOException e)
        {
            throw new IllegalStateException(String.format("Unable to generate copy for native library '%s' at '%s'", nativeLibName, tempLibrary.getAbsolutePath()), e);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy