Project

General

Profile

1
package eu.dnetlib.client;
2

    
3
import com.github.gwtbootstrap.client.ui.Alert;
4
import com.github.gwtbootstrap.client.ui.Form;
5
import com.github.gwtbootstrap.client.ui.SubmitButton;
6
import com.github.gwtbootstrap.client.ui.constants.AlertType;
7
import com.github.gwtbootstrap.client.ui.constants.AlternateSize;
8
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
9
import com.github.gwtbootstrap.client.ui.constants.FormType;
10
import com.google.gwt.core.client.GWT;
11
import com.google.gwt.event.dom.client.ClickEvent;
12
import com.google.gwt.event.dom.client.ClickHandler;
13
import com.google.gwt.user.client.rpc.AsyncCallback;
14
import com.google.gwt.user.client.ui.*;
15
import eu.dnetlib.client.widgets.FormFieldSet;
16
import eu.dnetlib.client.widgets.TextBox;
17
import eu.dnetlib.goldoa.domain.Publication;
18

    
19
/**
20
 * Created by stefania on 2/8/16.
21
 */
22
public class DOIAndRepositoryForm implements IsWidget {
23

    
24
    private FlowPanel doiAndRepositoryFormPanel = new FlowPanel();
25

    
26
    private Alert errorLabel = new Alert();
27

    
28
    private Label label = new Label();
29

    
30
    private Form doiAndRepositoryForm = new Form();
31

    
32
    private TextBox doiTextBox = new TextBox();
33
    private FormFieldSet doiFormFieldSet = new FormFieldSet("DOI", doiTextBox);
34
    private TextBox repositoryTextBox = new TextBox();
35
    private FormFieldSet repositoryFormFieldSet = new FormFieldSet("Repository", repositoryTextBox);
36

    
37
    private SubmitButton submitButton = new SubmitButton();
38

    
39
    private DOIAndRepositorySubmittedListener doiAndRepositorySubmittedListener;
40

    
41
    private DataServiceAsync dataService = GWT.create(DataService.class);
42

    
43
    public DOIAndRepositoryForm(final Publication publication) {
44

    
45
        doiAndRepositoryFormPanel.add(label);
46
        doiAndRepositoryFormPanel.add(errorLabel);
47

    
48
        errorLabel.addStyleName("alertLabel");
49
        errorLabel.setType(AlertType.ERROR);
50
        errorLabel.setVisible(false);
51
        errorLabel.setClose(false);
52

    
53
        doiAndRepositoryForm.setType(FormType.HORIZONTAL);
54
        doiAndRepositoryFormPanel.add(doiAndRepositoryForm);
55

    
56
        doiTextBox.setAlternateSize(AlternateSize.XXLARGE);
57
        if(publication!=null && publication.getDoi()!=null)
58
            doiTextBox.setValue(publication.getDoi());
59
        doiAndRepositoryForm.add(doiFormFieldSet);
60

    
61
        repositoryTextBox.setAlternateSize(AlternateSize.XXLARGE);
62
        if(publication!=null && publication.getRepository()!=null)
63
            repositoryTextBox.setValue(publication.getRepository());
64
        doiAndRepositoryForm.add(repositoryFormFieldSet);
65

    
66
        submitButton.setText("Submit");
67
        submitButton.setType(ButtonType.PRIMARY);
68
        submitButton.addClickHandler(new ClickHandler() {
69
            @Override
70
            public void onClick(ClickEvent clickEvent) {
71

    
72
                errorLabel.setVisible(false);
73

    
74
                if(publication!=null) {
75

    
76
                    publication.setDoi(doiTextBox.getValue().trim().equals("") ? null : doiTextBox.getValue().trim());
77
                    publication.setRepository(repositoryTextBox.getValue().trim().equals("") ? null : repositoryTextBox.getValue().trim());
78

    
79
                    final HTML loadingWheel = new HTML("<div class=\"loader\"></div><div class=\"whiteFilm\"></div>");
80
                    doiAndRepositoryFormPanel.addStyleName("loading-small");
81
                    doiAndRepositoryFormPanel.add(loadingWheel);
82

    
83
                    dataService.savePublication(publication, new AsyncCallback<Publication>() {
84

    
85
                        @Override
86
                        public void onFailure(Throwable caught) {
87

    
88
                            doiAndRepositoryFormPanel.remove(loadingWheel);
89
                            doiAndRepositoryFormPanel.removeStyleName("loading-small");
90

    
91
                            errorLabel.setText("System error updating publication information");
92
                            errorLabel.setVisible(true);
93
                        }
94

    
95
                        @Override
96
                        public void onSuccess(Publication result) {
97

    
98
                            doiAndRepositoryFormPanel.remove(loadingWheel);
99
                            doiAndRepositoryFormPanel.removeStyleName("loading-small");
100

    
101
                            if (doiAndRepositorySubmittedListener != null)
102
                                doiAndRepositorySubmittedListener.doiAndRepositorySubmitted();
103
                        }
104
                    });
105

    
106
                } else {
107
                    errorLabel.setText("System error retrieving publication");
108
                    errorLabel.setVisible(true);
109
                }
110
            }
111
        });
112
        doiAndRepositoryForm.add(new FormFieldSet(null, submitButton));
113
    }
114

    
115
    @Override
116
    public Widget asWidget() {
117
        return doiAndRepositoryFormPanel;
118
    }
119

    
120
    public interface DOIAndRepositorySubmittedListener {
121
        void doiAndRepositorySubmitted();
122
    }
123

    
124
    public void setDoiAndRepositorySubmittedListener(DOIAndRepositorySubmittedListener doiAndRepositorySubmittedListener) {
125
        this.doiAndRepositorySubmittedListener = doiAndRepositorySubmittedListener;
126
    }
127
}
(6-6/22)