##################################################################
## 
## 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/manifest/${classname}.java" context="$element" template="odfdom-manifest-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/manifest/${classname}.java" context="$attribute" template="odfdom-manifest-attribute-template.vm" />
#end
#end
</filelist>
