/*
* Copyright (C) 2013 Ustream Inc.
* author chaotx <lombai.ferenc@ustream.tv>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
package com.robin.uielements;
import java.io.File;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import com.robin.utilities.config.ConfigParams;
import com.robin.utilities.config.Configuration;
public class TranslationMap
{
/**
* To store all translation elements defined in translation xmls.
*/
private static final Map<String, TranslationFile> ELEMENTMAP = Collections
.synchronizedMap(new HashMap<String, TranslationFile>());
/**
* Parse all translation xmls and store their data in memory.
* @param config Configuration.
*/
public static void parse(final Configuration config)
{
synchronized (ELEMENTMAP)
{
if (ELEMENTMAP.isEmpty())
{
File baseFolder =
new File(config.getValue(ConfigParams.TLXMLSDIR));
@SuppressWarnings("unchecked")
Collection<File> fileList =
FileUtils.listFiles(
baseFolder,
new String[] { "xml" },
true);
for (File file : fileList)
{
ELEMENTMAP.put(
baseFolder.toURI().relativize(file.toURI()).getPath(),
getTranslationsFromFile(baseFolder, file));
}
}
}
}
/**
* Returns the TranslationFile object stored in memory by its file relative
* filename to the TLXML base dir.
* @param filePath the name and relative path of the file parsed
* @return the file representation with content from the xml
*/
public static TranslationFile getTranslationsByName(final String filePath)
{
TranslationFile page = ELEMENTMAP.get(filePath);
if (page == null)
{
throw new NullPointerException("Could not find '"
+ filePath + "' UIPage.");
}
return page;
}
private static TranslationFile getTranslationsFromFile(
final File baseFolder, final File locatorFile)
{
return new TranslationSerializer()
.deserialize(baseFolder, locatorFile);
}
}