Project

General

Profile

Download (5.38 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2021 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.ui.dialog.selection;
10

    
11
import java.lang.reflect.Member;
12
import java.util.ArrayList;
13
import java.util.HashSet;
14
import java.util.Iterator;
15
import java.util.List;
16
import java.util.Set;
17
import java.util.UUID;
18

    
19
import org.eclipse.jface.viewers.ILabelProvider;
20
import org.eclipse.jface.viewers.LabelProvider;
21
import org.eclipse.swt.widgets.Shell;
22

    
23
import eu.etaxonomy.cdm.api.service.IAgentService;
24
import eu.etaxonomy.cdm.api.service.dto.EntityDTOBase;
25
import eu.etaxonomy.cdm.api.service.dto.IdentifiedEntityDTO;
26
import eu.etaxonomy.cdm.model.agent.AgentBase;
27
import eu.etaxonomy.cdm.model.agent.Person;
28
import eu.etaxonomy.cdm.model.agent.Team;
29
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
30
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
31
import eu.etaxonomy.cdm.persistence.dto.TeamOrPersonUuidAndTitleCache;
32
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
33
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
34
import eu.etaxonomy.taxeditor.store.CdmStore;
35

    
36
/**
37
 * @author k.luther
38
 * @since Jul 1, 2021
39
 */
40
public class CollectorSelectionDialog extends AgentSelectionDialog<AgentBase<?>> {
41
	Team collectorTeam = null;
42

    
43
    /**
44
     * @param shell
45
     * @param title
46
     * @param multi
47
     * @param settings
48
     * @param agent
49
     * @param selectTeamMember
50
     */
51
    protected CollectorSelectionDialog(Shell shell, String title, boolean multi, String settings,
52
            AgentBase<?> agent, boolean selectTeamMember) {
53
        super(shell, title, multi, settings, agent, selectTeamMember);
54
        if (selectTeamMember && agent instanceof Team){
55
    		this.collectorTeam = (Team)agent;
56
    		
57
    	}
58

    
59
    }
60
    public static <S extends AgentBase> S select(Shell shell,
61
            S entity, boolean selectTeamMember) {
62
    	
63
        CollectorSelectionDialog dialog = new CollectorSelectionDialog(shell,
64
                "Choose Collector", false, CollectorSelectionDialog.class.getCanonicalName(), entity, selectTeamMember);
65
        return  (S) getSelectionFromDialog(dialog);
66
    }
67

    
68
    @Override
69
    protected ILabelProvider createListLabelProvider() {
70
        return new CollectorLabelProvider();
71
    }
72

    
73
    public class CollectorLabelProvider extends LabelProvider {
74
        @Override
75
        public String getText(Object element) {
76
            if (element == null) {
77
                return null;
78
            }
79
            UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache) element;
80
            String title = "";
81
            String abbrevTitleCache = uuidAndTitleCache.getAbbrevTitleCache();
82
            String titleCache = uuidAndTitleCache.getTitleCache();
83
            String collectorTitleCache = null;
84
            if (element instanceof TeamOrPersonUuidAndTitleCache && ((TeamOrPersonUuidAndTitleCache)element).getCollectorTitleCache() != null){
85
                title = ((TeamOrPersonUuidAndTitleCache)element).getCollectorTitleCache();
86
            }
87
            if (!title.equals(titleCache)){
88
                title += " - " + titleCache;
89
            }
90
            if (abbrevTitleCache != null && !uuidAndTitleCache.getTitleCache().equals(abbrevTitleCache) && !abbrevTitleCache.equals(titleCache)){
91
                title += " - " + abbrevTitleCache;
92
            }
93
            if(PreferencesUtil.getBooleanValue(PreferencePredicate.ShowIdInSelectionDialog.getKey())){
94
                title += " ["+uuidAndTitleCache.getId()+"]";
95
            }
96
            if (element instanceof EntityDTOBase){
97
                title += "(" + ((IdentifiedEntityDTO)element).getIdentifier().getTypeLabel() +": " + ((IdentifiedEntityDTO)element).getIdentifier().getIdentifier() + ")";
98
            }
99

    
100
            return title;
101
        }
102

    
103

    
104
    }
105
    @Override
106
    protected void callService(String pattern) {
107
        Class clazz = AgentBase.class;
108
        if (selectTeamMember){
109
            clazz = Person.class;
110
        }
111
        Set<UUID> memberUuids = new HashSet<>();
112
        if (collectorTeam != null && selectTeamMember){
113
        	List<Person> teamMembers = this.collectorTeam.getTeamMembers();
114
        	
115
            teamMembers.forEach(member -> memberUuids.add(member.getUuid()));
116
        }
117
        
118
        model = CdmStore.getService(IAgentService.class).getUuidAndTitleCacheWithCollectorTitleCache(clazz, limitOfInitialElements, pattern);
119
        if (collectorTeam == null){
120
        	return;
121
        }
122
        //filter
123
        Iterator<UuidAndTitleCache<AgentBase<?>>> modelIterator = model.iterator();
124
        List<UuidAndTitleCache<AgentBase<?>>> tempModel = new ArrayList<>();
125
        while(modelIterator.hasNext()){
126
        	UuidAndTitleCache<AgentBase<?>> person = modelIterator.next();
127
        	if (memberUuids.contains(person.getUuid())){
128
        		tempModel.add(person);
129
        	}
130
        }
131
        model.clear();
132
        model.addAll(tempModel);
133
    }
134

    
135
    @Override
136
    protected String getTitle(AgentBase<?> cdmObject) {
137
		if(cdmObject == null){
138
			return "";
139
		}
140

    
141
		if (cdmObject instanceof TeamOrPersonBase) {
142
			return ((TeamOrPersonBase<?>) cdmObject).getCollectorTitleCache();
143
		}
144

    
145
		throw new IllegalArgumentException("Generic method only" +
146
				" supports cdmObject of type TeamOrPersonBase." +
147
				" Please implement specific method in subclass.");
148
	}
149
}
(9-9/46)