<?xml version="1.0" encoding="UTF-8"?>
<!--
 -
 -  $Id$
 -
 -  This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
 -  project.
 -
 -  Copyright (C) 1998-2018 OpenLink Software
 -
 -  This project is free software; you can redistribute it and/or modify it
 -  under the terms of the GNU General Public License as published by the
 -  Free Software Foundation; only version 2 of the License, dated June 1991.
 -
 -  This program is distributed in the hope that it will be useful, but
 -  WITHOUT ANY WARRANTY; without even the implied warranty of
 -  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 -  General Public License for more details.
 -
 -  You should have received a copy of the GNU General Public License along
 -  with this program; if not, write to the Free Software Foundation, Inc.,
 -  51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 -
-->
<v:page name="ping-svc-page"
        xmlns:vm="http://www.openlinksw.com/vspx/ods/"
        xmlns:v="http://www.openlinksw.com/vspx/"
        style="index.xsl"
        doctype="-//W3C//DTD XHTML 1.0 Transitional//EN"
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
        fast-render="1">

  <vm:page>
    <vm:header>
      <vm:title>Notification Services</vm:title>
    </vm:header>
    <v:on-init>
      if(wa_user_is_dba (connection_get('vspx_user'),null)=0)
         signal('22024', 'You have no DBA privileges!');
    </v:on-init>
    <vm:pagewrapper>
	<v:variable name="edit_svc" type="int" default="null" param-name="edit" />
	<v:variable name="del_svc" type="int" default="null" param-name="del" />
      <vm:navigation on="settings"/>
      <vm:navigation1 on="admin"/>
      <vm:navigation2 on="endpoint"/>
      <vm:rawheader caption="Notification Services"/>
      <vm:body>
	  <vm:login redirect="index.vspx"/>
	  <table class="listing" rules="groups">
	      <colgroup>
		  <col/>
		  <col/>
		  <col/>
	      </colgroup>
	      <tr class="listing_header_row">
		  <th>Provider</th>
		  <th>Endpoint</th>
      		  <th width="5%">Action</th>
	      </tr>
          <v:data-set name="maps" sql="select SH_URL, SH_NAME, SH_PROTO, SH_ID, SH_METHOD from ODS..SVC_HOST where SH_ID > 0" scrollable="1" editable="1" nrows="0">
		  <v:before-data-bind>
if (not e.ve_is_post and self.del_svc is not null)
{
  delete from ODS..SVC_HOST where SH_ID = self.del_svc;
}
		  </v:before-data-bind>

		  <v:template name="maps_rep" type="repeat">
		      <v:template name="maps_brows" type="browse">
			  <v:after-data-bind>
if (not e.ve_is_post and control.te_rowset[3] = self.edit_svc)
{
  self.endp1.ufl_value := control.te_rowset[0];
  self.ps1.ufl_value := control.te_rowset[1];
  self.proto1.ufl_value := control.te_rowset[2];
  self.meth1.ufl_value := control.te_rowset[4];
}
	                  </v:after-data-bind>
			  <tr class="<?V case when self.edit_svc = control.te_rowset[3] then 'listing_row_selected' when mod(control.te_ctr, 2) then 'listing_row_odd' else 'listing_row_even' end ?>">
			      <td>
				  <v:url name="ur1"
				      value='--concat (&apos;<img src="images/icons/edit_16.png" hspace="3" border="0"/>&apos;, (control.vc_parent as vspx_row_template).te_rowset[1])'
				      format="%s"
				      url="--sprintf ('ping_svc.vspx?edit=%d', (control.vc_parent as vspx_row_template).te_rowset[3])"
				      xhtml_title="Edit"
				      xhtml_alt="Edit"
				      />
			      </td>
			      <td>
				  <v:label name="la1" value="--(control.vc_parent as vspx_row_template).te_rowset[0]"/>
			      </td>
          			  <td nowrap="nowrap">
                    <v:url name="ur2" value='<img src="images/icons/trash_16.png" hspace="3" border="0"/>Delete'
				      format="%s"
				      url="--sprintf ('ping_svc.vspx?del=%d', (control.vc_parent as vspx_row_template).te_rowset[3])"
				      xhtml_title="Delete"
				      xhtml_alt="Delete"
        				      xhtml_class="img_button"
				      />
			      </td>
			  </tr>
		      </v:template>
		  </v:template>

		  <v:template name="maps_footer" type="simple">
		      <tr>
			  <td colspan="3" class="listing_col_action">
			      <vm:ds-navigation data-set="maps" type="set" />
			  </td>
		      </tr>
		  </v:template>
	      </v:data-set>
	  </table>
	  <div class="fm">
          <fieldset class="form">
            <div>
              <label class="form" for="endp1">Endpoint URL</label>
              <v:text name="endp1" value="" xhtml_id="endp1" error-glyph="*" xhtml_size="80">
              <v:validator name="v_httphost" test="regexp" regexp="^http[s]?://[0-9A-Za-z_:.-][/]*[^ ]*+\$" message="You should provide a valid host name."/>
            </v:text>
            </div>
            <div>
              <label class="form" for="ps1">Notification Service</label>
		  <v:text name="ps1" xhtml_id="ps1" error-glyph="*" value="" />
            </div>
            <div>
              <label class="form" for="proto1">Protocol</label>
		  <v:select-list name="proto1" value="" xhtml_id="proto1" error-glyph="*">
			<v:item name="xml-rpc" value="xml-rpc"/>
			<v:item name="soap" value="soap"/>
			<v:item name="REST" value="REST"/>
			<v:item name="PubSubHub" value="PubSubHub"/>
            </v:select-list>
            </div>
            <div>
              <label class="form" for="meth1">Method</label>
              <v:text name="meth1" value="" xhtml_size="80" xhtml_id="meth1" error-glyph="*" default_value="weblogUpdates.ping" />
            </div>
            <div>
              <label class="form">&nbsp;</label>
		  <v:button name="cancel1" value="Cancel" action="simple" enabled="--equ(isnull(self.edit_svc),0)">
		      <v:on-post>
self.endp1.ufl_value := '';
self.ps1.ufl_value := '';
self.proto1.ufl_value := '';
self.meth1.ufl_value := '';
self.edit_svc := null;
self.save1.vc_data_bind (e);
control.vc_enabled := 0;
		      </v:on-post>
		  </v:button>
		  <v:button name="save1" value="--case when self.edit_svc is null then 'Add' else 'Update' end" action="simple">
		      <v:on-post>
if (not self.vc_is_valid)
  return;


declare exit handler for sqlstate '23000'
{
  rollback work;
  self.vc_is_valid := 0;
  self.vc_error_message := 'The values entered conflict with other host/provider combination. Please supply correct host and provider values.';
  return;
};

if (self.edit_svc is null)
{
  insert into ODS..SVC_HOST (SH_URL,SH_NAME,SH_PROTO,SH_METHOD)
                      values (self.endp1.ufl_value, self.ps1.ufl_value, self.proto1.ufl_value, self.meth1.ufl_value);
}
else
{
                    update ODS..SVC_HOST 
                       set SH_URL = self.endp1.ufl_value,
    SH_NAME = self.ps1.ufl_value,
    SH_PROTO = self.proto1.ufl_value,
    SH_METHOD = self.meth1.ufl_value
    where SH_ID = self.edit_svc;
}
self.endp1.ufl_value := '';
self.ps1.ufl_value := '';
self.proto1.ufl_value := '';
self.meth1.ufl_value := '';
self.edit_svc := null;
                  
control.vc_data_bind (e);
self.maps.vc_data_bind (e);
		      </v:on-post>
		  </v:button>
            </div>
	  </fieldset>
      </div>
      </vm:body>
    </vm:pagewrapper>
  </vm:page>
</v:page>
