final HashMap<String, DrillDownParameter> parameterFromServer = new HashMap<String, DrillDownParameter>();
final ArrayList<DrillDownParameter> drillDownParameters = new ArrayList<DrillDownParameter>();
for (int i = 0; i < parameters.length; i++)
{
final Parameter parameter = parameters[i];
final DrillDownParameter drillDownParameter = new DrillDownParameter(parameter.getName());
if ("system".equals(parameter.getAttribute(ParameterAttributeNames.Core.PARAMETER_GROUP)) ||
"subscription".equals(parameter.getAttribute(ParameterAttributeNames.Core.PARAMETER_GROUP)) ||
"output-target".equals(parameter.getName()))
{
drillDownParameter.setType(DrillDownParameter.Type.SYSTEM);
}
else
{
drillDownParameter.setType(DrillDownParameter.Type.PREDEFINED);
}
if ("false".equals(parameter.getAttribute
(ParameterAttributeNames.Core.NAMESPACE, ParameterAttributeNames.Core.PREFERRED)))
{
drillDownParameter.setPreferred(false);
}
else
{
drillDownParameter.setPreferred(true);
}
drillDownParameters.add(drillDownParameter);
parameterFromServer.put(parameter.getName(), drillDownParameter);
}
for (int i = 0; i < existingParameters.length; i++)
{
final DrillDownParameter parameter = existingParameters[i];
if (parameterFromServer.containsKey(parameter.getName()))
{
// this parameter also exists in the listing from the server, so rescue its contents
final DrillDownParameter existingOne = parameterFromServer.get(parameter.getName());
existingOne.setFormulaFragment(parameter.getFormulaFragment());
existingParameters[i] = null;
}
}
// finally add all left-over parameters as manual parameters.
for (int i = 0; i < existingParameters.length; i++)
{
final DrillDownParameter parameter = existingParameters[i];
if (parameter == null)
{
continue;
}
parameter.setType(DrillDownParameter.Type.MANUAL);
parameter.setPosition(drillDownParameters.size());
drillDownParameters.add(parameter);
}
final DrillDownParameter[] computedSet = drillDownParameters.toArray
(new DrillDownParameter[drillDownParameters.size()]);