Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.fmap.control / src / main / java / org / gvsig / propertypage / impl / DefaultPropertiesPageManager.java @ 43557

History | View | Annotate | Download (3.43 KB)

1
package org.gvsig.propertypage.impl;
2

    
3
import java.util.ArrayList;
4
import java.util.Collection;
5
import java.util.Collections;
6
import java.util.Comparator;
7
import java.util.HashMap;
8
import java.util.List;
9
import java.util.Map;
10
import org.gvsig.propertypage.PropertiesPage;
11
import org.gvsig.propertypage.PropertiesPageFactory;
12
import org.gvsig.propertypage.PropertiesPageManager;
13
import org.gvsig.tools.ToolsLocator;
14
import org.gvsig.tools.identitymanagement.SimpleIdentity;
15
import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
16
import org.slf4j.Logger;
17
import org.slf4j.LoggerFactory;
18

    
19
public class DefaultPropertiesPageManager implements PropertiesPageManager {
20

    
21
    public static final String ACCESS_PAGE_AUTHORIZATION = "propertypage-access";
22

    
23
    private static final Logger logger = LoggerFactory.getLogger(DefaultPropertiesPageManager.class);
24

    
25
    private final Map<String, Map<String, PropertiesPageFactory>> groups = new HashMap<>();
26

    
27
    public DefaultPropertiesPageManager() {
28

    
29
    }
30

    
31
    @Override
32
    public void registerFactory(PropertiesPageFactory factory) {
33
        logger.info("Register PropertisPageFactory " + factory.getClass().getName() + " , groupID=" + factory.getGroupID() + " (" + factory.toString() + ").");
34
        Map<String, PropertiesPageFactory> group = this.getFactories(factory.getGroupID());
35
        group.put(factory.getName(), factory);
36
    }
37

    
38
    private Map<String, PropertiesPageFactory> getFactories(String groupID) {
39
        logger.info("get propeties page factories for groupID '" + groupID + "'");
40
        Map<String,PropertiesPageFactory> group = this.groups.get(groupID);
41
        if (group == null) {
42
            group = new HashMap<>();
43
            this.groups.put(groupID, group);
44
        }
45
        return group;
46
    }
47

    
48
    @Override
49
    public List<PropertiesPage> getPages(String groupID, Object obj) {
50
        logger.info("get propeties page for groupID '" + groupID + "', and object '" + obj.toString() + "'.");
51
        List<PropertiesPage> pages = new ArrayList<>();
52
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
53
        SimpleIdentity currentUser = identityManager.getCurrentIdentity();
54
        if (!currentUser.isAuthorized(ACCESS_PAGE_AUTHORIZATION,null,groupID ) ) {
55
            return pages; // Empty list, no access to pages authoriced
56
        }
57

    
58
        Collection<PropertiesPageFactory> factories = this.getFactories(groupID).values();
59
        String authorizationId = ACCESS_PAGE_AUTHORIZATION+"-"+groupID;
60
        for (PropertiesPageFactory factory : factories) {
61
            if (factory.isVisible(obj)) {
62
                PropertiesPage page = factory.create(obj);
63
                if (currentUser.isAuthorized(authorizationId,page, page.getTitle()) ) {
64
                    pages.add(page);
65
                }
66
            }
67
        }
68
        Collections.sort(pages, new Comparator<PropertiesPage>() {
69
            @Override
70
            public int compare(PropertiesPage f1, PropertiesPage f2) {
71
                int n = f2.getPriority() - f1.getPriority();
72
                if (n != 0) {
73
                    return n;
74
                }
75
                if (f1.getTitle() == null || f2.getTitle() == null) {
76
                    // Mas que nada para que no pete, y aunque el orden
77
                    // no sea correcto muestre algo al usuario.
78
                    return 0;
79
                }
80
                return f1.getTitle().compareTo(f2.getTitle());
81
            }
82
        });
83
        return pages;
84
    }
85

    
86
}