Project

General

Profile

1
package eu.dnetlib.repo.manager.client.datasources.utils;
2

    
3
import com.google.gwt.event.dom.client.ClickEvent;
4
import com.google.gwt.event.dom.client.ClickHandler;
5
import com.google.gwt.user.client.ui.FlowPanel;
6
import com.google.gwt.user.client.ui.IsWidget;
7
import com.google.gwt.user.client.ui.Widget;
8
import eu.dnetlib.domain.data.RepositoryInterface;
9
import org.gwtbootstrap3.client.ui.Alert;
10
import org.gwtbootstrap3.client.ui.Anchor;
11
import org.gwtbootstrap3.client.ui.constants.AlertType;
12

    
13
import java.util.ArrayList;
14
import java.util.HashMap;
15
import java.util.List;
16
import java.util.Map;
17

    
18
/**
19
 * Created by stefania on 12/23/15.
20
 */
21
public class RepositoryInterfacesFormWidget implements IsWidget {
22

    
23
    private boolean hasInvalid = false;
24

    
25
    private FlowPanel repositoryInterfacesPanel = new FlowPanel();
26

    
27
    private Alert errorAlert = new Alert();
28

    
29
    private FlowPanel repositoryInterfacesListPanel = new FlowPanel();
30

    
31
    private List<InterfaceFields> interfaceFieldsList = new ArrayList<InterfaceFields>();
32

    
33
    private FlowPanel addNewInterfacePanel = new FlowPanel();
34
    private Anchor addNewInterfaceAnchor = new Anchor();
35

    
36
    private boolean hasEdit;
37
    private Map<String, String> compatibilityClasses = new HashMap<String, String>();
38
    private String mode;
39

    
40
    public RepositoryInterfacesFormWidget(final String mode, final boolean hasEdit, final Map<String, String> compatibilityClasses) {
41

    
42
        this.hasEdit = hasEdit;
43
        this.compatibilityClasses.putAll(compatibilityClasses);
44
        this.mode = mode;
45

    
46
        repositoryInterfacesPanel.addStyleName("animated fadeInRight");
47
        repositoryInterfacesPanel.addStyleName("stepContent");
48

    
49
        errorAlert.setType(AlertType.DANGER);
50
        errorAlert.setDismissable(false);
51
        errorAlert.setVisible(false);
52
        repositoryInterfacesPanel.add(errorAlert);
53

    
54
        repositoryInterfacesListPanel.addStyleName("interfacesForm");
55
        repositoryInterfacesPanel.add(repositoryInterfacesListPanel);
56

    
57
        final InterfaceFields interfaceFields = new InterfaceFields(hasEdit, compatibilityClasses, mode);
58
        interfaceFieldsList.add(interfaceFields);
59
        repositoryInterfacesListPanel.add(interfaceFields.asWidget());
60

    
61
        InterfaceFields.DeleteInterfaceListener deleteInterfaceListener = new InterfaceFields.DeleteInterfaceListener() {
62
            @Override
63
            public void deleteInterface() {
64
                interfaceFieldsList.remove(interfaceFields);
65
                repositoryInterfacesListPanel.remove(interfaceFields.asWidget());
66
            }
67
        };
68
        interfaceFields.setDeleteInterfaceListener(deleteInterfaceListener);
69

    
70
        addNewInterfacePanel.addStyleName("col-md-6");
71

    
72
        FlowPanel addNewInterfaceBox = new FlowPanel();
73
        addNewInterfaceBox.addStyleName("ibox");
74
        addNewInterfacePanel.add(addNewInterfaceBox);
75

    
76
        FlowPanel addNewInterfaceBoxContent = new FlowPanel();
77
        addNewInterfaceBoxContent.addStyleName("ibox-content interface-box new");
78
        addNewInterfaceBox.add(addNewInterfaceBoxContent);
79

    
80

    
81
        addNewInterfaceAnchor.setHTML("<i class=\"fa fa-plus-square-o\"></i><span class=\"info\">Add new Interface</span>");
82
        addNewInterfaceAnchor.addClickHandler(new ClickHandler() {
83
            @Override
84
            public void onClick(ClickEvent event) {
85

    
86
                final InterfaceFields interfaceFields = new InterfaceFields(hasEdit, compatibilityClasses, mode);
87
                interfaceFieldsList.add(interfaceFields);
88
                repositoryInterfacesListPanel.insert(interfaceFields.asWidget(), repositoryInterfacesListPanel.getWidgetIndex(addNewInterfacePanel));
89

    
90
                InterfaceFields.DeleteInterfaceListener deleteInterfaceListener = new InterfaceFields.DeleteInterfaceListener() {
91
                    @Override
92
                    public void deleteInterface() {
93
                        interfaceFieldsList.remove(interfaceFields);
94
                        repositoryInterfacesListPanel.remove(interfaceFields.asWidget());
95
                    }
96
                };
97
                interfaceFields.setDeleteInterfaceListener(deleteInterfaceListener);
98
            }
99
        });
100

    
101
        addNewInterfaceBoxContent.add(addNewInterfaceAnchor);
102

    
103
        repositoryInterfacesListPanel.add(addNewInterfacePanel);
104
    }
105

    
106
    @Override
107
    public Widget asWidget() {
108
        return repositoryInterfacesPanel;
109
    }
110

    
111
    public void clear() {
112

    
113
        repositoryInterfacesListPanel.clear();
114
        interfaceFieldsList = new ArrayList<InterfaceFields>();
115

    
116
        final InterfaceFields interfaceFields = new InterfaceFields(hasEdit, compatibilityClasses, mode);
117

    
118
        InterfaceFields.DeleteInterfaceListener deleteInterfaceListener = new InterfaceFields.DeleteInterfaceListener() {
119
            @Override
120
            public void deleteInterface() {
121
                interfaceFieldsList.remove(interfaceFields);
122
                repositoryInterfacesListPanel.remove(interfaceFields.asWidget());
123
            }
124
        };
125
        interfaceFields.setDeleteInterfaceListener(deleteInterfaceListener);
126

    
127
        interfaceFieldsList.add(interfaceFields);
128
        repositoryInterfacesListPanel.add(interfaceFields.asWidget());
129
        repositoryInterfacesListPanel.add(addNewInterfacePanel);
130
    }
131

    
132
    public void loadRepositoryInterfaces(List<RepositoryInterface> repositoryInterfaces) {
133

    
134
        if(repositoryInterfaces!=null && !repositoryInterfaces.isEmpty()) {
135

    
136
            repositoryInterfacesListPanel.clear();
137
            interfaceFieldsList = new ArrayList<InterfaceFields>();
138

    
139
            for (RepositoryInterface repositoryInterface : repositoryInterfaces) {
140

    
141
                final InterfaceFields interfaceFields = new InterfaceFields(hasEdit, compatibilityClasses, mode);
142

    
143
                InterfaceFields.DeleteInterfaceListener deleteInterfaceListener = new InterfaceFields.DeleteInterfaceListener() {
144
                    @Override
145
                    public void deleteInterface() {
146
                        interfaceFieldsList.remove(interfaceFields);
147
                        repositoryInterfacesListPanel.remove(interfaceFields.asWidget());
148
                    }
149
                };
150
                interfaceFields.setDeleteInterfaceListener(deleteInterfaceListener);
151

    
152
                interfaceFields.loadRepositoryInterface(repositoryInterface);
153
                interfaceFieldsList.add(interfaceFields);
154
                repositoryInterfacesListPanel.add(interfaceFields.asWidget().asWidget());
155
            }
156
            repositoryInterfacesListPanel.add(addNewInterfacePanel);
157

    
158
        } else {
159
            clear();
160
        }
161
    }
162

    
163
    public List<RepositoryInterface> getRepositoryInterfaces() {
164

    
165
        hasInvalid = false;
166

    
167
        errorAlert.setVisible(false);
168

    
169
        List<RepositoryInterface> repositoryInterfaces = new ArrayList<RepositoryInterface>();
170

    
171
        for(InterfaceFields interfaceFields : interfaceFieldsList) {
172

    
173
            RepositoryInterface repositoryInterface = interfaceFields.getRepositoryInterface();
174
            if(repositoryInterface!=null) {
175
                if(!interfaceFields.isValid())
176
                    hasInvalid = true;
177
                repositoryInterfaces.add(repositoryInterface);
178
            }
179
        }
180

    
181
        if(repositoryInterfaces.isEmpty()) {
182
            errorAlert.setText("At least one interface is required");
183
            errorAlert.setVisible(true);
184
        } else if(hasInvalid) {
185
            errorAlert.setText("There are invalid interfaces");
186
            errorAlert.setVisible(true);
187
        }
188

    
189
        return repositoryInterfaces;
190
    }
191

    
192
    public boolean hasInvalid() {
193
        return hasInvalid;
194
    }
195
}
(3-3/5)