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

import ilog.cpl.model.IlpObject;
import ilog.tgo.model.IltBTS;
import ilog.tgo.model.IltBTSAntenna;
import ilog.tgo.model.IltCard;
import ilog.tgo.model.IltCardCarrier;
import ilog.tgo.model.IltLed;
import ilog.tgo.model.IltLink;
import ilog.tgo.model.IltNetworkElement;
import ilog.tgo.model.IltPolyGroup;
import ilog.tgo.model.IltPort;
import ilog.tgo.model.IltRectGroup;
import ilog.tgo.model.IltShelf;

/**
 * This class provides client-side styling for managed objects.
 * It can be used either in a table or tree JSF component.
 * <p>
 * The mapped properties are:
 * <ol>
 * <li>Icon URI
 * </ol>
 */
public class ObjectStylingUtils {
  // Icon URIs
  private static final String BASE_PATH = "/resources/images/managed-objects";
  private static final String UNKNOWN_ICON = BASE_PATH + "/unknown.gif";
  private static final String POLYGRP_ICON = BASE_PATH + "/polygroup.gif";
  private static final String RECTGRP_ICON = BASE_PATH + "/polygroup.gif";
  private static final String BSC_ICON = BASE_PATH + "/bsc.gif";
  private static final String BTSEQP_ICON = BASE_PATH + "/btseqp.gif";
  private static final String BTSNET_ICON = BASE_PATH + "/btsnet.gif";
  private static final String IPNET_ICON = BASE_PATH + "/ipnetwork.gif";
  private static final String MFRM_ICON = BASE_PATH + "/mainframe.gif";
  private static final String MD_ICON = BASE_PATH + "/md.gif";
  private static final String MSC_ICON = BASE_PATH + "/msc.gif";
  private static final String NE_ICON = BASE_PATH + "/ne.gif";
  private static final String NMW_ICON = BASE_PATH + "/nmw.gif";
  private static final String ROUTER_ICON = BASE_PATH + "/router.gif";
  private static final String SERVER_ICON = BASE_PATH + "/server.gif";
  private static final String LINK_ICON = BASE_PATH + "/link.gif";
  private static final String BTS_ICON = BASE_PATH + "/bts.gif";
  private static final String BTSANT_ICON = BASE_PATH + "/btsantenna.gif";

  private static final String VENDOR_ICON = BASE_PATH + "/vendor.gif";

  private static final String LED_RECT = BASE_PATH + "/led-rectangular.gif";
  private static final String LED_RECT_SHP = BASE_PATH + "/led-rectangular-shape.gif";
  private static final String LED_CIRCULAR = BASE_PATH + "/led-circular.gif";
  private static final String LED_CIRCULAR_FLAT = BASE_PATH + "/led-circular-flat.gif"; 
  private static final String LED_HD_PWA = BASE_PATH + "/led-hd-pw-a.gif";
  private static final String LED_PW_B = BASE_PATH + "/led-pw-b.gif";

  private static final String PORT_RJ_45 = BASE_PATH + "/port-rj-45-f.gif";
  private static final String PORT_CENTRO = BASE_PATH + "/port-centronics-50-f.gif"; 
  private static final String PORT_DB_25 = BASE_PATH + "/port-db-25-f.gif";
  private static final String PORT_DB_HP_50 = BASE_PATH + "/port-db-hp-50-f.gif"; 
  private static final String PORT_DB_9F = BASE_PATH + "/port-db-9-f.gif"; 
  private static final String PORT_IEEE = BASE_PATH + "/port-ieee-1394-6-f.gif"; 
  private static final String PORT_DIN = BASE_PATH + "/port-din-6-f.gif"; 

  private static final String CARD_EMPTY = BASE_PATH + "/card-empty.gif"; 
  private static final String CARD_STANDARD = BASE_PATH + "/card-standard.gif"; 

  private static final String CARDCARRIER = BASE_PATH + "/cardcarrier.gif"; 

  /**
   * Returns the URI to the image to be used as representation of
   * a given alarm object.
   */
  public static String getIconURI(IlpObject node) {
    if (node instanceof IltLink) {
      return LINK_ICON;
    } else if (node instanceof IltRectGroup) {
      return RECTGRP_ICON;
    } else if (node instanceof IltPolyGroup) {
      return POLYGRP_ICON;
    } else if (node instanceof IltBTS) {
      return BTS_ICON;
    } else if (node instanceof IltBTSAntenna) {
      return BTSANT_ICON;
    } else if (node instanceof IltNetworkElement) {
      IltNetworkElement.Type type = ((IltNetworkElement) node).getType();
      if (IltNetworkElement.Type.BSC_Image.equals(type)
          || IltNetworkElement.Type.BSC.equals(type)) {
        return BSC_ICON;
      } else if (IltNetworkElement.Type.BTS_Image.equals(type)
          || IltNetworkElement.Type.BTS.equals(type)) {
        return BTSNET_ICON;
      } else if (IltNetworkElement.Type.BTSEquipment.equals(type)) {
        return BTSEQP_ICON;
      } else if (IltNetworkElement.Type.IPNetwork.equals(type)) {
        return IPNET_ICON;
      } else if (IltNetworkElement.Type.Mainframe.equals(type)) {
        return MFRM_ICON;
      } else if (IltNetworkElement.Type.MD.equals(type)
          || IltNetworkElement.Type.MD_Image.equals(type)) {
        return MD_ICON;
      } else if (IltNetworkElement.Type.MSC.equals(type)
          || IltNetworkElement.Type.MSC_Image.equals(type)) {
        return MSC_ICON;
      } else if (IltNetworkElement.Type.NE.equals(type)) {
        return NE_ICON;
      } else if (IltNetworkElement.Type.NMW.equals(type)
          || IltNetworkElement.Type.NMW_Image.equals(type)) {
        return NMW_ICON;
      } else if (IltNetworkElement.Type.Router.equals(type)) {
        return ROUTER_ICON;
      } else if (IltNetworkElement.Type.Server.equals(type)
          || IltNetworkElement.Type.Server_Image.equals(type)) {
        return SERVER_ICON;
      }
    } else if (node instanceof IltPort) {
      IltPort.Type type = ((IltPort) node).getType();
      if (IltPort.Type.RJ45_f.equals(type)) {
        return PORT_RJ_45;
      } else if (IltPort.Type.Centronics_50f.equals(type)) {
        return PORT_CENTRO;
      } else if (IltPort.Type.DB_25f.equals(type)) {
        return PORT_DB_25;
      } else if (IltPort.Type.DB_HP_50f.equals(type)) {
        return PORT_DB_HP_50;
      } else if (IltPort.Type.DB_9f.equals(type)) {
        return PORT_DB_9F;
      } else if (IltPort.Type.IEEE_1394_6f.equals(type)) {
        return PORT_IEEE;
      } else if (IltPort.Type.DIN_6f.equals(type)) {
        return PORT_DIN;
      } 
    } else if (node instanceof IltLed) {
      IltLed.Type type = ((IltLed) node).getType();
      if (IltLed.Type.RectangularShape.equals(type)) {
        return LED_RECT_SHP;
      } else if (IltLed.Type.CircularFlat.equals(type)) {
        return LED_CIRCULAR_FLAT;
      } else if (IltLed.Type.Rectangular.equals(type)) {
        return LED_RECT;
      } else if (IltLed.Type.HardDiskPwr_A.equals(type)) {
        return LED_HD_PWA;
      } else if (IltLed.Type.Power_B.equals(type)) {
        return LED_PW_B;
      } else if (IltLed.Type.Circular.equals(type)) {
        return LED_CIRCULAR;
      } 
    } else if (node instanceof IltShelf) {
      return MD_ICON;
    } else if (node instanceof IltCardCarrier) {
      return CARDCARRIER;
    } else if (node instanceof IltCard) {
      IltCard.Type type = ((IltCard) node).getType();
      if (IltCard.Type.EmptySlot.equals(type)) {
        return CARD_EMPTY;
      } else if (IltCard.Type.Standard.equals(type)) {
        return CARD_STANDARD;
      } 
    } else if ("EquipmentVendor".equals(node.getIlpClass().getName())) {
      return VENDOR_ICON;
    }
    return UNKNOWN_ICON;
  }
  
  /**
   * Returns the style to be used to represent the object.
   */
  public static String getObjectStyle(IlpObject object, boolean selected) {
    String bold = (selected) ? "bold" : "normal";
    String backgroundColor = (selected) ? "background-color: #C0C0C0;" : "";
    return "font-family: Arial; font-size: 12px; color: #333333; font-weight: " + bold + "; " + backgroundColor;  
  }

}