Project

General

Profile

1
package eu.dnetlib.functionality.modular.ui;
2

    
3
import java.util.*;
4

    
5
import com.google.common.collect.Sets;
6
import eu.dnetlib.functionality.modular.ui.users.AccessLimited;
7
import eu.dnetlib.functionality.modular.ui.users.PermissionLevel;
8
import eu.dnetlib.functionality.modular.ui.users.User;
9
import org.springframework.beans.factory.annotation.Autowired;
10

    
11
public class EntryPointsAggregator {
12
	
13
	@Autowired(required=false)
14
	private List<ModuleEntryPoint> entryPoints = new ArrayList<>();
15
	
16
	@Autowired(required=false)
17
	private List<AbstractMenu> otherMenus = new ArrayList<>();
18

    
19
	public List<ModuleEntryPoint> getEntryPoints() {
20
		return entryPoints;
21
	}
22

    
23
	public void setEntryPoints(List<ModuleEntryPoint> entryPoints) {
24
		this.entryPoints = entryPoints;
25
	}
26
		
27
	public List<AbstractMenu> getMenus(User user) {
28
		final Map<String, ModulesMenu> map = new HashMap<>();
29
		
30
		for (ModuleEntryPoint entry : entryPoints) {
31
			if (entry.isValidMenuEntry() && verifyAuthorization(entry, user)) {
32
				final String group = entry.getGroup();
33
				if (!map.containsKey(group)) {
34
					map.put(group, new ModulesMenu(group));
35
				}
36
				map.get(group).addEntry(entry);
37
			}
38
		}
39
		final List<AbstractMenu> items = new ArrayList<>();
40
		
41
		for (AbstractMenu menu : otherMenus) {
42
			if (menu instanceof AccessLimited) {
43
				 if (verifyAuthorization((AccessLimited) menu, user) && menu.getEntries().size() > 0) {
44
					 items.add(menu);
45
				 }
46
			} else if (menu.getEntries().size() > 0) {
47
				items.add(menu);
48
			}
49
		}
50

    
51
		for (ModulesMenu item : map.values()) {
52
			item.complete();
53
			items.add(item);
54
		}
55
	
56
		Collections.sort(items);
57
		return items;
58
	}
59
	
60
	private boolean verifyAuthorization(AccessLimited entry, User user) {
61
		if (user.getPermissionLevels().contains(PermissionLevel.SUPER_ADMIN)) return true;
62
		return (Sets.intersection(user.getPermissionLevels(), entry.getPermissionLevels()).size() > 0);
63
	}
64
	
65
}
(7-7/17)