+++ /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.dialogs;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.HashSet;\r
-import java.util.Set;\r
-import java.util.TreeMap;\r
-import java.util.Map.Entry;\r
-\r
-import org.eclipse.jface.dialogs.Dialog;\r
-import org.eclipse.jface.dialogs.IDialogConstants;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.List;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.simantics.db.Graph;\r
-import org.simantics.db.GraphRequestAdapter;\r
-import org.simantics.db.GraphRequestStatus;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.Session;\r
-import org.simantics.layer0.utils.EntityFactory;\r
-import org.simantics.layer0.utils.IEntity;\r
-import org.simantics.layer0.utils.viewpoints.TraversalPath;\r
-import org.simantics.proconf.browsing.GraphExplorer;\r
-import org.simantics.proconf.g3d.stubs.G3DModel;\r
-import org.simantics.proconf.g3d.tools.OEPathSelectionListener;\r
-\r
-import fi.vtt.simantics.processeditor.ProcessResource;\r
-import fi.vtt.simantics.processeditor.common.PathUtils;\r
-import fi.vtt.simantics.processeditor.monitors.PathContainer;\r
-\r
-public class ConfigureMonitorDialog extends Dialog {\r
- Session session;\r
- List typeList;\r
- java.util.List<Resource> nodes;\r
-\r
- \r
- private Composite oeLabelComposite;\r
- //private Control viewpointControl;\r
- private Composite oeComposite;\r
- private GraphExplorer oe;\r
- \r
- private Button applyAnimationButton;\r
- \r
- Resource selectedType;\r
- Resource sampleInstance;\r
- java.util.List<Resource> sampleSource;\r
- java.util.List<java.util.List<Resource>> samplePath;\r
-\r
- \r
- public ConfigureMonitorDialog(Shell parentShell, Session session, java.util.List<Resource> nodes) {\r
- super(parentShell);\r
- this.nodes = nodes;\r
- this.session = session;\r
- int shellStyle = getShellStyle();\r
- setShellStyle(shellStyle | SWT.MAX | SWT.RESIZE);\r
- }\r
- \r
- @Override\r
- protected void configureShell(Shell newShell) { \r
- super.configureShell(newShell);\r
- newShell.setText("Configure monitors");\r
- \r
- }\r
- \r
- protected Control createDialogArea(Composite parent) {\r
- Composite composite = (Composite) super.createDialogArea(parent);\r
- GridLayout layout = new GridLayout(2,true);\r
- layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);\r
- layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);\r
- layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);\r
- layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);\r
- composite.setLayout(layout);\r
- \r
- Label label = new Label(composite, SWT.WRAP);\r
- label.setText("Types");\r
- GridData data = new GridData(GridData.CENTER,GridData.FILL,true,false,1,1);\r
- data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);\r
- label.setLayoutData(data);\r
- label.setFont(parent.getFont());\r
- \r
- oeLabelComposite = new Composite(composite,SWT.NONE);\r
- oeLabelComposite.setLayoutData(data);\r
- oeLabelComposite.setLayout(new FillLayout(SWT.HORIZONTAL));\r
- //label = new Label(composite, SWT.WRAP);\r
- label = new Label(oeLabelComposite, SWT.WRAP);\r
- label.setText("Monitor source");\r
-// label.setLayoutData(data);\r
- label.setFont(parent.getFont());\r
- \r
- typeList = new List(composite, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY | SWT.V_SCROLL);\r
- typeList.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));\r
- \r
- oeComposite = new Composite(composite,SWT.BORDER);\r
- oeComposite.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));\r
- layout = new GridLayout();\r
- layout.marginWidth = 0;\r
- layout.marginHeight = 0;\r
- oeComposite.setLayout(layout);\r
- session.asyncRead(new GraphRequestAdapter() {\r
- TreeMap<String, Resource> sorter;\r
- @Override\r
- public GraphRequestStatus perform(Graph g) throws Exception {\r
- Collection<Resource> types = getTypes(g,nodes);\r
- \r
- sorter = new TreeMap<String, Resource>();\r
- for (Resource type : types) {\r
- IEntity t = EntityFactory.create(g, type);\r
- String key = t.getName();\r
- if (key.equals("")) key = "ERROR (" + type.getResourceId() + ")";\r
- sorter.put(key, type);\r
- }\r
- \r
- \r
- return GraphRequestStatus.transactionComplete();\r
- }\r
- \r
- @Override\r
- public void requestCompleted(GraphRequestStatus status) {\r
- getShell().getDisplay().asyncExec(new Runnable() {\r
- @Override\r
- public void run() {\r
- for (Entry<String, Resource> e : sorter.entrySet()) { \r
- typeList.add(e.getKey());\r
- typeList.setData(e.getKey(), e.getValue());\r
- }\r
- }\r
- });\r
- }\r
- });\r
- \r
- typeList.addSelectionListener(new SelectionListener() {\r
- public void widgetSelected(SelectionEvent e) {\r
- session.asyncRead(new GraphRequestAdapter() {\r
- @Override\r
- public GraphRequestStatus perform(Graph g) throws Exception {\r
- String key = typeList.getItem(typeList.getSelectionIndex());\r
- selectType(EntityFactory.create(g,(Resource) typeList.getData(key)));\r
- return GraphRequestStatus.transactionComplete();\r
- }\r
- });\r
- \r
- }\r
- public void widgetDefaultSelected(SelectionEvent e) {\r
- }\r
- });\r
- \r
- \r
- \r
- Composite buttonComposite = new Composite(composite,SWT.NONE);\r
- buttonComposite.setLayoutData(new GridData(GridData.END,GridData.FILL,true,false,4,1));\r
- buttonComposite.setLayout(new FillLayout(SWT.HORIZONTAL));\r
- \r
- \r
- applyAnimationButton = new Button(buttonComposite,SWT.PUSH);\r
- applyAnimationButton.setText("Apply monitor configuration");\r
- applyAnimationButton.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- applyAnimation();\r
- }\r
- });\r
- return composite;\r
- }\r
- \r
- /**\r
- * Updates type selection:\r
- * Finds all GraphicsModels that are connected to instances of selected type with HasGraphics-relation\r
- * and lists them in modelList.\r
- *\r
- * @param resource\r
- */\r
- private void selectType(IEntity resource) {\r
- selectedType = resource.getResource();\r
- \r
- TreeMap<String, G3DModel> sorter = new TreeMap<String, G3DModel>();\r
- \r
- Collection<IEntity> models = resource.getRelatedObjects(ProcessResource.plant3Dresource.HasGraphics);\r
- for (IEntity model : models) {\r
- \r
- String key = model.getName();\r
- if (key.equals("")) key = "ERROR (" + model.getResource().getResourceId() + ")";\r
- sorter.put(key, new G3DModel(model));\r
- }\r
- \r
- if (oe != null) {\r
- oe.dispose(); \r
- }\r
- sampleInstance = null;\r
- sampleSource = null;\r
- for (Resource n : nodes) {\r
- IEntity t = EntityFactory.create(resource.getGraph(),n);\r
- if (t.isInstanceOf(resource.getResource())) {\r
- sampleInstance = n;\r
- break;\r
- }\r
- }\r
- if (sampleInstance != null) {\r
-// oe = new OntologyExplorer("Animation Source",this.getShell(), new OntologyEditorInput(sampleInstance.getId()));\r
-// if(viewpointControl != null && !viewpointControl.isDisposed()) {\r
-// viewpointControl.dispose();\r
-// }\r
-// viewpointControl = oe.getControl(oeLabelComposite, 1, OntologyExplorer.ViewpointSelector, SWT.NONE);\r
-// Control c = oe.getControl(oeComposite, 1, OntologyExplorer.OntologyTree, SWT.MULTI);\r
-// c.setLayoutData(new GridData(GridData.FILL_BOTH));\r
-// oe.init(null, ViewpointUtils.getModelledHandler(oe.getGraph(), Builtins.DefaultViewpointId), null, ViewLabelProviderDecorationSettings.DEFAULT, new MenuAboutToShowAction(), new NullAdditionAction(), false);\r
-// oe.setSelectionScheme(new SourceSelectionScheme(oe));\r
-// oeComposite.getParent().layout(true,true);\r
- oe = new GraphExplorer(oeComposite,SWT.MULTI);\r
- oe.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));\r
- oe.getViewer().addPostSelectionChangedListener(new OEPathSelectionListener(){\r
- @Override\r
- protected void pathSelectionUpdated(java.util.List<TraversalPath> paths) {\r
- if (paths.size() == 0) {\r
- //selectSource(null);\r
- } else {\r
- final java.util.List<TraversalPath> ps = paths;\r
- session.asyncRead(new GraphRequestAdapter() {\r
- @Override\r
- public GraphRequestStatus perform(Graph g) throws Exception {\r
- selectSource(g,ps);\r
- return GraphRequestStatus.transactionComplete();\r
- }\r
- });\r
- \r
- }\r
- \r
- }\r
- });\r
- }\r
- \r
- }\r
- \r
- \r
- \r
- private void selectSource(Graph graph, java.util.List<TraversalPath> resources) {\r
- if (resources == null) {\r
- sampleSource = null;\r
- }\r
- for (TraversalPath p : resources) {\r
- IEntity t = EntityFactory.create(graph, p.getResource());\r
- if (!t.isInstanceOf(ProcessResource.builtins.Double)) {\r
- sampleSource = null;\r
- return;\r
- }\r
- }\r
- sampleSource = new ArrayList<Resource>();\r
- for (TraversalPath p : resources)\r
- sampleSource.add(p.getResource());\r
- \r
- samplePath = new ArrayList<java.util.List<Resource>>();\r
- for (int i = 0; i < sampleSource.size(); i++) {\r
- TraversalPath tpath = resources.get(i);\r
- java.util.List<Resource> path = new ArrayList<Resource>();\r
- PathUtils.createPath(path, tpath,sampleInstance,sampleSource.get(i),oe);\r
- samplePath.add(path);\r
- } \r
- \r
- }\r
- \r
- private void applyAnimation() {\r
- \r
- if (sampleInstance == null || sampleSource == null || samplePath == null ) {\r
- throw new RuntimeException("Missing required selections");\r
- //return;\r
- }\r
-\r
- PathContainer.getInstance().clearPaths(selectedType);\r
- for (java.util.List<Resource> s : samplePath) {\r
- PathContainer.getInstance().addPath(selectedType, s);\r
- }\r
- }\r
- \r
-\r
- \r
-\r
-\r
- private Collection<Resource> getTypes(Graph g, java.util.List<Resource> instances) {\r
- Set<Resource> types = new HashSet<Resource>();\r
- for (Resource r : instances) {\r
- IEntity t = EntityFactory.create(g,r);\r
- Collection<IEntity> tTypes = t.getTypes();\r
- for (IEntity type : tTypes)\r
- types.add(type.getResource());\r
- }\r
- return types;\r
- }\r
- \r
- \r
-}\r