Project

General

Profile

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

    
3
import com.github.gwtbootstrap.client.ui.Alert;
4
import com.github.gwtbootstrap.client.ui.Form;
5
import com.github.gwtbootstrap.client.ui.constants.AlertType;
6
import com.github.gwtbootstrap.client.ui.constants.FormType;
7
import com.google.gwt.core.client.GWT;
8
import com.google.gwt.user.client.rpc.AsyncCallback;
9
import com.google.gwt.user.client.ui.FlowPanel;
10
import com.google.gwt.user.client.ui.Label;
11
import com.google.gwt.user.client.ui.Widget;
12
import eu.dnetlib.client.DataService;
13
import eu.dnetlib.client.DataServiceAsync;
14
import eu.dnetlib.client.fundingrequest.newrequest.EligibilityServiceAsync;
15
import eu.dnetlib.client.fundingrequest.newrequest.EligibilityDisplayWidget;
16
import eu.dnetlib.client.fundingrequest.newrequest.EligibilityService;
17
import eu.dnetlib.client.fundingrequest.newrequest.FundingWizardStepWidget;
18
import eu.dnetlib.client.widgets.AutoCompleteWidget;
19
import eu.dnetlib.client.widgets.FormFieldSet;
20
import eu.dnetlib.goldoa.domain.Eligibility;
21
import eu.dnetlib.goldoa.domain.Project;
22
import eu.dnetlib.goldoa.domain.Request;
23
import eu.dnetlib.goldoa.domain.Vocabulary;
24
import eu.dnetlib.shared.FundingWizardState;
25

    
26
/**
27
 * Created by stefania on 2/25/15.
28
 */
29
public class ProjectStepWidget extends FundingWizardStepWidget {
30

    
31
    private FlowPanel projectStepPanel = new FlowPanel();
32
    private Label projectInfoLabel = new Label();
33

    
34
    private Alert errorLabel = new Alert();
35

    
36
    private Form projectInfoForm = new Form();
37
    private AutoCompleteWidget projectAutoComplete = new AutoCompleteWidget("project", "Search...");
38

    
39
    private boolean isProjectSelected = false;
40
    private String projectId = null;
41
    private Project project = null;
42

    
43
    private Eligibility eligibility = null;
44

    
45
    private FlowPanel projectDisplayInfoPanel = new FlowPanel();
46
    private FlowPanel projectInfoPanel = new FlowPanel();
47
    private FlowPanel projectEligibilityPanel = new FlowPanel();
48

    
49
    private DataServiceAsync dataService = GWT.create(DataService.class);
50
    private EligibilityServiceAsync eligibilityService = GWT.create(EligibilityService.class);
51

    
52
    private FundingWizardStepCompleteListener fundingWizardStepCompleteListener;
53

    
54
    public ProjectStepWidget(String title) {
55

    
56
        super(title);
57

    
58
        projectInfoLabel.addStyleName("stepWidgetLabel");
59
        projectInfoLabel.setText("Project Info");
60

    
61
        errorLabel.addStyleName("alertLabel");
62
        errorLabel.addStyleName("width80");
63
        errorLabel.setType(AlertType.ERROR);
64
        errorLabel.setVisible(false);
65
        errorLabel.setClose(false);
66

    
67
        projectInfoForm.setType(FormType.HORIZONTAL);
68
        projectInfoForm.addStyleName("projectForm");
69
        projectInfoForm.add(new FormFieldSet("Project Acronym, Title or Grant Agreement No", projectAutoComplete.asWidget()));
70

    
71
        AutoCompleteWidget.AutoCompleteListener projectAutoCompleteListener = new AutoCompleteWidget.AutoCompleteListener() {
72
            @Override
73
            public void valueSelected(Vocabulary vocabulary) {
74

    
75
                errorLabel.setVisible(false);
76
                isProjectSelected = true;
77
                projectId = vocabulary.getId();
78

    
79
                projectStepPanel.add(projectDisplayInfoPanel);
80

    
81
                dataService.getProject(projectId, new AsyncCallback<Project>() {
82

    
83
                    @Override
84
                    public void onFailure(Throwable throwable) {
85
                        projectInfoPanel.clear();
86
                        ProjectDisplayInfo projectDisplayInfo = new ProjectDisplayInfo(null);
87
                        projectInfoPanel.add(projectDisplayInfo.asWidget());
88
                    }
89

    
90
                    @Override
91
                    public void onSuccess(Project project) {
92
                        ProjectStepWidget.this.project = project;
93
                        projectInfoPanel.clear();
94
                        ProjectDisplayInfo projectDisplayInfo = new ProjectDisplayInfo(project);
95
                        projectInfoPanel.add(projectDisplayInfo.asWidget());
96
                    }
97
                });
98

    
99
                Request request = new Request();
100
                request.setProject(projectId);
101
                eligibilityService.validate(request, new AsyncCallback<Eligibility>() {
102

    
103
                    @Override
104
                    public void onFailure(Throwable throwable) {
105
                        projectEligibilityPanel.clear();
106
                        EligibilityDisplayWidget eligibilityDisplayWidget = new EligibilityDisplayWidget(null);
107
                        projectEligibilityPanel.add(eligibilityDisplayWidget.asWidget());
108
                    }
109

    
110
                    @Override
111
                    public void onSuccess(Eligibility eligibility) {
112

    
113
                        ProjectStepWidget.this.eligibility = eligibility;
114

    
115
                        projectEligibilityPanel.clear();
116
                        EligibilityDisplayWidget eligibilityDisplayWidget = new EligibilityDisplayWidget(eligibility);
117
                        projectEligibilityPanel.add(eligibilityDisplayWidget.asWidget());
118
                    }
119
                });
120
            }
121
        };
122
        projectAutoComplete.setAutoCompleteListener(projectAutoCompleteListener);
123

    
124
        projectStepPanel.add(projectInfoLabel);
125
        projectStepPanel.add(errorLabel);
126
        projectStepPanel.add(projectInfoForm);
127

    
128
        projectDisplayInfoPanel.add(projectEligibilityPanel);
129
        projectDisplayInfoPanel.add(projectInfoPanel);
130
    }
131

    
132
    @Override
133
    public void updateState(FundingWizardState fundingWizardState) {
134

    
135
        Request request = fundingWizardState.getRequest();
136
        request.setProject(projectId);
137

    
138
        fundingWizardState.setProject(project);
139
    }
140

    
141
    @Override
142
    public void save() {
143

    
144
        errorLabel.setVisible(false);
145

    
146
        if(isProjectSelected) {
147
            if(eligibility!=null) {
148
                if(eligibility.getStatus().equals(Eligibility.Status.OK) || eligibility.getStatus().equals(Eligibility.Status.IFFY)) {
149
                    if(fundingWizardStepCompleteListener!=null)
150
                        fundingWizardStepCompleteListener.setStepComplete(true);
151
                } else {
152
                    errorLabel.setText("This project is not eligible for funding.");
153
                    errorLabel.setVisible(true);
154
                }
155
            } else {
156
                if(fundingWizardStepCompleteListener!=null)
157
                    fundingWizardStepCompleteListener.setStepComplete(true);
158
            }
159
        } else {
160
            errorLabel.setText("You need to select a project first.");
161
            errorLabel.setVisible(true);
162
        }
163
    }
164

    
165
    @Override
166
    public void loadContent(FundingWizardState fundingWizardState) {
167

    
168
    }
169

    
170
    @Override
171
    public void setFundingWizardStepCompleteListener(FundingWizardStepCompleteListener fundingWizardStepCompleteListener) {
172
        this.fundingWizardStepCompleteListener = fundingWizardStepCompleteListener;
173
    }
174

    
175
    @Override
176
    public Widget asWidget() {
177
        return projectStepPanel;
178
    }
179
}
(2-2/2)