package org.simantics.plant3d.handlers; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.simantics.Simantics; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.layer0.Layer0; import org.simantics.plant3d.Activator; import org.simantics.plant3d.utils.P3DUtil; public class NewPlantHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { final Resource library = Simantics.getProject().get(); Job job = new Job("Create Plant ") { @Override protected IStatus run(IProgressMonitor monitor) { monitor.beginTask("Create Plant" , IProgressMonitor.UNKNOWN); try { Simantics.getSession().syncRequest(new WriteRequest() { @Override public void perform(WriteGraph graph) throws DatabaseException { Layer0 l0 = Layer0.getInstance(graph); String modelName = NameUtils.findFreshName(graph, "Plant", library); Resource model = P3DUtil.createModel(graph, modelName); graph.claim(library, l0.ConsistsOf, model); } }); return Status.OK_STATUS; } catch (DatabaseException e) { return new Status(IStatus.ERROR, Activator.PLUGIN_ID, getName() + " failed.",e); } } }; job.setUser(true); job.schedule(); return null; } }