/*
* Copyright 2010 Red Hat, Inc. and/or its affiliates.
*
* Licensed 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.drools.core.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
public class ConfFileUtils {
/**
* Return the URL for a given conf file
* @param confName
* @param classLoader
* @return
*/
public static URL getURL(String confName, ClassLoader classLoader, Class cls) {
URL url = null;
// User home
String userHome = System.getProperty( "user.home" );
if ( userHome.endsWith( "\\" ) || userHome.endsWith( "/" ) ) {
url = getURLForFile( userHome + confName );
} else {
url = getURLForFile( userHome + "/" + confName );
}
// Working directory
if ( url == null ) {
url = getURLForFile( confName );
}
// check Class folder
if ( cls != null ) {
URL urlResource = cls.getResource( confName );
if (urlResource != null) {
url = urlResource;
}
}
// check META-INF directories for all known ClassLoaders
if ( url == null && classLoader != null ) {
ClassLoader confClassLoader = classLoader;
if ( confClassLoader != null ) {
url = confClassLoader.getResource( "META-INF/" + confName );
}
}
if ( url == null ) {
ClassLoader confClassLoader = ConfFileUtils.class.getClassLoader();
if ( confClassLoader != null && confClassLoader != classLoader ) {
url = confClassLoader.getResource( "META-INF/" + confName );
}
}
if ( url == null && cls != null ) {
ClassLoader confClassLoader = cls.getClassLoader();
if ( confClassLoader != null && confClassLoader != classLoader ) {
url = confClassLoader.getResource( "META-INF/" + confName );
}
}
if ( url == null ) {
ClassLoader confClassLoader = Thread.currentThread().getContextClassLoader();
if ( confClassLoader != null && confClassLoader != classLoader ) {
url = confClassLoader.getResource( "META-INF/" + confName );
}
}
if ( url == null ) {
ClassLoader confClassLoader = ClassLoader.getSystemClassLoader();
if ( confClassLoader != null && confClassLoader != classLoader ) {
url = confClassLoader.getResource( "META-INF/" + confName );
}
}
return url;
}
/**
* Return URL for given filename
*
* @param fileName
* @return
* URL
*/
public static URL getURLForFile(String fileName) {
URL url = null;
if ( fileName != null ) {
File file = new File( fileName );
if ( file != null && file.exists() ) {
try {
url = file.toURL();
} catch ( MalformedURLException e ) {
throw new IllegalArgumentException( "file.toURL() failed for '" + file + "'" );
}
}
}
return url;
}
public static String URLContentsToString(URL url) {
StringBuilder builder = new StringBuilder();
if ( url == null ) {
return null;
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader( url.openStream(), IoUtils.UTF8_CHARSET));
String line = null;
while ( ( line = reader.readLine() ) != null ) { // while loop begins here
builder.append( line );
builder.append( "\n" );
}
reader.close();
} catch ( IOException e ) {
throw new RuntimeException( "Unable to read " + url.toExternalForm() );
}
return builder.toString();
}
/**
* Load a Properties file from a URL, return null if it fails
*
* @param url
* @return
* URL
*/
public static Properties getProperties(URL url) {
if ( url == null ) {
return null;
}
Properties properties = new Properties();
try {
properties.load( url.openStream() );
} catch ( IOException e ) {
//swallow, as we'll return null
return null;
}
return properties;
}
}