<?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>Application Notifications</vm:title>
    </vm:header>
    <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" />
	<v:variable name="wai" type="int" default="null" param-name="wai" />
      <vm:navigation on="settings"/>
      <vm:navigation1 on="admin"/>
      <vm:navigation2 on="endpoint"/>
      <vm:rawheader caption="Application Notifications"/>
      <vm:body>
	  <vm:login redirect="index.vspx"/>
	  <table class="listing" rules="groups">
	      <colgroup>
		  <col/>
		  <col/>
		  <col/>
	      </colgroup>
	      <tr class="listing_header_row">
		  <th>Application</th>
		  <th>Notification Services</th>
      		  <th width="5%">Action</th>
	      </tr>
	        <v:data-set name="maps" sql="select WAI_NAME, WAI_ID, DB.DBA.WA_APP_PING_TGT_AGG (SH_NAME) as SH_SVC from ODS..APP_PING_REG, ODS..SVC_HOST, DB.DBA.WA_INSTANCE, DB.DBA.WA_MEMBER where SH_ID = AP_HOST_ID  and WAI_ID = AP_WAI_ID and WAI_NAME = WAM_INST and WAM_MEMBER_TYPE = 1 and WAM_USER = :self.u_id group by WAI_NAME, WAI_ID" scrollable="1" editable="1" nrows="1000">
		  <v:before-data-bind>
if (not e.ve_is_post and self.del_svc is not null)
{
  delete from ODS..APP_PING_REG where AP_WAI_ID = self.del_svc;
  delete from ODS..APP_PING_LOG where APL_WAI_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[1] = self.edit_svc)
{
  self.app1.ufl_value := self.edit_svc;
  self.ps1.ufl_value := (select DB.DBA.VECTOR_AGG (cast (AP_HOST_ID as varchar)) from ODS..APP_PING_REG where AP_WAI_ID = self.edit_svc);
}
	                  </v:after-data-bind>
			  <tr class="<?V case when self.edit_svc = control.te_rowset[1] 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[0])'
				      format="%s"
				      url="--sprintf ('inst_ping.vspx?edit=%d', (control.vc_parent as vspx_row_template).te_rowset[1])"
				      xhtml_title="Edit"
				      xhtml_alt="Edit"
				      />
			      </td>
			      <td>
				  <v:label name="la1" value="--(control.vc_parent as vspx_row_template).te_rowset[2]"/>
			      </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 ('inst_ping.vspx?del=%d', (control.vc_parent as vspx_row_template).te_rowset[1])"
				      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="app1">Application</label>
	        	  <v:data-list name="app1" sql="select '--' as WAI_NAME, -1 as WAI_ID from SYS_USERS where U_ID = self.u_id union all select WAI_NAME, WAI_ID from WA_INSTANCE, WA_MEMBER where WAI_NAME = WAM_INST and WAM_MEMBER_TYPE = 1 and WAM_USER = self.u_id and WAI_IS_PUBLIC = 1" key-column="WAI_ID" value-column="WAI_NAME">
		      <v:before-render>
			  if (self.edit_svc is not null)
			    control.vc_add_attribute ('disabled', 1);
		      </v:before-render>
		  </v:data-list>
  	        </div>
  	        <div>
        		  <label class="form" for="ps1">Notification Services</label>
        		  <v:data-list name="ps1" sql="select SH_ID, SH_NAME from ODS..SVC_HOST" key-column="SH_ID" value-column="SH_NAME" multiple="1" xhtml_size="--(select count(*) from ODS..SVC_HOST)">
		  </v:data-list>
  	        </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.app1.ufl_value := null;
self.edit_svc := null;
self.ps1.ufl_value := vector ();
self.app1.vs_set_selected ();
self.ps1.vs_set_selected ();
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><![CDATA[
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 application/provider combination. Please supply correct application and provider values.';
};

if (self.edit_svc is not null)
  self.app1.ufl_value := self.edit_svc;
else
  self.app1.ufl_value := atoi(self.app1.ufl_value);

if (self.app1.ufl_value < 0)
  {
    self.vc_is_valid := 0;
    self.vc_error_message := 'Application is not selected, please select an application.';
    return;
  }

if (self.edit_svc is not null)
  delete from ODS..APP_PING_REG where AP_WAI_ID = self.edit_svc;

if (length (self.ps1.ufl_value) > 0)
{
   foreach (any psi in self.ps1.ufl_value) do
     {
        psi := atoi (psi);
	if (psi > 0)
          insert into ODS..APP_PING_REG (AP_HOST_ID,AP_WAI_ID) values (psi, self.app1.ufl_value);
     }
}

delete from ODS..APP_PING_LOG where APL_WAI_ID = self.app1.ufl_value and
  not exists (select 1 from ODS..APP_PING_REG where AP_HOST_ID = APL_HOST_ID and AP_WAI_ID = APL_WAI_ID);

self.edit_svc := null;
self.app1.ufl_value := null;
self.ps1.ufl_value := vector ();
self.app1.vs_set_selected ();
self.ps1.vs_set_selected ();
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>
