Project

General

Profile

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

    
3
import java.util.Collections;
4
import java.util.HashMap;
5
import java.util.List;
6
import java.util.Map;
7

    
8
import org.springframework.beans.factory.annotation.Autowired;
9

    
10
import com.google.common.collect.Lists;
11
import com.google.common.collect.Sets;
12

    
13
import eu.dnetlib.functionality.modular.ui.users.AccessLimited;
14
import eu.dnetlib.functionality.modular.ui.users.PermissionLevel;
15
import eu.dnetlib.functionality.modular.ui.users.User;
16

    
17
public class EntryPointsAggregator {
18
	
19
	@Autowired(required=false)
20
	private List<ModuleEntryPoint> entryPoints = Lists.newArrayList();;
21
	
22
	@Autowired(required=false)
23
	private List<AbstractMenu> otherMenus = Lists.newArrayList();
24

    
25
	public List<ModuleEntryPoint> getEntryPoints() {
26
		return entryPoints;
27
	}
28

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

    
57
		for (ModulesMenu item : map.values()) {
58
			item.complete();
59
			items.add(item);
60
		}
61
	
62
		Collections.sort(items);
63
		return items;
64
	}
65
	
66
	private boolean verifyAuthorization(AccessLimited entry, User user) {
67
		if (user.getPermissionLevels().contains(PermissionLevel.SUPER_ADMIN)) return true;
68
		
69
		return (Sets.intersection(user.getPermissionLevels(), entry.getPermissionLevels()).size() > 0);
70
	}
71
	
72
}
(7-7/17)