Project

General

Profile

1
package eu.dnetlib.client.fundingrequest.newrequest.publicationstep;
2

    
3
import com.github.gwtbootstrap.client.ui.Alert;
4
import com.github.gwtbootstrap.client.ui.Button;
5
import com.github.gwtbootstrap.client.ui.constants.AlertType;
6
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
7
import com.google.gwt.core.client.GWT;
8
import com.google.gwt.event.dom.client.ClickEvent;
9
import com.google.gwt.event.dom.client.ClickHandler;
10
import com.google.gwt.user.client.rpc.AsyncCallback;
11
import com.google.gwt.user.client.ui.FlowPanel;
12
import com.google.gwt.user.client.ui.HTML;
13
import com.google.gwt.user.client.ui.Label;
14
import com.google.gwt.user.client.ui.Widget;
15
import eu.dnetlib.client.DataService;
16
import eu.dnetlib.client.DataServiceAsync;
17
import eu.dnetlib.client.GoldOAConstants;
18
import eu.dnetlib.client.fundingrequest.newrequest.FundingWizardStepWidget;
19
import eu.dnetlib.goldoa.domain.*;
20
import eu.dnetlib.shared.FundingWizardState;
21

    
22
/**
23
 * Created by stefania on 2/25/15.
24
 */
25
public class PublicationStepWidget extends FundingWizardStepWidget {
26

    
27
    private FlowPanel publicationStepPanel = new FlowPanel();
28

    
29
    private Alert errorLabel = new Alert();
30

    
31
    private Button clearButton = new Button("Clear");
32

    
33
    private FlowPanel publicationPanel = new FlowPanel();
34
    private Label publicationInfoLabel = new Label();
35
    private PublicationInfoStep publicationInfoStep = new PublicationInfoStep();
36

    
37
    private FlowPanel journalPanel = new FlowPanel();
38
    private Label journalInfoLabel = new Label();
39
    private JournalInfoStep journalInfoStep = new JournalInfoStep();
40
    private PublisherInfoStep publisherInfoStep = new PublisherInfoStep();
41

    
42
    private String publicationType = "article";
43

    
44
    private HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
45

    
46
    private FundingWizardStepCompleteListener fundingWizardStepCompleteListener;
47

    
48
    private DataServiceAsync dataService = GWT.create(DataService.class);
49
    private GoldOAConstants goldOAConstants = GWT.create(GoldOAConstants.class);
50

    
51
    private Publication savedPublication = null;
52

    
53
    public PublicationStepWidget(String title) {
54

    
55
        super(title);
56

    
57
        publicationStepPanel.addStyleName("fundingWizardStep");
58

    
59
        errorLabel.addStyleName("alertLabel");
60
        errorLabel.setType(AlertType.ERROR);
61
        errorLabel.setVisible(false);
62
        errorLabel.setClose(false);
63

    
64
        clearButton.setType(ButtonType.WARNING);
65
        clearButton.addStyleName("clearButton");
66
        clearButton.addClickHandler(new ClickHandler() {
67

    
68
            @Override
69
            public void onClick(ClickEvent clickEvent) {
70
                publicationInfoStep.clear();
71
                journalInfoStep.clear();
72
                publisherInfoStep.clear();
73
            }
74
        });
75

    
76
        publicationInfoLabel.addStyleName("stepWidgetLabel");
77
        publicationInfoLabel.setText("Publication Info");
78
        publicationPanel.add(publicationInfoLabel);
79
        publicationPanel.add(publicationInfoStep);
80

    
81
        PublicationInfoStep.PublicationTypeListener publicationTypeListener = new PublicationInfoStep.PublicationTypeListener() {
82
            @Override
83
            public void publicationTypeChanged(String publicationType) {
84

    
85
                PublicationStepWidget.this.publicationType = publicationType;
86

    
87
                if(publicationType.equals("article")) {
88
                    journalPanel.clear();
89
                    journalPanel.add(journalInfoLabel);
90
                    journalPanel.add(journalInfoStep.asWidget());
91
                } else {
92
                    journalPanel.clear();
93
                    journalPanel.add(journalInfoLabel);
94
                    journalPanel.add(publisherInfoStep.asWidget());
95
                }
96
            }
97
        };
98
        publicationInfoStep.setPublicationTypeListener(publicationTypeListener);
99

    
100
        PublicationInfoStep.ResolveDOIListener resolveDOIListener = new PublicationInfoStep.ResolveDOIListener() {
101
            @Override
102
            public void resolveDOIClicked(String doi) {
103

    
104
                errorLabel.setVisible(false);
105

    
106
                publicationStepPanel.addStyleName("loading");
107
                publicationStepPanel.add(loadingWheel);
108

    
109
                dataService.resolveDOI(doi, new AsyncCallback<Publication>() {
110

    
111
                    @Override
112
                    public void onFailure(Throwable throwable) {
113

    
114
                        publicationStepPanel.removeStyleName("loading");
115
                        publicationStepPanel.remove(loadingWheel);
116

    
117
                        errorLabel.setText(goldOAConstants.failedToResolveDOIError());
118
                        errorLabel.setVisible(true);
119

    
120
                        publicationInfoStep.clear();
121
                        publisherInfoStep.clear();
122
                        journalInfoStep.clear();
123
                    }
124

    
125
                    @Override
126
                    public void onSuccess(Publication publication) {
127

    
128
                        publicationStepPanel.removeStyleName("loading");
129
                        publicationStepPanel.remove(loadingWheel);
130

    
131
                        publicationInfoStep.loadPublicationInfo(publication);
132
                        if(publication.getPublisher()!=null) {
133
                            publisherInfoStep.loadPublisherInfo(publication.getPublisher());
134
                        } else if(publication.getJournal()!=null) {
135
                            journalInfoStep.loadJournalInfo(publication.getJournal());
136
                        }
137
                    }
138
                });
139
            }
140
        };
141
        publicationInfoStep.setResolveDOIListener(resolveDOIListener);
142

    
143
        journalInfoLabel.addStyleName("stepWidgetLabel");
144
        journalInfoLabel.setText("Journal/Publisher Info");
145
        journalPanel.add(journalInfoLabel);
146
        journalPanel.add(journalInfoStep);
147

    
148
        publicationStepPanel.add(errorLabel);
149
        publicationStepPanel.add(clearButton);
150
        publicationStepPanel.add(publicationPanel);
151
        publicationStepPanel.add(journalPanel);
152
    }
153

    
154
    @Override
155
    public void updateState(FundingWizardState fundingWizardState) {
156

    
157
        Request request = fundingWizardState.getRequest();
158
        if(savedPublication!=null) {
159

    
160
            request.setPublication(savedPublication.getId());
161
            fundingWizardState.setPublication(savedPublication);
162

    
163
            if(savedPublication.getType().equals(Publication.Type.ARTICLE) && savedPublication.getJournal()!=null) {
164
                request.setJournal(savedPublication.getJournal().getId());
165
            }
166

    
167
            if(savedPublication.getType().equals(Publication.Type.MONOGRAPH) && savedPublication.getPublisher()!=null) {
168
                request.setPublisher(savedPublication.getPublisher().getId());
169
            }
170
        }
171
    }
172

    
173
    @Override
174
    public void save() {
175

    
176
        errorLabel.setVisible(false);
177

    
178
        if(publicationType.equals("article")) {
179

    
180
            Publication publication = publicationInfoStep.getPublication();
181
            Journal journal = journalInfoStep.getJournal();
182
            if(publication!=null && journal!=null) {
183
                publication.setJournal(journal);
184
                savePublication(publication);
185
            } else {
186
                errorLabel.setText(goldOAConstants.bothPublicationAndJournalRequired());
187
                errorLabel.setVisible(true);
188
            }
189

    
190
        } else {
191

    
192
            Publication publication = publicationInfoStep.getPublication();
193
            Publisher publisher = publisherInfoStep.getPublisher();
194
            if(publication!=null && publisher!=null) {
195
                publication.setPublisher(publisherInfoStep.getPublisher());
196
                savePublication(publication);
197
            } else {
198
                errorLabel.setText(goldOAConstants.bothPublicationAndPublisherRequired());
199
                errorLabel.setVisible(true);
200
            }
201
        }
202
    }
203

    
204
    @Override
205
    public void clear() {
206

    
207
    }
208

    
209
    @Override
210
    public void loadContent(FundingWizardState fundingWizardState) {
211

    
212
        if(fundingWizardState.getPublication()!=null) {
213

    
214
            Publication publication = fundingWizardState.getPublication();
215
            publicationInfoStep.loadPublicationInfo(publication);
216

    
217
            if(publication.getJournal()!=null)
218
                journalInfoStep.loadJournalInfo(publication.getJournal());
219

    
220
            if(publication.getPublisher()!=null)
221
                publisherInfoStep.loadPublisherInfo(publication.getPublisher());
222
        }
223

    
224
        if(fundingWizardState.getResearcher()!=null) {
225

    
226
            Person researcher = fundingWizardState.getResearcher();
227
            for(Affiliation affiliation : researcher.getAffiliations()) {
228
                if(affiliation.getOrganization()!=null && fundingWizardState.getRequest().getOrganization()!=null
229
                        && affiliation.getOrganization().getId().equals(fundingWizardState.getRequest().getOrganization())) {
230
                    publicationInfoStep.setDefaultOrganization(affiliation.getOrganization());
231
                }
232
            }
233
        }
234
    }
235

    
236
    @Override
237
    public void setFundingWizardStepCompleteListener(FundingWizardStepCompleteListener fundingWizardStepCompleteListener) {
238
        this.fundingWizardStepCompleteListener = fundingWizardStepCompleteListener;
239
    }
240

    
241
    @Override
242
    public void setFundingWizardJumpToStepListener(FundingWizardJumpToStepListener fundingWizardJumpToStepListener) {
243

    
244
    }
245

    
246
    @Override
247
    public Widget asWidget() {
248
        return publicationStepPanel;
249
    }
250

    
251
    private void savePublication(Publication publication) {
252

    
253
        publicationStepPanel.addStyleName("loading");
254
        publicationStepPanel.add(loadingWheel);
255

    
256
        dataService.savePublication(publication, new AsyncCallback<Publication>() {
257

    
258
            @Override
259
            public void onFailure(Throwable throwable) {
260

    
261
                publicationStepPanel.removeStyleName("loading");
262
                publicationStepPanel.remove(loadingWheel);
263

    
264
                if(publicationType.equals("article"))
265
                    errorLabel.setText(goldOAConstants.errorSavingPublicationAndJournal());
266
                else
267
                    errorLabel.setText(goldOAConstants.errorSavingPublicationAndPublisher());
268
                errorLabel.setVisible(true);
269
            }
270

    
271
            @Override
272
            public void onSuccess(Publication publication) {
273

    
274
                publicationStepPanel.removeStyleName("loading");
275
                publicationStepPanel.remove(loadingWheel);
276

    
277
                savedPublication = publication;
278

    
279
                if(fundingWizardStepCompleteListener!=null)
280
                    fundingWizardStepCompleteListener.setStepComplete(true);
281
            }
282
        });
283
    }
284
}
(4-4/5)