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