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

Quick Search    Search Deep

Source code: org/roller/presentation/bookmarks/tags/ViewBookmarksTag.java


1   package org.roller.presentation.bookmarks.tags;
2   
3   import org.apache.commons.logging.Log;
4   import org.apache.commons.logging.LogFactory;
5   import org.roller.model.BookmarkManager;
6   import org.roller.pojos.BookmarkComparator;
7   import org.roller.pojos.BookmarkData;
8   import org.roller.pojos.FolderData;
9   import org.roller.pojos.UserData;
10  import org.roller.presentation.RollerContext;
11  import org.roller.presentation.RollerRequest;
12  import org.roller.util.Utilities;
13  
14  import java.io.IOException;
15  import java.io.PrintWriter;
16  import java.net.MalformedURLException;
17  import java.util.Enumeration;
18  import java.util.Hashtable;
19  import java.util.Vector;
20  
21  import javax.servlet.http.HttpServletRequest;
22  import javax.servlet.jsp.JspException;
23  import javax.servlet.jsp.PageContext;
24  import javax.servlet.jsp.tagext.Tag;
25  
26  
27  /**
28   * <p>Displays a folder of bookmarks or a table that shows all folders.
29   * If the folderName property is set then this tag will display the bookmarks
30   * in that folder, separated by BR tag line breaks. If the folderName
31   * property is not set, this tag will display a table of bookmarks.
32   * </p>
33   * <p>The bookmarks table display uses the Folder Column and Row values
34   * to position the Folders in a table. The bookmarks within each folder
35   * are ordered using the Bookmark Priority value. A bookmark's HREF tag
36   * is given a CSS class of rBookmark_N where N is the Bookmark's Weight value.
37   * </p>
38   * @jsp.tag name="ViewBookmarks"
39   */
40  public class ViewBookmarksTag extends org.roller.presentation.tags.HybridTag
41  {
42      private static Log mLogger = 
43         LogFactory.getFactory().getInstance(ViewBookmarksTag.class);
44  
45      /** @jsp.attribute */
46      public String getFolderName() { return mFolderName; }
47      public void setFolderName(String v) { mFolderName = v; }
48      private String mFolderName = null;
49  
50      /** @jsp.attribute */
51      public String getTitle() { return mTitle; }
52      public void setTitle(String v) { mTitle = v; }
53      private String mTitle = null;
54  
55      /** @jsp.attribute */
56      public boolean getShowFolderName() { return mShowFolderName; }
57      public void setShowFolderName(boolean v) { mShowFolderName = v; }
58      private boolean mShowFolderName = true;
59  
60      /** @jsp.attribute */
61      public boolean getExpandingFolder() { return mExpandingFolder; }
62      public void setExpandingFolder(boolean v) { mExpandingFolder = v; }
63      private boolean mExpandingFolder = false;
64      
65      private Hashtable mParameters = new Hashtable();
66  
67      //------------------------------------------------------------------------
68  
69      public String view( String folderName, String title )
70      {
71          mFolderName = folderName;
72          mTitle = title;
73          return emit();
74      }
75  
76      public String view( String folderName, boolean showFolderName )
77      {
78          mFolderName = folderName;
79          mShowFolderName = showFolderName;
80          return emit();
81      }
82  
83      public String view( String folderName, boolean showFolderName, boolean expandingFolder )
84      {
85          mFolderName = folderName;
86          mShowFolderName = showFolderName;
87          mExpandingFolder = expandingFolder;
88          return emit();
89      }
90      
91      //-------------------------------------------------------------
92      /**
93       * Process start tag
94       * @return EVAL_SKIP_BODY
95       */
96      public int doStartTag( PrintWriter pw ) throws JspException
97      {
98          try
99          {
100             HttpServletRequest req =
101                 (HttpServletRequest)pageContext.getRequest();
102             RollerRequest rreq = RollerRequest.getRollerRequest(req);
103             BookmarkManager bookmarkMgr =
104                 rreq.getRoller().getBookmarkManager();
105             UserData user = rreq.getUser();
106 
107             FolderData fd = bookmarkMgr.getFolder(
108                 user.getUserName(), mFolderName );
109 
110             if ( fd == null )
111             {
112                 pw.print("<span class=\"error\">");
113                 pw.print("Error fetching folder named "+mFolderName);
114                 pw.print("</span>");
115                 return  Tag.SKIP_BODY;
116             }
117             emitFolderHTML( pw, pageContext, fd, user );
118             return Tag.SKIP_BODY;
119         }
120         catch (Exception e)
121         {
122             mLogger.error("Exception",e);
123             throw new JspException(
124                 e.getClass().toString()+": "+e.getMessage(),e);
125         }
126     }
127 
128     //------------------------------------------------------------------------
129     public void emitBookmarkHTML( PrintWriter pw, PageContext ctx,
130         BookmarkData bookmark, UserData user )
131         throws IOException, MalformedURLException
132     {
133         HttpServletRequest request = (HttpServletRequest)ctx.getRequest();
134         String cpath = request.getContextPath();
135 
136         String resourcePath = request.getContextPath()
137                 + RollerContext.getUploadPath(pageContext.getServletContext())
138                     + "/" + user.getUserName();
139 
140         if ( bookmark.getImage()!=null
141          && !bookmark.getImage().trim().equals("") )
142         {
143             pw.print("<a href=\""+bookmark.getUrl()+"\">");
144             pw.println("<img src=\""
145                 + resourcePath + "/" + bookmark.getImage() + "\" "
146                 + "alt=\"" + bookmark.getName() + "\" /> " );
147             pw.println("</a><br />");
148         }
149         else if ( bookmark.getFeedUrl()!=null
150               && !bookmark.getFeedUrl().trim().equals("") )
151         {
152             pw.print("<a class=\"rBookmark\" href=\""+bookmark.getUrl()+"\"");
153             if ( !bookmark.getDescription().trim().equals("") )
154             {
155                 pw.print(" title=\""+bookmark.getDescription()+"\"");
156             }
157             pw.print(" >");
158             pw.println( bookmark.getName()+"</a>");
159 
160             pw.println( "<a href=\""+bookmark.getFeedUrl()+"\">" );
161             pw.print  ( "<img src=\""+cpath+"/images/smrssbadge.gif\" " );
162             pw.println(     "alt=\"URL of site's RSS feed\"" );
163             pw.println(     "class=\"smrssbadge\" /></a>" );
164 
165             pw.println( "<br />" );
166         }
167         else
168         {
169             pw.print( "<a href=\"" );
170             pw.print( bookmark.getUrl() );
171             pw.print( "\" " );
172             pw.print( "class=\"rBookmark" );
173             pw.print( bookmark.getWeight() );
174             pw.print( "\" " );
175             pw.print( "title=\""  );
176             pw.print( bookmark.getDescription() );
177             pw.print( "\" >" );
178             pw.print( bookmark.getName() );
179             pw.println( "</a><br />" );
180         }
181     }
182 
183     //------------------------------------------------------------------------
184     public void emitFolderHTML( PrintWriter pw, PageContext ctx,
185         FolderData folder, UserData user )
186         throws IOException, MalformedURLException
187     {
188         HttpServletRequest request = (HttpServletRequest)ctx.getRequest();
189         String cpath = request.getContextPath();
190         // replace spaces with underscores
191         String divId = Utilities.stringReplace( folder.getName(), " ", "_" );
192         // remove single quotes to prevent javascript errors
193         divId = Utilities.stringReplace( divId, "'", "" );
194         
195         if ( mShowFolderName && !mExpandingFolder )
196         {
197             pw.println( "<div class=\"rFolder\">"+folder.getName()+"</div>" );
198         }
199 
200         if ( mShowFolderName && mExpandingFolder )
201         {            
202             pw.print( "<div class=\"rFolder\"><a href=\"javascript:" );
203             pw.print( "toggleFolder('"+divId+"')\"><span id=\"i"+divId+"\">" );
204             pw.print( "+</span> "+folder.getName()+"</a></div>" );
205             pw.println( "<div id=\""+divId+"\" style=\"display: none\">" );       
206         }
207         
208         Vector bookmarks = folder.getBookmarks();
209         java.util.Collections.sort( bookmarks, new BookmarkComparator() );
210         Enumeration bookmarkEnum = bookmarks.elements();
211         while ( bookmarkEnum.hasMoreElements() )
212         {
213             BookmarkData bookmark =
214                 (BookmarkData)bookmarkEnum.nextElement();
215             emitBookmarkHTML( pw, ctx, bookmark, user );
216         }
217         
218         if (mShowFolderName && mExpandingFolder)
219         {
220             pw.println( "</div>" );       
221             pw.println( "<script type=\"text/javascript\">" );
222             pw.println( "<!--" );
223             pw.println( "  folderPreference('"+divId+"');" );
224             pw.println( "// -->");
225             pw.println( "</script>" );
226         }
227     }
228 }
229