{
if (designerContext == null)
{
throw new NullPointerException();
}
final ReportDocumentContext reportRenderContext = designerContext.getActiveContext();
if (reportRenderContext == null)
{
throw new IllegalArgumentException();
}
this.optionsPane.setReportDesignerContext(designerContext);
try
{
final CrosstabBuilder originBuilder;
if (editedGroup != null)
{
originBuilder = CrosstabEditSupport.populateBuilder(editedGroup, reportRenderContext.getReportDataSchemaModel());
populateDialogFromBuilder(originBuilder);
optionsPane.setValuesFromGroup(editedGroup);
}
else
{
originBuilder = new CrosstabBuilder(reportRenderContext.getReportDataSchemaModel());
}
reportRenderContext.addReportDataChangeListener(this);
dataModelChanged(reportRenderContext);
if (performEdit() == false)
{
return null;
}
if (columnsFieldsModel.size() < 1)
{
return null;
}
if (rowsFieldsModel.size() < 1)
{
return null;
}
final CrosstabBuilder builder = originBuilder.clearDimensions();
configureBuilderFromOptions(builder);
for (int i = 0; i < detailFieldsModel.size(); i += 1)
{
final CrosstabDetail crosstabDetail = detailFieldsModel.get(i);
builder.addDetails(crosstabDetail.getField(), crosstabDetail.getAggregation());
}
for (int col = 0; col < columnsFieldsModel.size(); col += 1)
{
final CrosstabDimension column = columnsFieldsModel.get(col);
builder.addColumnDimension(column);
}
for (int row = 0; row < rowsFieldsModel.size(); row += 1)
{
final CrosstabDimension rowDimension = rowsFieldsModel.get(row);
builder.addRowDimension(rowDimension);
}
for (int other = 0; other < otherFieldsModel.size(); other += 1)
{
final String column = (String) otherFieldsModel.get(other);
builder.addOtherDimension(column);
}
final CrosstabGroup crosstabGroup = builder.create();
optionsPane.setValuesOnGroup(crosstabGroup);
return crosstabGroup;
}
finally
{
reportRenderContext.removeReportDataChangeListener(this);
this.fieldListCellRenderer.setModel(null);
this.optionsPane.setReportDesignerContext(null);
}
}