/*
* Eoulsan development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public License version 2.1 or
* later and CeCILL-C. This should be distributed with the code.
* If you do not have a copy, see:
*
* http://www.gnu.org/licenses/lgpl-2.1.txt
* http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt
*
* Copyright for this code is held jointly by the Genomic platform
* of the Institut de Biologie de l'École normale supérieure and
* the individual authors. These should be listed in @author doc
* comments.
*
* For more information on the Eoulsan project and its aims,
* or to join the Eoulsan Google group, visit the home page
* at:
*
* http://outils.genomique.biologie.ens.fr/eoulsan
*
*/
package fr.ens.biologie.genomique.eoulsan.modules.mapping.hadoop;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
/**
* This class contains utility methods for the Hadoop mapping package classes.
* @author Laurent Jourdren
* @since 1.2
*/
public class HadoopMappingUtils {
private static final String PARAM_KEYS_LIST_SUFFIX = "*.list";
/**
* Add the parameters to an Hadoop job configuration.
* @param parameters parameters to add.
* @param prefix prefix for the parameters
* @param jobConf job configuration
*/
static void addParametersToJobConf(final Map<String, String> parameters,
final String prefix, final Configuration jobConf) {
if (parameters == null || jobConf == null || prefix == null) {
return;
}
// Add the parameter to the job configuration
for (Map.Entry<String, String> e : parameters.entrySet()) {
final String key = prefix + e.getKey();
final String value = e.getValue();
jobConf.set(key, value);
}
// Set the key with the list of parameters keys as a string
jobConf.set(prefix + PARAM_KEYS_LIST_SUFFIX,
Joiner.on(',').join(parameters.keySet()));
}
/**
* Retrieve parameters from a job configuration
* @param jobConf job configuration
* @param prefix prefix for the parameters
* @return a ordered map (LinkedHashMap) with the parameters
*/
static Map<String, String> jobConfToParameters(final Configuration jobConf,
final String prefix) {
final Map<String, String> result = new LinkedHashMap<>();
if (jobConf == null || prefix == null) {
return result;
}
// Get the list of parameters
final String keys = jobConf.get(prefix + PARAM_KEYS_LIST_SUFFIX);
if (keys == null) {
return result;
}
// Fill the result map with the parameters keys and values
for (String key : Splitter.on(',').omitEmptyStrings().trimResults()
.split(keys)) {
final String value = jobConf.get(prefix + key);
result.put(key, value == null ? "" : value);
}
return result;
}
/**
* Private Constructor.
*/
private HadoopMappingUtils() {
throw new IllegalStateException();
}
}