]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/handlers/NewPlantHandler.java
Add "New Plant" as model browser action.
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / handlers / NewPlantHandler.java
index 42e64cfe56579923246bfb4810d2effa33b60a20..7429e775df3d5c756a53ec5eec0f14f4313a6936 100644 (file)
@@ -13,16 +13,42 @@ 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.db.layer0.adapter.ActionFactory;
 import org.simantics.layer0.Layer0;
 import org.simantics.plant3d.Activator;
 import org.simantics.plant3d.utils.P3DUtil;
 
-public class NewPlantHandler extends AbstractHandler {
+public class NewPlantHandler extends AbstractHandler implements ActionFactory {
 
+       // Action factory method
+       @Override
+       public Runnable create(final Object target) {
+               if (!(target instanceof Resource))
+                       return null;
+               
+               return new Runnable() {
+                       @Override
+                       public void run() {
+                               createNewPlantJob((Resource) target);
+                       }
+               };
+       }
+       
+       // Handler method
        @Override
        public Object execute(ExecutionEvent event) throws ExecutionException {
                final Resource library = Simantics.getProject().get();
                
+               createNewPlantJob(library);
+               return null;
+       }
+
+       /**
+        * Create a new plant as a user-triggered job.
+        * 
+        * @param library  Parent resource for the new plant.
+        */
+       public static void createNewPlantJob(final Resource library) {
                Job job = new Job("Create Plant ") {
                        @Override
                        protected IStatus run(IProgressMonitor monitor) {
@@ -49,6 +75,5 @@ public class NewPlantHandler extends AbstractHandler {
                };
                job.setUser(true);
                job.schedule();
-               return null;
        }
 }