EMMA Coverage Report (generated Tue Feb 12 22:23:49 ICT 2008)
[all classes][net.sourceforge.hivegui.menu]

COVERAGE SUMMARY FOR SOURCE FILE [MenuFactoryImpl.java]

nameclass, %method, %block, %line, %
MenuFactoryImpl.java0%   (0/3)0%   (0/11)0%   (0/316)0%   (0/71)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class MenuFactoryImpl0%   (0/1)0%   (0/8)0%   (0/294)0%   (0/66)
MenuFactoryImpl (Log, List, ApplicationContextHolder, MenuInitializer): void 0%   (0/1)0%   (0/29)0%   (0/8)
createItem (MenuInitializer, Map, String): JMenuItem 0%   (0/1)0%   (0/63)0%   (0/13)
getItemCommand (String): Action 0%   (0/1)0%   (0/6)0%   (0/1)
getMenuBar (): JMenuBar 0%   (0/1)0%   (0/3)0%   (0/1)
getPopupMenu (String): JPopupMenu 0%   (0/1)0%   (0/6)0%   (0/1)
init (List, MenuInitializer): void 0%   (0/1)0%   (0/76)0%   (0/19)
initMenu (MenuContribution, Map, MenuInitializer): void 0%   (0/1)0%   (0/54)0%   (0/11)
initPopup (MenuContribution, Map, MenuInitializer): void 0%   (0/1)0%   (0/57)0%   (0/12)
     
class MenuFactoryImpl$10%   (0/1)100% (0/0)100% (0/0)100% (0/0)
     
class MenuFactoryImpl$ContribComparator0%   (0/1)0%   (0/3)0%   (0/22)0%   (0/5)
MenuFactoryImpl$ContribComparator (): void 0%   (0/1)0%   (0/3)0%   (0/1)
MenuFactoryImpl$ContribComparator (MenuFactoryImpl$1): void 0%   (0/1)0%   (0/3)0%   (0/1)
compare (MenuContribution, MenuContribution): int 0%   (0/1)0%   (0/16)0%   (0/4)

1//  Copyright 2004-2007 Jean-Francois Poilpret
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14 
15package net.sourceforge.hivegui.menu;
16 
17import java.util.Comparator;
18import java.util.HashMap;
19import java.util.List;
20import java.util.Map;
21import java.util.SortedSet;
22import java.util.TreeSet;
23 
24import javax.swing.Action;
25import javax.swing.JMenu;
26import javax.swing.JMenuBar;
27import javax.swing.JMenuItem;
28import javax.swing.JPopupMenu;
29 
30import org.apache.commons.logging.Log;
31import org.jdesktop.application.ApplicationContext;
32 
33import net.sourceforge.hivegui.application.ApplicationContextHolder;
34 
35public class MenuFactoryImpl implements MenuFactory
36{
37        public MenuFactoryImpl(        Log                                                        logger,
38                                       List                                                config,
39                                       ApplicationContextHolder        holder,
40                                       MenuInitializer                                initializer)
41        {
42                _logger = logger;
43                _context = holder.getContext();
44                init(config, initializer);
45        }
46        
47        private void        init(List config, MenuInitializer initializer)
48        {
49                _menuBar.setName("main-menu");
50                // Read configuration
51                SortedSet<MenuContribution> menus = 
52                                                new TreeSet<MenuContribution>(new ContribComparator());
53                Map<String, MenuItemContribution> items = new HashMap<String, MenuItemContribution>();
54                for (Object contrib: config)
55                {
56                        if (contrib instanceof MenuContribution)
57                        {
58                                menus.add((MenuContribution) contrib);
59                        }
60                        else if (contrib instanceof MenuItemContribution)
61                        {
62                                MenuItemContribution itemContrib = (MenuItemContribution) contrib; 
63                                items.put(itemContrib.getId(), itemContrib);
64                        }
65                }
66 
67                for (MenuContribution contrib: menus)
68                {
69                        // Popup menu or not?
70                        if (contrib.isPopup())
71                        {
72                                initPopup(contrib, items, initializer);
73                        }
74                        else
75                        {
76                                initMenu(contrib, items, initializer);
77                        }
78                }                
79                
80                initializer.finishInitialization(this);
81        }
82 
83        private void        initPopup(        MenuContribution                                        contrib,
84                                              Map<String, MenuItemContribution>        items,
85                                                                MenuInitializer                                                initializer)
86        {
87                JPopupMenu popup = new JPopupMenu();
88                String idMenu = contrib.getId();
89                popup.setName("popup-" + idMenu);
90                // For each menu item
91                String[] idItems = contrib.getItems();
92                for (int i = 0; i < idItems.length; i++)
93                {
94                        // Create item and add to menu
95                        if (idItems[i] == null)
96                        {
97                                popup.addSeparator();
98                        }
99                        else
100                        {
101                                popup.add(createItem(initializer, items, idItems[i]));
102                        }
103                }
104                _popups.put(idMenu, popup);
105                _context.getResourceMap().injectComponents(popup);
106        }
107        
108        private void        initMenu(        MenuContribution                                        contrib,
109                                             Map<String, MenuItemContribution>        items,
110                                                                MenuInitializer                                                initializer)
111        {
112                // Create menu and add to menu bar
113                JMenu menu = new JMenu();
114                menu.setName("menu-" + contrib.getId());
115                _menuBar.add(menu);
116                // For each menu item
117                String[] idItems = contrib.getItems();
118                for (int i = 0; i < idItems.length; i++)
119                {
120                        // Create item and add to menu
121                        if (idItems[i] == null)
122                        {
123                                menu.addSeparator();
124                        }
125                        else
126                        {
127                                menu.add(createItem(initializer, items, idItems[i]));
128                        }
129                }
130                _context.getResourceMap().injectComponents(menu);
131        }
132        
133        private JMenuItem        createItem(        MenuInitializer                                                initializer,
134                                                                        Map<String, MenuItemContribution>        items,
135                                                                        String                                                                idItem)
136        {
137                MenuItemContribution contrib = items.get(idItem);
138                // Create command (ask some help from initializer)
139                Action command = contrib.getCommand();
140                _logger.debug("createItem() id=" + idItem + " command=" + command);
141                initializer.initAction(idItem, command);
142                _commands.put(idItem, command);
143 
144                // Create a new menu item (NB: can be menu if it can have sub menus)
145                JMenuItem item;
146                if (contrib.getHasSubMenus())
147                {
148                        item = new JMenu();
149                }
150                else
151                {
152                        item = new JMenuItem();
153                }
154 
155                // We use the ActionCommand property to store the id of that item
156                item.setName("menu-item-" + idItem);
157                item.setAction(command);
158                item.setActionCommand(idItem);
159                return item;
160        }
161        
162        public JMenuBar                getMenuBar()
163        {
164                return _menuBar;
165        }
166 
167        public JPopupMenu        getPopupMenu(String idMenu)
168        {
169                return _popups.get(idMenu);
170        }
171        
172        public Action                getItemCommand(String idItem)
173        {
174                return _commands.get(idItem);
175        }
176        
177        static private class ContribComparator implements Comparator<MenuContribution>
178        {
179                public int        compare(MenuContribution c1, MenuContribution c2)
180                {
181                        int diff = c1.getOrder() - c2.getOrder();
182                        if (diff != 0)
183                        {
184                                return diff;
185                        }
186                        return c1.getId().compareTo(c2.getId());
187                }
188        }
189        
190        private final Log                                                _logger;
191        private final ApplicationContext                _context;
192        private final Map<String, JPopupMenu>        _popups = new HashMap<String, JPopupMenu>();
193        private final Map<String, Action>                _commands = new HashMap<String, Action>();
194        private final JMenuBar                                        _menuBar = new JMenuBar();
195}

[all classes][net.sourceforge.hivegui.menu]
EMMA 2.0.5312 (C) Vladimir Roubtsov