Project

General

Profile

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

    
3
import com.google.gwt.core.client.GWT;
4
import com.google.gwt.dom.client.Document;
5
import com.google.gwt.event.dom.client.ClickEvent;
6
import com.google.gwt.event.dom.client.ClickHandler;
7
import com.google.gwt.query.client.Function;
8
import com.google.gwt.user.client.Event;
9
import com.google.gwt.user.client.rpc.AsyncCallback;
10
import com.google.gwt.user.client.ui.FlowPanel;
11
import com.google.gwt.user.client.ui.HTML;
12
import com.google.gwt.user.client.ui.Widget;
13
import eu.dnetlib.domain.data.Repository;
14
import eu.dnetlib.gwt.client.help.HelpService;
15
import eu.dnetlib.gwt.client.help.HelpServiceAsync;
16
import eu.dnetlib.repo.manager.client.AbstractRepositoryManagerWidget;
17
import eu.dnetlib.repo.manager.client.HelpCallback;
18
import eu.dnetlib.repo.manager.client.RepositoryManager;
19
import eu.dnetlib.repo.manager.client.RepositoryManagerWidget;
20
import eu.dnetlib.repo.manager.client.services.BrokerService;
21
import eu.dnetlib.repo.manager.client.services.BrokerServiceAsync;
22
import eu.dnetlib.repo.manager.shared.broker.SimpleSubscriptionDesc;
23
import org.gwtbootstrap3.client.ui.*;
24
import org.gwtbootstrap3.client.ui.constants.AlertType;
25
import org.gwtbootstrap3.client.ui.constants.ButtonType;
26
import org.gwtbootstrap3.client.ui.constants.ModalBackdrop;
27

    
28
import java.util.ArrayList;
29
import java.util.List;
30
import java.util.Map;
31

    
32
import static com.google.gwt.query.client.GQuery.$;
33

    
34
/**
35
 * Created by stefania on 3/16/17.
36
 */
37
public class BrowseSubscriptionsWidget extends AbstractRepositoryManagerWidget implements RepositoryManagerWidget {
38

    
39
    private String parentToken = "";
40
    private String restToken = "";
41

    
42
    private FlowPanel browseSubscriptionsBoxContent = new FlowPanel();
43

    
44
    private Alert errorAlert = new Alert();
45

    
46
    private static HelpServiceAsync helpService = GWT.create(HelpService.class);
47
    private static BrokerServiceAsync brokerService = GWT.create(BrokerService.class);
48

    
49
    public BrowseSubscriptionsWidget() {
50

    
51
        super();
52

    
53
        HTML title = new HTML("<h1 class=\"uk-article-title\">Enrich Your Content - Browse Subscriptions</h1>");
54
        title.addStyleName("uk-margin-medium-bottom");
55
        contentPanel.add(title);
56

    
57
        errorAlert.setType(AlertType.DANGER);
58
        errorAlert.setDismissable(false);
59
        errorAlert.setVisible(false);
60
        browseSubscriptionsBoxContent.add(errorAlert);
61

    
62
        contentPanel.add(browseSubscriptionsBoxContent);
63
    }
64

    
65
    @Override
66
    public void clear() {
67

    
68
        browseSubscriptionsBoxContent.clear();
69
        errorAlert.setVisible(false);
70
        gridPanel.remove(helpPanel);
71
    }
72

    
73
    @Override
74
    public void reload() {
75

    
76
        Document.get().getElementById("headerNoTransparent").removeClassName("tm-header-transparent");
77
        browseSubscriptionsBoxContent.add(errorAlert);
78

    
79
        helpService.getHelpById(parentToken, new HelpCallback(helpPanel, gridPanel));
80

    
81
        final HTML loadingWheel = new HTML("<div class=\"loader-big\" style=\"text-align: center; padding-top: 170px; " +
82
                "color: rgb(47, 64, 80); font-weight: bold;\">Retrieving subscriptions...</div>" +
83
                "<div class=\"whiteFilm\"></div>");
84
        browseSubscriptionsBoxContent.addStyleName("loading-big");
85
        browseSubscriptionsBoxContent.add(loadingWheel);
86

    
87
        brokerService.getSubscriptionsOfUser(RepositoryManager.currentUser.getEmail(),
88
                new AsyncCallback<Map<String, List<SimpleSubscriptionDesc>>>() {
89
            @Override
90
            public void onFailure(Throwable caught) {
91

    
92
                browseSubscriptionsBoxContent.removeStyleName("loading-big");
93
                browseSubscriptionsBoxContent.remove(loadingWheel);
94

    
95
                errorAlert.setText("System error retrieving subscriptions.");
96
                errorAlert.setVisible(true);
97
            }
98

    
99
            @Override
100
            public void onSuccess(Map<String, List<SimpleSubscriptionDesc>> subscriptionsList) {
101

    
102
                browseSubscriptionsBoxContent.removeStyleName("loading-big");
103
                browseSubscriptionsBoxContent.remove(loadingWheel);
104

    
105
                createSubscriptionsList(subscriptionsList, browseSubscriptionsBoxContent);
106
            }
107
        });
108
    }
109

    
110
    @Override
111
    public void setToken(String parentToken, String rest) {
112
        this.parentToken = parentToken;
113
        this.restToken = rest;
114
    }
115

    
116
    @Override
117
    public void afterAdditionToRootPanel() {
118

    
119
    }
120

    
121
    private void addWidgetHandlers() {
122

    
123
        $(".delete").click(new Function() {
124

    
125
            public boolean f(Event e) {
126

    
127
                errorAlert.setVisible(false);
128

    
129
                String[] idParts = $(e).get(0).getId().split("#");
130
                List<String> subscriptionIds = new ArrayList<String>();
131
                subscriptionIds.add(idParts[0]);
132

    
133
                deleteSubscriptions(subscriptionIds);
134

    
135
                return true;
136
            }
137
        });
138
    }
139

    
140
    private void createSubscriptionsList(Map<String, List<SimpleSubscriptionDesc>> subscriptionsList, FlowPanel subscriptionsPanel) {
141

    
142
        if(subscriptionsList.isEmpty()) {
143
            subscriptionsPanel.add(new HTML("No subscriptions found for your account"));
144
        } else {
145

    
146
            for(String key : subscriptionsList.keySet()) {
147

    
148
                HTML datasourceTitle = new HTML();
149
                datasourceTitle.setHTML("<h4 class=\"uk-h4 uk-text-primary uk-scrollspy-inview uk-animation-slide-top-medium\"" +
150
                        "uk-scrollspy-class=\"\"><span>" + key + "</span></h4>");
151
                subscriptionsPanel.add(datasourceTitle);
152

    
153
                FlowPanel colPanel = new FlowPanel();
154
                colPanel.addStyleName("uk-width-1-1@m uk-first-column uk-margin-medium-bottom");
155
                subscriptionsPanel.add(colPanel);
156

    
157
                FlowPanel divPanel = new FlowPanel();
158
                divPanel.addStyleName("uk-overflow-auto uk-scrollspy-inview uk-animation-slide-top-medium");
159
                colPanel.add(divPanel);
160

    
161
                String content = "<table class=\"uk-table uk-table-striped uk-table-middle\">" +
162
                        "<thead><tr><th>Topic</th><th class=\"uk-text-nowrap\"># of notifications</th><th class=\"uk-text-nowrap\">Actions</th></tr></thead>";
163

    
164
                content += "<tbody>";
165

    
166
                for(SimpleSubscriptionDesc simpleSubscriptionDesc : subscriptionsList.get(key)) {
167

    
168
                    content += "<tr class=\"el-item\">" +
169
                            "<td class=\"uk-table-shrink\">";
170

    
171
                    content += "<div class=\"el-title\">" + simpleSubscriptionDesc.getTopic() + "</div>";
172

    
173
                    content += "</td>" +
174
                            "<td class=\"uk-text-nowrap uk-table-shrink\">\n" +
175
                            "<div class=\"el-title\">" + simpleSubscriptionDesc.getCount() + "</div>" +
176
                            "</td>" +
177
                            "<td class=\"uk-text-nowrap uk-table-shrink\">" +
178
                            "<a href=\"javascript:;\" id=\"" + simpleSubscriptionDesc.getId() + "#delete\" class=\"el-link delete\">" +
179
                            "<i class=\"fa fa-remove\" aria-hidden=\"true\"></i></a>" +
180
                            "</td>" +
181
                            "</tr>";
182
                }
183

    
184
                content += "</tbody></table>";
185

    
186
                HTML reposListHTML = new HTML();
187
                reposListHTML.setHTML(content);
188

    
189
                divPanel.add(reposListHTML);
190
            }
191
        }
192

    
193
        addWidgetHandlers();
194
    }
195

    
196
    private void deleteSubscriptions(final List<String> subscriptionIds) {
197

    
198
        final Modal deleteSubscriptionsConfirmationPopup = new Modal();
199
        deleteSubscriptionsConfirmationPopup.setDataBackdrop(ModalBackdrop.STATIC);
200

    
201
        FlowPanel modalContent = new FlowPanel();
202

    
203
        HTML description = new HTML("<h2 class=\"uk-modal-title\">Delete Confirmation</h2>\n" +
204
                "<p>Are you sure you want to delete the selected subscription(s)?</p>");
205
        modalContent.add(description);
206

    
207
        FlowPanel actionButtons = new FlowPanel();
208
        actionButtons.addStyleName("uk-text-right");
209
        modalContent.add(actionButtons);
210

    
211
        Button no = new Button("Cancel");
212
        no.setType(ButtonType.DEFAULT);
213
        no.addClickHandler(new ClickHandler() {
214
            @Override
215
            public void onClick(ClickEvent event) {
216
                deleteSubscriptionsConfirmationPopup.hide();
217
                deleteSubscriptionsConfirmationPopup.removeFromParent();
218
            }
219
        });
220
        actionButtons.add(no);
221

    
222
        Button yes = new Button("Yes, delete them");
223
        yes.setType(ButtonType.PRIMARY);
224
        yes.addClickHandler(new ClickHandler() {
225
            @Override
226
            public void onClick(ClickEvent event) {
227

    
228
                deleteSubscriptionsConfirmationPopup.hide();
229
                deleteSubscriptionsConfirmationPopup.removeFromParent();
230

    
231
                final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
232
                browseSubscriptionsBoxContent.addStyleName("loading-big");
233
                browseSubscriptionsBoxContent.add(loadingWheel);
234

    
235
                brokerService.unsubscribe(subscriptionIds.get(0), new AsyncCallback<Void>() {
236

    
237
                    @Override
238
                    public void onFailure(Throwable caught) {
239

    
240
                        browseSubscriptionsBoxContent.removeStyleName("loading-big");
241
                        browseSubscriptionsBoxContent.remove(loadingWheel);
242

    
243
                        errorAlert.setText("System error deleting the specified subscription(s)");
244
                        errorAlert.setVisible(true);
245
                    }
246

    
247
                    @Override
248
                    public void onSuccess(Void result) {
249

    
250
                        browseSubscriptionsBoxContent.removeStyleName("loading-big");
251
                        browseSubscriptionsBoxContent.remove(loadingWheel);
252

    
253
                        clear();
254
                        reload();
255
                    }
256
                });
257
            }
258
        });
259
        actionButtons.add(yes);
260

    
261
        ModalBody modalBody = new ModalBody();
262
        modalBody.add(modalContent);
263
        deleteSubscriptionsConfirmationPopup.add(modalBody);
264
        deleteSubscriptionsConfirmationPopup.getElement().getChild(0).getChild(0).getChild(0).removeFromParent();
265

    
266
        deleteSubscriptionsConfirmationPopup.show();
267
    }
268
}
(3-3/8)