--- /dev/null
+package org.simantics.document.linking.views;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.List;\r
+\r
+import org.eclipse.swt.custom.CCombo;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.NamedResource;\r
+\r
+public abstract class ModelToComboListener implements org.simantics.db.procedure.Listener<Collection<NamedResource>> {\r
+ \r
+ /**\r
+ * \r
+ */\r
+ private CCombo combo;\r
+ private boolean disposed = false;\r
+ \r
+ public ModelToComboListener(CCombo combo) {\r
+ this.combo = combo;\r
+ }\r
+ \r
+ public abstract Resource getCurrentModel();\r
+ \r
+ @Override\r
+ public void execute(final Collection<NamedResource> result) {\r
+ Display.getDefault().asyncExec(new Runnable() {\r
+ \r
+ @Override\r
+ public void run() {\r
+ if(combo.isDisposed()) {\r
+ disposed = true;\r
+ return;\r
+ }\r
+ \r
+ List<NamedResource> models = new ArrayList<NamedResource>();\r
+ models.addAll(result);\r
+ Collections.sort(models);\r
+ \r
+ int index = -1;\r
+ \r
+ //populate the combo\r
+ combo.removeAll();\r
+ index = -1;\r
+ int i = 0; \r
+ for (NamedResource model : models) {\r
+ combo.add(model.getName());\r
+ combo.setData(Integer.toString(i), model.getResource());\r
+ if (model.getResource().equals(getCurrentModel()))\r
+ index = i;\r
+ i++;\r
+ }\r
+ \r
+ // restore the selection\r
+ if (index >= 0) {\r
+ combo.select(index);\r
+ }\r
+ loaded();\r
+ }\r
+ });\r
+ \r
+ }\r
+ \r
+ public void loaded() {\r
+ \r
+ }\r
+ \r
+ @Override\r
+ public void exception(Throwable t) {\r
+ \r
+ }\r
+ \r
+ @Override\r
+ public boolean isDisposed() {\r
+ return disposed || combo.isDisposed();\r
+ }\r
+ \r
+ public void dispose() {\r
+ disposed = true;\r
+ }\r
+}
\ No newline at end of file