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>");
}
}
|