1 /*******************************************************************************
\r
2 * Copyright (c) 2010 Association for Decentralized Information Management in
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.sysdyn.ui.properties.widgets;
\r
14 import java.util.HashMap;
\r
16 import org.eclipse.jface.viewers.CellEditor;
\r
17 import org.eclipse.jface.viewers.ComboBoxCellEditor;
\r
18 import org.eclipse.jface.viewers.EditingSupport;
\r
19 import org.eclipse.jface.viewers.TableViewer;
\r
20 import org.eclipse.jface.viewers.TextCellEditor;
\r
21 import org.eclipse.swt.SWT;
\r
22 import org.simantics.db.ReadGraph;
\r
23 import org.simantics.db.Resource;
\r
24 import org.simantics.db.common.request.ObjectsWithType;
\r
25 import org.simantics.db.exception.DatabaseException;
\r
26 import org.simantics.db.request.Read;
\r
27 import org.simantics.layer0.Layer0;
\r
28 import org.simantics.sysdyn.SysdynResource;
\r
29 import org.simantics.ui.SimanticsUI;
\r
31 public class ModuleOutputEditingSupport extends EditingSupport {
\r
32 private CellEditor editor;
\r
34 private HashMap<String, Resource> optionResources;
\r
35 private String[] options;
\r
36 private TableViewer tableViewer;
\r
38 public ModuleOutputEditingSupport(TableViewer viewer, int column) {
\r
40 this.tableViewer = (TableViewer)viewer;
\r
41 this.column = column;
\r
45 protected boolean canEdit(Object element) {
\r
46 switch (this.column) {
\r
47 case 0: return false;
\r
48 default: return true;
\r
54 protected CellEditor getCellEditor(Object element) {
\r
55 // Create the correct editor based on the column index
\r
58 editor = new TextCellEditor(this.tableViewer.getTable());
\r
60 ReferenceRow row = (ReferenceRow)element;
\r
61 final Resource module = row.getModule();
\r
62 final Resource outputVariable = row.getVariable();
\r
64 optionResources = new HashMap<String, Resource>();
\r
66 optionResources = SimanticsUI.getSession().syncRequest(new Read<HashMap<String, Resource>>() {
\r
69 public HashMap<String, Resource> perform(ReadGraph graph) throws DatabaseException {
\r
70 Layer0 l0 = Layer0.getInstance(graph);
\r
71 SysdynResource sr = SysdynResource.getInstance(graph);
\r
72 HashMap<String, Resource> result = new HashMap<String, Resource>();
\r
73 for(Resource dependency : graph.syncRequest(new ObjectsWithType(module, sr.IsTailOf, sr.Dependency))) {
\r
74 if(graph.getPossibleObject(dependency, sr.RefersTo) == null
\r
75 || !graph.hasStatement(graph.getPossibleObject(dependency, sr.RefersTo), l0.HasName)
\r
76 || graph.getPossibleObject(dependency, sr.RefersTo).equals(outputVariable)) {
\r
77 Resource input = graph.getSingleObject(dependency, sr.HasHead);
\r
78 result.put((String)graph.getRelatedValue(input, l0.HasName), dependency);
\r
84 } catch (DatabaseException e) {
\r
85 e.printStackTrace();
\r
88 options = optionResources.keySet().toArray(new String[optionResources.keySet().size() + 1]);
\r
89 options[optionResources.keySet().size()] = "";
\r
90 ComboBoxCellEditor ceditor = new ComboBoxCellEditor(this.tableViewer.getTable(), options, SWT.READ_ONLY);
\r
91 ceditor.setActivationStyle(1);
\r
102 protected Object getValue(Object element) {
\r
103 ReferenceRow referenceRow = (ReferenceRow) element;
\r
105 switch (this.column) {
\r
107 return referenceRow.getName();
\r
109 String refersToName = referenceRow.getValue();
\r
110 if (refersToName == null) return options.length - 1;
\r
111 for(int i = 0; i < options.length ; i++) {
\r
112 if(refersToName.equals(options[i])) return i;
\r
114 return options[options.length - 1];
\r
122 protected void setValue(Object element, Object value) {
\r
123 ReferenceRow referenceRow = (ReferenceRow) element;
\r
124 String valueString = String.valueOf(value);
\r
125 switch (this.column) {
\r
129 referenceRow.setRefersTo(optionResources.get(options[Integer.parseInt(valueString)]));
\r
135 getViewer().update(element, null);
\r