blob: d89491f818b301865fef9d9ed4f4f162f33e8362 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2007 IBM Corporation and others.
* 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:
* IBM - Initial API and implementation
*
* </copyright>
*
* $Id: JETTask.java,v 1.1 2007/01/12 20:52:48 marcelop Exp $
*/
package org.eclipse.egf.ant.taskdefs.activity;
import java.util.ArrayList;
import java.util.List;
import org.apache.tools.ant.BuildException;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.egf.ant.taskdefs.EGFTask;
import org.eclipse.egf.application.internal.activator.EGFApplicationPlugin;
import org.eclipse.egf.application.internal.activity.ActivityRunner;
import org.eclipse.egf.application.internal.l10n.ApplicationMessages;
import org.eclipse.egf.core.domain.EgfResourceSet;
import org.eclipse.egf.model.fcore.Activity;
import org.eclipse.emf.common.util.UniqueEList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.osgi.util.NLS;
/**
* <i>eclipseDir</i>/eclipse
* -noSplash
* -data <i>worspaceDir</i>
* -application org.eclipse.ant.core.antRunner
* -buildfile <i>antScript</i>
* </p>
* <p>In Windows you should execute <i>eclipsec</i> instead of <i>eclipse</i> in order to have
* access to the Ant build script console output.</p>
* <p>You can also use the Eclipse UI to execute an Ant script containing this task by right-clicking the script and selecting
* <i>Run As &gt; Ant Build... &gt; JRE &gt; "Run in the same JRE as the workspace&quot;</i>.</p>
*
* <p>
*
* @since 0.2.4
*/
public class ActivityTask extends EGFTask {
protected List<NestedActivity> _nestedActivities;
public void addConfiguredActivity(NestedActivity activity) {
if (_nestedActivities == null) {
_nestedActivities = new ArrayList<NestedActivity>();
}
_nestedActivities.add(activity);
}
@Override
protected void checkAttributes() throws BuildException {
assertTrue("Nested 'activity' must be specified.", _nestedActivities != null); //$NON-NLS-1$
for (NestedActivity activity : _nestedActivities) {
activity.checkAttributes();
}
}
@Override
protected void doExecute() throws Exception {
// Build a list of activities if any
List<Activity> activities = new UniqueEList<Activity>();
for (NestedActivity activity : _nestedActivities) {
ResourceSet resourceSet = new EgfResourceSet(activity.isRuntime());
EObject eObject = null;
// Load it in our resource set
try {
eObject = resourceSet.getEObject(resourceSet.getURIConverter().normalize(activity.getUri()), true);
} catch (Throwable t) {
EGFApplicationPlugin.getDefault().logError(new CoreException(EGFApplicationPlugin.getDefault().newStatus(IStatus.ERROR, NLS.bind(ApplicationMessages.NestedActivity_EObject_Loading_Error, activity.getUri().toString()), t)));
continue;
}
// Verify if we face an Activity
if (eObject == null || eObject instanceof Activity == false) {
EGFApplicationPlugin.getDefault().logError(new CoreException(EGFApplicationPlugin.getDefault().newStatus(IStatus.ERROR, NLS.bind(ApplicationMessages.NestedActivity_Invalid_Activity_Argument, activity.getUri().toString()), null)));
continue;
}
// to be runned activities
activities.add((Activity) eObject);
}
if (activities.isEmpty()) {
return;
}
runHelper(activities);
}
public void runHelper(final List<Activity> activities) throws Exception {
try {
final IWorkspace workspace = ResourcesPlugin.getWorkspace();
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
try {
ActivityRunner runner = new ActivityRunner(activities);
runner.run(monitor);
} finally {
monitor.done();
}
}
};
workspace.run(runnable, getProgressMonitor());
} catch (Exception e) {
throw e;
}
}
}