blob: 3b74ffa27f20ec882090365236d0b62ccce3f296 [file] [log] [blame]
/**
* Copyright (c) 2009 Thales Corporate Services S.A.S.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-v2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thales Corporate Services S.A.S - initial API and implementation
*/
package org.eclipse.egf.producer.ftask.internal.manager;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.egf.common.helper.EMFHelper;
import org.eclipse.egf.core.l10n.EGFCoreMessages;
import org.eclipse.egf.core.producer.InvocationException;
import org.eclipse.egf.model.fcore.Invocation;
import org.eclipse.egf.model.fcore.InvocationContract;
import org.eclipse.egf.model.ftask.Task;
import org.eclipse.egf.model.ftask.task.ValidationInvocationException;
import org.eclipse.egf.producer.EGFProducerPlugin;
import org.eclipse.egf.producer.context.ActivityProductionContextProducer;
import org.eclipse.egf.producer.ftask.EGFProducerFtaskPlugin;
import org.eclipse.egf.producer.ftask.internal.context.TaskProductionContext;
import org.eclipse.egf.producer.internal.manager.ActivityManager;
import org.eclipse.egf.producer.manager.IModelElementManager;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.osgi.util.NLS;
import org.osgi.framework.Bundle;
/**
* @author Xavier Maysonnave
*
*/
public class TaskManager extends ActivityManager<Task> {
public TaskManager(Task Task) throws InvocationException {
super(Task);
}
public TaskManager(Bundle bundle, Task Task) throws InvocationException {
super(bundle, Task);
}
public <T extends Invocation> TaskManager(IModelElementManager<T, InvocationContract> parent, Task task) throws InvocationException {
super(parent, task);
}
@Override
@SuppressWarnings("unchecked")
public TaskProductionContext getInternalProductionContext() throws InvocationException {
if (_productionContext == null) {
@SuppressWarnings("rawtypes")
ActivityProductionContextProducer producer = null;
try {
producer = EGFProducerPlugin.getActivityProductionContextProducer(getElement());
} catch (Throwable t) {
throw new InvocationException(t);
}
if (getParent() != null) {
_productionContext = producer.createActivityProductionContext(getParent().getProductionContext(), getProjectBundleSession(), getElement());
} else {
_productionContext = producer.createActivityProductionContext(getProjectBundleSession(), getElement());
}
}
return (TaskProductionContext) _productionContext;
}
@Override
public void dispose() throws InvocationException {
super.dispose();
}
@Override
protected BasicDiagnostic checkInputElement(boolean runtime) throws InvocationException {
BasicDiagnostic diagnostic = super.checkInputElement(runtime);
if (getElement().getImplementationValue() == null) {
diagnostic.add(new BasicDiagnostic(Diagnostic.ERROR, EGFProducerPlugin.getDefault().getPluginID(), 0, NLS.bind("Task Implementation is mandatory for ''{0}''", EMFHelper.getText(getElement())), //$NON-NLS-1$
new Object[] {
getElement()
}));
}
return diagnostic;
}
public int getSteps() throws InvocationException {
if (getElement().getImplementationValue() != null) {
return 1;
}
return 0;
}
public Diagnostic invoke(IProgressMonitor monitor) throws InvocationException {
SubMonitor subMonitor = SubMonitor.convert(monitor, NLS.bind(EGFCoreMessages.Production_Invoke, getName()), 100);
// Check Input
BasicDiagnostic diagnostic = checkInputElement(true);
// Do not further process if we are on error
if (diagnostic.getSeverity() != Diagnostic.ERROR) {
// Invoke
try {
EGFProducerFtaskPlugin.getTaskProductionInvocationFactory().createInvocation(getBundle(), getInternalProductionContext(), getElement()).invoke(subMonitor.newChild(100, SubMonitor.SUPPRESS_NONE));
} catch (ValidationInvocationException ve) {
diagnostic.add(ve.getDiagnostic());
} catch (InvocationException ie) {
if (ie.getDiagnostic() != null) {
diagnostic.add(ie.getDiagnostic());
}
ie.setDiagnostic(diagnostic);
throw ie;
} catch (OperationCanceledException oe) {
throw oe;
} catch (Throwable t) {
throw new InvocationException(t);
}
// Check Output
checkOutputElement(diagnostic);
// Monitor
if (monitor.isCanceled()) {
throw new OperationCanceledException();
}
}
return diagnostic;
}
}