示例#1
0
/**
 * Bean responsible for the agent details display page. This bean will also provide a pagable list
 * of the failover servers for a particular agent.
 *
 * @author Jason Dobies
 */
public class ViewAgentUIBean extends PagedDataTableUIBean {

  public static final String MANAGED_BEAN_NAME = "ViewAgentUIBean";

  private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
  private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();

  private Agent agent;

  public Agent getAgent() {
    if (agent == null) {
      hasPermission();
      int agentId = FacesContextUtility.getRequiredRequestParameter("agentId", Integer.class);
      agent = agentManager.getAgentByID(agentId);
    }
    return agent;
  }

  @Override
  public DataModel getDataModel() {
    if (dataModel == null) {
      dataModel =
          new ViewAgentUIBeanDataModel(PageControlView.AgentFailoverListView, MANAGED_BEAN_NAME);
    }

    return dataModel;
  }

  private class ViewAgentUIBeanDataModel extends PagedListDataModel<FailoverListDetails> {

    private ViewAgentUIBeanDataModel(PageControlView view, String beanName) {
      super(view, beanName);
    }

    @Override
    public PageList<FailoverListDetails> fetchPage(PageControl pc) {
      int agentId = getAgent().getId();
      PageList<FailoverListDetails> pageList =
          cloudManager.getFailoverListDetailsByAgentId(agentId, pc);

      return pageList;
    }
  }

  /** Throws a permission exception if the user is not allowed to access this functionality. */
  private void hasPermission() {
    Subject subject = EnterpriseFacesContextUtility.getSubject();
    if (!LookupUtil.getAuthorizationManager()
        .hasGlobalPermission(subject, Permission.MANAGE_INVENTORY)) {
      throw new PermissionException(
          "User ["
              + subject.getName()
              + "] does not have the proper permissions to view or manage agents");
    }
  }
}