+ // "" = [unknown]
+ private void populateMenuSA(JMenu menu,
+ Map<String, List<String>> groupedValues, boolean type) {
+
+ // "All" and "Listing" special items
+ JMenuItem item = new JMenuItem("All");
+ item.addActionListener(getActionOpenList(type, false));
+ menu.add(item);
+ item = new JMenuItem("Listing");
+ item.addActionListener(getActionOpenList(type, true));
+ menu.add(item);
+ menu.addSeparator();
+
+ for (final String value : groupedValues.keySet()) {
+ List<String> list = groupedValues.get(value);
+ if (type && list.size() == 1 && list.get(0).isEmpty()) {
+ // leaf item source/type
+ item = new JMenuItem(value.isEmpty() ? "[unknown]" : value);
+ item.addActionListener(getActionOpen(value, type));
+ menu.add(item);
+ } else {
+ JMenu dir;
+ if (!type && groupedValues.size() == 1) {
+ // only one group of authors
+ dir = menu;
+ } else {
+ dir = new JMenu(value.isEmpty() ? "[unknown]" : value);
+ }
+
+ for (String sub : list) {
+ // " " instead of "" for the visual height
+ String itemName = sub.isEmpty() ? " " : sub;
+ String actualValue = value;
+
+ if (type) {
+ if (!sub.isEmpty()) {
+ actualValue += "/" + sub;
+ }
+ } else {
+ actualValue = sub;
+ }
+
+ item = new JMenuItem(itemName);
+ item.addActionListener(getActionOpen(actualValue, type));
+ dir.add(item);
+ }
+
+ if (menu != dir) {
+ menu.add(dir);
+ }
+ }
+ }
+ }
+