<?xml version="1.0" encoding="UTF-8"?>
<!--

    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.

-->
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
<filesystem>
    <folder name="Templates">
        <folder name="ClientSide">
            <file name="RestJavascriptClient.js">
                <attr name="position" intvalue="420"/>
                <attr name="template" boolvalue="true"/>
                <attr name="templateCategory" stringvalue="html5"/>
                <attr name="templateWizardIterator" newvalue="org.netbeans.modules.web.client.rest.wizard.JSClientIterator"/>
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/web/client/rest/wizard/resources/JSClient.html"/>
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.web.client.rest.wizard.Bundle"/>
                <attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/web/client/rest/resources/restservice.png"/>
            </file>
            <file name="js.html" url="/org/netbeans/modules/web/client/rest/resources/js.html">
                <attr name="position" intvalue="0"/>
		<attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
            </file>
            <file name="rest.js" url="/org/netbeans/modules/web/client/rest/resources/rest.js">
                <attr name="position" intvalue="0"/>
		<attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
            </file>
	</folder>
        <folder name="WebServices">
            <file name="RestJavascriptClient.js">
                <attr name="position" intvalue="485"/>
                <attr name="template" boolvalue="true"/>
                <attr name="templateCategory" stringvalue="html5"/>
                <attr name="templateWizardIterator" newvalue="org.netbeans.modules.web.client.rest.wizard.JSClientIterator"/>
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/web/client/rest/wizard/resources/JSClient.html"/>
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.web.client.rest.wizard.Bundle"/>
                <attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/web/client/rest/resources/restservice.png"/>
            </file>            
        </folder>    
    </folder>
</filesystem>
