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

org.mule.module.reboot.DefaultMuleClassPathConfig Maven / Gradle / Ivy

The 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.reboot;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

/**
 * Constructs a default set of JAR Urls located under Mule home folder.
 */
//TODO this duplicates DefaultMuleClassPathConfig in the boot module. See if this class can be moved to mule-core
public class DefaultMuleClassPathConfig
{
    protected static final String MULE_DIR = "/lib/mule";
    protected static final String USER_DIR = "/lib/user";
    protected static final String OPT_DIR = "/lib/opt";

    protected List urls = new ArrayList();

    public DefaultMuleClassPathConfig(File muleHome, File muleBase)
    {
        init(muleHome, muleBase);
    }

    protected void init(File muleHome, File muleBase)
    {
        /*
         * Pick up any local jars, if there are any. Doing this here insures that any
         * local class that override the global classes will in fact do so.
         */
        addMuleBaseUserLibs(muleHome, muleBase);

        addLibraryDirectory(muleHome, USER_DIR);
        addLibraryDirectory(muleHome, MULE_DIR);
        addLibraryDirectory(muleHome, OPT_DIR);
    }

    protected void addMuleBaseUserLibs(File muleHome, File muleBase)
    {
        try
        {
            if (!muleHome.getCanonicalFile().equals(muleBase.getCanonicalFile()))
            {
                File userOverrideDir = new File(muleBase, USER_DIR);
                addFile(userOverrideDir);
                addFiles(listJars(userOverrideDir));
            }
        }
        catch (IOException ioe)
        {
            System.out.println("Unable to check to see if there are local jars to load: " + ioe.toString());
        }
    }

    protected void addLibraryDirectory(File muleHome, String libDirectory)
    {
        File directory = new File(muleHome, libDirectory);
        addFile(directory);
        addFiles(listJars(directory));
    }

    public List getURLs()
    {
        return new ArrayList(this.urls);
    }

    public void addURLs(List moreUrls)
    {
        if (moreUrls != null && !moreUrls.isEmpty())
        {
            this.urls.addAll(moreUrls);
        }
    }

    /**
     * Add a URL to Mule's classpath.
     *
     * @param url folder (should end with a slash) or jar path
     */
    public void addURL(URL url)
    {
        this.urls.add(url);
    }

    public void addFiles(List files)
    {
        for (Iterator i = files.iterator(); i.hasNext();)
        {
            this.addFile(i.next());
        }
    }

    public void addFile(File jar)
    {
        try
        {
            this.addURL(jar.getAbsoluteFile().toURI().toURL());
        }
        catch (MalformedURLException mux)
        {
            throw new RuntimeException("Failed to construct a classpath URL", mux);
        }
    }

    /**
     * Find and if necessary filter the jars for classpath.
     *
     * @return a list of {@link java.io.File}s
     */
    protected List listJars(File path)
    {
        File[] jars = path.listFiles(new FileFilter()
        {
            public boolean accept(File pathname)
            {
                try
                {
                    return pathname.getCanonicalPath().endsWith(".jar");
                }
                catch (IOException e)
                {
                    throw new RuntimeException(e.getMessage());
                }
            }
        });

        if (jars != null)
        {
            return Arrays.asList(jars);
        }
        return Collections.emptyList();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy