/******************************************************************************* * Copyright (c) 2010-2012, Abel Hegedus, Istvan Rath and Daniel Varro * All rights reserved. This program and the accompanying materials * are 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: * Abel Hegedus - initial API and implementation *******************************************************************************/ package org.eclipse.incquery.runtime.triggerengine.firing; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.emf.transaction.TransactionalEditingDomain.Lifecycle; import org.eclipse.emf.transaction.TransactionalEditingDomainEvent; import org.eclipse.emf.transaction.TransactionalEditingDomainListener; import org.eclipse.emf.transaction.util.TransactionUtil; import org.eclipse.emf.workspace.impl.EMFOperationTransaction; /** * @author Abel Hegedus * */ public class TransactionUpdateCompleteProvider extends UpdateCompleteProvider { private TransactionListener transactionListener; private TransactionalEditingDomain editingDomain; private Lifecycle lifecycle; public TransactionUpdateCompleteProvider(TransactionalEditingDomain editingDomain) { this.transactionListener = new TransactionListener(); this.editingDomain = editingDomain; this.lifecycle = TransactionUtil.getAdapter(this.editingDomain, Lifecycle.class); this.lifecycle.addTransactionalEditingDomainListener(transactionListener); } private class TransactionListener implements TransactionalEditingDomainListener { @Override public void transactionStarting(TransactionalEditingDomainEvent event) { } @Override public void transactionInterrupted(TransactionalEditingDomainEvent event) { } @Override public void transactionStarted(TransactionalEditingDomainEvent event) { } @Override public void transactionClosing(TransactionalEditingDomainEvent event) { } @Override public void transactionClosed(TransactionalEditingDomainEvent event) { boolean needsNotification = true; /* * Omit notifications about the executions of the assigned jobs in the RecordingActivation Applying a rule * in the IRule Engine will result the job to be executed under an EMFOperationTransaction transaction */ if (event.getTransaction() instanceof EMFOperationTransaction) { EMFOperationTransaction transaction = (EMFOperationTransaction) event.getTransaction(); // FIXME this is a really ugly hack! if (transaction.getCommand().getLabel().equals("RecordingActivation")) { needsNotification = false; } } if (needsNotification) { updateCompleted(); } } @Override public void editingDomainDisposing(TransactionalEditingDomainEvent event) { } } @Override public void dispose() { this.lifecycle.removeTransactionalEditingDomainListener(transactionListener); super.dispose(); } }