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.dom.client.Document;
5
import com.google.gwt.user.client.History;
6
import com.google.gwt.user.client.rpc.AsyncCallback;
7
import com.google.gwt.user.client.ui.FlowPanel;
8
import com.google.gwt.user.client.ui.Frame;
9
import com.google.gwt.user.client.ui.HTML;
10
import eu.dnetlib.domain.data.PiwikInfo;
11
import eu.dnetlib.domain.data.Repository;
12
import eu.dnetlib.gwt.client.help.HelpService;
13
import eu.dnetlib.gwt.client.help.HelpServiceAsync;
14
import eu.dnetlib.repo.manager.client.AbstractRepositoryManagerWidget;
15
import eu.dnetlib.repo.manager.client.HelpCallback;
16
import eu.dnetlib.repo.manager.client.RepositoryManagerWidget;
17
import eu.dnetlib.repo.manager.client.services.RepositoryService;
18
import eu.dnetlib.repo.manager.client.services.RepositoryServiceAsync;
19
import eu.dnetlib.repo.manager.shared.MetricsInfo;
20
import eu.dnetlib.domain.data.PiwikInfo;
21
import org.gwtbootstrap3.client.ui.*;
22
import org.gwtbootstrap3.client.ui.constants.AlertType;
23

    
24
/**
25
 * Created by stefania on 12/15/16.
26
 */
27
public class MetricsForDatasourceWidget extends AbstractRepositoryManagerWidget implements RepositoryManagerWidget {
28

    
29
    private String parentToken = "";
30
    private String restToken = "";
31

    
32
    private FlowPanel metricsForDatasourceBoxContent = new FlowPanel();
33

    
34
    private Alert errorAlert = new Alert();
35

    
36
    private RepositoryServiceAsync repositoryService = GWT.create(RepositoryService.class);
37
    private static HelpServiceAsync helpService = GWT.create(HelpService.class);
38

    
39
    public MetricsForDatasourceWidget() {
40

    
41
        super();
42

    
43
        HTML title = new HTML("<h1 class=\"uk-article-title\">Metrics</h1>");
44
        title.addStyleName("uk-margin-medium-bottom");
45
        contentPanel.add(title);
46

    
47
        errorAlert.setType(AlertType.DANGER);
48
        errorAlert.setDismissable(false);
49
        errorAlert.setVisible(false);
50
        metricsForDatasourceBoxContent.add(errorAlert);
51

    
52
        contentPanel.add(metricsForDatasourceBoxContent);
53
    }
54

    
55
    @Override
56
    public void clear() {
57

    
58
        metricsForDatasourceBoxContent.clear();
59
        errorAlert.setVisible(false);
60
        gridPanel.remove(helpPanel);
61
    }
62

    
63
    @Override
64
    public void reload() {
65

    
66
        Document.get().getElementById("headerNoTransparent").removeClassName("tm-header-transparent");
67
        metricsForDatasourceBoxContent.add(errorAlert);
68

    
69
        helpService.getHelpById(parentToken + "_forDatasource", new HelpCallback(helpPanel, gridPanel));
70

    
71
        final HTML loadingWheel = new HTML("<div class=\"loader-big\" style=\"text-align: center; padding-top: 170px; " +
72
                "color: rgb(47, 64, 80); font-weight: bold;\">Retrieving repository information...</div>" +
73
                "<div class=\"whiteFilm\"></div>");
74
        metricsForDatasourceBoxContent.addStyleName("loading-big");
75
        metricsForDatasourceBoxContent.add(loadingWheel);
76

    
77
        repositoryService.getRepository(restToken, new AsyncCallback<Repository>() {
78

    
79
            @Override
80
            public void onFailure(Throwable caught) {
81

    
82
                metricsForDatasourceBoxContent.removeStyleName("loading-big");
83
                metricsForDatasourceBoxContent.remove(loadingWheel);
84

    
85
                errorAlert.setText("System error retrieving repository info");
86
                errorAlert.setVisible(true);
87
            }
88

    
89
            @Override
90
            public void onSuccess(final Repository repository) {
91

    
92
                if(repository.getPiwikInfo()==null) {
93

    
94
                    metricsForDatasourceBoxContent.removeStyleName("loading-big");
95
                    metricsForDatasourceBoxContent.remove(loadingWheel);
96

    
97
                    EnableMetricsWidget enableMetricsWidget = new EnableMetricsWidget(repository);
98
                    metricsForDatasourceBoxContent.add(enableMetricsWidget.asWidget());
99

    
100
                } else if(!repository.getPiwikInfo().isValidated()) {
101

    
102
                    History.replaceItem("getImpact/instructions/" + repository.getId());
103

    
104
                } else {
105

    
106
                    repositoryService.getMetricsInfoForRepository(repository.getId(), new AsyncCallback<MetricsInfo>() {
107

    
108
                        @Override
109
                        public void onFailure(Throwable throwable) {
110
                            metricsForDatasourceBoxContent.removeStyleName("loading-big");
111
                            metricsForDatasourceBoxContent.remove(loadingWheel);
112

    
113
                            errorAlert.setText("System error retrieving metrics info");
114
                            errorAlert.setVisible(true);
115
                        }
116

    
117
                        @Override
118
                        public void onSuccess(MetricsInfo metricsInfo) {
119

    
120
                            metricsForDatasourceBoxContent.removeStyleName("loading-big");
121
                            metricsForDatasourceBoxContent.remove(loadingWheel);
122

    
123
                            metricsForDatasourceBoxContent.add(createMetricsPanel(metricsInfo, repository.getPiwikInfo()));
124
                        }
125
                    });
126
                }
127
            }
128
        });
129
    }
130

    
131
    @Override
132
    public void setToken(String parentToken, String rest) {
133
        this.parentToken = parentToken;
134
        this.restToken = rest;
135
    }
136

    
137
    @Override
138
    public void afterAdditionToRootPanel() {
139

    
140
    }
141

    
142
    private FlowPanel createMetricsPanel(MetricsInfo metricsInfo, PiwikInfo piwikInfo) {
143

    
144
        FlowPanel metricsPanel = new FlowPanel();
145

    
146
        FlowPanel numbersPanel = new FlowPanel();
147
        numbersPanel.addStyleName("uk-margin-medium-bottom");
148

    
149
        String numbers = "<div class=\"uk-child-width-1-3@m uk-grid-small uk-grid-match uk-grid\" uk-grid=\"\">" +
150
                "<div class=\"metrics-openaire uk-first-column\">" +
151
                "<div class=\"uk-tile uk-tile-default uk-padding-small\">";
152

    
153
        if(metricsInfo.getMetricsNumbers()!=null && metricsInfo.getMetricsNumbers().getPageViews()!=null
154
                && !metricsInfo.getMetricsNumbers().getPageViews().trim().equals(""))
155
            numbers += "<div class=\"uk-text-center\">   " + metricsInfo.getMetricsNumbers().getPageViews() + "</div>";
156
        else
157
            numbers += "<div class=\"uk-text-center\">--</div>";
158

    
159
        numbers += "<div class=\"uk-text-center\"> views in OpenAIRE</div>" +
160
                "</div></div>" +
161
                "<div class=\"metrics-views\">" +
162
                "<div class=\"uk-tile uk-tile-muted uk-padding-small\">";
163

    
164
        if(metricsInfo.getMetricsNumbers()!=null && metricsInfo.getMetricsNumbers().getTotalViews()!=null
165
                && !metricsInfo.getMetricsNumbers().getTotalViews().trim().equals(""))
166
            numbers += "<div class=\"uk-text-center\">  " + metricsInfo.getMetricsNumbers().getTotalViews();
167
        else
168
            numbers += "<div class=\"uk-text-center\">  --";
169

    
170
        if(metricsInfo.getMetricsNumbers()!=null && metricsInfo.getMetricsNumbers().getTotalOpenAIREViews()!=null
171
                && !metricsInfo.getMetricsNumbers().getTotalOpenAIREViews().trim().equals(""))
172
            numbers += "<span>( " + metricsInfo.getMetricsNumbers().getTotalOpenAIREViews() + " from OpenAIRE )</span>";
173
        else
174
            numbers += "<span>( -- from OpenAIRE )</span>";
175

    
176
        numbers += "</div>" +
177
                "<div class=\"uk-text-center\">views in local repository</div>" +
178
                "</div></div>" +
179
                "<div class=\"metrics-downloads\">" +
180
                "<div class=\"uk-tile uk-tile-primary uk-padding-small\">";
181

    
182
        if(metricsInfo.getMetricsNumbers()!=null && metricsInfo.getMetricsNumbers().getTotalDownloads()!=null
183
                && !metricsInfo.getMetricsNumbers().getTotalDownloads().trim().equals(""))
184
            numbers += "<div class=\"uk-text-center\">  " + metricsInfo.getMetricsNumbers().getTotalDownloads();
185
        else
186
            numbers += "<div class=\"uk-text-center\">  --";
187

    
188
        if(metricsInfo.getMetricsNumbers()!=null && metricsInfo.getMetricsNumbers().getTotalOpenAIREDownloads()!=null
189
                && !metricsInfo.getMetricsNumbers().getTotalOpenAIREDownloads().trim().equals(""))
190
            numbers += "<span>( " + metricsInfo.getMetricsNumbers().getTotalOpenAIREDownloads() + " from OpenAIRE )</span>";
191
        else
192
            numbers += "<span>( -- from OpenAIRE )</span>";
193

    
194
        numbers += "</div>" +
195
                "<div class=\"uk-text-center\">downloads in local repository</div>" +
196
                "</div>" +
197
                "</div>" +
198
                "</div>";
199

    
200
        numbersPanel.add(new HTML(numbers));
201
        metricsPanel.add(numbersPanel);
202

    
203
        String datasourcesMonthlyViewsURL = metricsInfo.getDiagramsBaseURL() + "merge.php?com=query&data=[{\"query\":\"dtsrcRepoViews\"," +
204
                "\"dtsrcName\":\"" + piwikInfo.getOpenaireId() + "\",\"table\":\"\",\"fields\":[{\"fld\":\"sum\",\"agg\":\"sum\"," +
205
                "\"type\":\"chart\",\"yaxis\":1,\"c\":false}],\"xaxis\":{\"name\":\"month\",\"agg\":\"sum\"},\"group\":\"\",\"color\":\"\"," +
206
                "\"type\":\"chart\",\"size\":30,\"sort\":\"xaxis\",\"xStyle\":{\"r\":-30,\"s\":\"0\",\"l\":\"-\",\"ft\":\"-\",\"wt\":\"-\"}," +
207
                "\"title\":\"\",\"subtitle\":\"\",\"xaxistitle\":\"\",\"yaxisheaders\":[\"Monthly views\"],\"generalxaxis\":\"\"," +
208
                "\"theme\":0,\"in\":[]}]&info_types=[\"spline\"]&stacking=&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&" +
209
                "style=[{\"color\":\"rgba(0, 0, 0, 1)\",\"size\":\"18\"},{\"color\":\"rgba(0, 0, 0, 1)\",\"size\":\"18\"}," +
210
                "{\"color\":\"000000\",\"size\":\"\"},{\"color\":\"000000\",\"size\":\"\"}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124,\n" +
211
                "181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125,\n" +
212
                "1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233,\n" +
213
                "1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84,\n" +
214
                "1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91,\n" +
215
                "1)&colors[]=rgba(145, 232, 225,\n" +
216
                "1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false";
217

    
218
        Frame datasourcesMonthlyViews = new Frame(datasourcesMonthlyViewsURL);
219
        datasourcesMonthlyViews.setStyleName("statsFrame");
220

    
221
        FlowPanel monthlyViewsPanel = new FlowPanel();
222
        monthlyViewsPanel.addStyleName("uk-text-center uk-card uk-card-default uk-card-hover uk-scrollspy-inview " +
223
                "uk-animation-slide-top-medium uk-margin-bottom uk-padding");
224
        monthlyViewsPanel.add(datasourcesMonthlyViews);
225
        metricsPanel.add(monthlyViewsPanel);
226

    
227
        String datasourcesMonthlyDownloadsURL = metricsInfo.getDiagramsBaseURL() + "merge.php?com=query&data=[{\"query\":\"dtsrcRepoDownloads\"," +
228
                "\"dtsrcName\":\"" + piwikInfo.getOpenaireId() + "\",\"table\":\"\",\"fields\":[{\"fld\":\"sum\"," +
229
                "\"agg\":\"sum\",\"type\":\"chart\",\"yaxis\":1,\"c\":false}],\"xaxis\":{\"name\":\"month\",\"agg\":\"sum\"}," +
230
                "\"group\":\"\",\"color\":\"\",\"type\":\"chart\",\"size\":30,\"sort\":\"xaxis\",\"xStyle\":{\"r\":-30,\"s\":\"0\",\"l\":\"-\"," +
231
                "\"ft\":\"-\",\"wt\":\"-\"},\"title\":\"\",\"subtitle\":\"\",\"xaxistitle\":\"\",\"yaxisheaders\":[\"Monthly\n" +
232
                "downloads\"],\"generalxaxis\":\"\",\"theme\":0,\"in\":[]}]&info_types=[\"spline\"]&stacking=&steps=false&fontFamily=Courier&" +
233
                "spacing=[5,0,0,0]&style=[{\"color\":\"rgba(0, 0, 0, 1)\",\"size\":\"18\"},{\"color\":\"rgba(0, 0, 0,\n" +
234
                "1)\",\"size\":\"18\"},{\"color\":\"000000\",\"size\":\"\"},{\"color\":\"000000\",\"size\":\"\"}]&backgroundColor=" +
235
                "rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125,\n" +
236
                "1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233,\n" +
237
                "1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84,\n" +
238
                "1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91,\n" +
239
                "1)&colors[]=rgba(145, 232, 225,\n" +
240
                "1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false";
241

    
242
        Frame datasourcesMonthlyDownloads = new Frame(datasourcesMonthlyDownloadsURL);
243
        datasourcesMonthlyDownloads.setStyleName("statsFrame");
244

    
245
        FlowPanel monthlyDownloadsPanel = new FlowPanel();
246
        monthlyDownloadsPanel.addStyleName("uk-text-center uk-card uk-card-default uk-card-hover uk-scrollspy-inview " +
247
                "uk-animation-slide-top-medium uk-margin-bottom uk-padding");
248
        monthlyDownloadsPanel.add(datasourcesMonthlyDownloads);
249
        metricsPanel.add(monthlyDownloadsPanel);
250

    
251
        return metricsPanel;
252
    }
253
}
(5-5/6)