/*
 * 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 ilog.cpl.datasource.IlpDataSource;
import ilog.tgo.model.IltAlarm;
import monitoring.generator.AlarmGenerator;

/**
 * Implementation of an <code>AbstractSampleContext</code> targeted at  
 * an alarm generation system based solely in TGO abstractions.
 */
public class SampleContext extends AbstractSampleContext {
  
  /**
   * Initializes the alarm generator which typically is specific to the 
   * underlying OSS technology.  
   */
  protected void initializeAlarmGenerator() {
    
    AlarmGenerator.initialize();
    
    alarmGenerator = new AlarmGenerator(
        getControls().getSharedControls().getAlarmGenerationRate(),
        getControls().getSharedControls().getMaxNumberOfAlarms(),
        getDataStructures().getDataSources().getNetworkDataSource(),
        getDataStructures().getDataSources().getAlarmsDataSource());    
  }
  /**
   * Creates sample alarms to show at application startup.
   * 
   */
  protected void createSampleAlarms() {
    
    //Get alarm generator
    AlarmGenerator alarmGenerator = (AlarmGenerator)getAlarmGenerator();
    
    String[] managedObjectIds = {
        "RouterB",
        "NetE",
        "NetE",
        "NetI",
        "NetF"
    };
    
    IltAlarm.Severity[] severities = {
        IltAlarm.Severity.Minor,
        IltAlarm.Severity.Critical,
        IltAlarm.Severity.Major,
        IltAlarm.Severity.Minor,
        IltAlarm.Severity.Warning
    };
    
    //Save current values
    int originalMaxNumberOfAlarms = alarmGenerator.getMaxNumberOfAlarms();
    
    //Set temporary configuration to create the alarms quickly
    alarmGenerator.setMaxNumberOfAlarms(managedObjectIds.length);
    
    IlpDataSource dataSource = alarmGenerator.getMODataSource();
    
    for (int i = 0; i < managedObjectIds.length; i++) {
      alarmGenerator.generateOneAlarm(dataSource.getObject(managedObjectIds[i]), severities[i]);
    }
    
    //Restore original values 
    alarmGenerator.setMaxNumberOfAlarms(originalMaxNumberOfAlarms);
  }

  protected String getSampleLoggerName() {
    return "samples.monitoring.web";
  }
}