Description
If we get optional parameters then the code using varargs gets messy:
String tarurl = clusterSpec.getConfiguration().getString( HBaseConstants.KEY_TARBALL_URL); if (tarurl != null) { addRunUrl(event, hbaseInstallRunUrl, HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider(), HBaseConstants.PARAM_TARBALL_URL, tarurl); } else { addRunUrl(event, hbaseInstallRunUrl, HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider()); }
We should extend or add a builder pattern so that one can do something like
RunUrl ru = RunUrl.create(event) .url(hbaseInstallRunUrl) .arg(HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider()); if (tarUrl != null) { st.addArg(HBaseConstants.PARAM_TARBALL_URL, tarurl); } addRunUrl(ru);
Or similar to http://stackoverflow.com/questions/3838053/mapmaker-design-pattern referring to the Guava MapMaker class.