You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(61) |
Dec
(2) |
---|
From: <plu...@us...> - 2003-11-04 21:46:31
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/newsfeed/src/com/plumtree/portlet In directory sc8-pr-cvs1:/tmp/cvs-serv28100/portlet Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/newsfeed/src/com/plumtree/portlet added to the repository |
From: <plu...@us...> - 2003-11-04 21:46:26
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/newsfeed/src/com/plumtree In directory sc8-pr-cvs1:/tmp/cvs-serv28076/plumtree Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/newsfeed/src/com/plumtree added to the repository |
From: <plu...@us...> - 2003-11-04 21:46:22
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/newsfeed/src/com In directory sc8-pr-cvs1:/tmp/cvs-serv28051/com Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/newsfeed/src/com added to the repository |
From: <plu...@us...> - 2003-11-04 21:46:14
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/newsfeed/WEB-INF In directory sc8-pr-cvs1:/tmp/cvs-serv27999/WEB-INF Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/newsfeed/WEB-INF added to the repository |
From: <plu...@us...> - 2003-11-04 21:46:14
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/newsfeed/src In directory sc8-pr-cvs1:/tmp/cvs-serv27999/src Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/newsfeed/src added to the repository |
From: <plu...@us...> - 2003-11-04 21:43:50
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/WEB-INF In directory sc8-pr-cvs1:/tmp/cvs-serv27595/WEB-INF Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/WEB-INF added to the repository |
From: <plu...@us...> - 2003-11-04 21:43:23
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/src/com/plumtree/portlet/portlets In directory sc8-pr-cvs1:/tmp/cvs-serv27461/portlets Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/src/com/plumtree/portlet/portlets added to the repository |
From: <plu...@us...> - 2003-11-04 21:43:17
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/src/com/plumtree/portlet In directory sc8-pr-cvs1:/tmp/cvs-serv27433/portlet Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/src/com/plumtree/portlet added to the repository |
From: <plu...@us...> - 2003-11-04 21:43:11
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/src/com/plumtree In directory sc8-pr-cvs1:/tmp/cvs-serv27394/plumtree Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/src/com/plumtree added to the repository |
From: <plu...@us...> - 2003-11-04 21:43:06
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/src/com In directory sc8-pr-cvs1:/tmp/cvs-serv27372/com Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/src/com added to the repository |
From: <plu...@us...> - 2003-11-04 21:43:00
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/src In directory sc8-pr-cvs1:/tmp/cvs-serv27326/src Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/src added to the repository |
From: <la...@us...> - 2003-11-04 19:24:53
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/mail/src/portlet In directory sc8-pr-cvs1:/tmp/cvs-serv32381/jsr168/collaboration/mail/src/portlet Added Files: MailViewer.java PrefValidator.java Log Message: Mail Portlet --- NEW FILE: MailViewer.java --- package portlet.mail; import java.util.Properties; import java.io.IOException; import javax.servlet.http.Cookie; import javax.portlet.GenericPortlet; import javax.portlet.PortletRequest; import javax.portlet.RenderResponse; import javax.portlet.ActionResponse; import javax.portlet.PortletMode; import javax.portlet.PortletPreferences; import javax.portlet.PortletSession; import javax.portlet.PortletRequestDispatcher; import javax.portlet.PortletException; import javax.portlet.ValidatorException; import javax.portlet.ActionRequest; import javax.portlet.RenderRequest; import javax.mail.Store; import javax.mail.Message; import javax.mail.Folder; import javax.mail.Multipart; import javax.mail.BodyPart; import javax.mail.AuthenticationFailedException; import javax.mail.MessagingException; import javax.mail.internet.InternetAddress; import javax.naming.InitialContext; /** * <p>A mail viewer portlet.</p> */ public class MailViewer extends GenericPortlet { /** * <p>Handle actions.</p> */ public void processAction(ActionRequest request, ActionResponse response) throws PortletException { String action = request.getParameter("ACTION"); if(request.getPortletMode().equals(PortletMode.EDIT) && "EDIT_PREFS".equals(action)) { try { // Store storePreferences(request); // Switch to view mode response.setPortletMode(PortletMode.VIEW); response.setRenderParameter("target", "/sdk/portlets/mail/start.jsp"); } catch(PortletException pe) { // Set a message response.setRenderParameter("message", pe.getMessage()); response.setRenderParameter("target", "/sdk/portlets/mail/pref.jsp"); } } else if(request.getPortletMode().equals(PortletMode.VIEW)) { if("LOGIN".equals(action) || "REFRESH".equals(action)) { try { String remember = request.getParameter("remember"); // Update preferences if(remember != null) { String username = request.getParameter("username"); String password = request.getParameter("password"); // Set a cookie for the user name and // password. Additionally, encode or encrypt // the password. Cookie usernameCookie = new Cookie("USER_NAME_COOKIE", username); usernameCookie.setMaxAge(2592000); // 30 days Cookie passwordCookie = new Cookie("PASSWORD_COOKIE", password); usernameCookie.setMaxAge(86400); // 1 day response.setProperty("Cookie", usernameCookie.toString()); response.setProperty("Cookie", passwordCookie.toString()); } getMail(request); showMessage(request, response); response.setRenderParameter("target", "/sdk/portlets/mail/messages.jsp"); } catch(ValidatorException ve) { // Set a message response.setRenderParameter("message", ve.getMessage()); response.setRenderParameter("target", "/sdk/portlets/mail/start.jsp"); } catch(AuthenticationFailedException afe) { // Set a message response.setRenderParameter("message", afe.getMessage()); response.setRenderParameter("target", "/sdk/portlets/mail/start.jsp"); } catch(MessagingException me) { throw new PortletException(me); } catch(IOException ioe) { throw new PortletException(ioe); } } else if("SHOW_MESSAGE".equals(action)) { try { showMessage(request, response); response.setRenderParameter("target", "/sdk/portlets/mail/messages.jsp"); } catch(MessagingException me) { throw new PortletException(me); } catch(IOException ioe) { throw new PortletException(ioe); } } else if("RESTART".equals(action)) { response.setRenderParameter("target", "/sdk/portlets/mail/start.jsp"); } } } /** * <p>Generate content for view mode.</p> */ public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { // Include the target JSP String target = request.getParameter("target"); if(target == null) { target = "/sdk/portlets/mail/start.jsp"; } PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(target); rd.include(request, response); } /** * <p>Store preferences.</p> */ private void storePreferences(ActionRequest request) throws PortletException { String host = request.getParameter("host"); String protocol = request.getParameter("protocol"); String username = request.getParameter("username"); String password = request.getParameter("password"); String maxMessages = request.getParameter("maxMessages"); try { PortletPreferences prefs = request.getPreferences(); if(host != null) prefs.setValue("host", host); if(protocol != null) prefs.setValue("protocol", protocol); if(username != null) prefs.setValue("username", username); if(password != null) prefs.setValue("password", password); if(maxMessages != null) prefs.setValue("maxMessages", maxMessages); prefs.store(); } catch(ValidatorException ve) { throw ve; } catch(Throwable t) { throw new PortletException(t); } } /** * <p>Retrive mail from INBOX store the messages in the session.</p> */ private void getMail(PortletRequest request) throws PortletException, AuthenticationFailedException { try { // Get mail preferences PortletPreferences prefs = request.getPreferences(); String host = prefs.getValue("host", ""); String protocol = prefs.getValue("protocol", "imap"); String username = request.getParameter("username"); if(username == null) { username = (String) request.getPortletSession().getAttribute("username", PortletSession.APPLICATION_SCOPE); } else { request.getPortletSession().setAttribute("username", username, PortletSession.APPLICATION_SCOPE); } String password = request.getParameter("password"); if(password == null) { password = (String) request.getPortletSession().getAttribute("password", PortletSession.APPLICATION_SCOPE); } else { request.getPortletSession().setAttribute("password", password, PortletSession.APPLICATION_SCOPE); } // Get a mail session InitialContext ic = new InitialContext(); javax.mail.Session mailSession = (javax.mail.Session) ic.lookup("exampleMailSession"); Properties props = new Properties(); props.put("mail.store.protocol", protocol); props.put("mail.imap.host", host); // Override defaults javax.mail.Session mailSession2 = javax.mail.Session.getInstance(props); // Get the store Store store = mailSession2.getStore(); store.connect(host, username, password); // Get INBOX Folder folder = store.getDefaultFolder(); folder = folder.getFolder("INBOX"); folder.open(Folder.READ_ONLY); // Get messages Message[] messages = null; int max = Integer.parseInt(prefs.getValue("maxMessages", "10")); int count = folder.getMessageCount(); if(count > max) { int start = count - max; int end = count - 1; messages = folder.getMessages(start, end); } else { messages = folder.getMessages(); } // Store the messages in the session PortletSession session = request.getPortletSession(); session.setAttribute("messages", messages, PortletSession.APPLICATION_SCOPE); } catch(AuthenticationFailedException afe) { throw afe; } catch(Throwable t) { throw new PortletException(t); } } /** * <p>Retrive a message.</p> */ private void showMessage(ActionRequest request, ActionResponse response) throws MessagingException, IOException { String messagePos = request.getParameter("MESSAGE_POS"); Message[] messages = (Message[]) request.getPortletSession().getAttribute("messages", PortletSession.APPLICATION_SCOPE); if(messages != null) { int pos = messages.length - 1; if(messagePos != null) { try { pos = Integer.parseInt(messagePos); } catch(NumberFormatException nfe) { } } Message message = messages[pos]; // From StringBuffer buf = new StringBuffer(); InternetAddress[] addresses = (InternetAddress[]) message.getFrom(); if(addresses == null || addresses.length == 0) { buf.append("Unknown"); } else { for(int i = 0; i < addresses.length; i++) { buf.append(addresses[i].getAddress()); if(i != (addresses.length - 1)) { buf.append(", "); } } } String from = buf.toString(); // To buf = new StringBuffer(); addresses = (InternetAddress[]) message.getRecipients(Message.RecipientType.TO); if(addresses == null || addresses.length == 0) { buf.append("Unknown"); } else { for(int i = 0; i < addresses.length; i++) { buf.append(addresses[i].getAddress()); if(i != (addresses.length - 1)) { buf.append(", "); } } } String to = buf.toString(); // CC buf = new StringBuffer(); addresses = (InternetAddress[]) message.getRecipients(Message.RecipientType.CC); if(addresses == null || addresses.length == 0) { // Nothing } else { for(int i = 0; i < addresses.length; i++) { buf.append(addresses[i].getAddress()); if(i != (addresses.length - 1)) { buf.append(", "); } } } String cc = buf.toString(); // Content String content = ""; if(message.getContent() == null || message.getContentType() == null) { content = "Can not display"; } else if(message.getContent() instanceof String) { content = (String) message.getContent(); } else if(message.getContent() instanceof Multipart) { // Try to display the first text part Multipart multipart = (Multipart) message.getContent(); if(multipart.getCount() > 0) { for(int i = 0; i < multipart.getCount(); i++) { BodyPart bodyPart = multipart.getBodyPart(i); if(bodyPart.getContent() instanceof String) { content = (String) bodyPart.getContent(); break; } } if(content.equals("")) { content = "Can not display this multi-part message"; } } else { content = "No body for this message"; } } // Set data in the request response.setRenderParameter("FROM", from); response.setRenderParameter("TO", to); response.setRenderParameter("CC", cc); response.setRenderParameter("CONTENT", content); response.setRenderParameter("SUBJECT", message.getSubject()); } } } --- NEW FILE: PrefValidator.java --- package portlet.mail; import javax.portlet.PortletPreferences; import javax.portlet.PreferencesValidator; import javax.portlet.ValidatorException; import java.util.ArrayList; /** * <p>Validates MailViewer preferences.</p> */ public class PrefValidator implements PreferencesValidator { public void validate(PortletPreferences prefs) throws ValidatorException { ArrayList failedKeys = new ArrayList(); String host = prefs.getValue("host", ""); if(host.equals("")) { failedKeys.add("host"); } String protocol = prefs.getValue("protocol", "imap"); if(!protocol.equals("imap") && !protocol.equals("pop3")) { failedKeys.add("protocol"); } String maxMessages = prefs.getValue("maxMessages", "10"); try { Integer.parseInt(maxMessages); } catch(NumberFormatException nfe) { failedKeys.add("maxMessages"); } if(failedKeys.size() > 0) { throw new ValidatorException("Failed validation", failedKeys); } } } |
From: <la...@us...> - 2003-11-04 19:24:53
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/mail/WEB-INF In directory sc8-pr-cvs1:/tmp/cvs-serv32381/jsr168/collaboration/mail/WEB-INF Added Files: portlet.xml web.xml Log Message: Mail Portlet --- NEW FILE: portlet.xml --- <?xml version="1.0" encoding="UTF-8"?> <portlet-app version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet" xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"> <portlet> <description>View Email</description> <portlet-name>mailViewer</portlet-name> <portlet-class>portlet.MailViewer</portlet-class> <expiration-cache>60</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>edit</portlet-mode> <portlet-mode>help</portlet-mode> </supports> <portlet-info> <title>View Mail</title> </portlet-info> <portlet-preferences> <preference> <name>host</name> <value>boulder.beasys.com</value> </preference> <preference> <name>protocol</name> <value>imap</value> </preference> <preference> <name>username</name> <value></value> </preference> <preference> <name>password</name> <value></value> </preference> <preferences-validator>portlet.PrefValidator</preferences-validator> </portlet-preferences> </portlet> </portlet-app> --- NEW FILE: web.xml --- <?xml version="1.0" ?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> </web-app> |
From: <la...@us...> - 2003-11-04 19:24:23
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/mail/src/portlet In directory sc8-pr-cvs1:/tmp/cvs-serv32300/portlet Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/mail/src/portlet added to the repository |
From: <la...@us...> - 2003-11-04 19:24:09
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/mail/WEB-INF In directory sc8-pr-cvs1:/tmp/cvs-serv32229/WEB-INF Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/mail/WEB-INF added to the repository |
From: <la...@us...> - 2003-11-04 19:24:09
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/mail/src In directory sc8-pr-cvs1:/tmp/cvs-serv32229/src Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/mail/src added to the repository |
From: <la...@us...> - 2003-11-04 19:22:35
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/upload/src/portlet In directory sc8-pr-cvs1:/tmp/cvs-serv31860/jsr168/webcontent/upload/src/portlet Added Files: FileUploadPortlet.java Log Message: Upload Portlet --- NEW FILE: FileUploadPortlet.java --- package portlet.upload; import java.io.IOException; import java.io.InputStream; import java.io.ByteArrayOutputStream; import javax.portlet.GenericPortlet; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.portlet.PortletException; import javax.portlet.PortletRequestDispatcher; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; public class FileUploadPortlet extends GenericPortlet { /** * <p>Render a form to upload data, and to render uploaded * data.</p> */ protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { // Include the form PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/sdk/portlets/upload/upload.jsp"); rd.include(request, response); } /** * <p>Process an uploaded file.</p> */ public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException { InputStream in = request.getPortletInputStream(); if(in != null) { ByteArrayOutputStream out = new ByteArrayOutputStream(); int c = -1; try { while((c = in.read()) != -1) { out.write(c); } } finally { in.close(); } byte[] bytes = out.toByteArray(); // Set the uploaded data as a render parameter. The // upload.jsp will render this below the form. String uploadData = new String(bytes, "UTF-8"); response.setRenderParameter("uploadData", uploadData); } } } |
From: <la...@us...> - 2003-11-04 19:22:35
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/upload/WEB-INF In directory sc8-pr-cvs1:/tmp/cvs-serv31860/jsr168/webcontent/upload/WEB-INF Added Files: portlet.xml web.xml Log Message: Upload Portlet --- NEW FILE: portlet.xml --- <?xml version="1.0" encoding="UTF-8"?> <portlet-app version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet" xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"> <portlet> <description>File Upload</description> <portlet-name>fileUploadPortlet</portlet-name> <portlet-class>portlet.FileUploadPortlet</portlet-class> <portlet-info> <title>Upload a File</title> </portlet-info> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> </portlet> </portlet-app> --- NEW FILE: web.xml --- <?xml version="1.0" ?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> </web-app> |
From: <la...@us...> - 2003-11-04 19:22:05
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/upload/src/portlet In directory sc8-pr-cvs1:/tmp/cvs-serv31732/portlet Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/upload/src/portlet added to the repository |
From: <la...@us...> - 2003-11-04 19:21:49
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/upload/WEB-INF In directory sc8-pr-cvs1:/tmp/cvs-serv31659/WEB-INF Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/upload/WEB-INF added to the repository |
From: <la...@us...> - 2003-11-04 19:21:49
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/upload/src In directory sc8-pr-cvs1:/tmp/cvs-serv31659/src Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/upload/src added to the repository |
From: <la...@us...> - 2003-11-04 17:50:31
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/wizard In directory sc8-pr-cvs1:/tmp/cvs-serv13309/wizard Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/wizard added to the repository |
From: <la...@us...> - 2003-11-04 17:50:16
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/upload In directory sc8-pr-cvs1:/tmp/cvs-serv13249/upload Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/upload added to the repository |
From: <la...@us...> - 2003-11-04 17:49:25
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/mail In directory sc8-pr-cvs1:/tmp/cvs-serv13006/mail Log Message: Directory /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/mail added to the repository |
From: <plu...@us...> - 2003-11-04 04:10:49
|
Update of /cvsroot/portlet-opensrc/portlet-opensrc/jsr168/webcontent/googlesearch/com/plumtree/portlet/portlets In directory sc8-pr-cvs1:/tmp/cvs-serv14881/jsr168/webcontent/googlesearch/com/plumtree/portlet/portlets Added Files: GooglePortlet.java Log Message: new samples for google search and rss --- NEW FILE: GooglePortlet.java --- /* Copyright (c) 2003, Plumtree Software All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions is met: Neither the name of Plumtree Software nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.plumtree.portlet.portlets; import java.io.IOException; import java.io.PrintWriter; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.GenericPortlet; import javax.portlet.PortletException; import javax.portlet.PortletMode; import javax.portlet.PortletSecurityException; import javax.portlet.PortletURL; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.portlet.UnavailableException; import javax.portlet.WindowState; import com.google.soap.search.GoogleSearch; import com.google.soap.search.GoogleSearchResult; import com.google.soap.search.GoogleSearchResultElement; /** * Portlet Demonstrating Google Search */ public class GooglePortlet extends GenericPortlet { /** Search Query */ private static final String SEARCH_QUERY = "searchQuery"; /** Start result- i.e. where to start */ private static final String START_RESULT = "startResult"; /** Key for google search key */ public static final String KEY = "KEY"; /**default content type*/ public static final String CONTENT_TYPE_HTML = "text/html;charset=UTF-8"; /** * @see javax.servlet.portlet.Portlet#processAction(javax.servlet.portlet.ActionRequest, * javax.servlet.portlet.ActionResponse) */ public void processAction( ActionRequest request, ActionResponse response) throws UnavailableException, PortletSecurityException, PortletException, IOException { String searchQuery = request.getParameter(GooglePortlet.SEARCH_QUERY); if (null != searchQuery) { response.setRenderParameter( GooglePortlet.SEARCH_QUERY, searchQuery); } String startResult = request.getParameter(GooglePortlet.START_RESULT); if (null != startResult) { response.setRenderParameter( GooglePortlet.START_RESULT, startResult); } } /** * Displays a generic help message and a back button * @see javax.servlet.portlet.GenericPortlet#doHelp(javax.servlet.portlet. * RenderRequest,javax.servlet.portlet.RenderRequest) */ protected void doHelp( RenderRequest request, RenderResponse response) throws UnavailableException, PortletSecurityException, PortletException, IOException { response.setContentType(CONTENT_TYPE_HTML); PrintWriter out = response.getWriter(); out.println("<table>"); out.println("<tr>"); out.println("<td>"); PortletURL renderURL = response.createRenderURL(); renderURL.setPortletMode(PortletMode.VIEW); out.println( "The Google Portlet searches Google, using the specified query.<BR/> The number of results returned at a time is ten- this is a limitation of the Google API<BR/> To change the key, or adust safe search, contact your administrator.<BR/> <a href=\"" + renderURL.toString() + "\">back</a>"); out.println("</td>"); out.println("</tr>"); out.println("</form>"); out.println("</table>"); } /** * @see javax.servlet.portlet.GenericPortlet#doView(javax.servlet.portlet.RenderRequest,javax.servlet.portlet.RenderRequest) */ protected void doView( RenderRequest request, RenderResponse response) throws UnavailableException, PortletSecurityException, PortletException, IOException { try { String searchQuery = request.getParameter(GooglePortlet.SEARCH_QUERY); String startResult = request.getParameter(GooglePortlet.START_RESULT); int totalResults = 0; response.setContentType(CONTENT_TYPE_HTML); PrintWriter out = response.getWriter(); String key = this.getInitParameter("key"); if ((null == key) || key.equals("")) { out.println( "Key for search is not available. Check with your administrator to obtain the Google API Key"); return; } //js function to open windows StringBuffer buff = new StringBuffer(200); buff.append( "<SCRIPT language=\"Javascript\">function openGoogleWin(href){"); buff.append("var newWin = window.open(href);"); buff.append("}</SCRIPT>"); out.print(buff.toString()); //make a button to go into max mode //see if we want to use slightly different code or richer content? WindowState state = request.getWindowState(); WindowState otherState = null; if (state.equals(WindowState.MAXIMIZED)) { otherState = WindowState.NORMAL; } else { otherState = WindowState.MAXIMIZED; } PortletURL otherUrl = response.createRenderURL(); if (!state.equals(WindowState.MAXIMIZED)) { otherUrl.setWindowState(otherState); out.println( "<a href=\"" + otherUrl.toString() + "\">" + otherState.toString() + "</a>"); } GoogleSearchResult result = null; GoogleSearchResultElement[] elements = null; if (null != searchQuery) { GoogleSearch googleSearch = new GoogleSearch(); googleSearch.setKey(key); googleSearch.setQueryString(searchQuery); if (null != startResult) { int start = Integer.parseInt(startResult); googleSearch.setStartResult(start); } result = googleSearch.doSearch(); elements = result.getResultElements(); } PortletURL actionURL = response.createActionURL(); actionURL.setWindowState(state); out.println("<table>"); out.println( "<form name=\"inputForm\" target=\"_self\" method=\"POST\" action=\"" + actionURL.toString() + "\">"); out.println("<tr>"); out.println("<td>"); PortletURL renderLink = response.createRenderURL(); renderLink.setPortletMode(PortletMode.HELP); out.println("<a href=\"" + renderLink + "\">help</a>"); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println(" "); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println( "<input type=\"text\" name=\"" + GooglePortlet.SEARCH_QUERY + "\" value=\"\">"); out.println( "<input name=\"inputSubmit\" type=\"submit\" value=\"submit\">"); out.println("</td>"); out.println("</tr>"); out.println("</form>"); out.println("</table>"); if (null != searchQuery) { out.println("<table>"); out.println("<tr>"); out.println("<td>"); totalResults = result.getEstimatedTotalResultsCount(); out.println("# of results is " + totalResults); out.println("</td>"); out.println("</tr>"); for (int i = 0; i < elements.length; i++) { GoogleSearchResultElement element = elements[i]; out.println("<tr>"); out.println("<td>"); out.println( "<a href=\"javascript:openGoogleWin('" + element.getURL() + "');\">" + element.getTitle() + "</a>"); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println(element.getSummary()); out.println("</td>"); out.println("</tr>"); } out.println("<tr>"); out.println("<td>"); out.println(" "); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println(" "); out.println("</td>"); out.println("</tr>"); if (totalResults > 0) { printLinks( response, out, totalResults, result.getStartIndex(), searchQuery, state); } out.println("</table>"); } } catch (Exception e) { throw new PortletException(e); } } /** * Prints the links 1...10 at the bottom of the portlet * * @param response RenderResponse * @param out PrintWriter * @param results total number of results * @param currentPos which page we are on * @param searchQuery query * @param windowState current window state */ private void printLinks( RenderResponse response, PrintWriter out, int results, int currentPos, String searchQuery, WindowState windowState) { int total = 10; total = ((results > 100) ? total : (results / 10)); if (currentPos != 1) { currentPos = (currentPos - 1) / 10; } out.println("<tr>"); out.println("<td>"); for (int i = 1; i <= total; i++) { if (i == currentPos) { out.print(i); } else { PortletURL actionURL = response.createActionURL(); try { actionURL.setWindowState(windowState); } catch (Exception e) { //ignore } actionURL.setParameter( GooglePortlet.SEARCH_QUERY, searchQuery); actionURL.setParameter( GooglePortlet.START_RESULT, "" + (i * 10)); out.print("<a href=\""); out.print(actionURL.toString()); out.print("\">"); out.print(i); out.println("</a>"); } out.print(" "); } out.println("</td>"); out.println("</tr>"); } } |