/**
* Invoked when an action occurs.
*/
public void actionPerformed(final ActionEvent e)
{
final ReportDocumentContext activeContext = getActiveContext();
if (activeContext == null)
{
return;
}
final Object rawLeadSelection = InsertationUtil.getInsertationPoint(activeContext);
if (rawLeadSelection == null)
{
return;
}
final Object[] fromClipboardArray = InsertationUtil.getFromClipboard();
if (fromClipboardArray.length == 0)
{
return;
}
for (int i = 0; i < fromClipboardArray.length; i++)
{
fromClipboardArray[i] = normalizeElements(fromClipboardArray[i]);
}
final ArrayList<Object> selectedElements = new ArrayList<Object>();
final AbstractReportDefinition report = activeContext.getReportDefinition();
final ArrayList<UndoEntry> undos = new ArrayList<UndoEntry>();
try
{
for (int i = 0; i < fromClipboardArray.length; i++)
{
final Object o = fromClipboardArray[i];
//
final Object insertResult = InsertationUtil.insert(rawLeadSelection, report, o);
if (insertResult != null)
{
selectedElements.add(insertResult);
}
if (insertResult instanceof Element)
{
undos.add(handleInsertElement((Element) insertResult));
}
else if (insertResult instanceof Expression)
{
final Expression insertExpression = (Expression) insertResult;
final int index = activeContext.getReportDefinition().getExpressions().indexOf(insertExpression);
undos.add(new ExpressionAddedUndoEntry(index, insertExpression));
}
else if (insertResult instanceof ParameterDefinitionEntry)
{
final ParameterDefinitionEntry insertParam = (ParameterDefinitionEntry) insertResult;
final ReportParameterDefinition definition = activeContext.getContextRoot().getParameterDefinition();
final int index = definition.getParameterCount() - 1;
undos.add(new ParameterEditUndoEntry(index, null, insertParam));
}
else if (insertResult instanceof DataFactory)
{
final DataFactory insertDataFactory = (DataFactory) insertResult;
final CompoundDataFactory compoundDataFactory = (CompoundDataFactory) activeContext.getReportDefinition().getDataFactory();
final int index = compoundDataFactory.size() - 1;
undos.add(new DataSourceEditUndoEntry(index, null, insertDataFactory));
}
}