Project

General

Profile

1 41837 michele.ar
package eu.dnetlib.functionality.modular.ui;
2
3 41840 sandro.lab
import java.util.*;
4 41837 michele.ar
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 41840 sandro.lab
import org.springframework.beans.factory.annotation.Autowired;
10 41837 michele.ar
11
public class EntryPointsAggregator {
12
13
	@Autowired(required=false)
14 41840 sandro.lab
	private List<ModuleEntryPoint> entryPoints = new ArrayList<>();
15 41837 michele.ar
16
	@Autowired(required=false)
17 41840 sandro.lab
	private List<AbstractMenu> otherMenus = new ArrayList<>();
18 41837 michele.ar
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 41840 sandro.lab
		final Map<String, ModulesMenu> map = new HashMap<>();
29 41837 michele.ar
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 41840 sandro.lab
		final List<AbstractMenu> items = new ArrayList<>();
40 41837 michele.ar
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
}