Project

General

Profile

1
package eu.dnetlib.repo.manager.client.widgets.wizard;
2

    
3
import com.google.gwt.core.client.GWT;
4
import com.google.gwt.dom.client.Document;
5
import com.google.gwt.user.client.Window;
6
import com.google.gwt.user.client.ui.FlowPanel;
7
import com.google.gwt.user.client.ui.HTML;
8
import eu.dnetlib.gwt.client.help.HelpService;
9
import eu.dnetlib.gwt.client.help.HelpServiceAsync;
10
import eu.dnetlib.repo.manager.client.AbstractRepositoryManagerWidget;
11
import eu.dnetlib.repo.manager.client.HelpCallback;
12
import eu.dnetlib.repo.manager.client.RepositoryManagerWidget;
13
import eu.dnetlib.repo.manager.shared.WizardState;
14
import org.gwtbootstrap3.client.ui.Alert;
15
import org.gwtbootstrap3.client.ui.constants.AlertType;
16

    
17
import java.util.ArrayList;
18
import java.util.List;
19

    
20
/**
21
 * Created by stefania on 12/17/15.
22
 */
23
public class WizardWidget extends AbstractRepositoryManagerWidget implements RepositoryManagerWidget {
24

    
25
    private String parentToken = "";
26
    private String token = "";
27

    
28
    private FlowPanel wizardPanel = new FlowPanel();
29

    
30
    protected Alert errorLabel = new Alert();
31

    
32
    private BreadcrumbWidget breadcrumbWidget;
33
    private FlowPanel wizardStepPanel = new FlowPanel();
34
    protected FlowPanel innerWizardContentPanel = new FlowPanel();
35
    private NavigationWidget navigationWidget = new NavigationWidget();
36

    
37
    private List<WizardStepWidget> wizardStepWidgets = new ArrayList<WizardStepWidget>();
38
    protected WizardState wizardState;
39

    
40
    protected int currentActiveStep = 0;
41
    protected int newActiveStep = 0;
42

    
43
    private static HelpServiceAsync helpService = GWT.create(HelpService.class);
44

    
45
    protected WizardWidget(final List<WizardStepWidget> wizardStepWidgets, WizardState wizardState, String title) {
46

    
47
        this.wizardState = wizardState;
48

    
49
        HTML titleHTML = new HTML("<h1 class=\"uk-article-title\">" + title + "</h1>");
50
        titleHTML.addStyleName("uk-margin-medium-bottom");
51
        contentPanel.add(titleHTML);
52

    
53
//        errorLabel.addStyleName("alertLabel");
54
        errorLabel.setType(AlertType.DANGER);
55
        errorLabel.setVisible(false);
56
        errorLabel.setDismissable(false);
57

    
58
        this.wizardStepWidgets.addAll(wizardStepWidgets);
59
        final List<String> wizardStepNames = new ArrayList<String>();
60
        for(WizardStepWidget wizardStepWidget : wizardStepWidgets) {
61
            wizardStepNames.add(wizardStepWidget.getTitle());
62
        }
63

    
64
        breadcrumbWidget = new BreadcrumbWidget(wizardStepNames);
65

    
66
        wizardPanel.addStyleName("wizard");
67
        wizardPanel.add(breadcrumbWidget.asWidget());
68
        wizardPanel.add(wizardStepPanel);
69
        wizardPanel.add(navigationWidget.asWidget());
70

    
71
        contentPanel.add(wizardPanel);
72

    
73
        wizardStepPanel.addStyleName("content");
74
        wizardStepPanel.add(errorLabel);
75
        wizardStepPanel.add(innerWizardContentPanel);
76

    
77
        NavigationWidget.NextButtonListener nextButtonListener =
78
                new NavigationWidget.NextButtonListener() {
79

    
80
            @Override
81
            public void nextClicked(int newActiveStep) {
82

    
83
                errorLabel.setVisible(false);
84

    
85
                WizardWidget.this.newActiveStep = newActiveStep;
86
                Window.scrollTo(0, 0);
87
                wizardStepWidgets.get(currentActiveStep).completeStep();
88
            }
89
        };
90
        navigationWidget.setNextButtonListener(nextButtonListener);
91

    
92
        NavigationWidget.BackButtonListener backButtonListener =
93
                new NavigationWidget.BackButtonListener() {
94
            @Override
95
            public void backClicked(int newActiveStep) {
96

    
97
                errorLabel.setVisible(false);
98

    
99
                setActiveStep(newActiveStep);
100
            }
101
        };
102
        navigationWidget.setBackButtonListener(backButtonListener);
103
    }
104

    
105
    protected void setActiveStep(int stepNumber) {
106

    
107
        loadAppropriateHelp(wizardStepWidgets.get(stepNumber).getId());
108

    
109
        currentActiveStep = stepNumber;
110

    
111
        breadcrumbWidget.setActiveStep(stepNumber);
112
        navigationWidget.setActiveStep(stepNumber);
113

    
114
        if(stepNumber==wizardStepWidgets.size()-1)
115
            navigationWidget.hideNavigationButtons();
116

    
117
        if(stepNumber==wizardStepWidgets.size()-2) {
118
            navigationWidget.setNextButtonText("Finish");
119
        } else {
120
            navigationWidget.setNextButtonText("Next");
121
        }
122

    
123
        innerWizardContentPanel.clear();
124
        Window.scrollTo(0, 0);
125

    
126
        wizardStepWidgets.get(stepNumber).clear();
127
        wizardStepWidgets.get(stepNumber).loadContent(wizardState);
128

    
129
        innerWizardContentPanel.add(wizardStepWidgets.get(currentActiveStep).asWidget());
130
    }
131

    
132
    private void loadAppropriateHelp(String stepId) {
133

    
134
        gridPanel.remove(helpPanel);
135
        helpService.getHelpById(parentToken + "_" + stepId, new HelpCallback(helpPanel, gridPanel));
136
    }
137

    
138
    @Override
139
    public void clear() {
140

    
141
    }
142

    
143
    @Override
144
    public void reload() {
145

    
146
        Document.get().getElementById("headerNoTransparent").removeClassName("tm-header-transparent");
147
        setActiveStep(currentActiveStep);
148
    }
149

    
150
    @Override
151
    public void setToken(String parentToken, String rest) {
152
        this.parentToken = parentToken;
153
        this.token = rest;
154
    }
155

    
156
    @Override
157
    public void afterAdditionToRootPanel() {
158

    
159
    }
160
}
(4-4/4)