+++ /dev/null
-/*******************************************************************************\r
- * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package fi.vtt.simantics.processeditor.actions;\r
-\r
-import java.util.List;\r
-\r
-import org.simantics.db.Graph;\r
-import org.simantics.db.GraphRequestAdapter;\r
-import org.simantics.db.GraphRequestStatus;\r
-import org.simantics.db.GraphRequestWithResult;\r
-import org.simantics.db.Resource;\r
-import org.simantics.layer0.utils.EntityFactory;\r
-import org.simantics.layer0.utils.IEntity;\r
-import org.simantics.layer0.utils.instantiation.Instance;\r
-import org.simantics.layer0.utils.instantiation.InstanceFactory;\r
-import org.simantics.proconf.g3d.actions.WriteAction;\r
-import org.simantics.proconf.g3d.base.G3DAPI;\r
-import org.simantics.proconf.g3d.base.G3DTools;\r
-import org.simantics.proconf.g3d.base.ThreeDimensionalEditorBase;\r
-import org.simantics.proconf.g3d.common.StructuredResourceSelection;\r
-import org.simantics.proconf.g3d.dnd.DropListener;\r
-\r
-import fi.vtt.simantics.processeditor.Activator;\r
-import fi.vtt.simantics.processeditor.ProcessResource;\r
-import fi.vtt.simantics.processeditor.common.PipingTools2;\r
-import fi.vtt.simantics.processeditor.dialogs.NozzleDialog;\r
-import fi.vtt.simantics.processeditor.stubs.Equipment;\r
-import fi.vtt.simantics.processeditor.stubs.Nozzle;\r
-\r
-\r
-\r
-public class InsertNozzleAction extends WriteAction implements DropListener {\r
-\r
- Resource equipmentResource = null;\r
- Resource nozzleType = null;\r
- \r
- public InsertNozzleAction(ThreeDimensionalEditorBase parent) {\r
- super(parent,false);\r
- }\r
-\r
- @Override\r
- public boolean canActivate() {\r
- NozzleDialog dialog = new NozzleDialog(parent.getRenderingComposite().getShell(),"Select a nozzle", parent.getSession());\r
- if (dialog.open() == NozzleDialog.CANCEL) {\r
- equipmentResource = null;\r
- return false;\r
- }\r
- Resource type = dialog.getComboValue();\r
- if (type == null) {\r
- equipmentResource = null;\r
- return false;\r
- }\r
- nozzleType = type; \r
- return true;\r
- }\r
- \r
- @Override\r
- public GraphRequestStatus doChanges(Graph graph) throws Exception {\r
- createNozzle(graph);\r
- return GraphRequestStatus.transactionComplete();\r
- }\r
- \r
- private void createNozzle(Graph graph) {\r
- assert(nozzleType != null);\r
- assert(equipmentResource != null);\r
-\r
- Nozzle n = PipingTools2.instantiateNozzle(graph, nozzleType);\r
- \r
- Equipment equipment = new Equipment(graph, equipmentResource);\r
- \r
- G3DAPI.addNodeLocal(equipment,ProcessResource.plant3Dresource.HasNozzle, n);\r
- //parent.getSelectionAdapter().updateSelection(new StructuredResourceSelection(n.getResource())); \r
- equipment = null;\r
- }\r
- \r
- public boolean usable(Graph graph, List<Resource> resources) {\r
- if (resources.size() != 1) {\r
- return false;\r
- }\r
- Resource r = resources.iterator().next();\r
- IEntity t = EntityFactory.create(graph,r);\r
- if (t.isInstanceOf(ProcessResource.plant3Dresource.Equipment)) {\r
- equipmentResource = r;\r
- return true;\r
- }\r
- return false;\r
- }\r
- \r
- @Override\r
- public void init() {\r
- setText("Insert Nozzle");\r
- this.setImageDescriptor(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Nozzle.png"));\r
- }\r
- \r
- public boolean acceptDrop(StructuredResourceSelection s, Resource[] ids) {\r
- if(s.size() != 1)\r
- return false;\r
- if (ids == null)\r
- return false;\r
- if (ids.length != 1)\r
- return false;\r
- final Resource r = ids[0];\r
- final Resource selectedResource = s.iterator().next();\r
- GraphRequestWithResult<Boolean> query = new GraphRequestWithResult<Boolean>() {\r
- @Override\r
- public Boolean performWithResult(Graph g) throws Exception {\r
- IEntity t = EntityFactory.create(g,r);\r
- if (!t.isInheritedFrom(ProcessResource.plant3Dresource.Nozzle))\r
- return false;\r
- t = EntityFactory.create(g,selectedResource);\r
- if (t.isInstanceOf(ProcessResource.plant3Dresource.Equipment)) {\r
- return true;\r
- }\r
- return false;\r
- }\r
- };\r
- parent.getSession().syncRead(query);\r
- return query.getResult();\r
- }\r
- \r
- public void doDrop(StructuredResourceSelection s, Resource[] ids) {\r
- equipmentResource = s.iterator().next();\r
- parent.getSession().asyncWrite(new GraphRequestAdapter() {\r
- @Override\r
- public GraphRequestStatus perform(Graph g) throws Exception {\r
- createNozzle(g);\r
- return GraphRequestStatus.transactionComplete();\r
- }\r
- });\r
- }\r
-}\r