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

History | View | Annotate | Download (3.95 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
    private String getFactoryName(PropertiesPageFactory factory) {
32
        String factoryName = factory.getClass().getName();
33
        try {
34
            factoryName = factory.getName();
35
        } catch(Throwable ex) {
36
            
37
        }
38
        return factoryName;
39
    }
40
    
41
    @Override
42
    public void registerFactory(PropertiesPageFactory factory) {
43
        logger.info("Register PropertisPageFactory " + factory.getClass().getName() + " , groupID=" + factory.getGroupID() + " (" + factory.toString() + ").");
44
        Map<String, PropertiesPageFactory> group = this.getFactories(factory.getGroupID());
45
        group.put(getFactoryName(factory), factory);
46
    }
47

    
48
    private Map<String, PropertiesPageFactory> getFactories(String groupID) {
49
        logger.info("get propeties page factories for groupID '" + groupID + "'");
50
        Map<String,PropertiesPageFactory> group = this.groups.get(groupID);
51
        if (group == null) {
52
            group = new HashMap<>();
53
            this.groups.put(groupID, group);
54
        }
55
        return group;
56
    }
57

    
58
    @Override
59
    public List<PropertiesPage> getPages(String groupID, Object obj) {
60
        logger.info("get propeties page for groupID '" + groupID + "', and object '" + obj.toString() + "'.");
61
        List<PropertiesPage> pages = new ArrayList<>();
62
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
63
        SimpleIdentity currentUser = identityManager.getCurrentIdentity();
64
        if (!currentUser.isAuthorized(ACCESS_PAGE_AUTHORIZATION,null,groupID ) ) {
65
            return pages; // Empty list, no access to pages authoriced
66
        }
67

    
68
        Collection<PropertiesPageFactory> factories = this.getFactories(groupID).values();
69
        String authorizationId = ACCESS_PAGE_AUTHORIZATION+"-"+groupID;
70
        for (PropertiesPageFactory factory : factories) {
71
            String factoryName = getFactoryName(factory);
72
            try {
73
                if (factory.isVisible(obj)) {
74
                    PropertiesPage page = factory.create(obj);
75
                    if (currentUser.isAuthorized(authorizationId,page, page.getTitle()) ) {
76
                        pages.add(page);
77
                    }
78
                }
79
            } catch(Exception ex) {
80
                logger.warn("Can't get properties page from factory '"+factoryName+"'.",ex);
81
            }
82
        }
83
        Collections.sort(pages, new Comparator<PropertiesPage>() {
84
            @Override
85
            public int compare(PropertiesPage f1, PropertiesPage f2) {
86
                int n = f2.getPriority() - f1.getPriority();
87
                if (n != 0) {
88
                    return n;
89
                }
90
                if (f1.getTitle() == null || f2.getTitle() == null) {
91
                    // Mas que nada para que no pete, y aunque el orden
92
                    // no sea correcto muestre algo al usuario.
93
                    return 0;
94
                }
95
                return f1.getTitle().compareTo(f2.getTitle());
96
            }
97
        });
98
        return pages;
99
    }
100

    
101
}