Project

General

Profile

« Previous | Next » 

Revision 5098693b

Added by Patrick Plitzner over 5 years ago

ref #7268 Sort root nodes in preference dialog

View differences:

eu.etaxonomy.taxeditor.workbench/src/main/java/eu/etaxonomy/taxeditor/workbench/handler/OpenPreferencesHandler.java
33 33
import org.eclipse.swt.widgets.Shell;
34 34

  
35 35
/**
36
 * Scans all extension for extension point <code>eu.etaxonomy.taxeditor.store.preferencePage</code> and
37
 * creates the tree of preference nodes according to the <code>category</code> attribute of the
38
 * extension point.<br>
39
 * <b>Note:</b> If, for a given category, no parent node can be found then this page will not be
40
 * added to the preferences
36 41
 * @author pplitzner
37 42
 * @date 14.02.2018
38 43
 *
39 44
 */
40 45
public class OpenPreferencesHandler {
41 46

  
47
    private static final String ATT_NAME = "name"; //$NON-NLS-1$
48
    private static final String ATT_ID = "id"; //$NON-NLS-1$
49
    private static final String ATT_CATEGORY = "category"; //$NON-NLS-1$
50
    private static final String ATT_CLASS = "class"; //$NON-NLS-1$
51
    private static final String EXTENSION_ELEMENT_PAGE = "page"; //$NON-NLS-1$
52
    private static final String EXTENSION_POINT_ID = "eu.etaxonomy.taxeditor.store.preferencePage"; //$NON-NLS-1$
42 53
    private Logger logger = Logger.getLogger(OpenPreferencesHandler.class);
43 54

  
44 55
    @Execute
45 56
    public void execute(@Named(IServiceConstants.ACTIVE_SHELL)Shell shell) {
46 57
        List<PageWrapper> pagesYetToBeAdded = new ArrayList<>();
58
        List<PageWrapper> rootPages = new ArrayList<>();
47 59
        Map<String, PreferenceNode> idToNodeMap = new HashMap<>();
48 60

  
49 61
        PreferenceManager manager = new PreferenceManager('/');
50 62

  
51 63
        IExtensionRegistry reg = Platform.getExtensionRegistry();
52 64
        IConfigurationElement[] extensions = reg
53
                .getConfigurationElementsFor("eu.etaxonomy.taxeditor.store.preferencePage"); //$NON-NLS-1$
65
                .getConfigurationElementsFor(EXTENSION_POINT_ID); //$NON-NLS-1$
54 66
        for (IConfigurationElement configElement : extensions) {
55
            if(configElement.getName().equals("page")){ //$NON-NLS-1$
67
            if(configElement.getName().equals(EXTENSION_ELEMENT_PAGE)){ //$NON-NLS-1$
56 68
                Object o;
57 69
                try {
58
                    o = configElement.createExecutableExtension("class");
70
                    o = configElement.createExecutableExtension(ATT_CLASS);
59 71
                    if(o instanceof IPreferencePage){
60 72
                        IPreferencePage page = (IPreferencePage) o;
61
                        String category = configElement.getAttribute("category");
62
                        String id = configElement.getAttribute("id");
63
                        String name = configElement.getAttribute("name");
73
                        String category = configElement.getAttribute(ATT_CATEGORY);
74
                        String id = configElement.getAttribute(ATT_ID);
75
                        String name = configElement.getAttribute(ATT_NAME);
64 76

  
65 77
                        page.setTitle(name);
66 78
                        //add all root nodes
67 79
                        if(category==null){
68
                            PreferenceNode node = new PreferenceNode(id, page);
69
                            manager.addToRoot(node);
70
                            idToNodeMap.put(id, node);
80
                            rootPages.add(new PageWrapper(page, category, id, name));
71 81
                        }
72 82
                        //child nodes will be handled later
73 83
                        else{
......
75 85
                        }
76 86
                    }
77 87
                } catch (CoreException e) {
78
                    logger.error(String.format("Failed to initialize preference page for config element: %s", configElement), e);
88
                    logger.error(String.format("Failed to initialize preference page for config element: %s", configElement), e); //$NON-NLS-1$
79 89
                }
80 90
            }
81 91
        }
82 92

  
83
        Collections.sort(pagesYetToBeAdded, new PreferenceNodeComparator());
93
        //sort root nodes
94
        Collections.sort(rootPages, new PreferenceNodeComparator());
95
        //add root nodes
96
        rootPages.forEach(pageWrapper->{
97
            PreferenceNode node = new PreferenceNode(pageWrapper.id, pageWrapper.page);
98
            manager.addToRoot(node);
99
            idToNodeMap.put(pageWrapper.id, node);
100
        });
84 101

  
102
        //sort child nodes
103
        Collections.sort(pagesYetToBeAdded, new PreferenceNodeComparator());
104
        //add child nodes
85 105
        int size = pagesYetToBeAdded.size();
86 106
        while(!pagesYetToBeAdded.isEmpty()){
87 107

  
......
105 125
    }
106 126

  
107 127
    private boolean addPage(PageWrapper pageWrapper, Map<String, PreferenceNode> idToNodeMap){
108
        PreferenceNode node = new PreferenceNode(pageWrapper.getId(), pageWrapper.getPage());
109
        PreferenceNode parent = idToNodeMap.get(pageWrapper.getCategory());
128
        PreferenceNode node = new PreferenceNode(pageWrapper.id, pageWrapper.page);
129
        PreferenceNode parent = idToNodeMap.get(pageWrapper.category);
110 130
        if(parent!=null){
111
            idToNodeMap.put(pageWrapper.getId(), node);
131
            idToNodeMap.put(pageWrapper.id, node);
112 132
            parent.add(node);
113 133
            return true;
114 134
        }
......
116 136
    }
117 137

  
118 138
    private class PreferenceNodeComparator implements Comparator<PageWrapper>{
119

  
120 139
        @Override
121 140
        public int compare(PageWrapper o1, PageWrapper o2) {
122
            return o1.getName().compareTo(o2.getName());
141
            return o1.name.compareTo(o2.name);
123 142
        }
124

  
125 143
    }
126 144

  
127 145
    private class PageWrapper{
......
136 154
            this.id = id;
137 155
            this.name = name;
138 156
        }
139
        public IPreferencePage getPage() {
140
            return page;
141
        }
142
        public String getCategory() {
143
            return category;
144
        }
145
        public String getId() {
146
            return id;
147
        }
148
        public String getName() {
149
            return name;
150
        }
151 157
    }
152 158
}

Also available in: Unified diff