package org.japanosample;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.jsp.JspException;
import org.japano.Buffer;
import org.japano.PageNode;
import org.japano.action.ActionConfig;
import org.japanosample.action.ShowUser;
import org.japano.metadata.annotation.*;

/**
 Tag which lists the users logged in. 
 
 @author  Sven Helmberger (sven dot helmberger at gmx dot de )
 @version $Id: ListUser.java,v 1.3 2005/04/26 21:14:36 fforw Exp $
 */
 ( library="/sample" )
public class ListUser extends PageNode
{
  private DateFormat dateFormat;
  
  private DateFormat dateFormat()
  {
    if (dateFormat == null)
      dateFormat=SimpleDateFormat.getDateTimeInstance();
    return dateFormat;
  }
  
  /**
   Returns the date of the next user data reset.
   */
  
  public String getLastReset()
  {
    return dateFormat().format(new Date( User.getLastReset()));
  }

  /**
   Returns the date of the next user data reset.
   */
  
  public String getNextReset()
  {
    return dateFormat().format(new Date( User.getLastReset() + User.RESET_INTERVAL));
  }

  /**
   Repeats it's body once per user.
   */
  
  public static class Iterator extends PageNode
  {    
    private User user;
    
    public void generate(Buffer out)
    {      
      ActionConfig actionConfig=context.getJapanoConfig().getActionConfig();
      String actionName=actionConfig.getQualifiedName(ShowUser.class);

      List users=new ArrayList();
      for (java.util.Iterator i=SampleSession.sessions().iterator(); i.hasNext(); )
      {
        SampleSession s=(SampleSession)i.next();
        user=s.getUser();
        if ( user != null)
        {
          if (!users.contains(user))
            generateChildren(out); 

          users.add(user);
        }
      }
    }  

    /**
     The current user.
     */  
     ( properties={ "id", "alias" } )
    public User getUser()
    {
      return user;
    }
  } 
}