/*
 * 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;

import java.util.List;

import monitoring.web.action.TableActionProvider;
import monitoring.web.action.TreeActionProvider;
import monitoring.web.model.integration.IntegratedTableDataModelProviderImpl;
import monitoring.web.model.integration.IntegratedTreeDataModelProviderImpl;
import monitoring.web.model.integration.beans.TGOObject;

import org.apache.myfaces.trinidad.model.TreeModel;

/**
 * Abstraction that holds references to all data models providers and consequently 
 * all data models used by the sample. 
 */
public class SampleDataModels {

  /**
   * Provider of Table Data Model that is used to populate the Network Module's Managed 
   * Objects table view. 
   */
  private IntegratedTableDataModelProviderImpl networkObjectsTableModelProvider;

  /**
   * Provider of Tree Data Model that is used to populate the Network Module's Network 
   * tree view. 
   */
  private IntegratedTreeDataModelProviderImpl networkTreeModelProvider;

  /**
   * Provider of Table Data Model that is used to populate the Inventory Module's  
   * table view. 
   */
  private IntegratedTableDataModelProviderImpl inventoryObjectsTableModelProvider;

  /**
   * Provider of Tree Data Model that is used to populate the Inventory Module's Inventory 
   * tree view. 
   */
  private IntegratedTreeDataModelProviderImpl inventoryTreeModelProvider;

  /**
   * Provider of Table Data Model that is used to populate the Service Module's Service 
   * Objects table view. 
   */
  private IntegratedTableDataModelProviderImpl serviceObjectsTableModelProvider;

  /**
   * Provider of Tree Data Model that is used to populate the Service Module's Service 
   * tree view. 
   */
  private IntegratedTreeDataModelProviderImpl serviceTreeModelProvider;

  /**
   * Provider of Table Data Model that is used to populate the shared Alarms table view. 
   */
  private IntegratedTableDataModelProviderImpl alarmsTableModelProvider;

  /**
   * Creates all model providers.
   */
  public SampleDataModels() {
    networkObjectsTableModelProvider = new IntegratedTableDataModelProviderImpl();
    networkTreeModelProvider = new IntegratedTreeDataModelProviderImpl();
    inventoryObjectsTableModelProvider = new IntegratedTableDataModelProviderImpl();
    inventoryTreeModelProvider = new IntegratedTreeDataModelProviderImpl();
    serviceObjectsTableModelProvider = new IntegratedTableDataModelProviderImpl();
    serviceTreeModelProvider = new IntegratedTreeDataModelProviderImpl();
    alarmsTableModelProvider = new IntegratedTableDataModelProviderImpl();
  }

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

  /**
   * Initializes all data model providers.
   */
  public void initialize(AbstractSampleContext sampleContext) {

    //Table Models
    TableActionProvider tableActions = sampleContext.getActionProviders().getTableActions();

    tableActions.initializeAlarmsTable();
    tableActions.initializeNetworkObjectsTable();
    tableActions.initializeInventoryObjectsTable();
    tableActions.initializeServiceObjectsTable();

    //Tree Models
    TreeActionProvider treeActions = sampleContext.getActionProviders().getTreeActions();

    treeActions.initializeNetworkObjectsTree();
    treeActions.initializeInventoryObjectsTree();
    treeActions.initializeServiceObjectsTree();
  }

  //////////////////////////////////////////////////////////////////////////////
  //Accessors
  //////////////////////////////////////////////////////////////////////////////

  //Models  

  public List<TGOObject> getNetworkObjectsTableModel() {
    return networkObjectsTableModelProvider.getTableDataModel();
  }
  public List<TGOObject> getServiceObjectsTableModel() {
    return serviceObjectsTableModelProvider.getTableDataModel();
  }
  public List<TGOObject> getInventoryObjectsTableModel() {
    return inventoryObjectsTableModelProvider.getTableDataModel();
  }

  public List<TGOObject> getAlarmsTableModel() {
    return alarmsTableModelProvider.getTableDataModel();
  }

  public TreeModel getInventoryTreeModel() {
    return inventoryTreeModelProvider.getTreeDataModel();
  }
  public TreeModel getNetworkTreeModel() {
    return networkTreeModelProvider.getTreeDataModel();
  }
  public TreeModel getServiceTreeModel() {
    return serviceTreeModelProvider.getTreeDataModel();
  }

  //Model Providers

  public IntegratedTableDataModelProviderImpl getAlarmsTableModelProvider() {
    return alarmsTableModelProvider;
  }
  public IntegratedTableDataModelProviderImpl getInventoryObjectsTableModelProvider() {
    return inventoryObjectsTableModelProvider;
  }
  public IntegratedTreeDataModelProviderImpl getInventoryTreeModelProvider() {
    return inventoryTreeModelProvider;
  }
  public IntegratedTableDataModelProviderImpl getNetworkObjectsTableModelProvider() {
    return networkObjectsTableModelProvider;
  }
  public IntegratedTreeDataModelProviderImpl getNetworkTreeModelProvider() {
    return networkTreeModelProvider;
  }
  public IntegratedTableDataModelProviderImpl getServiceObjectsTableModelProvider() {
    return serviceObjectsTableModelProvider;
  }
  public IntegratedTreeDataModelProviderImpl getServiceTreeModelProvider() {
    return serviceTreeModelProvider;
  }
}