taylor      2004/06/25 00:20:59

  Modified:    applications/demo/src/java/org/apache/jetspeed/demo/simple
                        PickANumberServlet.java
  Log:
  Cleaned up and fixed bugs in Pick a Number portlet
  Added Edit Mode to set a preference on the high range
  
  http://nagoya.apache.org/jira/browse/JS2-45
  
  Revision  Changes    Path
  1.5       +113 -4    
jakarta-jetspeed-2/applications/demo/src/java/org/apache/jetspeed/demo/simple/PickANumberServlet.java
  
  Index: PickANumberServlet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed-2/applications/demo/src/java/org/apache/jetspeed/demo/simple/PickANumberServlet.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- PickANumberServlet.java   29 Mar 2004 04:48:39 -0000      1.4
  +++ PickANumberServlet.java   25 Jun 2004 07:20:58 -0000      1.5
  @@ -20,7 +20,14 @@
   import javax.portlet.ActionRequest;
   import javax.portlet.ActionResponse;
   import javax.portlet.PortletException;
  +import javax.portlet.PortletPreferences;
  +import javax.portlet.PortletRequest;
  +import javax.portlet.PortletResponse;
   import javax.portlet.PortletSession;
  +import javax.portlet.ReadOnlyException;
  +import javax.portlet.RenderRequest;
  +import javax.portlet.RenderResponse;
  +
   import org.apache.jetspeed.portlet.ServletPortlet;
   
   /**
  @@ -52,7 +59,7 @@
        *
        * @see org.apache.jetspeed.portlet.ServletPortlet#doEdit
        */
  -    private static final String DEFAULT_EDIT_PAGE = null;
  +    private static final String DEFAULT_EDIT_PAGE = 
"/WEB-INF/demo/simple/PickANumberEdit.jsp";
       
       /**
        * Default help page when preference does not exist
  @@ -90,6 +97,11 @@
       private static final String TARGET_VALUE_NAME = "TargetValue";
       
       /**
  +     * Attribute name of Top Range Value (in Edit Mode)
  +     */
  +    private static final String TOP_RANGE_NAME = "TopRange";
  +    
  +    /**
        * Set default page values when class is created
        */
       public PickANumberServlet()
  @@ -100,6 +112,52 @@
           setDefaultHelpPage(DEFAULT_HELP_PAGE);
           setDefaultViewPage(DEFAULT_VIEW_PAGE);
       }
  +
  +            
  +    public void doView(RenderRequest request, RenderResponse response) throws 
PortletException, IOException
  +    {
  +        PortletSession session = request.getPortletSession();
  +        Long guessCount = null;
  +        Long targetValue = null;
  +        Long lastGuess = null;
  +        
  +        // Get target value
  +        lastGuess = (Long)session.getAttribute(LAST_GUESS_NAME, 
PortletSession.APPLICATION_SCOPE);
  +        if (lastGuess == null)
  +        {
  +            lastGuess = new Long(0);
  +            session.setAttribute(LAST_GUESS_NAME, guessCount, 
PortletSession.APPLICATION_SCOPE);            
  +        }
  +
  +        // Get target value
  +
  +        targetValue = (Long)session.getAttribute(TARGET_VALUE_NAME, 
PortletSession.APPLICATION_SCOPE);
  +        if (targetValue == null)
  +        {            
  +            targetValue = new Long(Math.round(Math.random() * 
getHighRange(request)));
  +            System.out.println("cheater: target value = " + targetValue);
  +            guessCount = new Long(0);
  +            session.setAttribute( TARGET_VALUE_NAME, targetValue, 
PortletSession.APPLICATION_SCOPE);
  +            long highRange = getHighRange(request);
  +            session.setAttribute( TOP_RANGE_NAME, new Long(highRange), 
PortletSession.APPLICATION_SCOPE);
  +        }
  +
  +        guessCount = (Long)session.getAttribute(GUESS_COUNT_NAME, 
PortletSession.APPLICATION_SCOPE);
  +        if (guessCount == null)
  +        {
  +            guessCount = new Long(0);
  +            session.setAttribute( GUESS_COUNT_NAME, guessCount, 
PortletSession.APPLICATION_SCOPE);            
  +        }
  +
  +        Long highRange = (Long)session.getAttribute(TOP_RANGE_NAME, 
PortletSession.APPLICATION_SCOPE);
  +        if (highRange == null)
  +        {
  +            long range = getHighRange(request);
  +            session.setAttribute( TOP_RANGE_NAME, new Long(range), 
PortletSession.APPLICATION_SCOPE);
  +        }
  +        
  +        super.doView(request, response);
  +    }
       
       /**
        * Increment attributes in different scopes
  @@ -110,6 +168,13 @@
       public void processAction(ActionRequest request, ActionResponse actionResponse)
       throws PortletException, IOException
       {
  +        // Is it an edit (customize) action
  +        if (isEditAction(request))
  +        {
  +            savePreferences(request);
  +            return;
  +        }
  +        
           Long guessCount = null;
           Long targetValue = null;
           Long currentGuess = null;
  @@ -125,11 +190,14 @@
           if ((targetValue != null) && (lastGuess != null))
           {
               if (targetValue.equals(lastGuess))
  +            {
                   targetValue = null; // Since the number as guesed, start a new game
  +            }
           }
           if (targetValue == null)
           {
  -            targetValue = new Long(Math.round(Math.random() * 10.0));
  +            targetValue = new Long(Math.round(Math.random() * 
getHighRange(request)));
  +            System.out.println("cheater: target value = " + targetValue);
               guessCount = new Long(0);
               session.setAttribute( TARGET_VALUE_NAME, targetValue, 
PortletSession.APPLICATION_SCOPE);
           }
  @@ -165,7 +233,48 @@
           // Update the attribute values
           session.setAttribute( GUESS_COUNT_NAME, guessCount, 
PortletSession.APPLICATION_SCOPE);
           session.setAttribute( LAST_GUESS_NAME, currentGuess, 
PortletSession.APPLICATION_SCOPE);
  -        actionResponse.setProperty(LAST_GUESS_NAME, currentGuess.toString());
  +        //actionResponse.setRenderParameter(LAST_GUESS_NAME, lastGuess.toString()); 
       
           return;
       }
  +    
  +    private long getHighRange(PortletRequest request)
  +    {
  +        PortletPreferences prefs = request.getPreferences();
  +        String highRangePref = prefs.getValue("TopRange", "102");
  +        long range = Long.parseLong(highRangePref);
  +        if (range < 2)
  +        {
  +            range = 102;
  +        }
  +        return range;
  +    }
  +    
  +    private boolean isEditAction(ActionRequest request)
  +    {
  +        return (request.getParameter(TOP_RANGE_NAME) != null);        
  +    }
  +    
  +    private void savePreferences(PortletRequest request)
  +    {
  +        String topRange = request.getParameter(TOP_RANGE_NAME);
  +        long range = Long.parseLong(topRange);
  +        if (range < 2)
  +        {
  +            // TODO: throw validation exception
  +            return;
  +        }
  +        PortletPreferences prefs = request.getPreferences();
  +        try
  +        {
  +            prefs.setValue(TOP_RANGE_NAME, topRange);
  +            prefs.store();
  +            PortletSession session = request.getPortletSession();            
  +            session.setAttribute( TOP_RANGE_NAME, new Long(range), 
PortletSession.APPLICATION_SCOPE);            
  +        }
  +        catch (Exception e)
  +        {
  +            // TODO: throw validation exception and redirect to error 
  +        }
  +    }
  +    
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to