<!--

    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<sun:treeNode id="Connectors"
        text="$resource{i18n.tree.connectors}"
        url="/jca/jca.jsf"
        imageURL="/resource/jca/images/connector.png">

    <dynamicTreeNode id="connectorResources"
	    treeAdaptorClass="org.glassfish.admingui.common.tree.ListTreeAdaptor"
	    children="#{requestScope.children}"
	    childImageURL="/resource/jca/images/connector.png"
	    childExpanded="false"
	    childURL="/jca/connectorResourceEdit.jsf?name=#{$this{valueBinding}.text}"
	    text="$resource{i18n.tree.connectorResources}"
	    url="/jca/connectorResources.jsf">
	<ui:event type="beforeCreate">
	    gf.restRequest(endpoint="#{sessionScope.REST_URL}/resources/connector-resource.json" method="get" result="#{requestScope.resp}");
	    setAttribute(key="children" value="#{requestScope.resp.data.extraProperties.childResources}");
	</ui:event>
        <!facet image>
            <sun:iconHyperlink id="restIcon" icon="TREE_FOLDER" url="/jca/connectorResources.jsf"  border="0" immediate="true" alt="$resource{i18n.tree.connectorResources}" />
        </facet>
    </dynamicTreeNode>
    <dynamicTreeNode id="connectorConnectionPools"
	    treeAdaptorClass="org.glassfish.admingui.common.tree.ListTreeAdaptor"
	    children="#{requestScope.children}"
	    childImageURL="/resource/jca/images/connector.png"
	    childExpanded="false"
	    childURL="/jca/connectorConnectionPoolEdit.jsf?name=#{$this{valueBinding}.text}"
	    text="$resource{i18n.tree.connectorConnectionPools}"
	    url="/jca/connectorConnectionPools.jsf">
	<ui:event type="beforeCreate">
	    gf.restRequest(endpoint="#{sessionScope.REST_URL}/resources/connector-connection-pool.json" method="get" result="#{requestScope.resp}");
	    setAttribute(key="children" value="#{requestScope.resp.data.extraProperties.childResources}");
	</ui:event>
        <!facet image>
            <sun:iconHyperlink id="restIcon" icon="TREE_FOLDER" url="/jca/connectorConnectionPools.jsf"  border="0" immediate="true" alt="$resource{i18n.tree.connectorConnectionPools}"/>
        </facet>
    </dynamicTreeNode>
    <dynamicTreeNode id="adminObjectResources"
	    treeAdaptorClass="org.glassfish.admingui.common.tree.ListTreeAdaptor"
	    children="#{requestScope.children}"
	    childImageURL="/resource/jca/images/connector.png"
	    childExpanded="false"
	    childURL="/jca/adminObjectEdit.jsf?name=#{$this{valueBinding}.text}"
	    text="$resource{i18n.tree.adminObjectResources}"
	    url="/jca/adminObjectResources.jsf">
	<ui:event type="beforeCreate">
	    gf.restRequest(endpoint="#{sessionScope.REST_URL}/resources/admin-object-resource.json" method="get" result="#{requestScope.resp}");
	    setAttribute(key="children" value="#{requestScope.resp.data.extraProperties.childResources}");
	</ui:event>
        <!facet image>
            <sun:iconHyperlink id="restIcon" icon="TREE_FOLDER" url="/jca/adminObjectResources.jsf"  border="0" immediate="true" alt="$resource{i18n.tree.adminObjectResources}"/>
        </facet>
    </dynamicTreeNode>
    <dynamicTreeNode id="workSecurityMaps"
	    treeAdaptorClass="org.glassfish.admingui.common.tree.ListTreeAdaptor"
	    children="#{requestScope.children}"
	    childImageURL="/resource/jca/images/connector.png"
	    childExpanded="false"
	    childURL="/jca/workSecurityMapEdit.jsf?mapName=#{$this{valueBinding}.text}"
	    text="$resource{i18n.tree.workSecurityMaps}"
	    url="/jca/workSecurityMaps.jsf">
	<ui:event type="beforeCreate">
	    gf.restRequest(endpoint="#{sessionScope.REST_URL}/resources/work-security-map.json" method="get" result="#{requestScope.resp}");
	    setAttribute(key="children" value="#{requestScope.resp.data.extraProperties.childResources}");
	</ui:event>
        <!facet image>
            <sun:iconHyperlink id="restIcon" icon="TREE_FOLDER" url="/jca/workSecurityMaps.jsf"  border="0" immediate="true" alt="$resource{i18n.tree.workSecurityMaps}"/>
        </facet>
    </dynamicTreeNode>
</sun:treeNode>
