Project

General

Profile

1
package eu.dnetlib.repo.manager.client.datasources.utils;
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.rpc.AsyncCallback;
7
import com.google.gwt.user.client.ui.FlowPanel;
8
import com.google.gwt.user.client.ui.HTML;
9
import com.google.gwt.user.client.ui.IsWidget;
10
import com.google.gwt.user.client.ui.Widget;
11
import eu.dnetlib.domain.data.RepositoryInterface;
12
import eu.dnetlib.repo.manager.client.services.RepositoryService;
13
import eu.dnetlib.repo.manager.client.services.RepositoryServiceAsync;
14
import org.gwtbootstrap3.client.ui.Alert;
15
import org.gwtbootstrap3.client.ui.Anchor;
16
import org.gwtbootstrap3.client.ui.constants.AlertType;
17

    
18
import java.util.ArrayList;
19
import java.util.HashMap;
20
import java.util.List;
21
import java.util.Map;
22

    
23
/**
24
 * Created by stefania on 12/23/15.
25
 */
26
public class RepositoryInterfacesFormWidget implements IsWidget {
27

    
28
    private boolean hasInvalid = false;
29

    
30
    private FlowPanel contentPanel = new FlowPanel();
31

    
32
    private FlowPanel repositoryInterfacesPanel = new FlowPanel();
33

    
34
    private Alert errorAlert = new Alert();
35
    private Alert successAlert = new Alert();
36

    
37
    private FlowPanel repositoryInterfacesListPanel = new FlowPanel();
38

    
39
    private List<InterfaceFields> interfaceFieldsList = new ArrayList<InterfaceFields>();
40

    
41
    private FlowPanel addNewInterfacePanel = new FlowPanel();
42
    private Anchor addNewInterfaceAnchor = new Anchor();
43

    
44
    private boolean hasSave;
45
    private Map<String, String> compatibilityClasses = new HashMap<String, String>();
46
    private String mode;
47
    private boolean isUpdate;
48

    
49
    private String repositoryId;
50

    
51
    private RepositoryServiceAsync repositoryService = GWT.create(RepositoryService.class);
52

    
53
    public RepositoryInterfacesFormWidget(final String mode, final boolean hasSave,
54
                                          final Map<String, String> compatibilityClasses, final boolean isUpdate) {
55

    
56
        this.hasSave = hasSave;
57
        this.compatibilityClasses.putAll(compatibilityClasses);
58
        this.mode = mode;
59
        this.isUpdate = isUpdate;
60

    
61
//        repositoryInterfacesPanel.addStyleName("row");
62
        contentPanel.addStyleName("uk-grid-margin uk-grid uk-grid-stack");
63
        repositoryInterfacesPanel.addStyleName("uk-width-1-1@m uk-first-column");
64

    
65
        successAlert.setType(AlertType.SUCCESS);
66
        successAlert.setDismissable(false);
67
        successAlert.setVisible(false);
68
        repositoryInterfacesPanel.add(successAlert);
69

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

    
75
        repositoryInterfacesListPanel.addStyleName("interfacesForm");
76
        repositoryInterfacesListPanel.addStyleName("uk-margin uk-grid-match uk-child-width-1-1 uk-child-width-1-2@m uk-grid-small uk-grid uk-scrollspy-inview uk-animation-fade");
77
        repositoryInterfacesPanel.add(repositoryInterfacesListPanel);
78

    
79
        final InterfaceFields interfaceFields = new InterfaceFields(hasSave, compatibilityClasses, mode, isUpdate);
80
        interfaceFieldsList.add(interfaceFields);
81
        repositoryInterfacesListPanel.add(interfaceFields.asWidget());
82

    
83
        InterfaceFields.DeleteInterfaceListener deleteInterfaceListener = new InterfaceFields.DeleteInterfaceListener() {
84
            @Override
85
            public void deleteInterface(boolean checkForLastOne) {
86
                deleteSelectedInterface(checkForLastOne, interfaceFields);
87
            }
88
        };
89
        interfaceFields.setDeleteInterfaceListener(deleteInterfaceListener);
90

    
91
//        addNewInterfacePanel.addStyleName("col-md-6");
92

    
93
        FlowPanel addNewInterfaceBox = new FlowPanel();
94
//        addNewInterfaceBox.addStyleName("ibox");
95
        addNewInterfaceBox.addStyleName("el-item uk-card uk-card-default uk-card-body uk-scrollspy-inview uk-animation-fade");
96
        addNewInterfacePanel.add(addNewInterfaceBox);
97

    
98
        FlowPanel addNewInterfaceBoxContent = new FlowPanel();
99
//        addNewInterfaceBoxContent.addStyleName("ibox-content interface-box new");
100
        addNewInterfaceBoxContent.addStyleName("interface-box new");
101
        addNewInterfaceBox.add(addNewInterfaceBoxContent);
102

    
103

    
104
        addNewInterfaceAnchor.setHTML("<i class=\"fa fa-plus-square-o\"></i><span class=\"info\">Add new Interface</span>");
105
        addNewInterfaceAnchor.addClickHandler(new ClickHandler() {
106
            @Override
107
            public void onClick(ClickEvent event) {
108

    
109
                final InterfaceFields interfaceFields = new InterfaceFields(hasSave, compatibilityClasses, mode, isUpdate);
110
                interfaceFields.setRepositoryId(repositoryId);
111
                interfaceFieldsList.add(interfaceFields);
112
                repositoryInterfacesListPanel.insert(interfaceFields.asWidget(),
113
                        repositoryInterfacesListPanel.getWidgetIndex(addNewInterfacePanel));
114

    
115
                InterfaceFields.DeleteInterfaceListener deleteInterfaceListener = new InterfaceFields.DeleteInterfaceListener() {
116
                    @Override
117
                    public void deleteInterface(boolean checkForLastOne) {
118
                        deleteSelectedInterface(checkForLastOne, interfaceFields);
119
                    }
120
                };
121
                interfaceFields.setDeleteInterfaceListener(deleteInterfaceListener);
122
            }
123
        });
124

    
125
        addNewInterfaceBoxContent.add(addNewInterfaceAnchor);
126

    
127
        repositoryInterfacesListPanel.add(addNewInterfacePanel);
128
    }
129

    
130
    @Override
131
    public Widget asWidget() {
132
        return repositoryInterfacesPanel;
133
    }
134

    
135
    public void setRepositoryId(String repositoryId) {
136
        this.repositoryId = repositoryId;
137
    }
138

    
139
    public void clear() {
140

    
141
        repositoryInterfacesListPanel.clear();
142
        interfaceFieldsList = new ArrayList<InterfaceFields>();
143

    
144
        final InterfaceFields interfaceFields = new InterfaceFields(hasSave, compatibilityClasses, mode, isUpdate);
145

    
146
        InterfaceFields.DeleteInterfaceListener deleteInterfaceListener = new InterfaceFields.DeleteInterfaceListener() {
147
            @Override
148
            public void deleteInterface(boolean checkForLastOne) {
149
                deleteSelectedInterface(checkForLastOne, interfaceFields);
150
            }
151
        };
152
        interfaceFields.setDeleteInterfaceListener(deleteInterfaceListener);
153

    
154
        interfaceFieldsList.add(interfaceFields);
155
        repositoryInterfacesListPanel.add(interfaceFields.asWidget());
156
        repositoryInterfacesListPanel.add(addNewInterfacePanel);
157
    }
158

    
159
    public void loadRepositoryInterfaces(List<RepositoryInterface> repositoryInterfaces, String repositoryId) {
160

    
161
        if(repositoryInterfaces!=null && !repositoryInterfaces.isEmpty()) {
162

    
163
            repositoryInterfacesListPanel.clear();
164
            interfaceFieldsList = new ArrayList<InterfaceFields>();
165

    
166
            for (RepositoryInterface repositoryInterface : repositoryInterfaces) {
167

    
168
                if (!repositoryInterface.getContentDescription().equals("file::hybrid")
169
                        && repositoryInterface.getAccessProtocol().equalsIgnoreCase("oai")) {
170

    
171
                    final InterfaceFields interfaceFields = new InterfaceFields(hasSave, compatibilityClasses, mode, isUpdate);
172

    
173
                    InterfaceFields.DeleteInterfaceListener deleteInterfaceListener = new InterfaceFields.DeleteInterfaceListener() {
174
                        @Override
175
                        public void deleteInterface(boolean checkForLastOne) {
176
                            deleteSelectedInterface(checkForLastOne, interfaceFields);
177
                        }
178
                    };
179
                    interfaceFields.setDeleteInterfaceListener(deleteInterfaceListener);
180

    
181
                    interfaceFields.loadRepositoryInterface(repositoryInterface, repositoryId);
182
                    interfaceFieldsList.add(interfaceFields);
183
                    repositoryInterfacesListPanel.add(interfaceFields.asWidget().asWidget());
184
                }
185
            }
186
            repositoryInterfacesListPanel.add(addNewInterfacePanel);
187

    
188
        } else {
189
            clear();
190
        }
191
    }
192

    
193
    public List<RepositoryInterface> getRepositoryInterfaces() {
194

    
195
        hasInvalid = false;
196

    
197
        errorAlert.setVisible(false);
198
        successAlert.setVisible(false);
199

    
200
        List<RepositoryInterface> repositoryInterfaces = new ArrayList<RepositoryInterface>();
201

    
202
        for(InterfaceFields interfaceFields : interfaceFieldsList) {
203

    
204
            RepositoryInterface repositoryInterface = interfaceFields.getRepositoryInterface(false);
205
            if(repositoryInterface!=null) {
206
                if(!interfaceFields.isValid())
207
                    hasInvalid = true;
208
                repositoryInterfaces.add(repositoryInterface);
209
            }
210
        }
211

    
212
        if(repositoryInterfaces.isEmpty()) {
213
            errorAlert.setText("At least one interface is required");
214
            errorAlert.setVisible(true);
215
        } else if(hasInvalid) {
216
            errorAlert.setText("There are invalid interfaces");
217
            errorAlert.setVisible(true);
218
        }
219

    
220
        return repositoryInterfaces;
221
    }
222

    
223
    public boolean hasInvalid() {
224
        return hasInvalid;
225
    }
226

    
227
    private void deleteSelectedInterface(boolean checkForLastOne, final InterfaceFields interfaceFields) {
228

    
229
        errorAlert.setVisible(false);
230
        successAlert.setVisible(false);
231

    
232
        if(checkForLastOne && interfaceFieldsList.size()==1) {
233
            errorAlert.setText("You cannot delete the last interface");
234
            errorAlert.setVisible(true);
235
        } else {
236

    
237
            if(isUpdate) {
238

    
239
                final HTML loadingWheel = new HTML("<div class=\"loader-big\" style=\"text-align: center; padding-top: 35%; " +
240
                        "color: rgb(47, 64, 80); font-weight: bold;\">Deleting interface</div><div class=\"whiteFilm\"></div>");
241
                repositoryInterfacesPanel.addStyleName("loading-big");
242
                repositoryInterfacesPanel.add(loadingWheel);
243

    
244
                RepositoryInterface repositoryInterface = interfaceFields.getRepositoryInterface(true);
245

    
246
                if(repositoryInterface!=null) {
247

    
248
                    repositoryService.deleteInterface(repositoryId, repositoryInterface, mode, new AsyncCallback<Void>() {
249

    
250
                        @Override
251
                        public void onFailure(Throwable caught) {
252

    
253
                            repositoryInterfacesPanel.removeStyleName("loading-big");
254
                            repositoryInterfacesPanel.remove(loadingWheel);
255

    
256
                            errorAlert.setText("System error deleting interface");
257
                            errorAlert.setVisible(true);
258
                        }
259

    
260
                        @Override
261
                        public void onSuccess(Void result) {
262

    
263
                            repositoryInterfacesPanel.removeStyleName("loading-big");
264
                            repositoryInterfacesPanel.remove(loadingWheel);
265

    
266
                            successAlert.setText("Interface deleted successfully");
267
                            successAlert.setVisible(true);
268

    
269
                            interfaceFieldsList.remove(interfaceFields);
270
                            repositoryInterfacesListPanel.remove(interfaceFields.asWidget());
271
                        }
272
                    });
273

    
274
                } else {
275

    
276
                    repositoryInterfacesPanel.removeStyleName("loading-big");
277
                    repositoryInterfacesPanel.remove(loadingWheel);
278

    
279
                    interfaceFieldsList.remove(interfaceFields);
280
                    repositoryInterfacesListPanel.remove(interfaceFields.asWidget());
281
                }
282

    
283
            } else {
284
                interfaceFieldsList.remove(interfaceFields);
285
                repositoryInterfacesListPanel.remove(interfaceFields.asWidget());
286
            }
287
        }
288
    }
289
}
(3-3/5)