Project

General

Profile

1
package eu.dnetlib.client.widgets;
2

    
3
import com.github.gwtbootstrap.client.ui.base.IconAnchor;
4
import com.github.gwtbootstrap.client.ui.constants.IconType;
5
import com.google.gwt.event.dom.client.ClickEvent;
6
import com.google.gwt.event.dom.client.ClickHandler;
7
import com.google.gwt.user.client.ui.FlowPanel;
8
import com.google.gwt.user.client.ui.IsWidget;
9
import com.google.gwt.user.client.ui.Widget;
10
import eu.dnetlib.goldoa.domain.Affiliation;
11

    
12
import java.util.ArrayList;
13
import java.util.List;
14

    
15
/**
16
 * Created by stefania on 3/11/15.
17
 */
18
public class MultipleAffiliationsWidget implements IsWidget {
19

    
20
    private FlowPanel multipleAffiliationsPanel = new FlowPanel();
21
    private List<AffiliationInfoWidget> affiliationInfoWidgetList = new ArrayList<>();
22

    
23
    private IconAnchor addMore = new IconAnchor();
24

    
25
    public MultipleAffiliationsWidget() {
26

    
27
        final AffiliationInfoWidget affiliationInfoWidget = new AffiliationInfoWidget();
28
        affiliationInfoWidgetList.add(affiliationInfoWidget);
29
        multipleAffiliationsPanel.add(affiliationInfoWidget.asWidget());
30
        AffiliationInfoWidget.DeleteAffiliationListener deleteAffiliationListener = new AffiliationInfoWidget.DeleteAffiliationListener() {
31
            @Override
32
            public void deleteAffiliation() {
33
                affiliationInfoWidgetList.remove(affiliationInfoWidget);
34
                multipleAffiliationsPanel.remove(affiliationInfoWidget.asWidget());
35
            }
36
        };
37
        affiliationInfoWidget.setDeleteAffiliationListener(deleteAffiliationListener);
38

    
39
        addMore.setIcon(IconType.PLUS);
40
        addMore.setText("Add another affiliation");
41
        addMore.addClickHandler(new ClickHandler() {
42
            @Override
43
            public void onClick(ClickEvent clickEvent) {
44

    
45
                final AffiliationInfoWidget affiliationInfoWidget = new AffiliationInfoWidget();
46
                affiliationInfoWidgetList.add(affiliationInfoWidget);
47
                multipleAffiliationsPanel.insert(affiliationInfoWidget.asWidget(), multipleAffiliationsPanel.getWidgetIndex(addMore));
48
                AffiliationInfoWidget.DeleteAffiliationListener deleteAffiliationListener = new AffiliationInfoWidget.DeleteAffiliationListener() {
49
                    @Override
50
                    public void deleteAffiliation() {
51
                        affiliationInfoWidgetList.remove(affiliationInfoWidget);
52
                        multipleAffiliationsPanel.remove(affiliationInfoWidget.asWidget());
53
                    }
54
                };
55
                affiliationInfoWidget.setDeleteAffiliationListener(deleteAffiliationListener);
56
            }
57
        });
58
        multipleAffiliationsPanel.add(addMore);
59
    }
60

    
61
    @Override
62
    public Widget asWidget() {
63
        return multipleAffiliationsPanel;
64
    }
65

    
66
    public List<Affiliation> getAffiliations() {
67

    
68
        List<Affiliation> affiliationList = new ArrayList<>();
69

    
70
        for(AffiliationInfoWidget affiliationInfoWidget : affiliationInfoWidgetList) {
71

    
72
            if(affiliationInfoWidget.getAffiliation()!=null)
73
                affiliationList.add(affiliationInfoWidget.getAffiliation());
74

    
75
        }
76

    
77
        return affiliationList;
78
    }
79

    
80
    public void clear() {
81

    
82
        multipleAffiliationsPanel.clear();
83
        affiliationInfoWidgetList = new ArrayList<>();
84

    
85
        final AffiliationInfoWidget affiliationInfoWidget = new AffiliationInfoWidget();
86
        AffiliationInfoWidget.DeleteAffiliationListener deleteAffiliationListener = new AffiliationInfoWidget.DeleteAffiliationListener() {
87
            @Override
88
            public void deleteAffiliation() {
89
                affiliationInfoWidgetList.remove(affiliationInfoWidget);
90
                multipleAffiliationsPanel.remove(affiliationInfoWidget.asWidget());
91
            }
92
        };
93
        affiliationInfoWidget.setDeleteAffiliationListener(deleteAffiliationListener);
94
        affiliationInfoWidgetList.add(affiliationInfoWidget);
95
        multipleAffiliationsPanel.add(affiliationInfoWidget.asWidget());
96
        multipleAffiliationsPanel.add(addMore);
97
    }
98

    
99
    public void loadAffiliations(List<Affiliation> affiliationList) {
100

    
101
        if(!affiliationList.isEmpty()) {
102
            multipleAffiliationsPanel.clear();
103
            affiliationInfoWidgetList = new ArrayList<>();
104

    
105
            for (Affiliation affiliation : affiliationList) {
106
                final AffiliationInfoWidget affiliationInfoWidget = new AffiliationInfoWidget();
107
                AffiliationInfoWidget.DeleteAffiliationListener deleteAffiliationListener = new AffiliationInfoWidget.DeleteAffiliationListener() {
108
                    @Override
109
                    public void deleteAffiliation() {
110
                        affiliationInfoWidgetList.remove(affiliationInfoWidget);
111
                        multipleAffiliationsPanel.remove(affiliationInfoWidget.asWidget());
112
                    }
113
                };
114
                affiliationInfoWidget.setDeleteAffiliationListener(deleteAffiliationListener);
115
                affiliationInfoWidget.loadAffiliation(affiliation);
116
                affiliationInfoWidgetList.add(affiliationInfoWidget);
117
                multipleAffiliationsPanel.add(affiliationInfoWidget.asWidget());
118
            }
119
            multipleAffiliationsPanel.add(addMore);
120
        }
121
    }
122
}
(13-13/21)