コード例 #1
0
 /**
  * return the resulting merged menubar
  *
  * @param master the master menubar
  * @param servant the servant menubar
  * @return a Menubar or null if there was nothing to merge
  */
 protected Menubar merge(Menubar master, Menubar servant) {
   if (logger.isDebugEnabled()) {
     logger.debug("entering merge(Menubar, Menubar)");
   }
   Menubar result = null;
   if (master == null) {
     if (servant != null) {
       result = servant;
     }
   } else {
     if (servant != null && servant.getMenus() != null && servant.getMenus().getMenu() != null) {
       /* merge two non null items fill the structure of master with servant elements */
       for (int i = 0; i < servant.getMenus().getMenu().size(); i++) {
           /* if it already contains a menu named like current servant menu, then merge them */
         MenuType currentMenu = (MenuType) servant.getMenus().getMenu().get(i);
         if (currentMenu != null) {
           Object item =
               this.getItem(
                   master, currentMenu.getLabel(), currentMenu.getI18Nref(), MenuType.class);
           if (item != null) {
             this.merge((MenuType) item, currentMenu);
           } else {
               /* add the current servant menu to the list of menu of the master bar */
             master.getMenus().getMenu().add(currentMenu);
           }
         }
       }
     }
     result = master;
   }
   if (logger.isDebugEnabled()) {
     logger.debug("exiting merge(Menubar, Menubar)");
   }
   return result;
 }
コード例 #2
0
  /**
   * method that fill the shortcut set with an object ( this object should be instance of
   * ActionableShortcutedMenuItem but it does nothing if it is an normal Object ). the shortcut of
   * the element if it exists is set to "" if an existing element already uses it. if the object is
   * a menu, then
   *
   * @param objet an Object
   * @param recur true if the method should call itself when the object is a container of menuItem
   */
  protected void assignShortcuts(Object object, boolean recur) {
    if (logger.isDebugEnabled()) {
      logger.debug("entering assignShortCuts(Object, boolean)");
    }
    if (object != null) {
      if (recur) {
        List list = null;
        if (object instanceof Menubar) {
          Menubar bar = (Menubar) object;
          if (bar.getMenus() != null) {
            list = bar.getMenus().getMenu();
          }
        } else if (object instanceof MenuType) {
          list = ((MenuType) object).getMenuOrItemOrCheck();
        } else if (object instanceof TypeMenu) {
          TypeMenu menuType = (TypeMenu) object;
          if (menuType.getItems() != null) {
            list = menuType.getItems().getMenuOrItemOrCheck();
          }
        }

        if (list != null) {
          Iterator it = list.iterator();
          while (it.hasNext()) {
            this.assignShortcuts(it.next(), recur);
          }
        }
      }
      /* it an ActionableShortcutedMenuItem ? */
      if (object instanceof ActionableShortcutedElement) {
          /* try to add the shortcut and if already presents, remove it */
        String shortcut = ((ActionableShortcutedElement) object).getShortcut();
        if (shortcut != null) {
          shortcut = shortcut.trim();
          if (shortcut.length() > 0) {
            if (!this.shortcuts.add(shortcut)) {
              ((ActionableShortcutedElement) object).setShortcut("");
              logger.warn(
                  "the item '"
                      + ((ActionableShortcutedElement) object).getLabel()
                      + "' could not get shortcut '"
                      + shortcut
                      + "' because it's already assignated");
            }
          }
        }
      }
    }
    if (logger.isDebugEnabled()) {
      logger.debug("exiting assignShortCuts(Object, boolean)");
    }
  }
コード例 #3
0
  /**
   * return the item named name instance of the given class
   *
   * @param parent where to search for the item ( not recursively ) a Menubar or a Menu
   * @param label the label of an element
   * @param i18nRef the internationalization reference of an element
   * @param allowed class
   * @return a corresponding item or null if nothing was found
   */
  protected Object getItem(Object parent, String label, String i18nRef, Class allowed) {
    Object o = null;
    if (parent != null
        && (parent instanceof Menubar
            || parent instanceof MenuType
            || parent instanceof TypeMenu)) {
      List l = null;
      if (parent instanceof MenuType) {
        l = ((MenuType) parent).getMenuOrItemOrCheck();
      } else if (parent instanceof Menubar) {
        Menubar bar = (Menubar) parent;
        if (bar.getMenus() != null) {
          l = bar.getMenus().getMenu();
        }
      } else if (parent instanceof TypeMenu) {
        TypeMenu typeMenu = (TypeMenu) parent;
        if (typeMenu.getItems() != null) {
          l = typeMenu.getItems().getMenuOrItemOrCheck();
        }
      }

      if (l != null) {
        Iterator it = l.iterator();
        while (it.hasNext()) {
          Object current = it.next();

          if (current != null) {
            if (current instanceof AbstractElement) {
              AbstractElement elt = (AbstractElement) current;

              boolean seemsSame = this.equalsAbstractElts(elt, label, i18nRef);

              if (allowed.isAssignableFrom(current.getClass()) && seemsSame) {
                o = current;
                break;
              }
            }
          }
        }
      }
    }
    return o;
  }