Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/roller/presentation/tags/menu/RollerMenuModel.java


1   
2   package org.roller.presentation.tags.menu;
3   
4   import org.apache.commons.digester.Digester;
5   import org.apache.commons.logging.Log;
6   import org.apache.commons.logging.LogFactory;
7   import org.roller.pojos.UserData;
8   import org.roller.presentation.RollerRequest;
9   import org.xml.sax.SAXException;
10  
11  import java.io.InputStream;
12  import java.util.Hashtable;
13  import java.util.Vector;
14  
15  import javax.servlet.ServletContext;
16  import javax.servlet.http.HttpServletRequest;
17  
18  //////////////////////////////////////////////////////////////////////////////
19  
20  /** 
21   * @author David M Johnson
22   */ 
23  public class RollerMenuModel implements MenuModel
24  {
25      private static Log mLogger = 
26          LogFactory.getFactory().getInstance(RollerMenuModel.class);
27          
28    private String mMenuId = null;
29  
30    /** Vector of MenuImpl objects */
31    private Vector mMenus = new Vector();
32  
33    /** Key used to store selected menu in request */
34    public static final String MENU_KEY = "rmk";
35  
36    /** Key used to store selected menu item in request */
37    public static final String MENU_ITEM_KEY = "rmik";
38  
39    //------------------------------------------------------------------------
40  
41    /** Construct menu model based on hardcoded menu data */  
42    public RollerMenuModel( String menuId, String config, ServletContext ctx )
43    {
44      try
45      {
46        mMenuId = menuId;
47  
48        Digester digester = new Digester();
49        digester.push(this);
50        //digester.setDebug(99);
51        //digester.setClassLoader( getClass().getClassLoader() );
52        //digester.setValidating(true);
53  
54        String menuPath = "menu-bar/menu";
55        String menuItemPath = "menu-bar/menu/menu-item";
56  
57        digester.addObjectCreate( menuPath,
58           "org.roller.presentation.tags.menu.MenuImpl");
59        digester.addSetProperties( menuPath );
60        digester.addSetNext( menuPath,"addMenu",
61           "org.roller.presentation.tags.menu.Menu");
62  
63        digester.addObjectCreate( menuItemPath,
64           "org.roller.presentation.tags.menu.MenuItemImpl");
65        digester.addSetProperties( menuItemPath );
66        digester.addSetNext( menuItemPath, "addItem",
67           "org.roller.presentation.tags.menu.MenuItemImpl");
68  
69        InputStream input = ctx.getResourceAsStream(config);
70        try 
71        {
72          digester.parse(input);
73  
74          if ( getMenus() != null )
75          {
76            // Set first menu as default
77            MenuImpl m0 = (MenuImpl)getMenus().elementAt(0);
78            if ( m0 != null )
79            {
80              m0.setDefault(true);
81            }
82            // Set first menu item in each menu as default
83            Vector menus = getMenus();
84            for (int i=0; i<menus.size(); i++)
85            {
86              MenuImpl menu = (MenuImpl)menus.elementAt(i);
87              menu.setMenuId( mMenuId );
88              Vector menuItems = menu.getMenuItems();
89              if ( menuItems != null )
90              {
91                MenuItemImpl i0=(MenuItemImpl)menuItems.elementAt(0);
92                i0.setDefault(true);
93  
94                for (int j=0; j<menuItems.size(); j++ )
95                {
96                  MenuItemImpl item = 
97                    (MenuItemImpl)menuItems.elementAt(j);
98                  item.setMenuId( mMenuId );
99                }
100             }
101           }
102         }
103       } 
104       catch (SAXException e) 
105       {
106                 mLogger.error("Unexpected exception",e);
107       }
108             finally 
109             {
110                 if ( input!=null )
111                 {
112                     try { input.close(); } 
113                     catch (Exception e) { mLogger.error("Unexpected exception",e); };
114                 }
115             }
116     }  
117     catch (Exception e)
118          {
119             mLogger.error("Unexpected exception",e);
120     }
121   }
122 
123   //----------------------------------------------- MenuModel implementation
124 
125   public Vector getMenus()
126   {
127     return mMenus;
128   }
129 
130   //----------------------------------------------------
131   public Menu getSelectedMenu( HttpServletRequest req )
132   {
133     MenuImpl def = null;
134     MenuImpl selected = null; 
135     for ( int i=0; i<mMenus.size(); i++ ) 
136     {
137       MenuImpl menu = (MenuImpl)mMenus.elementAt(i);
138       if ( menu.isSelected( req ) )
139       {
140         selected = menu;
141         break;
142       }
143       if ( menu.isDefault() )
144       {
145         def = menu;
146       }
147     }
148     if ( selected != null )
149     {
150       return selected;
151     }
152     else
153     {
154       return def;
155 
156     }
157   }
158 
159   //----------------------------------------------------
160   public void addMenu( Menu menu )
161   {
162     mMenus.addElement( menu );
163   }
164 
165   //------------------------------------------------------------------------
166 
167   /** Create params based on incoming request */
168   static Hashtable createParams( HttpServletRequest req )
169   {
170     Hashtable params = new Hashtable();
171     RollerRequest rreq = RollerRequest.getRollerRequest(req);
172     try
173     {
174       UserData user = rreq.getUser();
175       String fid = 
176                 rreq.getFolder()==null ? null : rreq.getFolder().getId();
177       if ( user != null ) 
178       {
179         params.put( RollerRequest.USERNAME_KEY, user.getUserName() );
180       }
181       if ( fid != null ) 
182       {
183         params.put( RollerRequest.FOLDERID_KEY, fid );
184       }
185     }
186     catch (Exception e)
187     {
188       mLogger.error("ERROR getting user in menu model", e);
189     }
190     return params;
191   }
192 }
193 
194