Source code: org/roller/presentation/weblog/tags/WeblogEntryMacros.java
1 package org.roller.presentation.weblog.tags;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5 import org.apache.struts.util.RequestUtils;
6 import org.roller.model.RefererManager;
7 import org.roller.model.Roller;
8 import org.roller.model.WeblogManager;
9 import org.roller.pojos.RefererData;
10 import org.roller.pojos.WeblogEntryData;
11 import org.roller.presentation.RollerRequest;
12 import org.roller.presentation.velocity.Macros;
13
14 import java.text.SimpleDateFormat;
15 import java.util.ArrayList;
16 import java.util.Date;
17 import java.util.Hashtable;
18 import java.util.Iterator;
19 import java.util.List;
20
21 import javax.servlet.http.HttpServletRequest;
22 import javax.servlet.jsp.PageContext;
23
24 //////////////////////////////////////////////////////////////////////////////
25
26 /**
27 * Provides the macros object that is available to Roller day templates.
28 */
29 public class WeblogEntryMacros extends Macros
30 {
31 private static Log mLogger =
32 LogFactory.getFactory().getInstance(RollerRequest.class);
33
34 private Date mDate = null;
35
36 //-----------------------------------------------------------------------
37 /**
38 * Construct macros object for page context and date.
39 * @param ctx JSP page context being processed.
40 * @param date Data formatter for entry's date.
41 */
42 public WeblogEntryMacros( PageContext ctx, Date date )
43 {
44 super( ctx, null );
45 mDate = date;
46 }
47
48 //-----------------------------------------------------------------------
49 public List getDayLinkbacks()
50 {
51 List list = new ArrayList();
52 try
53 {
54 List refs = null;
55
56 Roller roller = getRollerRequest().getRoller();
57 String userName = getRollerRequest().getUser().getUserName();
58 RefererManager refmgr = roller.getRefererManager();
59
60 refs = refmgr.getReferersToDate( userName, view("yyyyMMdd") );
61
62 for (Iterator rdItr = refs.iterator(); rdItr.hasNext();) {
63 RefererData referer = (RefererData) rdItr.next();
64
65 if ( referer.getTitle()==null ) continue;
66 if ( referer.getTitle().trim().equals("") ) continue;
67 if ( referer.getExcerpt()==null ) continue;
68 if ( referer.getExcerpt().trim().equals("") ) continue;
69
70 if ( referer.getVisible().booleanValue()
71 || getRollerRequest().isUserAuthorizedToEdit() )
72 {
73 list.add( referer );
74 }
75 }
76
77 }
78 catch (Exception e)
79 {
80 mLogger.error("Getting referers",e);
81 }
82 return list;
83 }
84
85 //-----------------------------------------------------------------------
86 /** Show entry date using standard format.
87 * @deprecated Use methods on
88 * {@link org.roller.presentation.weblog.WeblogEntryDataEx WeblogEntryDataEx}
89 * instead.
90 */
91 public String showEntryDate()
92 {
93 return this.toString();
94 }
95
96 //-----------------------------------------------------------------------
97 /** Show entry date using specified
98 * {@link java.text.SimpleDateFormat SimpleDateFormat}
99 * format.
100 * @deprecated Use methods on
101 * {@link org.roller.presentation.weblog.WeblogEntryDataEx WeblogEntryDataEx}
102 * instead.
103 */
104 public String showFormattedEntryDate( String format )
105 {
106 return this.view( format );
107 }
108
109 //-----------------------------------------------------------------------
110 /**
111 * Show entry permalink and an edit-entry link if logged in as editor.
112 * @param entry Weblog entry for which permalink is to be shown.
113 * @deprecated Use methods on
114 * {@link org.roller.presentation.weblog.WeblogEntryDataEx WeblogEntryDataEx}
115 * instead.
116 * @return HTML for displaying entry permalink icon with permalink.
117 */
118 public String showEntryPermalink( WeblogEntryData entry )
119 {
120 HttpServletRequest request = getRollerRequest().getRequest();
121 String userName = getRollerRequest().getUser().getUserName();
122
123 String edit = null;
124 try
125 {
126 if ( getRollerRequest().isUserAuthorizedToEdit() )
127 {
128 Hashtable params = new Hashtable();
129 params.put( RollerRequest.WEBLOGENTRYID_KEY, entry.getId());
130 params.put( RollerRequest.USERNAME_KEY, userName);
131 params.put( RollerRequest.ANCHOR_KEY, entry.getAnchor());
132 edit = RequestUtils.computeURL( mPageContext,
133 "editWeblog", null, null, params,null,false);
134 }
135 }
136 catch (Exception e)
137 {
138 // should never happen, but if it does:
139 mLogger.error("ERROR creating Edit-Entry URL",e);
140 }
141
142 StringBuffer sb = new StringBuffer();
143 sb.append( "<a href=\"");
144 sb.append( request.getContextPath());
145 sb.append( "/page/");
146 sb.append( userName );
147 sb.append( "/");
148 sb.append( showFormattedEntryDate("yyyyMMdd") );
149 sb.append( "#" );
150 sb.append( entry.getAnchor() );
151 sb.append( "\" title=\"Permanent link to this weblog entry\"" );
152 sb.append( " class=\"entrypermalink\">#</a>" );
153 if ( edit != null )
154 {
155 sb.append( " [<a href=\""+edit+"\">Edit</a>]" );
156 }
157
158 return sb.toString();
159 }
160
161 //-----------------------------------------------------------------------
162 /**
163 * Show day permalink and an edit-entry link if logged in as editor.
164 * @return HTML for displaying day permalink icon with permalink.
165 */
166 public String showDayPermalink()
167 {
168 HttpServletRequest request =
169 (HttpServletRequest)mPageContext.getRequest();
170
171 String userName =
172 RollerRequest.getRollerRequest(request).getUser().getUserName();
173
174 StringBuffer sb = new StringBuffer();
175 sb.append( "<a href=\"");
176 sb.append( request.getContextPath());
177 sb.append( "/page/");
178 sb.append( userName );
179 sb.append( "/");
180 sb.append( showFormattedEntryDate("yyyyMMdd") );
181 sb.append( "\"><img class=\"daypermalink\" src=\"" );
182 sb.append( request.getContextPath() );
183 sb.append( "/images/permalink.gif\" ");
184 sb.append( "title=\"Permanent link to this day\" " );
185 sb.append( "alt=\"" + showFormattedEntryDate("yyyyMMdd") + "\"/></a>" );
186
187 return sb.toString();
188 }
189
190 //-----------------------------------------------------------------------
191
192 public String showCommentsLink( WeblogEntryData entry )
193 {
194 if (entry.getWebsite().getAllowComments().booleanValue())
195 {
196 HttpServletRequest request =
197 (HttpServletRequest)mPageContext.getRequest();
198
199 int commentCount = 0;
200 RollerRequest rreq = null;
201 try
202 {
203 rreq = RollerRequest.getRollerRequest(request);
204 WeblogManager mgr = rreq.getRoller().getWeblogManager();
205 List comments = mgr.getComments( entry.getId() );
206 commentCount = comments.size();
207 }
208 catch (Exception e)
209 {
210 // should never happen, but if it does:
211 if (rreq != null)
212 mLogger.error("ERROR in showCommentsLink",e);
213 else
214 System.err.println("ERROR in showCommentsLink:"+e.toString());
215 }
216 StringBuffer link = new StringBuffer( request.getContextPath());
217 link.append( "/comment.do?method=edit&entryid=");
218 link.append( entry.getId() );
219
220 StringBuffer sb = new StringBuffer("<a href=\"");
221 sb.append( link );
222 sb.append("\" onclick=\"window.open('");
223 sb.append( link ).append("','comments','");
224 sb.append("width=480,height=480,scrollbars=yes,status=yes');");
225 sb.append("return false\" class=\"entrycommentslink\">Comments [");
226 sb.append(commentCount).append("]</a>");
227 return sb.toString();
228 }
229 return "";
230 }
231
232 /** Format date using pattern */
233 public String view( String pattern )
234 {
235 SimpleDateFormat format = new SimpleDateFormat( pattern );
236 return format.format( mDate );
237 }
238 /** Format date using standard format. */
239 public String toString()
240 {
241 return view("EEEE MMMM dd, yyyy");
242 }
243 }
244