/** | |
* Copyright (c) 2009-2010 Thales Corporate Services S.A.S. | |
* 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: | |
* Thales Corporate Services S.A.S - initial API and implementation | |
*/ | |
package org.eclipse.egf.fprod.producer.internal.manager; | |
import java.util.List; | |
import org.eclipse.core.runtime.IProgressMonitor; | |
import org.eclipse.core.runtime.OperationCanceledException; | |
import org.eclipse.core.runtime.SubMonitor; | |
import org.eclipse.egf.core.l10n.EGFCoreMessages; | |
import org.eclipse.egf.core.producer.InvocationException; | |
import org.eclipse.egf.core.producer.context.IProductionContext; | |
import org.eclipse.egf.core.producer.context.ProductionContext; | |
import org.eclipse.egf.fprod.producer.internal.context.FprodProducerContextFactory; | |
import org.eclipse.egf.model.fcore.Activity; | |
import org.eclipse.egf.model.fcore.InvocationContract; | |
import org.eclipse.egf.model.fcore.OrchestrationParameter; | |
import org.eclipse.egf.model.fprod.ProductionPlan; | |
import org.eclipse.egf.model.fprod.ProductionPlanInvocation; | |
import org.eclipse.egf.producer.EGFProducerPlugin; | |
import org.eclipse.egf.producer.internal.manager.InvocationManager; | |
import org.eclipse.egf.producer.manager.ActivityManagerProducer; | |
import org.eclipse.egf.producer.manager.IActivityManager; | |
import org.eclipse.egf.producer.manager.IModelElementManager; | |
import org.eclipse.emf.common.util.BasicDiagnostic; | |
import org.eclipse.emf.common.util.Diagnostic; | |
import org.eclipse.emf.common.util.UniqueEList; | |
import org.eclipse.osgi.util.NLS; | |
/** | |
* @author Xavier Maysonnave | |
* | |
*/ | |
public class ProductionPlanInvocationManager extends InvocationManager<ProductionPlan, ProductionPlanInvocation> { | |
private IActivityManager<Activity> _activityManager; | |
public ProductionPlanInvocationManager(IModelElementManager<ProductionPlan, OrchestrationParameter> parent, ProductionPlanInvocation element) throws InvocationException { | |
super(parent, element); | |
} | |
@Override | |
@SuppressWarnings("unchecked") | |
public ProductionContext<ProductionPlanInvocation, InvocationContract> getInternalProductionContext() throws InvocationException { | |
if (_productionContext == null) { | |
_productionContext = FprodProducerContextFactory.createContext((IProductionContext<ProductionPlan, OrchestrationParameter>) getParent().getProductionContext(), getProjectBundleSession(), getElement()); | |
} | |
return (ProductionContext<ProductionPlanInvocation, InvocationContract>) _productionContext; | |
} | |
public IActivityManager<Activity> getActivityManager() throws InvocationException { | |
if (_activityManager == null && getElement().getInvokedActivity() != null) { | |
ActivityManagerProducer<Activity> producer = null; | |
try { | |
producer = EGFProducerPlugin.getActivityManagerProducer(getElement().getInvokedActivity()); | |
} catch (Throwable t) { | |
throw new InvocationException(t); | |
} | |
_activityManager = producer.createActivityManager(this, getElement().getInvokedActivity()); | |
} | |
return _activityManager; | |
} | |
@Override | |
public void dispose() throws InvocationException { | |
super.dispose(); | |
if (getActivityManager() != null) { | |
getActivityManager().dispose(); | |
} | |
} | |
@Override | |
public Diagnostic canInvoke() throws InvocationException { | |
BasicDiagnostic diagnostic = checkInputElement(false); | |
if (getActivityManager() != null) { | |
diagnostic.add(getActivityManager().canInvoke()); | |
} | |
return diagnostic; | |
} | |
@Override | |
public void initializeContext() throws InvocationException { | |
super.initializeContext(); | |
if (getActivityManager() != null) { | |
getActivityManager().initializeContext(); | |
} | |
} | |
public int getSteps() throws InvocationException { | |
if (getActivityManager() != null) { | |
return getActivityManager().getSteps(); | |
} | |
return 0; | |
} | |
public List<Activity> getActivities() throws InvocationException { | |
List<Activity> activities = new UniqueEList<Activity>(); | |
if (getActivityManager() != null) { | |
activities.addAll(getActivityManager().getActivities()); | |
} | |
return activities; | |
} | |
public Diagnostic invoke(IProgressMonitor monitor) throws InvocationException { | |
SubMonitor subMonitor = SubMonitor.convert(monitor, NLS.bind(EGFCoreMessages.Production_Invoke, getName()), 1); | |
BasicDiagnostic diagnostic = checkInputElement(true); | |
if (diagnostic.getSeverity() != Diagnostic.ERROR) { | |
IActivityManager<Activity> activityManager = getActivityManager(); | |
if (activityManager != null) { | |
diagnostic.add(activityManager.invoke(subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE))); | |
if (monitor.isCanceled()) { | |
throw new OperationCanceledException(); | |
} | |
} | |
} | |
return diagnostic; | |
} | |
} |