{{!
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
}}

<tr>
  <td> {{udf.name}}</td>
  <td>{{udf.classname}} </td>
  <td>{{udf.owner}}</td>
  <td class="center">
    <a class="hand" {{action "toggleExpandUdf" udf.fileResource }}>{{fa-icon "expand"}}</a>&nbsp;&nbsp;
    <a class="hand" {{action "showEditUdf" udf.id udf.fileResource }}>{{fa-icon "edit"}}</a>&nbsp;&nbsp;
    <a class="hand" {{action "showRemoveUdfModal" udf.id }}>{{fa-icon "remove"}}</a>
  </td>
</tr>

{{#if expanded}}
  <tr>
    <td colspan="5">
       <label>File Resource Name:&nbsp;</label>{{udfFileResourceName}}
       <br />
       <label>File Resource Path:&nbsp;</label> {{udfFileResourcePath}}
    </td>
  </tr>
{{/if}}

{{#if expandedEdit}}
  {{udf-edit
    udfid=editUdfId
    name=editUdfName
    classname=editUdfClassName
    owner=editOwner
    fileResource=editFileResource
    udfFileResourceName=udfFileResourceName
    udfFileResourcePath=udfFileResourcePath
    fileResourceList=fileResourceList
    selectedFileResource=selectedFileResource
    isAddingNewFileResource=isAddingNewFileResource
    handleResourceChange='handleResourceChange'
    cancelEditUdf='cancelEditUdf'
    saveUDf='saveUDf'
  }}
{{/if}}


{{#if showDeleteUdfModal}}
  {{confirm-dialog
  title="Confirm"
  label="Do You want to delete the UDF?"
  titleIcon="minus"
  labelIcon="save"
  rejectIcon="times"
  confirmIcon="check"
  closable=false
  confirmClass="success"
  confirm="removeUdf"
  reject="cancelUdf"
  }}
{{/if}}



{{yield}}
