package com.yahoo.dtf.distribution; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.yahoo.dtf.distribution.Constant; import com.yahoo.dtf.distribution.Distribution; import com.yahoo.dtf.distribution.DistributionFactory; import com.yahoo.dtf.distribution.List; import com.yahoo.dtf.distribution.Step; import com.yahoo.dtf.exception.DistributionException; public class DistributionFactory { private static DistributionFactory _instance = null; private DistributionFactory() { } public static synchronized DistributionFactory getInstance() { if (_instance == null) _instance = new DistributionFactory(); return _instance; } public Distribution getDistribution(String function) throws DistributionException { Distribution distribution = null; Pattern pattern = Pattern.compile("([^(]*)(.*)"); Matcher matcher = pattern.matcher(function); if (matcher.matches()) { String func = matcher.group(1).toLowerCase(); String argument = matcher.group(2); if ( argument.length() > 2 ) argument = argument.substring(1,argument.length()-1); if (func.equals("const")) { // Constant function distribution = new Constant(argument); } else if (func.equals("step")) { // Step function distribution = new Step(argument); } else if (func.equals("list")) { // List function distribution = new List(argument); } else if (func.equals("limit")) { // Limit function distribution = new Limit(argument); } else { throw new DistributionException("Unable to parse distribution [" + function + "]"); } } else throw new DistributionException("Unable to parse distribution [" + function + "]"); return distribution; } }