# FavoritesGenerator.java Sample

This topic inludes the source code for the FavoritesGenerator.java Sample.

## Sample Location

This sample is located in the following directory in your WebLogic Workshop installation:

BEA_HOME/weblogic81/samples/workshop/ExtensionDevKit/IdeDevKit/MenuItems/src/ideExtensions/menuItems/

## Sample Source Code

`01 package ideExtensions.menuItems; 02 03 import com.bea.ide.Application; 04 import com.bea.ide.actions.ActionSvc; 05 import com.bea.ide.actions.IActionContainer; 06 import com.bea.ide.actions.IActionProxy; 07 import com.bea.ide.actions.IGenerator; 08 import com.bea.ide.core.PreferencesSvc; 09 10 /** 11 * A generator class to generate "favorites" menu items. A generator 12 * class implements IGenerator to create menu items dynamically. 13 * This is in contrast to the menu commands created statically in 14 * an extension.xml file. 15 * 16 * The extension.xml file specifies this class as the generator to use 17 * for the "favorites" menu. 18 */ 19 public class FavoritesGenerator implements IGenerator 20 { 21 /** 22 * Called by the IDE to discover whether this generator's actions 23 * should be visible. Some implementation may want to check 24 * the IDE's context to determine the value to return. 25 * 26 * @return <code>true</code> to make the action visible; otherwise, 27 * <code>false</code>. 28 */ 29 public boolean isVisible() 30 { 31 return true; 32 } 33 34 /** 35 * Populates the menu items from the entries stored in the "favorites" 36 * node in the $USER_HOME/.workshop.pref file. The <em>menu</em> 37 * received here is specified in this extension's extension.xml. There, 38 * an <action-group> element's generator attribute assigns this class 39 * as the generator to use for a submenu of the "favorites" menu. 40 * 41 * @param menu The menu that should be populated. 42 * @return <code>true</code> if items were added; <code>false</code> 43 * if none were added. 44 */ 45 public boolean populate(IActionContainer menu) 46 { 47 /** 48 * The preferences service provides easy access to the .workshop.pref 49 * file so that extensions can use it to store settings. 50 */ 51 PreferencesSvc.IPreferencePkg prefs = 52 PreferencesSvc.get().getUserPreferences(Application.get(), 53 Application.class).getPackageForNode("favorites"); 54 55 /** 56 * Iterate through the stored "favorites" preferences, adding each 57 * as a menu command. 58 */ 59 int favNum = 0; 60 String url; 61 while ((url = prefs.get("favorites" + (++favNum))) != null) 62 { 63 // Create a new UI object to represent "favorites" menu command. 64 IActionProxy ap = new LaunchBrowserAction().getProxy(); 65 // Assign a label and URL to the menu UI. 66 ap.putValue(IActionProxy.PROP_Label, url); 67 // Add the new menu to menu received from the IDE. 68 menu.add(ap); 69 } 70 71 /** 72 * Create a "Delete Favorite" menu command and enable it if 73 * there are any favorites. 74 */ 75 IActionProxy toggle = 76 ActionSvc.get().getAction(DeleteFavoriteAction.class.getName()); 77 if (favNum == 1) 78 { 79 toggle.setEnabled(false); 80 } else 81 { 82 toggle.setEnabled(true); 83 } 84 85 return true; 86 } 87 }`