Project

General

Profile

1
package eu.dnetlib.repo.manager.client.getimpact;
2

    
3
import com.google.gwt.core.client.GWT;
4
import com.google.gwt.event.dom.client.ClickEvent;
5
import com.google.gwt.event.dom.client.ClickHandler;
6
import com.google.gwt.user.client.History;
7
import com.google.gwt.user.client.rpc.AsyncCallback;
8
import com.google.gwt.user.client.ui.FlowPanel;
9
import com.google.gwt.user.client.ui.HTML;
10
import com.google.gwt.user.client.ui.IsWidget;
11
import com.google.gwt.user.client.ui.Widget;
12
import eu.dnetlib.domain.data.Repository;
13
import eu.dnetlib.repo.manager.client.services.RepositoryService;
14
import eu.dnetlib.repo.manager.client.services.RepositoryServiceAsync;
15
import org.gwtbootstrap3.client.ui.*;
16
import org.gwtbootstrap3.client.ui.constants.AlertType;
17
import org.gwtbootstrap3.client.ui.constants.ButtonType;
18
import org.gwtbootstrap3.client.ui.constants.ModalBackdrop;
19
import org.gwtbootstrap3.client.ui.constants.Toggle;
20

    
21
/**
22
 * Created by stefania on 12/19/16.
23
 */
24
public class EnableMetricsWidget implements IsWidget {
25

    
26
    private FlowPanel enableMetricsPanel = new FlowPanel();
27
    private Alert errorAlert = new Alert();
28

    
29
    private FlowPanel modal = new FlowPanel();
30

    
31
    private RepositoryServiceAsync repositoryService = GWT.create(RepositoryService.class);
32

    
33
    public EnableMetricsWidget(final Repository repository) {
34

    
35
        errorAlert.setDismissable(false);
36
        errorAlert.setType(AlertType.DANGER);
37
        errorAlert.setVisible(false);
38
        enableMetricsPanel.add(errorAlert);
39

    
40
        HTML enableMetricsText = new HTML("<h4>You don't have metrics enabled for this repository yet. Would you like to " +
41
                "enable them?</h4><p>Below you can read about what the OpenAIRE Usage Statistics does, how it works and also " +
42
                "the workflow that must be followed for your participation.</p>");
43
        enableMetricsPanel.add(enableMetricsText);
44

    
45
        final Button enableMetricsButton = new Button();
46
        enableMetricsButton.setType(ButtonType.PRIMARY);
47
        enableMetricsButton.setText("Enable Metrics");
48
        enableMetricsButton.addClickHandler(new ClickHandler() {
49

    
50
            @Override
51
            public void onClick(ClickEvent event) {
52

    
53
                errorAlert.setVisible(false);
54
                enableMetrics(repository);
55
            }
56
        });
57
        enableMetricsPanel.add(enableMetricsButton);
58

    
59
        UsageStatisticsGuidelinesWidget usageStatisticsGuidelinesWidget = new UsageStatisticsGuidelinesWidget();
60
        enableMetricsPanel.add(usageStatisticsGuidelinesWidget.asWidget());
61
    }
62

    
63
    @Override
64
    public Widget asWidget() {
65
        return enableMetricsPanel;
66
    }
67

    
68
    private void enableMetrics(final Repository repository) {
69

    
70
        final Modal enableMetricsConfirmationPopup = new Modal();
71
        enableMetricsConfirmationPopup.setDataBackdrop(ModalBackdrop.STATIC);
72
//        enableMetricsConfirmationPopup.removeStyleName("modal");
73

    
74
        FlowPanel modalContent = new FlowPanel();
75

    
76
        HTML description = new HTML("<h2 class=\"uk-modal-title\">Confirmation</h2>\n" +
77
                "<p>Are you sure you want to enable metrics for this repository?</p>");
78
        modalContent.add(description);
79

    
80
        FlowPanel actionButtons = new FlowPanel();
81
        actionButtons.addStyleName("uk-text-right");
82
        modalContent.add(actionButtons);
83

    
84
        Button no = new Button("Cancel");
85
        no.setType(ButtonType.DEFAULT);
86
        no.addClickHandler(new ClickHandler() {
87
            @Override
88
            public void onClick(ClickEvent event) {
89
                enableMetricsConfirmationPopup.hide();
90
                enableMetricsConfirmationPopup.removeFromParent();
91
            }
92
        });
93
        actionButtons.add(no);
94

    
95
        Button yes = new Button("Yes, enable them");
96
        yes.setType(ButtonType.PRIMARY);
97
        yes.addClickHandler(new ClickHandler() {
98
            @Override
99
            public void onClick(ClickEvent event) {
100

    
101
                enableMetricsConfirmationPopup.hide();
102
                enableMetricsConfirmationPopup.removeFromParent();
103

    
104
                final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
105
                enableMetricsPanel.addStyleName("loading-big");
106
                enableMetricsPanel.add(loadingWheel);
107

    
108
                repositoryService.enableMetricsForRepository(repository, new AsyncCallback<Void>() {
109

    
110
                    @Override
111
                    public void onFailure(Throwable caught) {
112

    
113
                        enableMetricsPanel.removeStyleName("loading-big");
114
                        enableMetricsPanel.remove(loadingWheel);
115

    
116
                        errorAlert.setText("System error enabling metrics for this repository.");
117
                        errorAlert.setVisible(true);
118
                    }
119

    
120
                    @Override
121
                    public void onSuccess(Void result) {
122

    
123
                        enableMetricsPanel.removeStyleName("loading-big");
124
                        enableMetricsPanel.remove(loadingWheel);
125

    
126
                        History.newItem("getImpact/instructions/" + repository.getId());
127
                    }
128
                });
129
            }
130
        });
131
        actionButtons.add(yes);
132

    
133
        ModalBody modalBody = new ModalBody();
134
        modalBody.add(modalContent);
135
        enableMetricsConfirmationPopup.add(modalBody);
136
        enableMetricsConfirmationPopup.getElement().getChild(0).getChild(0).getChild(0).removeFromParent();
137

    
138
        enableMetricsConfirmationPopup.show();
139
    }
140
}
(1-1/6)