/*
* Copyright (c) 2010. Axon Auction Example
*
* 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.fuin.auction.common;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* Layer independent utilities for the auction application.
*/
public final class Utils {
/**
* Private constructor to avoid instantiation.
*/
private Utils() {
throw new UnsupportedOperationException("You cannot create an instance of a utility class!");
}
/**
* Returns the project information relative to the given class.
*
* @param clasz
* Class to use for getting the project information resource
* from.
* @param propertiesFilename
* Name and path of the properties file.
*
* @return Project information.
*
* @throws FailedToLoadProjectInfoException
* The project properties resource relative to the given class
* was not found or could not be loaded for other reasons.
*/
public static ProjectInfo getProjectInfo(final Class<?> clasz, final String propertiesFilename)
throws FailedToLoadProjectInfoException {
try {
return new ProjectInfo(loadProperties(clasz, propertiesFilename));
} catch (final IOException ex) {
throw new FailedToLoadProjectInfoException(clasz, propertiesFilename, new IOException(
"Resource '" + propertiesFilename + "' not found!"));
} catch (final RuntimeException ex) {
throw new FailedToLoadProjectInfoException(clasz, propertiesFilename, ex);
}
}
/**
* Loads a properties file.
*
* @param clasz
* Class to use for getting the project information resource
* from.
* @param propertiesFilename
* Name and path of the properties file.
*
* @return Properties.
*
* @throws IOException
* Error loading the properties.
*/
public static Properties loadProperties(final Class<?> clasz, final String propertiesFilename)
throws IOException {
final Properties props = new Properties();
final InputStream inStream = clasz.getResourceAsStream(propertiesFilename);
if (inStream == null) {
throw new IOException("Resource '" + propertiesFilename + "' not found!");
}
try {
props.load(inStream);
} finally {
inStream.close();
}
return props;
}
/**
* Creates an error message from an exception. Some exceptions (for example
* {@link NullPointerException}) don't carry a message. In this case the
* simple name of the exception is used for creating the error message.
*
* @param ex
* Exception to create an error message for.
*
* @return Error message - Always non-<code>null</code> and not empty.
*/
public static String createMessage(final Exception ex) {
final String msg;
if ((ex.getMessage() == null) || (ex.getMessage().trim().length() == 0)) {
msg = ex.getClass().getSimpleName();
} else {
msg = ex.getMessage();
}
return msg;
}
}