]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/views/ModelToComboListener.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / views / ModelToComboListener.java
1 package org.simantics.document.linking.views;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.Collections;
6 import java.util.List;
7
8 import org.eclipse.swt.custom.CCombo;
9 import org.eclipse.swt.widgets.Display;
10 import org.simantics.db.Resource;
11 import org.simantics.db.common.NamedResource;
12
13 public abstract class ModelToComboListener implements org.simantics.db.procedure.Listener<Collection<NamedResource>> {
14         
15         /**
16          * 
17          */
18         private CCombo combo;
19         private boolean disposed = false;
20         
21         public ModelToComboListener(CCombo combo) {
22                 this.combo = combo;
23         }
24         
25         public abstract Resource getCurrentModel();
26         
27         @Override
28         public void execute(final Collection<NamedResource> result) {
29                 Display.getDefault().asyncExec(new Runnable() {
30                         
31                         @Override
32                         public void run() {
33                                 if(combo.isDisposed()) {
34                                         disposed = true;
35                                         return;
36                                 }
37                                 
38                                 List<NamedResource> models = new ArrayList<NamedResource>();
39                                 models.addAll(result);
40                                 Collections.sort(models);
41                                 
42                                 int index = -1;
43                                 
44                                 //populate the combo
45                                 combo.removeAll();
46                                 index = -1;
47                                 int i = 0; 
48                                 for (NamedResource model : models) {
49                                         combo.add(model.getName());
50                                         combo.setData(Integer.toString(i), model.getResource());
51                                         if (model.getResource().equals(getCurrentModel()))
52                                                 index = i;
53                                         i++;
54                                 }
55                                 
56                                 // restore the selection
57                                 if (index >= 0) {
58                                         combo.select(index);
59                                 }
60                                 loaded();
61                         }
62                 });
63                 
64         }
65         
66         public void loaded() {
67                 
68         }
69         
70         @Override
71         public void exception(Throwable t) {
72                 
73         }
74         
75         @Override
76         public boolean isDisposed() {
77                 return disposed || combo.isDisposed();
78         }
79         
80         public void dispose() {
81                 disposed = true;
82         }
83 }