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.gwt.client.help.HelpService;
14
import eu.dnetlib.gwt.client.help.HelpServiceAsync;
15
import eu.dnetlib.repo.manager.client.HelpCallback;
16
import eu.dnetlib.repo.manager.client.RepositoryManager;
17
import eu.dnetlib.repo.manager.client.RepositoryManagerWidget;
18
import eu.dnetlib.repo.manager.client.services.BrokerService;
19
import eu.dnetlib.repo.manager.client.services.BrokerServiceAsync;
20
import eu.dnetlib.repo.manager.shared.broker.SimpleSubscriptionDesc;
21
import org.gwtbootstrap3.client.ui.*;
22
import org.gwtbootstrap3.client.ui.constants.AlertType;
23
import org.gwtbootstrap3.client.ui.constants.ButtonType;
24
import org.gwtbootstrap3.client.ui.constants.ModalBackdrop;
25

    
26
import java.util.ArrayList;
27
import java.util.List;
28
import java.util.Map;
29

    
30
import static com.google.gwt.query.client.GQuery.$;
31

    
32
/**
33
 * Created by stefania on 3/16/17.
34
 */
35
public class BrowseSubscriptionsWidget implements RepositoryManagerWidget {
36

    
37
    private String parentToken = "";
38
    private String restToken = "";
39

    
40
    private FlowPanel browseSubscriptionsPanel = new FlowPanel();
41

    
42
    private FlowPanel browseSubscriptionsColPanel = new FlowPanel();
43
    private FlowPanel browseSubscriptionsInnerPanel = new FlowPanel();
44
    private FlowPanel browseSubscriptionsBox = new FlowPanel();
45
    private FlowPanel browseSubscriptionsBoxContent = new FlowPanel();
46

    
47
    private Alert errorAlert = new Alert();
48

    
49
    private FlowPanel helpPanel = new FlowPanel();
50

    
51
    private static HelpServiceAsync helpService = GWT.create(HelpService.class);
52
    private static BrokerServiceAsync brokerService = GWT.create(BrokerService.class);
53

    
54
    public BrowseSubscriptionsWidget() {
55

    
56
        browseSubscriptionsPanel.addStyleName("row");
57

    
58
        browseSubscriptionsColPanel.addStyleName("col-lg-12");
59
        browseSubscriptionsColPanel.add(browseSubscriptionsInnerPanel);
60

    
61
        browseSubscriptionsInnerPanel.addStyleName("wrapper wrapper-content animated fadeInUp");
62
        browseSubscriptionsInnerPanel.add(browseSubscriptionsBox);
63

    
64
        browseSubscriptionsBox.addStyleName("ibox");
65
        browseSubscriptionsBox.add(browseSubscriptionsBoxContent);
66

    
67
        browseSubscriptionsBoxContent.addStyleName("ibox-content bigContent");
68

    
69
        errorAlert.setType(AlertType.DANGER);
70
        errorAlert.setDismissable(false);
71
        errorAlert.setVisible(false);
72
        browseSubscriptionsBoxContent.add(errorAlert);
73

    
74
        browseSubscriptionsPanel.add(browseSubscriptionsColPanel);
75
    }
76

    
77
    @Override
78
    public void clear() {
79

    
80
        browseSubscriptionsBoxContent.clear();
81
        errorAlert.setVisible(false);
82
        browseSubscriptionsPanel.remove(helpPanel);
83
    }
84

    
85
    @Override
86
    public void reload() {
87

    
88
        Document.get().getElementById("page-wrapper").removeClassName("sidebar-content");
89
        browseSubscriptionsBoxContent.add(errorAlert);
90

    
91
        helpService.getHelpById(parentToken, new HelpCallback(browseSubscriptionsColPanel, helpPanel, browseSubscriptionsPanel));
92

    
93
        final HTML loadingWheel = new HTML("<div class=\"loader-big\" style=\"text-align: center; padding-top: 170px; " +
94
                "color: rgb(47, 64, 80); font-weight: bold;\">Retrieving subscriptions...</div>" +
95
                "<div class=\"whiteFilm\"></div>");
96
        browseSubscriptionsBoxContent.addStyleName("loading-big");
97
        browseSubscriptionsBoxContent.add(loadingWheel);
98

    
99
        brokerService.getSubscriptionsOfUser(RepositoryManager.currentUser.getEmail(),
100
                new AsyncCallback<Map<String, List<SimpleSubscriptionDesc>>>() {
101
            @Override
102
            public void onFailure(Throwable caught) {
103

    
104
                browseSubscriptionsBoxContent.removeStyleName("loading-big");
105
                browseSubscriptionsBoxContent.remove(loadingWheel);
106

    
107
                errorAlert.setText("System error retrieving subscriptions.");
108
                errorAlert.setVisible(true);
109
            }
110

    
111
            @Override
112
            public void onSuccess(Map<String, List<SimpleSubscriptionDesc>> subscriptionsList) {
113

    
114
                browseSubscriptionsBoxContent.removeStyleName("loading-big");
115
                browseSubscriptionsBoxContent.remove(loadingWheel);
116

    
117
                createSubscriptionsList(subscriptionsList, browseSubscriptionsBoxContent);
118
            }
119
        });
120
    }
121

    
122
    @Override
123
    public void setToken(String parentToken, String rest) {
124
        this.parentToken = parentToken;
125
        this.restToken = rest;
126
    }
127

    
128
    @Override
129
    public void afterAdditionToRootPanel() {
130

    
131
    }
132

    
133
    @Override
134
    public Widget asWidget() {
135
        return browseSubscriptionsPanel;
136
    }
137

    
138
    private void addWidgetHandlers() {
139

    
140
        $(".delete").click(new Function() {
141

    
142
            public boolean f(Event e) {
143

    
144
                errorAlert.setVisible(false);
145
//                successAlert.setVisible(false);
146
//                warningAlert.setVisible(false);
147

    
148
                String[] idParts = $(e).get(0).getId().split("#");
149
                List<String> subscriptionIds = new ArrayList<String>();
150
                subscriptionIds.add(idParts[0]);
151

    
152
                deleteSubscriptions(subscriptionIds);
153

    
154
                return true;
155
            }
156
        });
157
    }
158

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

    
161
        if(subscriptionsList.isEmpty()) {
162
            subscriptionsPanel.add(new HTML("No subscriptions found for your account"));
163
        } else {
164

    
165
            FlowPanel subscriptionsListPanel = new FlowPanel();
166
            subscriptionsListPanel.addStyleName("col-md-12 repos-list");
167
            subscriptionsPanel.add(subscriptionsListPanel);
168

    
169
            for(String key : subscriptionsList.keySet()) {
170

    
171
                FlowPanel subscriptionsForDatasourcePanel = new FlowPanel();
172
                subscriptionsForDatasourcePanel.addStyleName("marginBottom20");
173

    
174
                HTML datasourceTitle = new HTML();
175
                datasourceTitle.setHTML("<h1>" + key + "</h1>");
176
                subscriptionsForDatasourcePanel.add(datasourceTitle);
177

    
178
                String content = "<div class=\"row headers\">" +
179
                    "<div class=\"col-sm-8 header hidden-xs\"><label>Topic</label></div>" +
180
                    "<div class=\"col-sm-3 header hidden-xs\"><label># of notifications</label></div>" +
181
                    "<div class=\"col-sm-1 header hidden-xs\"><label>Actions</label></div>" +
182
                    "</div>";
183

    
184
                for(SimpleSubscriptionDesc simpleSubscriptionDesc : subscriptionsList.get(key)) {
185

    
186
                    content += "<div class=\"row repo\">" +
187
                        "<div class=\"col-sm-8\">" + simpleSubscriptionDesc.getTopic() + "</div>" +
188
                        "<div class=\"col-sm-3\">" + simpleSubscriptionDesc.getCount() + "</div>" +
189
                        "<div class=\"col-sm-1\"><a href=\"javascript:;\" id=\"" + simpleSubscriptionDesc.getId() + "#delete\" class=\"delete\">" +
190
                            "<i class=\"fa fa-remove\" aria-hidden=\"true\"></i></a></div>";
191

    
192
//                    if(datasource.getSecond()==null || datasource.getSecond().trim().isEmpty())
193
//                        content += "<img src=\"img/yourLogoHere.jpg\" alt=\"[Repo Logo]\" style=\"width: 45px; height: 45px\">";
194
//                    else
195
//                        content += "<img src=\"" + datasource.getSecond() + "\" alt=\"[Repo Logo]\" style=\"width: 45px; height: 45px\">";
196
//
197
//                    content += "</div>";
198
//
199
//                    if(datasource.getFirst()!=null) {
200
//                        content += "<div class=\"col-sm-7\"><a class=\"name\" href=\"#" + parentToken + "/" + datasource.getFirst().getValue() + "\">" +
201
//                                datasource.getFirst().getValue() + "</a></div>" +
202
//                                "<div class=\"col-sm-2 events\">" + datasource.getFirst().getSize() + "</div>" +
203
//                                "<div class=\"col-sm-1 actions\"><a href=\"#" + parentToken + "/" + datasource.getFirst().getValue() +
204
//                                "\"><i class=\"fa fa-eye\" aria-hidden=\"true\"></i></a></div>";
205
//                    }
206

    
207
                    content += "</div>";
208
                }
209

    
210
                HTML subscriptionsForDatasource = new HTML();
211
                subscriptionsForDatasource.setHTML(content);
212

    
213
                subscriptionsForDatasourcePanel.add(subscriptionsForDatasource);
214

    
215
                subscriptionsListPanel.add(subscriptionsForDatasourcePanel);
216
            }
217

    
218
        }
219

    
220
        addWidgetHandlers();
221
    }
222

    
223
    private void deleteSubscriptions(final List<String> subscriptionIds) {
224

    
225
        final Modal deleteSubscriptionsConfirmationPopup = new Modal();
226

    
227
        deleteSubscriptionsConfirmationPopup.addStyleName("confirmationModal");
228
        deleteSubscriptionsConfirmationPopup.setDataBackdrop(ModalBackdrop.STATIC);
229

    
230
        deleteSubscriptionsConfirmationPopup.setTitle("Delete Confirmation");
231

    
232
        HTML message = new HTML("Are you sure you want to delete the selected subscription(s)?");
233
        ModalBody modalBody = new ModalBody();
234
        modalBody.add(message);
235

    
236
        deleteSubscriptionsConfirmationPopup.add(modalBody);
237

    
238
        FlowPanel actionButtons = new FlowPanel();
239

    
240
        ModalFooter modalFooter = new ModalFooter();
241
        modalFooter.add(actionButtons);
242
        deleteSubscriptionsConfirmationPopup.add(modalFooter);
243

    
244
        Button no = new Button("Cancel");
245
        no.setType(ButtonType.DEFAULT);
246
        no.addClickHandler(new ClickHandler() {
247
            @Override
248
            public void onClick(ClickEvent event) {
249
                deleteSubscriptionsConfirmationPopup.hide();
250
                deleteSubscriptionsConfirmationPopup.removeFromParent();
251
            }
252
        });
253
        actionButtons.add(no);
254

    
255
        Button yes = new Button("Yes, delete them");
256
        yes.setType(ButtonType.PRIMARY);
257
        yes.addClickHandler(new ClickHandler() {
258
            @Override
259
            public void onClick(ClickEvent event) {
260

    
261
                deleteSubscriptionsConfirmationPopup.hide();
262
                deleteSubscriptionsConfirmationPopup.removeFromParent();
263

    
264
                final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
265
                browseSubscriptionsBoxContent.addStyleName("loading-big");
266
                browseSubscriptionsBoxContent.add(loadingWheel);
267

    
268
                brokerService.unsubscribe(subscriptionIds.get(0), new AsyncCallback<Void>() {
269

    
270
                    @Override
271
                    public void onFailure(Throwable caught) {
272

    
273
                        browseSubscriptionsBoxContent.removeStyleName("loading-big");
274
                        browseSubscriptionsBoxContent.remove(loadingWheel);
275

    
276
                        errorAlert.setText("System error deleting the specified subscription(s)");
277
                        errorAlert.setVisible(true);
278
                    }
279

    
280
                    @Override
281
                    public void onSuccess(Void result) {
282

    
283
                        browseSubscriptionsBoxContent.removeStyleName("loading-big");
284
                        browseSubscriptionsBoxContent.remove(loadingWheel);
285

    
286
                        clear();
287
                        reload();
288
                    }
289
                });
290
            }
291
        });
292
        actionButtons.add(yes);
293

    
294
        deleteSubscriptionsConfirmationPopup.show();
295
    }
296
}
(3-3/8)