##################################################################
## 
## 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.
##
##################################################################
<?xml version="1.0" encoding="UTF-8"?>
## Template to create the list of artefacts which are to be generated
##
## Documentation of template development can be found in local file
## src/main/resources/documentation/help.html
##
<filelist>
##
#foreach ($element in ${model.getElements().withoutMultiples()})
#if ($element != "*")
##
#set($classname = "${model.camelCase($element.getLocalName())}Element")
	<file path="org/odftoolkit/odfdom/pkg/dsig/${classname}.java" context="$element" template="odfdom-dsig-element-template.vm" />
##
#end
#end
##
#foreach ($attribute in ${model.getAttributes().withoutMultiples()})
#if ($attribute != "*")
##
#set($classname = "${model.camelCase($attribute.getLocalName())}Attribute")
	<file path="org/odftoolkit/odfdom/pkg/dsig/${classname}.java" context="$attribute" template="odfdom-dsig-attribute-template.vm" />
#end
#end
</filelist>
