/*
* Created on 08-May-2003
*/
package net.sf.jportlet.portlets.bookmark;
import java.net.MalformedURLException;
import java.net.URL;
import net.sf.jportlet.portlet.Portlet;
import net.sf.jportlet.portlet.PortletException;
import net.sf.jportlet.portlet.PortletRequest;
import net.sf.jportlet.portlet.PortletResponse;
import net.sf.jportlet.portlet.PortletURI;
import net.sf.jportlet.portlet.PortletWindow;
import net.sf.jportlet.portlet.User;
import net.sf.jportlet.portlet.event.ActionEvent;
import net.sf.jportlet.portlet.event.ActionListener;
import net.sf.jportlet.portlets.ObjectNotFoundException;
import net.sf.jportlet.portlets.ValidationHelper;
import net.sf.jportlet.portlets.bookmark.impl.BookmarkImpl;
/**
* @author <a href="mailto:tchbansi@sourceforge.net">Herve Tchepannou</a>
*/
public class BookmarkActionListener
implements ActionListener
{
//~ Methods ----------------------------------------------------------------
/**
* @see net.sf.jportlet.portlet.event.ActionListener#actionPerformed(net.sf.jportlet.portlet.event.ActionEvent)
*/
public void actionPerformed( ActionEvent event )
throws PortletException
{
String action = event.getAction( );
if ( ActionEvent.ACTION_EDIT.equals( action ) )
{
PortletRequest request = event.getPortletRequest( );
String command = request.getParameter( "command" );
if ( "delete".equals( command ) )
{
doDelete( event, request );
}
else if ( "new".equals( command ) )
{
doNew( event, request );
}
else if ( "edit".equals( command ) )
{
doEditBookmark( event, request );
}
else if ( "save".equals( command ) )
{
doSave( event, request );
}
else if ( "cancel".equals( command ) )
{
doCancel( event, request );
}
else
{
throw new PortletException( "Invalid command: " + action + "/" + command );
}
PortletResponse response = event.getPortletResponse();
PortletURI nextURI = response.createURI(Portlet.Mode.EDIT, PortletWindow.State.MAXIMIZED );
event.setNextURI( nextURI );
}
else
{
throw new PortletException( "Invalid action: " + action );
}
}
private void doCancel( ActionEvent event,
PortletRequest request )
{
}
private void doDelete( ActionEvent event,
PortletRequest request )
throws PortletException
{
String ids[] = request.getParameterValues( "id" );
if ( ( ids != null ) && ( ids.length > 0 ) )
{
getBookmarkManager( event ).deleteBookmarks( ids );
notifyDataChanged(event);
}
else
{
ValidationHelper.addError( "no_selection", event);
}
}
private void doEditBookmark( ActionEvent event,
PortletRequest request )
throws PortletException
{
String id = request.getParameter( "id" );
if ( id != null )
{
try
{
Bookmark bookmark = getBookmarkManager( event ).findBookmark( id );
request.setAttribute( "bookmark", bookmark );
}
catch ( ObjectNotFoundException e )
{
throw new PortletException( "Bookmark#" + id + " not found" );
}
}
else
{
ValidationHelper.addError( "no_selection", event);
}
}
private void doNew( ActionEvent event,
PortletRequest request )
{
request.setAttribute( "bookmark", new BookmarkImpl( "", "", "", "", null ) );
}
private void doSave( ActionEvent event,
PortletRequest request )
throws PortletException
{
String id = request.getParameter( "id" ).trim( );
String title = request.getParameter( "title" ).trim( );
String description = request.getParameter( "description" ).trim( );
String url = request.getParameter( "url" ).trim( );
User user = request.getUser( );
if ( !validate( title, url, description, event ) )
{
BookmarkImpl bookmark = new BookmarkImpl( id, title, url, description, user );
request.setAttribute( "bookmark", bookmark );
}
else
{
BookmarkManager mgr = getBookmarkManager( event );
try
{
if ( id.length( ) == 0 )
{
mgr.createBookmark( title, new URL( url ), description, user );
}
else
{
mgr.updateBookmark( id, title, new URL( url ), description );
}
notifyDataChanged(event);
}
catch ( MalformedURLException e )
{
throw new PortletException( "Bad URL: " + url, e );
}
catch ( ObjectNotFoundException e )
{
throw new PortletException( "The bookmark you are tring to update no longer exist", e );
}
}
}
private BookmarkManager getBookmarkManager( ActionEvent event )
throws PortletException
{
return ( ( BookmarkPortlet ) event.getPortlet( ) ).createBookmarkManager( );
}
private boolean validate( String title,
String url,
String description,
ActionEvent event )
{
ValidationHelper.assertNotEmpty( title, "error_empty_title", event );
ValidationHelper.assertNotEmpty( url, "error_empty_url", event );
ValidationHelper.assertURL( url, "error_malformed_url", event );
ValidationHelper.assertLength( description, 255, "error_description_length", event );
return !event.hasErrors( );
}
private void notifyDataChanged( ActionEvent event )
{
( ( BookmarkPortlet ) event.getPortlet( ) ).dataChanged();
}
}