1 package org.simantics.district.imports.ui;
3 import java.io.IOException;
4 import java.util.Collection;
7 import org.eclipse.jface.dialogs.IPageChangeProvider;
8 import org.eclipse.jface.dialogs.IPageChangedListener;
9 import org.eclipse.jface.dialogs.PageChangedEvent;
10 import org.eclipse.jface.layout.GridDataFactory;
11 import org.eclipse.jface.wizard.IWizardContainer;
12 import org.eclipse.jface.wizard.WizardPage;
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.events.SelectionEvent;
15 import org.eclipse.swt.events.SelectionListener;
16 import org.eclipse.swt.layout.GridLayout;
17 import org.eclipse.swt.widgets.Combo;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Label;
20 import org.simantics.Simantics;
21 import org.simantics.db.ReadGraph;
22 import org.simantics.db.Resource;
23 import org.simantics.db.common.request.IndexRoot;
24 import org.simantics.db.common.request.ReadRequest;
25 import org.simantics.db.exception.DatabaseException;
26 import org.simantics.district.imports.CSVImportModel;
27 import org.simantics.district.imports.DistrictImportUtils;
28 import org.simantics.district.network.ui.function.Functions;
30 public class ComponentMappingPage extends WizardPage {
32 private CSVImportModel model;
33 private Composite composite;
34 private Composite childComposite;
35 protected Map<String, Resource> componentMappings;
36 private Collection<String> distinctMappingIndexColumnValues;
38 public ComponentMappingPage(CSVImportModel model) {
39 super("Select component mappings");
41 setMessage("Select component mappings");
45 public void createControl(Composite parent) {
46 composite = new Composite(parent, SWT.NONE);
47 composite.setLayout(new GridLayout(1,false));
48 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite);
50 setControl(composite);
52 validatePageComplete();
54 IWizardContainer container = getContainer();
55 if (container instanceof IPageChangeProvider) {
56 ((IPageChangeProvider) container).addPageChangedListener(new IPageChangedListener() {
59 public void pageChanged(PageChangedEvent event) {
60 if (container.getCurrentPage().equals(ComponentMappingPage.this)) {
61 ComponentMappingPage.this.updateComponentMappings();
68 private void updateComponentMappings() {
70 int mappingIndex = model.getComponentMappingIndex();
71 distinctMappingIndexColumnValues = DistrictImportUtils.readDistinctValuesOfColumn(model.getSource(), model.getDelimiter(), mappingIndex);
74 Simantics.getSession().sync(new ReadRequest() {
77 public void run(ReadGraph graph) throws DatabaseException {
78 Resource indexRoot = graph.sync(new IndexRoot(model.getParentDiagram()));
79 if (model.isVertexImport())
80 componentMappings = Functions.getVertexMappings(graph, indexRoot);
82 componentMappings = Functions.getEdgeMappings(graph, indexRoot);
85 } catch (DatabaseException e) {
89 System.out.println(distinctMappingIndexColumnValues);
90 if (childComposite != null)
91 childComposite.dispose();
92 childComposite = new Composite(composite, SWT.NONE);
93 childComposite.setLayout(new GridLayout(1,false));
94 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(childComposite);
96 for (String value : distinctMappingIndexColumnValues) {
98 Composite newCompo = new Composite(childComposite, SWT.NONE);
99 newCompo.setLayout(new GridLayout(2,false));
100 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(newCompo);
102 Label t = new Label(newCompo, SWT.NONE);
105 Combo c = new Combo(newCompo, SWT.READ_ONLY);
106 c.setItems(componentMappings.keySet().toArray(new String[componentMappings.size()]));
107 c.addSelectionListener(new SelectionListener() {
110 public void widgetSelected(SelectionEvent e) {
111 model.setComponentMappings(value, componentMappings.get(c.getItem(c.getSelectionIndex())));
112 validatePageComplete();
116 public void widgetDefaultSelected(SelectionEvent e) {
121 composite.layout(true, true);
122 } catch (IOException e) {
127 private void validatePageComplete() {
128 Map<String, Resource> currentMappings = model.getComponentMappings();
129 if (currentMappings != null && distinctMappingIndexColumnValues != null && currentMappings.keySet().containsAll(distinctMappingIndexColumnValues))
130 setPageComplete(true);
132 setPageComplete(false);