<?php
/*******************************************************************************
 * Copyright (c) 2014-2015 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Denis Roy (Eclipse Foundation) - initial API and implementation
 *    Christopher Guindon (Eclipse Foundation)
 *******************************************************************************/
require_once(realpath(dirname(__FILE__) . "/../../system/app.class.php"));

class Hipp {

  #*****************************************************************************
  #
  # hipp.class.php
  #
  # Author:   Denis Roy
  # Date:    2013-11-06
  #
  # Description: Functions and modules related to Hudson HIPP
  #
  # HISTORY:
  #
  # mysql> select * from ProjectServices;
  # +-----+-------------------+-------------+----------------+------------------------+--------------------+------------+----------+-----------+---------+
  # | ID  | ProjectID         | ServiceType | ServiceVersion | ServicePreviousVersion | ServerHost         | ServerPort | XvncBase | OtherData | State   |
  # +-----+-------------------+-------------+----------------+------------------------+--------------------+------------+----------+-----------+---------+
  # |   1 | technology.babel  | hipp        | 3.2.2          | 3.0.1-b2               | hipp6.eclipse.org  |       8215 |      360 | NULL      | running |
  #
  #*****************************************************************************

  var $ID = 0;

  var $ProjectID = "";

  var $ServiceType  = "";

  var $ServiceVersion = "";

  var $ServicePreviousVersion = "";

  var $ServiceLatestVersion = "";

  var $ServerHost = "";

  var $ServerPort = 0;

  var $XvncBase = 0;

  var $OtherData = "";

  var $State = "";

  # Path to HIPP images
  private $HIPPImagePath = "/opt/public/hipp/homes/hudson-wars";

  private $VersionRegexp = '/[^\w\.-]/';

  /**
   * Create HTML for hipp control panel link
   *
   * @param string $id
   *   Project id (technology.cbi)
   *
   * @param string $shortname
   *   Project shortname (cbi)
   *
   * @return string
   */
  public function getControlLink($id, $shortname){
    $state = $this->getState();
    $str = "<span id='" . $shortname . "_state' class='" . $state . "'>" . ucfirst($state) . " (" . $this->getServiceVersion() . ")</span> &#160; <span id='" . $shortname . "_instance'>";

    # Examine Service status to determine control knobs to place
    if ($state == "running") {
      # Add STOP button
      $str .= '<a title="stop" href="#ct" data-action="stop" data-projectid="' . $id . '" data-shortname="' . $shortname . '" class="hipp-control-action-link" ><i class="fa fa-power-off"></i></a> &#160; ';

      # Add RESTART button
      $str .= '<a title="restart" href="#ct" data-action="restart" data-projectid="' . $id . '" data-shortname="' . $shortname . '" class="hipp-control-action-link" ><i class="fa fa-refresh"></i></a>';
    }

    if ($state == "stopped") {
      # Add START button
      $str .= '<a title="start"  href="#ct" data-action="start" data-projectid="' . $id . '" data-shortname="' . $shortname . '" class="hipp-control-action-link" ><i class="fa fa-power-off"></i></a>';
    }

    # Upgrade available?
    if($this->getServiceLatestVersion("hipp") != $this->getServiceVersion() && $this->getServiceLatestVersion("hipp") != "" && $this->getServiceVersion() != "") {

      $str .= '<br /><a title="upgrade"  href="#ct" data-action="upgrade" data-projectid="' . $id . '" data-shortname="' . $shortname . '" class="hipp-control-action-link" ><i class="fa fa-download"></i> Upgrade to ' . $this->getServiceLatestVersion("hipp") . '</a>';
      $readme = $this->getReadmeContents("hipp", $this->getServiceLatestVersion("hipp"));
      if($readme != "") {
        $str .= "<br /><span id='" . $shortname . "_readme'><a title='readme'  href='#ct' data-action='readme' data-projectid='" . $id . "' data-shortname='" . $shortname . "' class='hipp-control-action-link'><i class='fa fa-file-o'></i> README for " . $this->getServiceLatestVersion("hipp") . '</a></span>';
      }
    }

    return $str . "</span>";
  }

  function getID() {
    return $this->ID;
  }

  function getProjectID() {
    return $this->ProjectID;
  }

  function getServiceType() {
    return $this->ServiceType;
  }

  function getServiceVersion() {
    return $this->ServiceVersion;
  }

  function getServicePreviousVersion() {
    return $this->ServicePreviousVersion;
  }

  function getServiceLatestVersion() {
    return $this->ServiceLatestVersion;
  }
  function getServerHost() {
    return $this->ServerHost;
  }

  function getServerPort() {
    return $this->ServerPort;
  }

  function getXvncBase() {
    return $this->XvncBase;
  }

  function getOtherData() {
    return $this->OtherData;
  }

  function getState() {
    return $this->State;
  }

  function setID($_ID) {
    $this->ID = $_ID;
  }

  function setProjectID($_ProjectID) {
    $this->ProjectID = $_ProjectID;
  }

  function setServiceType($_ServiceType) {
    $this->ServiceType = $_ServiceType;
  }

  function setServiceVersion($_ServiceVersion) {
    $this->ServiceVersion = $_ServiceVersion;
  }

  function setServicePreviousVersion($_ServicePreviousVersion) {
    $this->ServicePreviousVersion = $_ServicePreviousVersion;
  }

  function setServiceLatestVersion($_ServiceLatestVersion) {
    # this regexp also in admintools.git:create_hipp
    $this->ServiceLatestVersion = preg_replace($this->VersionRegexp, '', $_ServiceLatestVersion);
  }

  function setServerHost($_ServerHost) {
    $this->ServerHost = $_ServerHost;
  }

  function setServerPort($_ServerPort) {
    $this->ServerPort = $_ServerPort;
  }

  function setXvncBase($_XvncBase) {
    $this->XvncBase = $_XvncBase;
  }

  function setOtherData($_OtherData) {
    $this->OtherData = $_OtherData;
  }

  function setState($_State) {
    $this->State = $_State;
  }

  function selectHIPP($_ProjectID) {
    $App = new App();
    $WHERE = "";

    if ($_ProjectID != "") {
      $WHERE .= " WHERE SRV.ProjectID = " . $App->returnQuotedString($App->sqlSanitize($_ProjectID)) . "
                  AND SRV.ServiceType = 'hipp'";
      $sql = "SELECT /*  hipp.class.php */
          SRV.ID,
          SRV.ProjectID,
          SRV.ServiceType,
          SRV.ServiceVersion,
          SRV.ServicePreviousVersion,
          SRV.ServerHost,
          SRV.ServerPort,
          SRV.XvncBase,
          SRV.OtherData,
          SRV.State
          FROM
          ProjectServices AS SRV "
          . $WHERE;

      $result = $App->foundation_sql($sql);

      if ($myrow = mysql_fetch_array($result)) {
        $this->setID($myrow["ID"]);
        $this->setProjectID($myrow["ProjectID"]);
        $this->setServiceType($myrow["ServiceType"]);
        $this->setServiceVersion($myrow["ServiceVersion"]);
        $this->setServicePreviousVersion($myrow["ServicePreviousVersion"]);
        $this->setServerHost($myrow["ServerHost"]);
        $this->setServerPort($myrow["ServerPort"]);
        $this->setXvncBase($myrow["XvncBase"]);
        $this->setOtherData($myrow["OtherData"]);
        $this->setState($myrow["State"]);
      }
      $result = NULL;
      $myrow = NULL;

      $this->getLatestVersionFromFile("hipp");
    }
  }

  /**
   * getLatestVersionFromFile - read latest version from file
   * @param string - Servicetype (HIPP)
   * @return none
   * @since 2015-02-26
   * @author droy
   */
  function getLatestVersionFromFile($_ServiceType="hipp") {
    if(is_readable($this->HIPPImagePath . "/latest")) {
      $this->setServiceLatestVersion(file_get_contents($this->HIPPImagePath. "/latest"));
    }
  }

  /**
   * getReadmeContents - Fetch README contents for a version
   * @param string - Servicetype (HIPP), string Version (3.2.2)
   * @return String
   * @since 2015-02-26
   * @author droy
   */
  function getReadmeContents($_ServiceType="hipp", $_version) {
    $rValue = "";
    if($_version != "") {
      $_version = preg_replace($this->VersionRegexp, '', $_version);
      $filename = $this->HIPPImagePath . "/hudson-" . $_version . ".README";
      if(is_readable($filename)) {
        $rValue = file_get_contents($filename);
      }
    }
    return $rValue;
  }
}