LibraryTranslationFinder.java
package org.andromda.core.translation.library;
import java.util.LinkedHashMap;
import java.util.Map;
import org.andromda.core.common.ComponentContainer;
import org.andromda.core.common.ExceptionUtils;
import org.apache.log4j.Logger;
/**
* Finds LibraryTranslations by <code>translation</code> (i.e. library and name).
*
* @author Chad Brandon
*/
public class LibraryTranslationFinder
{
/**
* The logger instance.
*/
private static final Logger logger = Logger.getLogger(LibraryTranslationFinder.class);
/**
* Stores the found library translations.
*/
protected static final Map libraryTranslations = new LinkedHashMap();
/**
* Finds the library with the specified libraryName.
*
* @param libraryName
* @return the Library found or null if none is found.
*/
protected static Library findLibrary(final String libraryName)
{
return (Library)ComponentContainer.instance().findComponentByNamespace(libraryName, Library.class);
}
/**
* Finds the LibraryTranslation with the specified translationName.
*
* @param translation the name of the translation to find.
* @return the LibraryTranslation found or null if none is found.
*/
public static LibraryTranslation findLibraryTranslation(final String translation)
{
ExceptionUtils.checkEmpty("translation", translation);
LibraryTranslation libraryTranslation = (LibraryTranslation)libraryTranslations.get(translation);
if (libraryTranslation == null)
{
char libSeparator = '.';
int index = translation.indexOf(libSeparator);
if (index == -1)
{
throw new IllegalArgumentException(
"libraryTranslation '" + translation + "' must contain the character '" +
libSeparator + "' in order to separate the library name from the translation" +
" name (must be in the form: <library name>.<translation name>)");
}
final String libraryName = translation.substring(0, index);
final Library library = findLibrary(libraryName);
final int translationLength = translation.length();
final String translationName = translation.substring(index + 1, translationLength);
if (library != null)
{
libraryTranslation = library.getLibraryTranslation(translationName);
if (libraryTranslation == null)
{
logger.error(
"ERROR! no translation '" + translationName + "' found within library --> '" + libraryName +
'\'');
}
}
}
return libraryTranslation;
}
}