blob: 6a52cb9498f081dea475b19a38dca51f42aaa9bd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012 Red Hat, Inc.
* All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
*
* @author Bob Brodt
******************************************************************************/
package org.eclipse.bpmn2.modeler.ui.editor;
import org.eclipse.bpmn2.modeler.core.LifecycleEvent;
import org.eclipse.bpmn2.modeler.core.LifecycleEvent.EventType;
import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntime;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.transaction.ExceptionHandler;
import org.eclipse.emf.transaction.TransactionalCommandStack;
import org.eclipse.emf.transaction.TransactionalEditingDomainEvent;
import org.eclipse.emf.transaction.TransactionalEditingDomainListenerImpl;
public class BPMN2EditingDomainListener extends TransactionalEditingDomainListenerImpl implements ExceptionHandler {
protected BasicDiagnostic diagnostics;
private DefaultBPMN2Editor bpmn2Editor;
public BPMN2EditingDomainListener(DefaultBPMN2Editor bpmn2Editor) {
super();
this.bpmn2Editor = bpmn2Editor;
TransactionalCommandStack stack = (TransactionalCommandStack) bpmn2Editor.getEditingDomain().getCommandStack();
stack.setExceptionHandler(this);
}
@Override
public void transactionStarting(TransactionalEditingDomainEvent event) {
diagnostics = null;
super.transactionStarting(event);
TargetRuntime rt = TargetRuntime.getRuntime(bpmn2Editor);
LifecycleEvent.notify(new LifecycleEvent(EventType.TRANSACTION_STARTING, event.getTransaction(), rt));
}
/**
* this will be called in case of rollback
*/
@Override
public void transactionClosed(TransactionalEditingDomainEvent event) {
super.transactionClosed(event);
TargetRuntime rt = TargetRuntime.getRuntime(bpmn2Editor);
LifecycleEvent.notify(new LifecycleEvent(EventType.TRANSACTION_CLOSED, event.getTransaction(), rt));
}
@Override
public void transactionInterrupted(TransactionalEditingDomainEvent event) {
super.transactionInterrupted(event);
TargetRuntime rt = TargetRuntime.getRuntime(bpmn2Editor);
LifecycleEvent.notify(new LifecycleEvent(EventType.TRANSACTION_INTERRUPTED, event.getTransaction(), rt));
}
@Override
public void handleException(Exception e) {
String source = null;
int code = 0;
String message = e.getMessage();
Object[] data = null;
StackTraceElement trace[] = e.getStackTrace();
if (trace!=null && trace.length>0) {
source = trace[0].getMethodName();
}
if (diagnostics==null) {
diagnostics = new BasicDiagnostic(source,code,message,data);
}
else
diagnostics.add(new BasicDiagnostic(source,code,message,data));
}
public BasicDiagnostic getDiagnostics() {
return diagnostics;
}
public IMarker createMarker(IResource resource, int severity, String msg) {
try {
IMarker m = resource.createMarker(IMarker.PROBLEM);
m.setAttribute(IMarker.MESSAGE, msg);
m.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH);
m.setAttribute(IMarker.SEVERITY, severity);
return m;
} catch (CoreException e) {
throw new RuntimeException(e);
}
}
}