Project

General

Profile

« Previous | Next » 

Revision f3077849

Added by Patrick Plitzner over 5 years ago

ref #7869 Run request for availabel ontologies in background task

View differences:

eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/GfBioTerminologyImportPresenter.java
44 44
import eu.etaxonomy.taxeditor.model.MessagingUtils;
45 45
import eu.etaxonomy.taxeditor.preference.Resources;
46 46
import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.TermParser;
47
import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.TerminologyParser;
47 48
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestSearch;
49
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestTerminologies;
48 50
import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.OntologyTermWrapper;
49 51
import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.TerminologyWrapper;
50 52

  
......
62 64
    private GfBioTerminologyImportComposite composite;
63 65
    private Collection<TerminologyWrapper> selectedOntologies = new ArrayList<>();
64 66
    private UISynchronize sync;
67
    private volatile Collection<TerminologyWrapper> availableOntologies;
65 68

  
66 69
    public GfBioTerminologyImportPresenter(GfBioTerminologyImportComposite composite, UISynchronize sync) {
67 70
        super();
68 71
        this.composite = composite;
69 72
        this.sync = sync;
73

  
74
        requestAvailableOntologies();
75

  
70 76
        composite.getBtnSearch().addSelectionListener(new SelectionAdapter() {
71 77
            @Override
72 78
            public void widgetSelected(SelectionEvent e) {
......
106 112
            }
107 113
        });
108 114

  
115

  
109 116
        composite.getBtnChooseOntology().addSelectionListener(new SelectionAdapter() {
110 117
            @Override
111 118
            public void widgetSelected(SelectionEvent e) {
112
                OntologySelectionDialog dialog = new OntologySelectionDialog(composite.getShell(), selectedOntologies);
119
                if(availableOntologies.isEmpty()
120
                        && MessagingUtils.confirmDialog("No Ontologies available", "There are no ontologies available. They have either not been loaded yet or the terminology service can not be reached.\nDo you want to retry loading the ontologies?")){
121
                    //re-check if ontologies have been loaded in the meantime
122
                    if(availableOntologies.isEmpty()){
123
                        requestAvailableOntologies();
124
                    }
125
                    else{
126
                        openOntologySelectionDialog(composite);
127
                    }
128
                }
129
                else{
130
                    openOntologySelectionDialog(composite);
131
                }
132
            }
133

  
134
            private void openOntologySelectionDialog(GfBioTerminologyImportComposite composite) {
135
                OntologySelectionDialog dialog = new OntologySelectionDialog(composite.getShell(), selectedOntologies, availableOntologies);
113 136
                if(dialog.open()==Window.OK){
114
                    selectedOntologies = dialog.getOntologies();
137
                    selectedOntologies = dialog.getSelectedOntologies();
115 138
                    composite.getTextOntologies().setText(selectedOntologies.stream()
116 139
                            .map(wrapper->wrapper.getAcronym())
117 140
                            .collect(Collectors.joining(", ")));
......
155 178
        });
156 179
    }
157 180

  
181
    private void requestAvailableOntologies() {
182
        Job requestOntologiesJob = new Job("Request available ontologies") {
183

  
184
            @Override
185
            protected IStatus run(IProgressMonitor monitor) {
186
                String response = new RequestTerminologies().request();
187
                availableOntologies = TerminologyParser.parse(response);
188
                return Status.OK_STATUS;
189
            }
190
        };
191
        requestOntologiesJob.schedule();
192
    }
193

  
158 194
    private OntologyTermWrapper getSelectedTerm(IStructuredSelection selection){
159 195
        Iterator iterator = selection.iterator();
160 196
        if(iterator.hasNext()){
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/OntologySelectionDialog.java
21 21
import org.eclipse.swt.widgets.Shell;
22 22
import org.eclipse.swt.widgets.Table;
23 23

  
24
import eu.etaxonomy.taxeditor.model.MessagingUtils;
25
import eu.etaxonomy.taxeditor.view.webimport.termimport.parser.TerminologyParser;
26
import eu.etaxonomy.taxeditor.view.webimport.termimport.requests.RequestTerminologies;
27 24
import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.TerminologyWrapper;
28 25

  
29 26
/**
......
41 38

  
42 39
    private Collection<TerminologyWrapper> initiallySelectedOntologies;
43 40

  
41
    private Collection<TerminologyWrapper> availableOntologies;
44 42

  
45
    protected OntologySelectionDialog(Shell parentShell, Collection<TerminologyWrapper> initiallySelectedOntologies) {
43

  
44
    protected OntologySelectionDialog(Shell parentShell, Collection<TerminologyWrapper> initiallySelectedOntologies, Collection<TerminologyWrapper> availableOntologies) {
46 45
        super(parentShell);
47 46
        this.initiallySelectedOntologies = initiallySelectedOntologies;
47
        this.availableOntologies = availableOntologies;
48 48
    }
49 49

  
50 50
    @Override
51 51
    protected Control createDialogArea(Composite parent) {
52 52
        Table table = new Table(parent, SWT.CHECK | SWT.MULTI);
53 53
        list = new CheckboxTableViewer(table);
54
        String response = new RequestTerminologies().request();
55
        if(response==null){
56
            MessagingUtils.informationDialog(GfBioTerminologyImportPresenter.NO_CONNECTION_TITLE,
57
                    GfBioTerminologyImportPresenter.NO_CONNECTION_MESSAGE);
58
        }
59
        else{
60
            Collection<TerminologyWrapper> terminologies = TerminologyParser.parse(response);
61
            list.setLabelProvider(new TerminologyLabelProvider());
62
            list.setContentProvider(new ArrayContentProvider());
63
            list.setInput(terminologies);
64
            if(initiallySelectedOntologies!=null){
65
                initiallySelectedOntologies.stream().forEach(wrapper->list.setChecked(wrapper, true));
66
            }
54
        list.setLabelProvider(new TerminologyLabelProvider());
55
        list.setContentProvider(new ArrayContentProvider());
56
        list.setInput(availableOntologies);
57
        if(initiallySelectedOntologies!=null){
58
            initiallySelectedOntologies.stream().forEach(wrapper->list.setChecked(wrapper, true));
67 59
        }
68 60
        return table;
69 61
    }
......
86 78
        return true;
87 79
    }
88 80

  
89
    public Collection<TerminologyWrapper> getOntologies(){
81
    public Collection<TerminologyWrapper> getSelectedOntologies(){
90 82
        return selectedOntologies;
91 83
    }
84

  
92 85
}

Also available in: Unified diff