1 package org.simantics.plant3d.handlers;
3 import org.eclipse.core.commands.AbstractHandler;
4 import org.eclipse.core.commands.ExecutionEvent;
5 import org.eclipse.core.commands.ExecutionException;
6 import org.eclipse.core.runtime.IProgressMonitor;
7 import org.eclipse.core.runtime.IStatus;
8 import org.eclipse.core.runtime.Status;
9 import org.eclipse.core.runtime.jobs.Job;
10 import org.simantics.Simantics;
11 import org.simantics.db.Resource;
12 import org.simantics.db.WriteGraph;
13 import org.simantics.db.common.request.WriteRequest;
14 import org.simantics.db.common.utils.NameUtils;
15 import org.simantics.db.exception.DatabaseException;
16 import org.simantics.db.layer0.adapter.ActionFactory;
17 import org.simantics.layer0.Layer0;
18 import org.simantics.plant3d.Activator;
19 import org.simantics.plant3d.utils.P3DUtil;
21 public class NewPlantHandler extends AbstractHandler implements ActionFactory {
23 // Action factory method
25 public Runnable create(final Object target) {
26 if (!(target instanceof Resource))
29 return new Runnable() {
32 createNewPlantJob((Resource) target);
39 public Object execute(ExecutionEvent event) throws ExecutionException {
40 final Resource library = Simantics.getProject().get();
42 createNewPlantJob(library);
47 * Create a new plant as a user-triggered job.
49 * @param library Parent resource for the new plant.
51 public static void createNewPlantJob(final Resource library) {
52 Job job = new Job("Create Plant ") {
54 protected IStatus run(IProgressMonitor monitor) {
55 monitor.beginTask("Create Plant" , IProgressMonitor.UNKNOWN);
57 Simantics.getSession().syncRequest(new WriteRequest() {
60 public void perform(WriteGraph graph) throws DatabaseException {
61 Layer0 l0 = Layer0.getInstance(graph);
62 String modelName = NameUtils.findFreshName(graph, "Plant", library);
63 Resource model = P3DUtil.createModel(graph, modelName);
64 graph.claim(library, l0.ConsistsOf, model);
68 return Status.OK_STATUS;
69 } catch (DatabaseException e) {
70 return new Status(IStatus.ERROR, Activator.PLUGIN_ID, getName() + " failed.",e);