/*******************************************************************************
* Copyright (c) 2012-2016 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.everrest.groovy;
import groovy.lang.GroovyClassLoader;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Factory of Groovy class loader. It can provide preset GroovyClassLoader instance or customized instance of GroovyClassLoader able
* resolve
* additional Groovy source files.
*
* @author andrew00x
*/
public class GroovyClassLoaderProvider {
/** Preset default GroovyClassLoader. */
private ExtendedGroovyClassLoader defaultClassLoader;
public GroovyClassLoaderProvider() {
this(new ExtendedGroovyClassLoader(GroovyClassLoaderProvider.class.getClassLoader()));
}
protected GroovyClassLoaderProvider(ExtendedGroovyClassLoader defaultClassLoader) {
this.defaultClassLoader = defaultClassLoader;
}
/**
* Get default GroovyClassLoader.
*
* @return default GroovyClassLoader
*/
public ExtendedGroovyClassLoader getGroovyClassLoader() {
return defaultClassLoader;
}
/**
* Get customized instance of GroovyClassLoader that able to resolve additional Groovy source files.
*
* @param sources
* additional Groovy sources
* @return GroovyClassLoader
* @throws MalformedURLException
* if any of entries in <code>sources</code> has invalid URL.
*/
public ExtendedGroovyClassLoader getGroovyClassLoader(SourceFolder[] sources) throws MalformedURLException {
if (sources == null || sources.length == 0) {
return getGroovyClassLoader();
}
URL[] roots = new URL[sources.length];
for (int i = 0; i < sources.length; i++) {
roots[i] = sources[i].getPath();
}
GroovyClassLoader parent = getGroovyClassLoader();
ExtendedGroovyClassLoader classLoader = new ExtendedGroovyClassLoader(parent);
classLoader.setResourceLoader(new DefaultGroovyResourceLoader(roots));
return classLoader;
}
}