package examples.roles;

import net.sourceforge.tapestry_jsmenu.api.IDisplayModeProvider;
import org.apache.tapestry.IAsset;
import org.apache.tapestry.IExternalPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.annotations.Asset;
import org.apache.tapestry.annotations.InitialValue;
import org.apache.tapestry.annotations.Parameter;
import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.html.BasePage;
import java.util.Collection;;


public abstract class RoleBasedHiding extends BasePage{

  @Asset("classpath:/examples/roles/menu.xml")
  public abstract IAsset getModel();

  @InitialValue("literal:admin")
  @Persist("session"
  public abstract String getRole();
  public abstract void setRole(String role);
  
  private IDisplayModeProvider displayMode = null;
  
  public IDisplayModeProvider getDisplayMode(){
    if(displayMode == nulldisplayMode = 
      new IDisplayModeProvider(){
      public boolean getDisplayMode(String id, Collection<String> roles) {
        if(roles.size() == 0return true;
        return roles.contains(getRole());
      }    
    };
    return displayMode;  
  }
  
  /**
   * This is called when one of the menu items is clicked
   */
  public void onNavigate(IRequestCycle cycle, String id){
    String msg = "This page was called via DirectLink from menuitem '" + id + "'"
    System.out.println(msg);
  }
  
  public void changeRole(IRequestCycle cycle, String newRole){
    setRole(newRole);
  }
  

}