package fi.vtt.simantics.processeditor.handlers; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.handlers.HandlerUtil; import org.simantics.db.Graph; import org.simantics.db.GraphRequestAdapter; import org.simantics.db.GraphRequestStatus; import org.simantics.db.Resource; import org.simantics.layer0.stubs.Library; import org.simantics.layer0.utils.EntityFactory; import org.simantics.layer0.utils.IEntity; import org.simantics.layer0.utils.instantiation.InstanceFactory; import org.simantics.proconf.ui.ProConfUI; import org.simantics.proconf.ui.utils.ResourceAdaptionUtils; import fi.vtt.simantics.processeditor.ProcessResource; import fi.vtt.simantics.processeditor.stubs.Equipment; /** * Creates new equipment * * @author Marko Luukkainen * */ public class NewEquipmentHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { ISelection s = HandlerUtil.getCurrentSelectionChecked(event); IStructuredSelection ss = (IStructuredSelection) s; if (ss.size() != 1) return null; final Resource lib = ResourceAdaptionUtils.toSingleResource(ss); EquipmentDialog dialog = new EquipmentDialog(Display.getDefault().getActiveShell()); if (dialog.open() == EquipmentDialog.CANCEL) return null; final String name = dialog.getName(); if (name == null || name.length() == 0) return null; ProConfUI.getSession().asyncWrite(new GraphRequestAdapter() { @Override public GraphRequestStatus perform(Graph g) throws Exception { Equipment equipment = Equipment.createDefault(g); Library l = new Library(g, lib); l.addStatement(g.getBuiltins().ConsistsOf, equipment); // TODO : is this correct (instance & inherits) equipment.addStatement(ProcessResource.builtins.Inherits, ProcessResource.plant3Dresource.Equipment); Resource modelType = g.getResourceByURI("http://www.vtt.fi/Simantics/CSG/1.0/Types#CSGModel"); IEntity model = EntityFactory.create(g, InstanceFactory.instantiate(g, modelType)); equipment.addStatement(ProcessResource.plant3Dresource.HasGraphics, model); equipment.setName(name); return GraphRequestStatus.transactionComplete(); } }); return null; } private class EquipmentDialog extends Dialog { private String name; public EquipmentDialog(Shell shell) { super(shell); } @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); Label label = new Label(composite,SWT.NONE); label.setText("Name:"); Text text = new Text(composite,SWT.SINGLE|SWT.BORDER); text.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { name = ((Text)e.widget).getText(); } }); GridData data = new GridData(); data.grabExcessHorizontalSpace = true; data.horizontalAlignment = SWT.FILL; text.setLayoutData(data); return composite; } public String getName() { return name; } } }