+++ /dev/null
-/*******************************************************************************\r
- * Copyright (c) 2007- VTT Technical Research Centre of Finland.\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 org.simantics.proconf.g3d.shapeeditor.tools;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.List;\r
-\r
-import org.eclipse.jface.action.IMenuManager;\r
-import org.eclipse.jface.action.IToolBarManager;\r
-import org.eclipse.jface.dialogs.InputDialog;\r
-import org.eclipse.jface.dialogs.MessageDialog;\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.graphics.Rectangle;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.layout.FormAttachment;\r
-import org.eclipse.swt.layout.FormData;\r
-import org.eclipse.swt.layout.FormLayout;\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.Event;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Listener;\r
-import org.eclipse.swt.widgets.Sash;\r
-import org.eclipse.swt.widgets.Tree;\r
-import org.eclipse.ui.forms.IFormColors;\r
-import org.eclipse.ui.forms.events.ExpansionAdapter;\r
-import org.eclipse.ui.forms.events.ExpansionEvent;\r
-import org.eclipse.ui.forms.widgets.FormToolkit;\r
-import org.eclipse.ui.forms.widgets.ScrolledForm;\r
-import org.eclipse.ui.forms.widgets.Section;\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.equation.stubs.SecondOrderScalarPolynomial;\r
-import org.simantics.animation.stubs.Animation;\r
-import org.simantics.animation.stubs.Interpolator;\r
-import org.simantics.layer0.utils.EntityFactory;\r
-import org.simantics.layer0.utils.IEntity;\r
-import org.simantics.layer0.utils.ResourceDebugUtils;\r
-import org.simantics.proconf.browsing.GraphExplorer;\r
-import org.simantics.proconf.browsing.GraphExplorerInputFactory;\r
-import org.simantics.proconf.browsing.views.PropertyTable;\r
-import org.simantics.proconf.g3d.actions.ContextAction;\r
-import org.simantics.proconf.g3d.base.EditorContribution;\r
-import org.simantics.proconf.g3d.base.ThreeDimensionalEditorBase;\r
-import org.simantics.proconf.g3d.common.StructuredResourceSelection;\r
-import org.simantics.proconf.g3d.shapeeditor.ShapeEditorResources;\r
-import org.simantics.proconf.g3d.shapeeditor.common.ViewpointGenerator;\r
-import org.simantics.proconf.g3d.shapeeditor.views.ShapeEditorBase;\r
-import org.simantics.proconf.g3d.stubs.G3DModel;\r
-import org.simantics.proconf.g3d.tools.OESelectionListener;\r
-import org.simantics.proconf.g3d.tools.PropertyTree;\r
-import org.simantics.utils.ui.jface.BaseSelectionProvider;\r
-\r
-\r
-public class ParameterizationContribution implements EditorContribution {\r
-\r
- private ShapeEditorBase parent;\r
- private List<ContextAction> actions = new ArrayList<ContextAction>();\r
- private Composite sideComposite;\r
- private Sash sash;\r
- \r
- \r
- public ParameterizationContribution(ThreeDimensionalEditorBase parent) {\r
- this.parent = (ShapeEditorBase) parent;\r
- }\r
- \r
- @Override\r
- public void createControl(final Composite parentComposite) {\r
- FormLayout flayout = new FormLayout();\r
- parentComposite.setLayout(flayout);\r
- sash = new Sash(parentComposite,SWT.VERTICAL);\r
- \r
- sideComposite = new Composite(parentComposite,SWT.BORDER);\r
- FormData data = new FormData();\r
- data.top = new FormAttachment(0, 0);\r
- data.left = new FormAttachment(0, 0);\r
- data.right = new FormAttachment(sash, 0, SWT.LEFT);\r
- data.bottom = new FormAttachment(100,0);\r
- this.parent.getRenderingComposite().setLayoutData(data);\r
- sideComposite.setLayout(new FillLayout(SWT.VERTICAL));\r
- data = new FormData();\r
- data.top = new FormAttachment(0, 0);\r
- data.bottom = new FormAttachment(100,0);\r
- data.right = new FormAttachment(100,0);\r
- data.left = new FormAttachment(sash,0,SWT.RIGHT);\r
- sideComposite.setLayoutData(data);\r
- \r
- final int limit = 20, percent = 50;\r
- final FormData sashData = new FormData();\r
- sashData.left = new FormAttachment (percent, 0);\r
- sashData.top = new FormAttachment(0, 0);\r
- sashData.bottom = new FormAttachment(100,0);\r
- \r
- sash.setLayoutData (sashData);\r
- sash.addListener (SWT.Selection, new Listener () {\r
- public void handleEvent (Event e) {\r
- Rectangle sashRect = sash.getBounds ();\r
- Rectangle shellRect = parentComposite.getClientArea ();\r
- int right = shellRect.width - sashRect.width - limit;\r
- e.x = Math.max (Math.min (e.x, right), limit);\r
- if (e.x != sashRect.x) {\r
- sashData.left = new FormAttachment (0, e.x);\r
- parentComposite.layout ();\r
- }\r
- }\r
- });\r
- createForm(sideComposite);\r
- \r
- hierarchyExplorer.setInput(parent.getSessionContext(),GraphExplorerInputFactory.clone(hierarchyExplorer.getInput())\r
- .input(parent.getModelResource())\r
- .viewpoint(ViewpointGenerator.createObjectStructureViewpoint())\r
- .toInput());\r
-\r
-// parameterExplorer.setInput(parent.getSessionContext(),GraphExplorerInputFactory.clone(parameterExplorer.getInput())\r
-// .input(parent.getModelResource())\r
-// .viewpoint(ViewpointGenerator.createObjectSizingParameterViewpoint(ShapeEditorResources.g3dResource.HasSizingParameter))\r
-// .toInput());\r
- parameterTable.setSession(parent.getSession());\r
- parameterTable.setInput(new StructuredResourceSelection(parent.getModelResource()));\r
- \r
- }\r
- \r
- @Override\r
- public void disposeControl() {\r
- sideComposite.dispose();\r
- sash.dispose();\r
- \r
- }\r
- \r
- @Override\r
- public void dispose() {\r
-\r
- }\r
- \r
- @Override\r
- public void fillContextMenu(Graph graph, IMenuManager manager,\r
- StructuredResourceSelection selection) {\r
-\r
- }\r
- \r
- @Override\r
- public void fillLocalPullDown(IMenuManager manager) {\r
-\r
- }\r
- \r
- @Override\r
- public void fillLocalToolBar(IToolBarManager manager) {\r
-\r
- }\r
- \r
- @Override\r
- public Collection<ContextAction> getActions() {\r
- return actions;\r
- }\r
- \r
- @Override\r
- public String getName() {\r
- return "Parameterization";\r
- }\r
- \r
- @Override\r
- public void initialize(Graph graph) {\r
-\r
- }\r
- \r
- @Override\r
- public void run() {\r
- \r
- }\r
- \r
- private ScrolledForm form;\r
- private BaseSelectionProvider defaultInputSelectionProvider = new BaseSelectionProvider();\r
- protected FormToolkit toolkit;\r
- \r
-\r
- \r
- private void createForm(Composite parent) {\r
- toolkit = new FormToolkit(parent.getDisplay());\r
- form = getToolkit().createScrolledForm(parent);\r
-\r
- GridLayout layout = new GridLayout(2, false);\r
- form.getBody().setLayout(layout);\r
- form.getBody().setLayoutData(\r
- new GridData(GridData.FILL, GridData.FILL, true, true));\r
-\r
- // By default make this ViewPart use a default ISelectionProvider\r
- // that will offer the viewparts input resource as its selection.\r
- // The Resource is wrapped into a ResourceSelection object.\r
- // Any widgets created in createWidgets may override the default\r
- // selection provider.\r
- //getEditorSite().setSelectionProvider(defaultInputSelectionProvider);\r
-\r
- beforeCreateWidgets();\r
- createWidgets();\r
-\r
- //reload();\r
-\r
- form.setText(getFormText());\r
-\r
- // Finally Set the default selection which will have an effect only\r
- // if nothing in createWidgets has overridden the default selection\r
- // provider.\r
-// ISelection s = ISelectionUtils\r
-// .createSelection(new StructuredResourceSelection(\r
-// getInputResource()));\r
-// defaultInputSelectionProvider.setSelection(s);\r
- }\r
- \r
- \r
- public ScrolledForm getActiveForm() {\r
- return form;\r
- }\r
-\r
- protected Composite getBody() {\r
- return form.getBody();\r
- }\r
- \r
- public Composite newGridSection(int formColumns, int childColumns,\r
- boolean equalWidth, boolean grabVertical, String text,\r
- String description) {\r
- return newGridSection(getBody(), formColumns, childColumns, equalWidth,\r
- grabVertical, text, description);\r
- }\r
-\r
- public Composite newGridSection(Composite parent, int formColumns,\r
- int childColumns, boolean equalWidth, boolean grabVertical,\r
- String text, String description) {\r
- FormToolkit toolkit = getToolkit();\r
-\r
- Section section = toolkit.createSection(parent, Section.DESCRIPTION\r
- | Section.TWISTIE | Section.TITLE_BAR | Section.EXPANDED);\r
- section.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true,\r
- grabVertical, formColumns, 1));\r
- section.addExpansionListener(new ExpansionAdapter() {\r
- public void expansionStateChanged(ExpansionEvent e) {\r
- //System.out.println("SinglePageTypeEditor: expansionStateChanged " + e);\r
- //reflow(true);\r
- }\r
- });\r
- section.setText(text);\r
- section.setDescription(description);\r
- Composite sectionClient = toolkit.createComposite(section);\r
- sectionClient.setLayout(new GridLayout(childColumns, equalWidth));\r
- sectionClient.setLayoutData(new GridData());\r
- section.setClient(sectionClient);\r
- return sectionClient;\r
- }\r
- \r
- public FormToolkit getToolkit() {\r
- return toolkit;\r
- }\r
- \r
- public void reflow(boolean flushCache) {\r
- //System.out.println("FormTypeEditorBase.reflow(" + flushCache + ")");\r
- getActiveForm().reflow(flushCache);\r
- }\r
- \r
- protected void beforeCreateWidgets() {\r
- }\r
- \r
-// private TrackedText modelName = null;\r
- StructuredResourceSelection hierarchySelection = new StructuredResourceSelection();\r
- StructuredResourceSelection parameterSelection = new StructuredResourceSelection();\r
- //GraphExplorer parameterExplorer;\r
- PropertyTable parameterTable;\r
- GraphExplorer hierarchyExplorer;\r
- Button deleteParameterButton;\r
- Button clearButton;\r
- PropertyTree propertiesTree;\r
- Button generateButton;\r
- Button askButton;\r
- Button overrideButton;\r
- \r
- protected String getFormText() {\r
- return "Parameterization Editor";\r
- }\r
-\r
- protected void createWidgets() {\r
- createModelPropertiesGroup(newGridSection(2, 1, false, false, "Model Properties",\r
- "Basic properties for this viewpoint"));\r
- createParametrizationGroup(newGridSection(2, 1, false, false, "Parameterization",\r
- "Create parameterization for selected shapes"));\r
- //getSite().setSelectionProvider(this);\r
- }\r
- \r
- private void createParametrizationGroup(Composite parent) {\r
- toolkit.paintBordersFor(parent);\r
- toolkit.setBorderStyle(SWT.BORDER);\r
- \r
- overrideButton = toolkit.createButton(parent, "Overwrite previous parameterizations", SWT.CHECK);\r
- overrideButton.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(SelectionEvent e) {\r
- askButton.setEnabled(overrideButton.getSelection());\r
- \r
- }\r
- });\r
-\r
- \r
- askButton = toolkit.createButton(parent, "Ask before overwriting", SWT.CHECK);\r
- askButton.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(SelectionEvent e) {\r
- \r
- \r
- }\r
- });\r
- askButton.setEnabled(false);\r
- \r
- generateButton = toolkit.createButton(parent, "Generate linear parameterization", SWT.PUSH);\r
- generateButton.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(SelectionEvent e) {\r
- generateMappings();\r
- \r
- }\r
- });\r
- generateButton.setEnabled(false);\r
- \r
- \r
- }\r
- \r
- private void createModelPropertiesGroup(final Composite parent) {\r
- \r
- toolkit.paintBordersFor(parent);\r
- toolkit.setBorderStyle(SWT.BORDER);\r
- \r
- GridData gridData1 = new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1);\r
- \r
- \r
- // Parameters\r
- Label parameterLabel = toolkit.createLabel(parent, "Parameters:");\r
- parameterLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));\r
- parameterLabel.setLayoutData(gridData1);\r
- \r
-// parameterExplorer = new GraphExplorer(parent, SWT.SINGLE); //new OntologyExplorer("ParameterExplorer", this, getInput("ParameterExplorer", model.getId()));\r
-// parameterExplorer.getViewer().addPostSelectionChangedListener(new OESelectionListener() {\r
-//\r
-// protected void resourceSelectionUpdated(StructuredResourceSelection sel) {\r
-// parameterSelection = sel;\r
-// if (parameterSelection.size() == 0) {\r
-// deleteParameterButton.setEnabled(false);\r
-// clearButton.setEnabled(false);\r
-// } else {\r
-// deleteParameterButton.setEnabled(true);\r
-// clearButton.setEnabled(true);\r
-// }\r
-// updateGenerateButtonStatus();\r
-// }\r
-// \r
-// });\r
-// Tree oe = parameterExplorer.getTree();\r
-// toolkit.adapt(oe, true, true);\r
- \r
- parameterTable = new PropertyTable(parent,SWT.NONE);\r
- parameterTable.getViewer().addPostSelectionChangedListener(new OESelectionListener() {\r
-\r
- protected void resourceSelectionUpdated(StructuredResourceSelection sel) {\r
- parameterSelection = sel;\r
- if (parameterSelection.size() == 0) {\r
- deleteParameterButton.setEnabled(false);\r
- clearButton.setEnabled(false);\r
- } else {\r
- deleteParameterButton.setEnabled(true);\r
- clearButton.setEnabled(true);\r
- }\r
- updateGenerateButtonStatus();\r
- }\r
- \r
- });\r
- \r
- GridData gd3 = new GridData(GridData.FILL, GridData.FILL, true, true,1,1);\r
- gd3.heightHint = 50;\r
- //oe.setLayoutData(gd3);\r
-\r
- parameterTable.setLayoutData(gd3);\r
- \r
- // Buttons to add and remove parameters\r
- toolkit.createLabel(parent, "");\r
- Composite buttons = toolkit.createComposite(parent);\r
-\r
- buttons.setLayout(new FillLayout(SWT.HORIZONTAL));\r
- Button newParameterButton = toolkit.createButton(buttons, "New Parameter", SWT.PUSH);\r
- newParameterButton.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(SelectionEvent e) {\r
- InputDialog dialog = new InputDialog(ParameterizationContribution.this.parent.getRenderingComposite().getShell(),"New Parameter","Enter parameter's name","new parameter",null);\r
- if (dialog.open() == InputDialog.CANCEL)\r
- return;\r
- final String name = dialog.getValue();\r
- if (name.length() < 1) \r
- return; // TODO : show error\r
- \r
- ParameterizationContribution.this.parent.getSession().asyncWrite(new GraphRequestAdapter() {\r
- public GraphRequestStatus perform(Graph g) throws Exception {\r
- //fi.vtt.simantics.layer0.stubs.Double parameter = DoubleFactory.createDefault(g);\r
- //getModel(g).addStatement(ShapeEditorResources.g3dResource.HasSizingParameter, parameter);\r
- //parameter.setValue(new double[]{1.0});\r
- //parameter.setName(name);\r
- Resource parameter = ParameterizationContribution.this.parent.getModel(g).addRelatedScalarDouble(ShapeEditorResources.g3dResource.HasSizingParameter, 1.0).getResource();\r
- IEntity thing = EntityFactory.create(g,parameter);\r
- thing.setName(name);\r
- return GraphRequestStatus.transactionComplete();\r
- };\r
- });\r
- \r
- \r
- }\r
- });\r
- deleteParameterButton = toolkit.createButton(buttons, "Delete Parameter", SWT.PUSH);\r
- deleteParameterButton.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(SelectionEvent e) {\r
- //StructuredResourceSelection s = (StructuredResourceSelection)parameterScheme.getSelection();\r
- final StructuredResourceSelection s = parameterSelection;\r
- if (s.size() != 1)\r
- return;\r
- // we'll have to start write transaction, since we may have to change the graph\r
- ParameterizationContribution.this.parent.getSession().asyncWrite(new GraphRequestAdapter() {\r
- boolean proceed;\r
- IEntity selectedParameter;\r
- public GraphRequestStatus perform(Graph g) throws Exception {\r
- selectedParameter = EntityFactory.create(g,s.getSelectionList().get(0));\r
- \r
- Collection<IEntity> parameters = selectedParameter.getRelatedObjects(ShapeEditorResources.g3dResource.HasSizingParameter);\r
- if (parameters.size() > 0) {\r
- final MessageDialog dialog = new MessageDialog(ParameterizationContribution.this.parent.getRenderingComposite().getShell(),"Deleting a parameter",null,"Parameter is in use, doe you wan't to remove it?",MessageDialog.QUESTION,new String[]{"OK","Cancel"},1);\r
- parent.getDisplay().syncExec(new Runnable() {\r
- @Override\r
- public void run() {\r
- proceed = (dialog.open() != 1);\r
- }\r
- });\r
- if (proceed) {\r
- ParameterizationContribution.this.parent.getModel(g).removeStatement(ShapeEditorResources.g3dResource.HasSizingParameter,selectedParameter);\r
- }\r
- }\r
- \r
- return GraphRequestStatus.transactionComplete();\r
- }\r
- });\r
- }\r
- });\r
- deleteParameterButton.setEnabled(false);\r
- \r
- clearButton = toolkit.createButton(buttons, "Clear Parameter", SWT.PUSH);\r
- clearButton.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(SelectionEvent e) {\r
- final StructuredResourceSelection s = parameterSelection;\r
- if (s.size() != 1)\r
- return;\r
- ParameterizationContribution.this.parent.getSession().asyncWrite(new GraphRequestAdapter() {\r
- boolean proceed;\r
- @Override\r
- public GraphRequestStatus perform(Graph g) throws Exception {\r
- IEntity selectedParameter = EntityFactory.create(g,s.getSelectionList().get(0));\r
- Collection<IEntity> equations = selectedParameter.getRelatedObjects(ShapeEditorResources.equationResource.HasTarget);\r
- final String name = selectedParameter.getName();\r
- if (equations.size() > 0) {\r
- final MessageDialog dialog = new MessageDialog(ParameterizationContribution.this.parent.getRenderingComposite().getShell(),"Clearing a parameter",null,"Do you wan't to clear parameterization for "+ name + " ?\nIt has " + equations.size() + " mappings.",MessageDialog.QUESTION,new String[]{"OK","Cancel"},1); \r
- parent.getDisplay().syncExec(new Runnable() {\r
- public void run() {\r
- proceed = (dialog.open() != 1);\r
- };\r
- });\r
- if (proceed) {\r
- for (IEntity eq : equations) {\r
- eq.removeRelatedStatements(ShapeEditorResources.equationResource.HasSource);\r
- eq.removeRelatedStatements(ShapeEditorResources.equationResource.HasTarget);\r
- }\r
- return GraphRequestStatus.transactionComplete();\r
- }\r
- }\r
- return GraphRequestStatus.transactionCancel();\r
- }\r
- });\r
- \r
- \r
- }\r
- });\r
- clearButton.setEnabled(false);\r
- \r
- Label hierarchyLabel = toolkit.createLabel(parent, "Model Hierarchy:");\r
- hierarchyLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));\r
- hierarchyLabel.setLayoutData(gridData1);\r
- \r
- hierarchyExplorer = new GraphExplorer(parent,SWT.MULTI); //new OntologyExplorer("HierarchyExplorer", this, getInput("HierarchyExplorer", model.getId()));\r
- Tree oeh = hierarchyExplorer.getTree();//hierarchyExplorer.getControl(parent, 1, OntologyExplorer.OntologyTree, SWT.MULTI);\r
- toolkit.adapt(oeh, true, true);\r
- \r
- GridData gd4 = new GridData(GridData.FILL, GridData.FILL, true, true,1,1);\r
- gd4.heightHint = 200;\r
- oeh.setLayoutData(gd4);\r
- hierarchyExplorer.getViewer().addPostSelectionChangedListener(new OESelectionListener() {\r
-\r
- protected void resourceSelectionUpdated(StructuredResourceSelection sel) {\r
- hierarchySelection = sel;\r
- updatePropertiesTable();\r
- updateGenerateButtonStatus();\r
- }\r
- \r
- private void updatePropertiesTable() {\r
- propertiesTree.setProperties(hierarchySelection);\r
- \r
- }\r
- \r
- });\r
-\r
- Label propertiesLabel = toolkit.createLabel(parent, "Available properties:");\r
- propertiesLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));\r
- propertiesLabel.setLayoutData(gridData1); \r
- \r
- //propertiesTable = toolkit.createTable(parent, SWT.MULTI);\r
- Tree tree = toolkit.createTree(parent, SWT.MULTI);\r
- propertiesTree = new PropertyTree(tree,ParameterizationContribution.this.parent.getSession());\r
- //\r
- GridData gd5 = new GridData(GridData.FILL, GridData.FILL, true, true,1,1);\r
- gd5.heightHint = 200;\r
- //propertiesTable.setLayoutData(gd5);\r
- tree.setLayoutData(gd5);\r
- tree.addSelectionListener(new SelectionAdapter() {\r
-\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- updateGenerateButtonStatus();\r
- }\r
- \r
- });\r
-\r
- \r
- }\r
- \r
- private void updateGenerateButtonStatus() {\r
- if (parameterSelection.size() == 0) {\r
- generateButton.setEnabled(false);\r
- return;\r
- }\r
- if (hierarchySelection.size() == 0) {\r
- generateButton.setEnabled(false);\r
- return;\r
- }\r
- if (propertiesTree.getTree().getSelection().length == 0) {\r
- generateButton.setEnabled(false);\r
- return;\r
- }\r
- generateButton.setEnabled(true);\r
- }\r
- \r
- List<Resource> res;\r
- \r
- private void generateMappings() {\r
- final StructuredResourceSelection selectedShapes = hierarchySelection;\r
- final StructuredResourceSelection selectedParameter = parameterSelection;\r
- \r
- final boolean override = overrideButton.getSelection();\r
- final boolean ask = askButton.getSelection();\r
- //TreeItem[] selectedProperties = propertiesTree.getTree().getSelection();\r
- \r
- assert (selectedParameter.size() == 1);\r
- assert (selectedShapes.size() > 0);\r
- //assert(selectedProperties.length > 0);\r
- parent.getSession().asyncWrite(new GraphRequestAdapter() {\r
- @Override\r
- public GraphRequestStatus perform(Graph g) throws Exception {\r
- //fi.vtt.simantics.layer0.stubs.Double parameter = DoubleFactory.create(g,selectedParameter.getSelectionList().get(0));\r
- IEntity parameter = EntityFactory.create(g,selectedParameter.getSelectionList().get(0));\r
- Collection<IEntity> prop = parameter.getRelatedObjects(ShapeEditorResources.g3dResource.HasDefaultDoubleValue);\r
- //fi.vtt.simantics.layer0.stubs.Double defaultValue;\r
- double value = g.getScalarDouble(parameter.getResource());\r
- if (prop.size() == 0) {\r
- //defaultValue = DoubleFactory.createDefault(g);\r
- //parameter.addStatement(ShapeEditorResources.g3dResource.HasDefaultDoubleValue, defaultValue);\r
- parameter.addRelatedScalarDouble(ShapeEditorResources.g3dResource.HasDefaultDoubleValue, value);\r
- } else {\r
- //defaultValue = DoubleFactory.create(prop.iterator().next());\r
- g.setScalarDouble(prop.iterator().next().getResource(),value);\r
- }\r
- //defaultValue.setValue(parameter.getValue());\r
- final Graph graph = g;\r
- parent.getRenderingComposite().getDisplay().syncExec(new Runnable() {\r
- public void run() {\r
- res = propertiesTree.findLeafPropertyInstances(graph, selectedShapes.getSelectionList());\r
- };\r
- });\r
- \r
- \r
- double refValue = parameter.toProperty().getScalarDouble();\r
- ArrayList<Resource> mappedProperties = new ArrayList<Resource>();\r
- \r
- for (Resource r : res) {\r
- IEntity propertyThing = EntityFactory.create(g,r);\r
- assert (propertyThing.isInstanceOf(g.getBuiltins().Double));\r
- final String name = ResourceDebugUtils.getReadableNameForEntity(propertyThing);\r
- double rb = propertyThing.toProperty().getScalarDouble();\r
- System.out.println("Mapping to " + name + " " + rb);\r
- Collection<IEntity> equations = propertyThing.getRelatedObjects(ShapeEditorResources.equationResource.HasSource);\r
- if (equations.size() != 0) {\r
- mappedProperties.add(propertyThing.getResource());\r
- if (override) {\r
- System.out.println("Override");\r
- boolean over = true;\r
- if (ask) {\r
- IEntity t = propertyThing;\r
- while (t.isInstanceOf(g.getBuiltins().Property)) {\r
- Collection<IEntity> ts = t.getRelatedObjects(g.getBuiltins().PropertyOf);\r
- // FIXME : traverse all possible routes\r
- t = ts.iterator().next();\r
- }\r
- //StructuredResourceSelection selection = new StructuredResourceSelection(t.getResource());\r
- // TODO : do the selection!\r
- //hierarchyScheme.setSelection(selection);\r
- //fireSelectionChanged();\r
- MessageDialog dialog = new MessageDialog(ParameterizationContribution.this.parent.getRenderingComposite().getShell(),\r
- "Override mapping",\r
- null,\r
- "Override mapping to property of highlighted shape?",\r
- MessageDialog.QUESTION, new String[] {\r
- "Yes","No", "Cancel" }, 0);\r
- int i = dialog.open();\r
- if (i == 2)\r
- return GraphRequestStatus.transactionCancel();\r
- over = (i == 0);\r
- }\r
- if (over) {\r
- \r
- }\r
- } else {\r
- if (equations.size() != 1) {\r
- throw new RuntimeException("One property can have only one euquation as source function.");\r
- }\r
- IEntity equation = equations.iterator().next();\r
- if (!equation.isInstanceOf(ShapeEditorResources.equationResource.SecondOrderScalarPolynomial)) {\r
- throw new RuntimeException("Only Second order scalar polynomials are supported");\r
- }\r
- SecondOrderScalarPolynomial s = new SecondOrderScalarPolynomial(equation);\r
- s.setA(new double[]{0.0});\r
- s.setB(new double[]{rb / refValue});\r
- s.setC(new double[]{0.0});\r
- \r
- }\r
- } else { //override\r
- // create relation\r
- SecondOrderScalarPolynomial s = SecondOrderScalarPolynomial.createDefault(g);\r
- s.setA(new double[]{0.0});\r
- s.setB(new double[]{rb / refValue});\r
- s.setC(new double[]{0.0});\r
- \r
- // these relations have been instantiated, but addStatements won't delete them so we have to delete them manually.\r
- s.removeRelatedStatements(ShapeEditorResources.equationResource.HasTarget);\r
- s.removeRelatedStatements(ShapeEditorResources.equationResource.HasSource);\r
- \r
- parameter.addStatement(ShapeEditorResources.equationResource.HasTarget, s);\r
- \r
- s.addStatement(ShapeEditorResources.equationResource.HasTarget, propertyThing);\r
- mappedProperties.add(propertyThing.getResource());\r
- }\r
- \r
- }\r
- G3DModel model = parent.getModel(g);\r
- Collection<Animation> animations = model.getAnimation();\r
- for (Animation animation : animations) {\r
- Collection<Interpolator> interpolators = animation.getInterpolator();\r
- for (Interpolator interpolator : interpolators) {\r
- IEntity target = interpolator.getTarget();\r
- for (Resource property : mappedProperties) {\r
- if (target.getResource().equals(property)) {\r
- ShapeEditorResources.curveBuilder.createDefault(interpolator);\r
- }\r
- }\r
- }\r
- }\r
- return GraphRequestStatus.transactionComplete();\r
- }\r
- });\r
-\r
-\r
-\r
- }\r
- \r
-}\r