public static void performEditMasterReportParameters(final ReportDesignerContext context,
final ParameterDefinitionEntry parameter)
throws ReportDataFactoryException
{
final ReportRenderContext activeContext = context.getActiveContext();
if (activeContext == null)
{
return;
}
final Component theParent = context.getParent();
final Window theWindow = SwingUtil.getWindowAncestor(theParent);
final ParameterDialog parameterDialog;
if (theWindow instanceof JDialog)
{
parameterDialog = new ParameterDialog((JDialog) theWindow);
}
else if (theWindow instanceof JFrame)
{
parameterDialog = new ParameterDialog((JFrame) theWindow);
}
else
{
parameterDialog = new ParameterDialog();
}
SwingUtil.centerDialogInParent(parameterDialog);
final MasterReport masterReport = activeContext.getMasterReportElement();
final ModifiableReportParameterDefinition parameterDefinition =
(ModifiableReportParameterDefinition) masterReport.getParameterDefinition();
int index = -1;
for (int i = 0; i < parameterDefinition.getParameterCount(); i++)
{
final ParameterDefinitionEntry definition = parameterDefinition.getParameterDefinition(i);
if (definition == parameter)
{
index = i;
break;
}
}
if (index == -1)
{
if (parameter == null)
{
index = parameterDefinition.getParameterCount();
}
else
{
throw new IndexOutOfBoundsException("This parameter is not part of the existing parameter collection");
}
}
final ParameterDialog.ParameterEditResult definitionEntry = parameterDialog.performEditParameter
(context, masterReport, parameter);
if (definitionEntry != null)
{
final ParameterEditUndoEntry parameterEditUndoEntry = new ParameterEditUndoEntry(index, parameter, definitionEntry.getParameter());
final ArrayList<UndoEntry> undos = new ArrayList<UndoEntry>();
undos.add(parameterEditUndoEntry);
final DataFactoryWrapper[] dataFactoryWrappers = definitionEntry.getWrappers();
for (int i = 0; i < dataFactoryWrappers.length; i++)
{
final DataFactoryWrapper dataFactoryWrapper = dataFactoryWrappers[i];
if (dataFactoryWrapper.getOriginalDataFactory() != dataFactoryWrapper.getEditedDataFactory())
{
undos.add(new DataSourceEditUndoEntry(i, dataFactoryWrapper.getOriginalDataFactory(), dataFactoryWrapper.getEditedDataFactory()));
}
}
final CompoundUndoEntry undoEntry = new CompoundUndoEntry(undos.toArray(new UndoEntry[undos.size()]));
undoEntry.redo(activeContext);
activeContext.getUndo().addChange(ActionMessages.getString("EditParametersAction.MasterReport.Text"), undoEntry);
}
}