From 1f7c43035fdcb69e3b2b242f8908b8a3816a6e5c Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Sat, 15 Apr 2017 13:41:30 +0300 Subject: [PATCH] Content panel editor UI fix --- .../ui/data/editors/ContentPanelEditor.java | 105 ++++++++++-------- 1 file changed, 58 insertions(+), 47 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/editors/ContentPanelEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/editors/ContentPanelEditor.java index 091d124808..540bda2c1c 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/editors/ContentPanelEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/editors/ContentPanelEditor.java @@ -49,6 +49,7 @@ import org.jkiss.dbeaver.ui.data.IStreamValueManager; import org.jkiss.dbeaver.ui.data.IValueController; import org.jkiss.dbeaver.ui.data.registry.StreamValueManagerDescriptor; import org.jkiss.dbeaver.ui.data.registry.ValueManagerRegistry; +import org.jkiss.dbeaver.utils.RuntimeUtils; import java.lang.reflect.InvocationTargetException; import java.util.*; @@ -67,7 +68,7 @@ public class ContentPanelEditor extends BaseValueEditor { private Map streamManagers; private StreamValueManagerDescriptor curStreamManager; - private IStreamValueEditor streamEditor; + private IStreamValueEditor streamEditor; private Control editorControl; public ContentPanelEditor(IValueController controller) { @@ -152,52 +153,8 @@ public class ContentPanelEditor extends BaseValueEditor { } private void detectStreamManager(final DBDContent content) { - DBeaverUI.runInUI(new DBRRunnableWithProgress() { - @Override - public void run(DBRProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - monitor.beginTask("Detect appropriate editor", 1); - try { - streamManagers = ValueManagerRegistry.getInstance().getApplicableStreamManagers(monitor, valueController.getValueType(), content); - String savedManagerId = valueToManagerMap.get(makeValueId()); - if (savedManagerId != null) { - curStreamManager = findManager(savedManagerId); - } - if (curStreamManager == null) { - curStreamManager = findManager(IStreamValueManager.MatchType.EXCLUSIVE); - if (curStreamManager == null) - curStreamManager = findManager(IStreamValueManager.MatchType.PRIMARY); - if (curStreamManager == null) - curStreamManager = findManager(IStreamValueManager.MatchType.DEFAULT); - if (curStreamManager == null) - curStreamManager = findManager(IStreamValueManager.MatchType.APPLIES); - if (curStreamManager == null) { - throw new DBException("Can't find appropriate stream manager"); - } - } - } catch (Exception e) { - valueController.showMessage(e.getMessage(), DBPMessageType.ERROR); - } finally { - monitor.done(); - } - } - - private StreamValueManagerDescriptor findManager(IStreamValueManager.MatchType matchType) { - for (Map.Entry entry : streamManagers.entrySet()) { - if (entry.getValue() == matchType) { - return entry.getKey(); - } - } - return null; - } - private StreamValueManagerDescriptor findManager(String id) { - for (Map.Entry entry : streamManagers.entrySet()) { - if (entry.getKey().getId().equals(id)) { - return entry.getKey(); - } - } - return null; - } - }); + StreamManagerDetectJob detectJob = new StreamManagerDetectJob(content); + RuntimeUtils.runTask(detectJob, "Detect stream editor", 5000); } private void setStreamManager(StreamValueManagerDescriptor newManager) { @@ -329,4 +286,58 @@ public class ContentPanelEditor extends BaseValueEditor { } } + + private class StreamManagerDetectJob implements DBRRunnableWithProgress { + private final DBDContent content; + + StreamManagerDetectJob(DBDContent content) { + this.content = content; + } + + @Override + public void run(DBRProgressMonitor monitor) { + monitor.beginTask("Detect appropriate editor", 1); + try { + streamManagers = ValueManagerRegistry.getInstance().getApplicableStreamManagers(monitor, valueController.getValueType(), content); + String savedManagerId = valueToManagerMap.get(makeValueId()); + if (savedManagerId != null) { + curStreamManager = findManager(savedManagerId); + } + if (curStreamManager == null) { + curStreamManager = findManager(IStreamValueManager.MatchType.EXCLUSIVE); + if (curStreamManager == null) + curStreamManager = findManager(IStreamValueManager.MatchType.PRIMARY); + if (curStreamManager == null) + curStreamManager = findManager(IStreamValueManager.MatchType.DEFAULT); + if (curStreamManager == null) + curStreamManager = findManager(IStreamValueManager.MatchType.APPLIES); + if (curStreamManager == null) { + throw new DBException("Can't find appropriate stream manager"); + } + } + } catch (Exception e) { + valueController.showMessage(e.getMessage(), DBPMessageType.ERROR); + } finally { + monitor.done(); + } + } + + private StreamValueManagerDescriptor findManager(IStreamValueManager.MatchType matchType) { + for (Map.Entry entry : streamManagers.entrySet()) { + if (entry.getValue() == matchType) { + return entry.getKey(); + } + } + return null; + } + + private StreamValueManagerDescriptor findManager(String id) { + for (Map.Entry entry : streamManagers.entrySet()) { + if (entry.getKey().getId().equals(id)) { + return entry.getKey(); + } + } + return null; + } + } } -- GitLab