/*
 * Licensed Materials - Property of Rogue Wave Software, Inc. 
 * © Copyright Rogue Wave Software, Inc. 2014, 2015 
 * © Copyright IBM Corp. 2009, 2014
 * © Copyright ILOG 1996, 2009
 * All Rights Reserved.
 *
 * Note to U.S. Government Users Restricted Rights:
 * The Software and Documentation were developed at private expense and
 * are "Commercial Items" as that term is defined at 48 CFR 2.101,
 * consisting of "Commercial Computer Software" and
 * "Commercial Computer Software Documentation", as such terms are
 * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
 * as applicable.
 */

package monitoring.web.controls;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.faces.model.SelectItem;

import org.apache.myfaces.trinidad.component.UIXSwitcher;
import org.apache.myfaces.trinidad.component.core.data.CoreTable;
import org.apache.myfaces.trinidad.component.core.nav.CoreNavigationPane;

import shared.ResourceUtils;

/**
 * Contains all the table related controls in the sample. 
 */
public class TableControls {

  //Table controls
  public static final String ALARM_TABLE_FILTER_ON_ALL_OBJECTS_ID = "1-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_LINKS_ID = "2-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_NETWORK_ELEMENTS_ID = "3-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_GROUPS_ID = "4-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_RECTANGULAR_GROUPS_ID = "5-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_POLYGONAL_GROUPS_ID = "6-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_LINEAR_GROUPS_ID = "7-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_OFF_PAGE_CONNECTORS_ID = "8-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_ALL_SERVICES_ID = "9-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_CUSTOMERS_ID = "10-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_SLAS_ID = "11-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_SERVICES_ID = "12-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_SERVICE_ACCESS_POINTS_ID = "13-ALARM_TABLE_FILTER";
  public static final String ALARM_TABLE_FILTER_ON_SERVICE_PATHS_ID = "14-ALARM_TABLE_FILTER";

  public static final String NETWORK_OBJECT_TABLE_FILTER_ALL_OBJECTS_ID = "1-NETWORK_OBJECT_TABLE_FILTER";
  public static final String NETWORK_OBJECT_TABLE_FILTER_LINKS_ID = "2-NETWORK_OBJECT_TABLE_FILTER";
  public static final String NETWORK_OBJECT_TABLE_FILTER_NETWORK_ELEMENTS_ID = "3-NETWORK_OBJECT_TABLE_FILTER";
  public static final String NETWORK_OBJECT_TABLE_FILTER_GROUPS_ID = "4-NETWORK_OBJECT_TABLE_FILTER";
  public static final String NETWORK_OBJECT_TABLE_FILTER_RECTANGULAR_GROUPS_ID = "5-NETWORK_OBJECT_TABLE_FILTER";
  public static final String NETWORK_OBJECT_TABLE_FILTER_POLYGONAL_GROUPS_ID = "6-NETWORK_OBJECT_TABLE_FILTER";
  public static final String NETWORK_OBJECT_TABLE_FILTER_LINEAR_GROUPS_ID = "7-NETWORK_OBJECT_TABLE_FILTER";
  public static final String NETWORK_OBJECT_TABLE_FILTER_OFF_PAGE_CONNECTORS_ID = "8-NETWORK_OBJECT_TABLE_FILTER";

  public static final String INVENTORY_OBJECT_TABLE_FILTER_ALL_OBJECTS_ID = "1-INVENTORY_OBJECT_TABLE_FILTER";
  public static final String INVENTORY_OBJECT_TABLE_FILTER_SHELVES_ID = "2-INVENTORY_OBJECT_TABLE_FILTER";
  public static final String INVENTORY_OBJECT_TABLE_FILTER_LEDS_ID = "3-INVENTORY_OBJECT_TABLE_FILTER";
  public static final String INVENTORY_OBJECT_TABLE_FILTER_PORTS_ID = "4-INVENTORY_OBJECT_TABLE_FILTER";
  public static final String INVENTORY_OBJECT_TABLE_FILTER_CARD_CARRIERS_ID = "5-INVENTORY_OBJECT_TABLE_FILTER";
  public static final String INVENTORY_OBJECT_TABLE_FILTER_CARDS_ID = "6-INVENTORY_OBJECT_TABLE_FILTER";
  public static final String INVENTORY_OBJECT_TABLE_FILTER_EMPTY_SLOTS_ID = "7-INVENTORY_OBJECT_TABLE_FILTER";

  public static final String SERVICE_OBJECT_TABLE_FILTER_ALL_OBJECTS_ID = "1-SERVICE_OBJECT_TABLE_FILTER";
  public static final String SERVICE_OBJECT_TABLE_FILTER_CUSTOMERS_ID = "2-SERVICE_OBJECT_TABLE_FILTER";
  public static final String SERVICE_OBJECT_TABLE_FILTER_SLAS_ID = "3-SERVICE_OBJECT_TABLE_FILTER";
  public static final String SERVICE_OBJECT_TABLE_FILTER_SERVICES_ID = "4-SERVICE_OBJECT_TABLE_FILTER";

  private static List<String> TABLE_SWITCHER_FACET_NAMES;
  private static String TABLE_SWITCHER_DEFAULT_FACET;

  private static List<String> NETWORK_TABLE_SWITCHER_FACET_NAMES;
  private static String NETWORK_TABLE_SWITCHER_DEFAULT_FACET;

  private static List<String> INVENTORY_TABLE_SWITCHER_FACET_NAMES;
  private static String INVENTORY_TABLE_SWITCHER_DEFAULT_FACET;

  private static List<String> SERVICE_TABLE_SWITCHER_FACET_NAMES;
  private static String SERVICE_TABLE_SWITCHER_DEFAULT_FACET;

  private static List<String> NETWORK_OBJECTS_TABLE_SWITCHER_FACET_NAMES;
  private static String NETWORK_OBJECTS_TABLE_SWITCHER_DEFAULT_FACET;

  private static List<String> INVENTORY_OBJECTS_TABLE_SWITCHER_FACET_NAMES;
  private static String INVENTORY_OBJECTS_TABLE_SWITCHER_DEFAULT_FACET;

  private static List<String> SERVICE_OBJECTS_TABLE_SWITCHER_FACET_NAMES;
  private static String SERVICE_OBJECTS_TABLE_SWITCHER_DEFAULT_FACET;

  //Default to 5 rows in tables
  private static int NUMBER_OF_ROWS_IN_TABLES = 6;

  //Default table width 
  private static int TABLE_WIDTH = 700;


  static {

    ////////////////////////////////////////////////////////////////////////////
    //This needs to be in synch with the JSP page: /table-area/index.jsp
    ////////////////////////////////////////////////////////////////////////////
    String[] facetNames = new String[]{"networkTableFacet",
        "inventoryTableFacet", "serviceTableFacet"};
    //Save it
    TABLE_SWITCHER_FACET_NAMES = Arrays.asList(facetNames);
    //Define the default facet name 
    TABLE_SWITCHER_DEFAULT_FACET = TABLE_SWITCHER_FACET_NAMES.get(0);

    ////////////////////////////////////////////////////////////////////////////
    //This needs to be in synch with the JSP page: /table-area/network-tree-view.jsp
    ////////////////////////////////////////////////////////////////////////////
    facetNames = new String[]{"networkAlarmsTableFacet",
    "networkObjectsTableFacet"};
    //Save it
    NETWORK_TABLE_SWITCHER_FACET_NAMES = Arrays.asList(facetNames);
    //Define the default facet name 
    NETWORK_TABLE_SWITCHER_DEFAULT_FACET = NETWORK_TABLE_SWITCHER_FACET_NAMES.get(0);

    ////////////////////////////////////////////////////////////////////////////
    //This needs to be in synch with the JSP page: /table-area/inventory-tree-view.jsp
    ////////////////////////////////////////////////////////////////////////////
    facetNames = new String[]{"inventoryAlarmsTableFacet",
    "inventoryObjectsTableFacet"};
    //Save it
    INVENTORY_TABLE_SWITCHER_FACET_NAMES = Arrays.asList(facetNames);
    //Define the default facet name 
    INVENTORY_TABLE_SWITCHER_DEFAULT_FACET = INVENTORY_TABLE_SWITCHER_FACET_NAMES.get(0);

    ////////////////////////////////////////////////////////////////////////////
    //This needs to be in synch with the JSP page: /table-area/service-tree-view.jsp
    ////////////////////////////////////////////////////////////////////////////
    facetNames = new String[]{"serviceAlarmsTableFacet", 
    "serviceObjectsTableFacet"};
    //Save it
    SERVICE_TABLE_SWITCHER_FACET_NAMES = Arrays.asList(facetNames);
    //Define the default facet name 
    SERVICE_TABLE_SWITCHER_DEFAULT_FACET = SERVICE_TABLE_SWITCHER_FACET_NAMES.get(0);

    ////////////////////////////////////////////////////////////////////////////
    //This needs to be in synch with the JSP page: /table-area/network-objects-tables.jsp
    ////////////////////////////////////////////////////////////////////////////
    facetNames = new String[]{"networkObjectsTableFacet",
    "networkObjectsTableWithTypeFacet"};
    //Save it
    NETWORK_OBJECTS_TABLE_SWITCHER_FACET_NAMES = Arrays.asList(facetNames);
    //Define the default facet name 
    NETWORK_OBJECTS_TABLE_SWITCHER_DEFAULT_FACET = NETWORK_OBJECTS_TABLE_SWITCHER_FACET_NAMES.get(0);

    ////////////////////////////////////////////////////////////////////////////
    //This needs to be in synch with the JSP page: /table-area/inventory-objects-tables.jsp
    ////////////////////////////////////////////////////////////////////////////
    facetNames = new String[]{"inventoryObjectsTableFacet",
        "inventoryObjectsTableWithTypeFacet",
    "inventoryObjectsTableWithSlotCountFacet"};
    //Save it
    INVENTORY_OBJECTS_TABLE_SWITCHER_FACET_NAMES = Arrays.asList(facetNames);
    //Define the default facet name 
    INVENTORY_OBJECTS_TABLE_SWITCHER_DEFAULT_FACET = INVENTORY_OBJECTS_TABLE_SWITCHER_FACET_NAMES.get(0);

    ////////////////////////////////////////////////////////////////////////////
    //This needs to be in synch with the JSP page: /table-area/service-objects-tables.jsp
    ////////////////////////////////////////////////////////////////////////////
    facetNames = new String[]{"serviceObjectsAllTableFacet",
                              "serviceObjectsCustomersTableFacet",
                              "serviceObjectsSlasTableFacet",
                              "serviceObjectsServicesTableFacet"};
    //Save it
    SERVICE_OBJECTS_TABLE_SWITCHER_FACET_NAMES = Arrays.asList(facetNames);
    //Define the default facet name 
    SERVICE_OBJECTS_TABLE_SWITCHER_DEFAULT_FACET = SERVICE_OBJECTS_TABLE_SWITCHER_FACET_NAMES.get(3);
  }

  /**
   * Switcher used to switch between the different network, inventory and service table sets.
   */
  private UIXSwitcher tableSwitcher;

  /**
   * Switcher used to switch between the different network tables.
   */
  private UIXSwitcher networkTableSwitcher;

  /**
   * Switcher used to switch between the different inventory tables.
   */
  private UIXSwitcher inventoryTableSwitcher;

  /**
   * Switcher used to switch between the different service tables.
   */
  private UIXSwitcher serviceTableSwitcher;

  /**
   * Switcher used to switch between the different filtered network tables.
   */
  private UIXSwitcher networkObjectsTablesSwitcher;

  /**
   * Switcher used to switch between the different filtered inventory tables.
   */
  private UIXSwitcher inventoryObjectsTablesSwitcher;

  /**
   * Switcher used to switch between the different filtered service tables.
   */
  private UIXSwitcher serviceObjectsTablesSwitcher;

  /**
   * List of IDs of the available Alarm filters.
   */
  private List<SelectItem> alarmsFilterList;
  /**
   * ID of current Alarms filter.
   */
  private String currentAlarmsFilter;
  /**
   * List of IDs of the available Network Objects filters.
   */
  private List<SelectItem> networkObjectsFilterList;
  /**
   * ID of current Network Objects filter.
   */
  private String currentNetworkObjectsFilter;
  /**
   * List of IDs of the available Service Objects filters.
   */
  private List<SelectItem> serviceObjectsFilterList;
  /**
   * ID of current Service Objects filter.
   */
  private String currentServiceObjectsFilter;
  /**
   * List of IDs of the available Inventory Objects filters.
   */
  private List<SelectItem> inventoryObjectsFilterList;
  /**
   * ID of current Inventory Objects filter.
   */
  private String currentInventoryObjectsFilter;
  /**
   * Table of alarms in the network module.
   */
  private CoreTable networkAlarmsTable;
  /**
   * Table of alarms in the inventory module.
   */
  private CoreTable inventoryAlarmsTable;
  /**
   * Table of alarms in the service module.
   */
  private CoreTable serviceAlarmsTable;

  /**
   * Table of managed objects in the network module.
   */
  private CoreTable networkObjectsTable;
  /**
   * Table of managed objects with type in the network module.
   */
  private CoreTable networkObjectsTableWithType;

  /**
   * Table of managed objects in the inventory module.
   */
  private CoreTable inventoryObjectsTable;
  /**
   * Table of managed objects with type in the inventory module.
   */
  private CoreTable inventoryObjectsTableWithType;
  /**
   * Table of managed objects with slot count in the inventory module.
   */
  private CoreTable inventoryObjectsTableWithSlotCount;
  /**
   * Table of managed objects in the service module.
   */
  private CoreTable serviceObjectsAllTable;
  /**
   * Table of managed objects with customers in the service module.
   */
  private CoreTable serviceObjectsCustomersTable;
  /**
   * Table of managed objects with SLAs in the service module.
   */
  private CoreTable serviceObjectsSlasTable;
  /**
   * Table of managed objects in the service module.
   */
  private CoreTable serviceObjectsServicesTable;

  /**
   * Tabs used to switch between tables in the network module.
   */
  private CoreNavigationPane networkTableTabs;
  /**
   * Tabs used to switch between tables in the inventory module.
   */
  private CoreNavigationPane inventoryTableTabs;
  /**
   * Tabs used to switch between tables in the service module.
   */
  private CoreNavigationPane serviceTableTabs;


  //////////////////////////////////////////////////////////////////////////////
  //Initialization
  //////////////////////////////////////////////////////////////////////////////

  /**
   * Initializes the table controls.
   */
  public void initialize() {

    ////////////////////////////////
    //Initialize Alarms Filters
    ////////////////////////////////
    initializeAlarmsFilterList();
    setCurrentAlarmsFilter(getDefaultAlarmsFilter());

    ////////////////////////////////
    //Initialize Network Objects Filters
    ////////////////////////////////
    initializeNetworkObjectsFilterList();
    setCurrentNetworkObjectsFilter(getDefaultNetworkObjectsFilter());

    ////////////////////////////////
    //Initialize Inventory Objects Filters
    ////////////////////////////////
    initializeInventoryObjectsFilterList();
    setCurrentInventoryObjectsFilter(getDefaultInventoryObjectsFilter());

    ////////////////////////////////
    //Initialize Service Objects Filters
    ////////////////////////////////
    initializeServiceObjectsFilterList();
    setCurrentServiceObjectsFilter(getDefaultServiceObjectsFilter());
  }

  //////////////////////////////////////////////////////////////////////////////
  //Accessors and Modifiers
  //////////////////////////////////////////////////////////////////////////////
  public CoreTable getInventoryAlarmsTable() {
    return inventoryAlarmsTable;
  }
  public void setInventoryAlarmsTable(CoreTable inventoryAlarmsTable) {
    this.inventoryAlarmsTable = inventoryAlarmsTable;
  }
  public void setNetworkAlarmsTable(CoreTable networkAlarmsTable) {
    this.networkAlarmsTable = networkAlarmsTable;
  }
  public void setServiceAlarmsTable(CoreTable serviceAlarmsTable) {
    this.serviceAlarmsTable = serviceAlarmsTable;
  }
  public CoreNavigationPane getNetworkTableTabs() {
    return networkTableTabs;
  }
  public void setNetworkTableTabs(CoreNavigationPane networkTableTabs) {
    this.networkTableTabs = networkTableTabs;
  }
  public CoreNavigationPane getInventoryTableTabs() {
    return inventoryTableTabs;
  }
  public void setInventoryTableTabs(CoreNavigationPane inventoryTableTabs) {
    this.inventoryTableTabs = inventoryTableTabs;
  }
  public CoreNavigationPane getServiceTableTabs() {
    return serviceTableTabs;
  }
  public void setServiceTableTabs(CoreNavigationPane serviceTableTabs) {
    this.serviceTableTabs = serviceTableTabs;
  }
  public CoreTable getNetworkAlarmsTable() {
    return networkAlarmsTable;
  }
  public void setInventoryObjectsTable(CoreTable inventoryObjectsTable) {
    this.inventoryObjectsTable = inventoryObjectsTable;
  }
  public CoreTable getInventoryObjectsTable() {
    return inventoryObjectsTable;
  }
  public void setNetworkObjectsTable(CoreTable networkObjectsTable) {
    this.networkObjectsTable = networkObjectsTable;
  }
  public CoreTable getNetworkObjectsTable() {
    return networkObjectsTable;
  }
  public CoreTable getNetworkObjectsTableWithType() {
    return networkObjectsTableWithType;
  }
  public void setNetworkObjectsTableWithType(
      CoreTable networkObjectsTableWithType) {
    this.networkObjectsTableWithType = networkObjectsTableWithType;
  }
  public CoreTable getInventoryObjectsTableWithSlotCount() {
    return inventoryObjectsTableWithSlotCount;
  }
  public void setInventoryObjectsTableWithSlotCount(
      CoreTable inventoryObjectsTableWithSlotCount) {
    this.inventoryObjectsTableWithSlotCount = inventoryObjectsTableWithSlotCount;
  }
  public CoreTable getInventoryObjectsTableWithType() {
    return inventoryObjectsTableWithType;
  }
  public void setInventoryObjectsTableWithType(
      CoreTable inventoryObjectsTableWithType) {
    this.inventoryObjectsTableWithType = inventoryObjectsTableWithType;
  }
  public CoreTable getServiceObjectsAllTable() {
    return serviceObjectsAllTable;
  }
  public void setServiceObjectsAllTable(CoreTable serviceObjectsTable) {
    this.serviceObjectsAllTable = serviceObjectsTable;
  }
  public CoreTable getServiceObjectsCustomersTable() {
    return serviceObjectsCustomersTable;
  }
  public void setServiceObjectsCustomersTable(
      CoreTable serviceObjectsCustomersTable) {
    this.serviceObjectsCustomersTable = serviceObjectsCustomersTable;
  }
  public CoreTable getServiceObjectsServicesTable() {
    return serviceObjectsServicesTable;
  }
  public void setServiceObjectsServicesTable(
      CoreTable serviceObjectsServicesTable) {
    this.serviceObjectsServicesTable = serviceObjectsServicesTable;
  }
  public CoreTable getServiceObjectsSlasTable() {
    return serviceObjectsSlasTable;
  }
  public void setServiceObjectsSlasTable(CoreTable serviceObjectsSlasTable) {
    this.serviceObjectsSlasTable = serviceObjectsSlasTable;
  }

  public CoreTable getServiceAlarmsTable() {
    return serviceAlarmsTable;
  }
  public UIXSwitcher getInventoryTableSwitcher() {
    return inventoryTableSwitcher;
  }
  public void setInventoryTableSwitcher(UIXSwitcher inventoryTableSwitcher) {
    this.inventoryTableSwitcher = inventoryTableSwitcher;
  }
  public UIXSwitcher getNetworkTableSwitcher() {
    return networkTableSwitcher;
  }
  public void setNetworkTableSwitcher(UIXSwitcher networkTableSwitcher) {
    this.networkTableSwitcher = networkTableSwitcher;
  }
  public UIXSwitcher getServiceTableSwitcher() {
    return serviceTableSwitcher;
  }
  public void setServiceTableSwitcher(UIXSwitcher serviceTableSwitcher) {
    this.serviceTableSwitcher = serviceTableSwitcher;
  }
  public UIXSwitcher getTableSwitcher() {
    return tableSwitcher;
  }
  public void setTableSwitcher(UIXSwitcher tableSwitcher) {
    this.tableSwitcher = tableSwitcher;
  }

  public UIXSwitcher getNetworkObjectsTablesSwitcher() {
    return networkObjectsTablesSwitcher;
  }
  public void setNetworkObjectsTablesSwitcher(
      UIXSwitcher networkObjectsTablesSwitcher) {
    this.networkObjectsTablesSwitcher = networkObjectsTablesSwitcher;
  }

  public UIXSwitcher getServiceObjectsTablesSwitcher() {
    return serviceObjectsTablesSwitcher;
  }
  public void setServiceObjectsTablesSwitcher(
      UIXSwitcher serviceObjectsTablesSwitcher) {
    this.serviceObjectsTablesSwitcher = serviceObjectsTablesSwitcher;
  }
  public UIXSwitcher getInventoryObjectsTablesSwitcher() {
    return inventoryObjectsTablesSwitcher;
  }
  public void setInventoryObjectsTablesSwitcher(
      UIXSwitcher inventoryObjectsTablesSwitcher) {
    this.inventoryObjectsTablesSwitcher = inventoryObjectsTablesSwitcher;
  }
  /**
   * Returns the List of IDs of the available filters for Alarms.
   */
  public List<SelectItem> getAlarmsFilterList() {
    return alarmsFilterList;
  }
  /**
   * Returns the ID of the current Alarms filter.
   */
  public String getCurrentAlarmsFilter() {
    return currentAlarmsFilter;
  }
  /**
   * Sets the ID of the current Alarms filter.
   */
  public void setCurrentAlarmsFilter(String selectedAlarmsFilter) {
    //Some times when changing tabs the table filter is updated to null
    //We do not want this behavior as we want to keep the current filter
    if(selectedAlarmsFilter != null && !selectedAlarmsFilter.isEmpty()) {
      this.currentAlarmsFilter = selectedAlarmsFilter;
    }
  }
  /**
   * Returns the ID of the current Network Objects filter.
   */
  public String getCurrentNetworkObjectsFilter() {
    return currentNetworkObjectsFilter;
  }
  /**
   * Returns the List of IDs of the available filters for Inventory Objects.
   */
  public List<SelectItem> getInventoryObjectsFilterList() {
    return inventoryObjectsFilterList;
  }
  /**
   * Returns the List of IDs of the available filters for Network Objects.
   */
  public List<SelectItem> getNetworkObjectsFilterList() {
    return networkObjectsFilterList;
  }
  /**
   * Returns the List of IDs of the available filters for Service Objects.
   */
  public List<SelectItem> getServiceObjectsFilterList() {
    return serviceObjectsFilterList;
  }
  /**
   * Returns the ID of the current Inventory Objects filter.
   */
  public String getCurrentInventoryObjectsFilter() {
    return currentInventoryObjectsFilter;
  }
  /**
   * Returns the ID of the current Service Objects filter.
   */
  public String getCurrentServiceObjectsFilter() {
    return currentServiceObjectsFilter;
  }
  /**
   * Sets the ID of the current Inventory Objects filter.
   */
  public void setCurrentInventoryObjectsFilter(String currentInventoryObjectsFilter) {
    //See setCurrentAlarmsFilter for details
    if(currentInventoryObjectsFilter != null && !currentInventoryObjectsFilter.isEmpty()) {
      this.currentInventoryObjectsFilter = currentInventoryObjectsFilter;
    }
  }
  /**
   * Sets the ID of the current Network Objects filter.
   */
  public void setCurrentNetworkObjectsFilter(String currentNetworkObjectsFilter) {
    //See setCurrentAlarmsFilter for details
    if(currentNetworkObjectsFilter != null && !currentNetworkObjectsFilter.isEmpty()) {
      this.currentNetworkObjectsFilter = currentNetworkObjectsFilter;
    }
  }
  /**
   * Sets the ID of the current Service Objects filter.
   */
  public void setCurrentServiceObjectsFilter(String currentServiceObjectsFilter) {
    //See setCurrentAlarmsFilter for details
    if(currentServiceObjectsFilter != null && !currentServiceObjectsFilter.isEmpty()) {
      this.currentServiceObjectsFilter = currentServiceObjectsFilter;
    }
  }
  public int getTableWidth() {
    return TABLE_WIDTH;
  }

  //////////////////////////////////////////////////////////////////////////////
  //Other Methods
  //////////////////////////////////////////////////////////////////////////////

  public String getTableSwitcherDefaultFacet() {
    return TABLE_SWITCHER_DEFAULT_FACET;
  }
  public List<String> getTableSwitcherFacetNames() {
    return TABLE_SWITCHER_FACET_NAMES;
  }
  public String getTableSwitcherFacetName(int index) {
    return TABLE_SWITCHER_FACET_NAMES.get(index);
  }
  public String getNetworkTableSwitcherDefaultFacet() {
    return NETWORK_TABLE_SWITCHER_DEFAULT_FACET;
  }
  public List<String> getNetworkTableSwitcherFacetNames() {
    return NETWORK_TABLE_SWITCHER_FACET_NAMES;
  }
  public String getNetworkTableSwitcherFacetName(int index) {
    return NETWORK_TABLE_SWITCHER_FACET_NAMES.get(index);
  }
  public String getInventoryTableSwitcherDefaultFacet() {
    return INVENTORY_TABLE_SWITCHER_DEFAULT_FACET;
  }
  public List<String> getInventoryTableSwitcherFacetNames() {
    return INVENTORY_TABLE_SWITCHER_FACET_NAMES;
  }
  public String getInventoryTableSwitcherFacetName(int index) {
    return INVENTORY_TABLE_SWITCHER_FACET_NAMES.get(index);
  }
  public String getServiceTableSwitcherDefaultFacet() {
    return SERVICE_TABLE_SWITCHER_DEFAULT_FACET;
  }
  public List<String> getServiceTableSwitcherFacetNames() {
    return SERVICE_TABLE_SWITCHER_FACET_NAMES;
  }
  public String getServiceTableSwitcherFacetName(int index) {
    return SERVICE_TABLE_SWITCHER_FACET_NAMES.get(index);
  }
  public String getNetworkObjectsTablesSwitcherDefaultFacet() {
    return NETWORK_OBJECTS_TABLE_SWITCHER_DEFAULT_FACET;
  }
  public List<String> getNetworkObjectsTablesSwitcherFacetNames() {
    return NETWORK_OBJECTS_TABLE_SWITCHER_FACET_NAMES;
  }
  public String getNetworkObjectsTablesSwitcherFacetName(int index) {
    return NETWORK_OBJECTS_TABLE_SWITCHER_FACET_NAMES.get(index);
  }
  public String getInventoryObjectsTablesSwitcherDefaultFacet() {
    return INVENTORY_OBJECTS_TABLE_SWITCHER_DEFAULT_FACET;
  }
  public List<String> getInventoryObjectsTablesSwitcherFacetNames() {
    return INVENTORY_OBJECTS_TABLE_SWITCHER_FACET_NAMES;
  }
  public String getInventoryObjectsTablesSwitcherFacetName(int index) {
    return INVENTORY_OBJECTS_TABLE_SWITCHER_FACET_NAMES.get(index);
  }
  public String getServiceObjectsTablesSwitcherDefaultFacet() {
    return SERVICE_OBJECTS_TABLE_SWITCHER_DEFAULT_FACET;
  }
  public List<String> getServiceObjectsTablesSwitcherFacetNames() {
    return SERVICE_OBJECTS_TABLE_SWITCHER_FACET_NAMES;
  }
  public String getServiceObjectsTablesSwitcherFacetName(int index) {
    return SERVICE_OBJECTS_TABLE_SWITCHER_FACET_NAMES.get(index);
  }
  public int getNumberOfRowsInTables() {
    return NUMBER_OF_ROWS_IN_TABLES;
  }
  /**
   * Returns the default filter ID for Network Objects.
   */
  public String getDefaultNetworkObjectsFilter() {
    return NETWORK_OBJECT_TABLE_FILTER_ALL_OBJECTS_ID;
  }
  /**
   * Returns the default filter ID for Inventory Objects.
   */
  public String getDefaultInventoryObjectsFilter() {
    return INVENTORY_OBJECT_TABLE_FILTER_ALL_OBJECTS_ID;
  }
  /**
   * Returns the default filter ID for Service Objects.
   */
  public String getDefaultServiceObjectsFilter() {
    return SERVICE_OBJECT_TABLE_FILTER_SERVICES_ID;
  }
  /**
   * Returns the default filter ID for Alarms.
   */
  public String getDefaultAlarmsFilter() {
    return ALARM_TABLE_FILTER_ON_ALL_OBJECTS_ID;
  }

  //////////////////////////////////////////////////////////////////////////////
  //Private Methods
  //////////////////////////////////////////////////////////////////////////////

  private void initializeAlarmsFilterList() {

    alarmsFilterList = new ArrayList<SelectItem>(14);

    alarmsFilterList.add(new SelectItem(
        ALARM_TABLE_FILTER_ON_ALL_OBJECTS_ID, ResourceUtils
        .getString("labelFilterAlarmsOnAllObjects")));

    alarmsFilterList.add(new SelectItem(ALARM_TABLE_FILTER_ON_LINKS_ID,
        ResourceUtils.getString("labelFilterAlarmsOnLinks")));

    alarmsFilterList.add(new SelectItem(
        ALARM_TABLE_FILTER_ON_NETWORK_ELEMENTS_ID, ResourceUtils
        .getString("labelFilterAlarmsOnNetworkElements")));

    alarmsFilterList.add(new SelectItem(ALARM_TABLE_FILTER_ON_GROUPS_ID,
        ResourceUtils.getString("labelFilterAlarmsOnGroups")));

    alarmsFilterList.add(new SelectItem(
        ALARM_TABLE_FILTER_ON_RECTANGULAR_GROUPS_ID, ResourceUtils
        .getString("labelFilterAlarmsOnRectangularGroups")));

    alarmsFilterList.add(new SelectItem(
        ALARM_TABLE_FILTER_ON_POLYGONAL_GROUPS_ID, ResourceUtils
        .getString("labelFilterAlarmsOnPolygonalGroups")));

    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    //The following are valid configurations, but this demo does not use them
    //as alarms are not generated for these types

//  alarmsFilterList.add(new SelectItem(
//  ALARM_TABLE_FILTER_ON_LINEAR_GROUPS_ID, ResourceUtils
//  .getString("labelFilterAlarmsOnLinearGroups")));

//  alarmsFilterList.add(new SelectItem(
//  ALARM_TABLE_FILTER_ON_OFF_PAGE_CONNECTORS_ID, ResourceUtils
//  .getString("labelFilterAlarmsOnOffPageConnectors")));

//  alarmsFilterList.add(new SelectItem(
//  ALARM_TABLE_FILTER_ON_ALL_SERVICES_ID, ResourceUtils
//  .getString("labelFilterAlarmsOnAllServices")));

//  alarmsFilterList.add(new SelectItem(ALARM_TABLE_FILTER_ON_CUSTOMERS_ID,
//  ResourceUtils.getString("labelFilterAlarmsOnCustomers")));

//  alarmsFilterList.add(new SelectItem(ALARM_TABLE_FILTER_ON_SLAS_ID,
//  ResourceUtils.getString("labelFilterAlarmsOnSLAs")));

//  alarmsFilterList.add(new SelectItem(ALARM_TABLE_FILTER_ON_SERVICES_ID,
//  ResourceUtils.getString("labelFilterAlarmsOnServices")));

//  alarmsFilterList.add(new SelectItem(
//  ALARM_TABLE_FILTER_ON_SERVICE_ACCESS_POINTS_ID, ResourceUtils
//  .getString("labelFilterAlarmsOnServiceAccessPoints")));

//  alarmsFilterList.add(new SelectItem(
//  ALARM_TABLE_FILTER_ON_SERVICE_PATHS_ID, ResourceUtils
//  .getString("labelFilterAlarmsOnServicePaths")));
    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
  }

  private void initializeNetworkObjectsFilterList() {

    networkObjectsFilterList = new ArrayList<SelectItem>(8);

    networkObjectsFilterList.add(new SelectItem(
        NETWORK_OBJECT_TABLE_FILTER_ALL_OBJECTS_ID, ResourceUtils
        .getString("labelFilterNetworkObjectsAllObjects")));

    networkObjectsFilterList.add(new SelectItem(
        NETWORK_OBJECT_TABLE_FILTER_LINKS_ID, ResourceUtils
        .getString("labelFilterNetworkObjectsLinks")));

    networkObjectsFilterList
    .add(new SelectItem(
        NETWORK_OBJECT_TABLE_FILTER_NETWORK_ELEMENTS_ID,
        ResourceUtils
        .getString("labelFilterNetworkObjectsNetworkElements")));

    networkObjectsFilterList.add(new SelectItem(
        NETWORK_OBJECT_TABLE_FILTER_GROUPS_ID, ResourceUtils
        .getString("labelFilterNetworkObjectsGroups")));

    networkObjectsFilterList
    .add(new SelectItem(
        NETWORK_OBJECT_TABLE_FILTER_RECTANGULAR_GROUPS_ID,
        ResourceUtils
        .getString("labelFilterNetworkObjectsRectangularGroups")));

    networkObjectsFilterList
    .add(new SelectItem(
        NETWORK_OBJECT_TABLE_FILTER_POLYGONAL_GROUPS_ID,
        ResourceUtils
        .getString("labelFilterNetworkObjectsPolygonalGroups")));


    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    //The following are valid configurations, but this demo does not use them
    //as alarms are not generated for these types

//  networkObjectsFilterList.add(new SelectItem(
//  NETWORK_OBJECT_TABLE_FILTER_LINEAR_GROUPS_ID, ResourceUtils
//  .getString("labelFilterNetworkObjectsLinearGroups")));

//  networkObjectsFilterList
//  .add(new SelectItem(
//  NETWORK_OBJECT_TABLE_FILTER_OFF_PAGE_CONNECTORS_ID,
//  ResourceUtils
//  .getString("labelFilterNetworkObjectsOffPageConnectors")));
    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////

  }

  private void initializeInventoryObjectsFilterList() {

    inventoryObjectsFilterList = new ArrayList<SelectItem>(7);

    inventoryObjectsFilterList.add(new SelectItem(
        INVENTORY_OBJECT_TABLE_FILTER_ALL_OBJECTS_ID, ResourceUtils
        .getString("labelFilterInventoryObjectsAllObjects")));

    inventoryObjectsFilterList.add(new SelectItem(
        INVENTORY_OBJECT_TABLE_FILTER_SHELVES_ID, ResourceUtils
        .getString("labelFilterInventoryObjectsShelves")));

    inventoryObjectsFilterList.add(new SelectItem(
        INVENTORY_OBJECT_TABLE_FILTER_LEDS_ID, ResourceUtils
        .getString("labelFilterInventoryObjectsLeds")));

    inventoryObjectsFilterList.add(new SelectItem(
        INVENTORY_OBJECT_TABLE_FILTER_PORTS_ID, ResourceUtils
        .getString("labelFilterInventoryObjectsPorts")));

    inventoryObjectsFilterList.add(new SelectItem(
        INVENTORY_OBJECT_TABLE_FILTER_CARD_CARRIERS_ID, ResourceUtils
        .getString("labelFilterInventoryObjectsCardCarriers")));

    inventoryObjectsFilterList.add(new SelectItem(
        INVENTORY_OBJECT_TABLE_FILTER_CARDS_ID, ResourceUtils
        .getString("labelFilterInventoryObjectsCards")));

    inventoryObjectsFilterList.add(new SelectItem(
        INVENTORY_OBJECT_TABLE_FILTER_EMPTY_SLOTS_ID, ResourceUtils
        .getString("labelFilterInventoryObjectsEmptySlots")));
  }

  private void initializeServiceObjectsFilterList() {

    serviceObjectsFilterList = new ArrayList<SelectItem>(4);

    serviceObjectsFilterList.add(new SelectItem(
        SERVICE_OBJECT_TABLE_FILTER_ALL_OBJECTS_ID, ResourceUtils
        .getString("labelFilterServiceObjectsAllObjects")));

    serviceObjectsFilterList.add(new SelectItem(
        SERVICE_OBJECT_TABLE_FILTER_CUSTOMERS_ID, ResourceUtils
        .getString("labelFilterServiceObjectsCustomers")));

    serviceObjectsFilterList.add(new SelectItem(
        SERVICE_OBJECT_TABLE_FILTER_SLAS_ID, ResourceUtils
        .getString("labelFilterServiceObjectsSLAs")));

    serviceObjectsFilterList.add(new SelectItem(
        SERVICE_OBJECT_TABLE_FILTER_SERVICES_ID, ResourceUtils
        .getString("labelFilterServiceObjectsServices")));
  }
}