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 @ 43579

History | View | Annotate | Download (3.7 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
            String factoryName = "unknown";
62
            try {
63
                factoryName = factory.getName();
64
                if (factory.isVisible(obj)) {
65
                    PropertiesPage page = factory.create(obj);
66
                    if (currentUser.isAuthorized(authorizationId,page, page.getTitle()) ) {
67
                        pages.add(page);
68
                    }
69
                }
70
            } catch(Exception ex) {
71
                logger.warn("Can't get properties page from factory '"+factoryName+"'.",ex);
72
            }
73
        }
74
        Collections.sort(pages, new Comparator<PropertiesPage>() {
75
            @Override
76
            public int compare(PropertiesPage f1, PropertiesPage f2) {
77
                int n = f2.getPriority() - f1.getPriority();
78
                if (n != 0) {
79
                    return n;
80
                }
81
                if (f1.getTitle() == null || f2.getTitle() == null) {
82
                    // Mas que nada para que no pete, y aunque el orden
83
                    // no sea correcto muestre algo al usuario.
84
                    return 0;
85
                }
86
                return f1.getTitle().compareTo(f2.getTitle());
87
            }
88
        });
89
        return pages;
90
    }
91

    
92
}