blob: 8d0bd8599eca91932f185dfba594eaa99907148a [file] [log] [blame]
##################################################################
##
## 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.
##
##################################################################
## Template to create the Java class representing an ODF element
##
## Documentation of template development can be found in local file
## TemplateHelp.html.
##
#set ($element = ${model.getElement($context)})
#set ($oldelement = ${oldmodel.getElement($context)})
#set ($NS = ${element.getNamespace()})
#set ($classname = "${model.camelCase($element.getLocalName())}Element")
##
## Set child element and child attributes
#set ($children = ${element.getChildElements().withoutMultiples()})
#set ($attributes = ${element.getAttributes().withoutMultiples()})
##
#set ($baseclassname = "OdfElement")
#set ($baseHasMandatoryAttr = false)
##
## Test if this element has mandatory (non optional) attributes
#set ($hasMandatoryAttr = false)
#foreach ($attribute in $attributes)
#if (${element.isMandatory($attribute)})
#set ($hasMandatoryAttr = true)
#set ($mandatoryAttr = $attribute)
#end
#end
##
## Begin Code
#include('copyright.txt')
/*
* This file is automatically generated.
* Don't edit manually.
*/
package org.odftoolkit.odfdom.pkg.manifest;
##
## ---------------------------------------------------
## Imports
## ---------------------------------------------------
##
import org.odftoolkit.odfdom.pkg.OdfElement;
import org.odftoolkit.odfdom.pkg.OdfFileDom;
import org.odftoolkit.odfdom.pkg.OdfName;
import org.odftoolkit.odfdom.pkg.OdfPackageNamespace;
##
#foreach ($child in $attributes)
#if ($child == "*")
#set ($anyattribute = true)
#else
#set ($childNS = ${child.getNamespace()})
#set ($childClassname = "${model.camelCase($child.getLocalName())}Attribute")
#if (!$childNS.equals("manifest")) ## Do not generate "import" for the same package!
import org.odftoolkit.odfdom.pkg.${childNS}.$childClassname;
#end
#end
#end
##
## If there is a base class which is not in the current package
#if ($baseimport)
import ${baseimport};
#end
##
## ---------------------------------------------------
## Class
## ---------------------------------------------------
##
/**
* Manifest implementation of OpenDocument element {@odf.element ${context}}.
*
#if ($anychild)
* This class can have any org.w3c.dom.Element child element.
#end
#if ($anyattribute)
* This class can have any org.w3c.dom.Attribute attribute.
#end
*/
public class $classname extends $baseclassname {
public static final OdfName ELEMENT_NAME = OdfName.newName(OdfPackageNamespace.${NS.toUpperCase()}, "${element.getLocalName()}");
/**
* Create the instance of <code>$classname</code>
*
* @param ownerDoc The type is <code>OdfFileDom</code>
*/
public $classname(OdfFileDom ownerDoc) {
super(ownerDoc, ELEMENT_NAME);
}
/**
* Get the element name
*
* @return return <code>OdfName</code> the name of element {@odf.element ${context}}.
*/
@Override
public OdfName getOdfName() {
return ELEMENT_NAME;
}
##
## ---------------------------------------------------
## Add init method if this element or the base
## element has mandatory attributes
## TODO: NO caller use this method.
## ---------------------------------------------------
##
## ---------------------------------------------------
## Attribute getters and setters
## ---------------------------------------------------
##
#foreach ($attr in $attributes)
#set($attri = ${model.getAttribute($attr.getQName())})
#set ($valueObject = "String")
#set ($simpleValue = "")
#set ($dataTypes = ${attri.getDatatypes().withoutMultiples()})
#set ($valueTypes = ${javamodel.getValuetypes($dataTypes)})
#foreach ($valueType in $valueTypes)
#set ($valueObject = $valueType)
#end
## use attri get all of the values.
#set($values = ${attri.getValues().withoutMultiples()})
#if ($values.size() ==2 && $dataTypes.size()==0)
#set ($trueFlag = false)
#set ($falseFlag = false)
#foreach ($value in $values)
#if ($value==true)
#set ($trueFlag = true)
#end
#if ($value==false)
#set ($falseFlag = true)
#end
#end
#if ($trueFlag and $falseFlag)
#set ($hasdatatype = true)
#set ($valueObject = "Boolean")
#end
#end
#if ($valueObject != "String" && $valueObject != "Double" && $valueObject != "Integer" && $valueObject != "Boolean")
#set ($valueObject = "String")
#end
#if ($valueObject != "String")
#set ($simpleValue = ${javamodel.getPrimitiveType($valueObject)})
#end
#if ($attr != "*")
#set ($attribute = ${attr.withMultiples()})
#set ($aNS = ${attribute.getNamespace()})
#set ($aClassname = "${model.camelCase($attribute.getLocalName())}Attribute")
#set ($aParam = "${model.javaCase($attribute.getLocalName())}Value")
/**
* Receives the value of the ODFDOM attribute representation <code>$aClassname</code> , See {@odf.attribute ${attribute.getQName()}}
*
#if (${element.isMandatory($attribute)})
* Attribute is mandatory.
*
#end
* @return - the <code>$valueObject</code> , the value or <code>null</code>, if the attribute is not set and no default value defined.
*/
public $valueObject get${aClassname}() {
$aClassname attr = ($aClassname) getOdfAttribute(OdfPackageNamespace.${aNS.toUpperCase()}, "${attribute.getLocalName()}");
if (attr != null) {
#if ($simpleValue!="")
return ${valueObject}.valueOf(attr.${simpleValue}Value());
#else
return ${valueObject}.valueOf(attr.getValue());
#end
}
#if ($odfmodel.getDefaultAttributeValue($attribute, $element))
#set ($defaultValue = ${model.escapeLiteral($odfmodel.getDefaultAttributeValue($attribute, $element))})
#set ($defaultValueSet = $odfmodel.getDefaultAttributeValues($attribute))
#if ($defaultValueSet.size()>1)
#set ($constant = $model.constantCase($defaultValue))
#if ($valueObject == "String")
return ${aClassname}.DEFAULT_VALUE_${model.escapeKeyword($constant)};
#else
return ${valueObject}.valueOf(${aClassname}.DEFAULT_VALUE_${model.escapeKeyword($constant)});
#end
#else
#if ($valueObject == "String")
return ${aClassname}.DEFAULT_VALUE;
#else
return ${valueObject}.valueOf(${aClassname}.DEFAULT_VALUE);
#end
#end
#else
return null;
#end
}
/**
* Sets the value of ODFDOM attribute representation <code>$aClassname</code> , See {@odf.attribute ${attribute.getQName()}}
*
* @param $aParam The type is <code>$valueObject</code>
*/
public void set${aClassname}($valueObject $aParam) {
$aClassname attr = new ${aClassname}((OdfFileDom) this.ownerDocument);
setOdfAttribute(attr);
#if ($valueObject == "String")
attr.setValue($aParam);
#else
attr.set${model.camelCase($simpleValue)}Value($aParam.${simpleValue}Value());
#end
}
#end
#end
##
## ---------------------------------------------------
## Methods for child element creation
## ---------------------------------------------------
##
#foreach($ch in $children)
#if ($ch != "*")
#set ($child = ${ch.withMultiples()})
#set ($cClassname = "${model.camelCase($child.getLocalName())}Element")
#set ($cVar = ${model.javaCase($child)})
#set ($ch_attributes = ${child.getAttributes().withoutMultiples()})
##set has parameter flag
#set ($hasParams = false)
#foreach ($ch_attribute in $ch_attributes)
#if (${child.isMandatory($ch_attribute)})
#set ($hasParams = true)
#end
#end
#if ($hasParams)
/**
* Create child element {@odf.element ${child}}.
*
#set ($seperateFlag="")
#set ($params="")
#foreach ($ch_attr in $ch_attributes)
#if (${child.isMandatory($ch_attr)})
#set($ch_attri = ${model.getAttribute($ch_attr.getQName())})
#set ($ch_ValueObject = "String")
#set ($ch_SimpleValue = "")
#set ($ch_DataTypes = ${ch_attri.getDatatypes().withoutMultiples()})
#set ($ch_ValueTypes = ${javamodel.getValuetypes($ch_DataTypes)})
#foreach ($ch_ValueType in $ch_ValueTypes)
#set ($ch_ValueObject = $ch_ValueType)
#end
## use ch_attri get all of the values.
#set($ch_Values = ${ch_attri.getValues().withoutMultiples()})
#if ($ch_Values.size() ==2 && $ch_DataTypes.size()==0)
#set ($trueFlag = false)
#set ($falseFlag = false)
#foreach ($ch_Value in $ch_Values)
#if ($ch_Value==true)
#set ($trueFlag = true)
#end
#if ($ch_Value==false)
#set ($falseFlag = true)
#end
#end
#if ($trueFlag and $falseFlag)
#set ($ch_Hasdatatype = true)
#set ($ch_ValueObject = "Boolean")
#end
#end
#if ($ch_ValueObject != "String" && $ch_ValueObject != "Double" && $ch_ValueObject != "Integer" && $ch_ValueObject != "Boolean")
#set ($ch_ValueObject = "String")
#end
#if ($ch_ValueObject != "String")
#set ($ch_SimpleValue = ${javamodel.getPrimitiveType($ch_ValueObject)})
#end
#if ($ch_attr != "*")
#set ($attribute = ${ch_attr.withMultiples()})
#set ($aNS = ${attribute.getNamespace()})
#set ($aClassname = "${model.camelCase($attribute.getLocalName())}Attribute")
#set ($aParam = "${model.javaCase($attribute.getLocalName())}Value")
* @param $aParam the <code>$ch_ValueObject</code> value of <code>$aClassname</code>, see {@odf.attribute ${attribute.getQName()}} at specification
#if ($ch_SimpleValue!="")
#set ($params="${params}${seperateFlag}${ch_SimpleValue} ${aParam}")
#else
#set ($params="${params}${seperateFlag}${ch_ValueObject} ${aParam}")
#end
#set ($seperateFlag=", ")
#end
#end
#end
## Compare element from old and new Spec. A direct comparison is not possible (both encapsulate different RelaxNG Expressions)
## but we can compare by name
#if (!$oldelement || !${oldelement.getChildElements().containsName($child)})
* Child element is new in Odf 1.2
*
#end
#if (${element.isMandatory($child)})
* Child element is mandatory.
*
#end
* @return the element {@odf.element ${child}}
*/
public $cClassname new${cClassname}($params) {
$cClassname $cVar = ((OdfFileDom) this.ownerDocument).newOdfElement(${cClassname}.class);
#foreach ($ch_attr in $ch_attributes)
#if ($ch_attr != "*" && ${child.isMandatory($ch_attr)})
#set ($aClassname = "${model.camelCase($ch_attr.getLocalName())}Attribute")
#set ($aParam = "${model.javaCase($ch_attr.getLocalName())}Value")
${cVar}.set$aClassname($aParam);
#end
#end
this.appendChild($cVar);
return $cVar;
}
#else
/**
* Create child element {@odf.element ${child}}.
*
## Compare element from old and new Spec. A direct comparison is not possible (both encapsulate different RelaxNG Expressions)
## but we can compare by name
#if (!$oldelement || !${oldelement.getChildElements().containsName($child)})
* Child element is new in Odf 1.2
*
#end
#if (${element.isMandatory($child)})
* Child element is mandatory.
*
#end
* @return the element {@odf.element ${child}}
*/
public $cClassname new${cClassname}() {
$cClassname $cVar = ((OdfFileDom) this.ownerDocument).newOdfElement(${cClassname}.class);
this.appendChild($cVar);
return $cVar;
}
#end
#end
#end
##
## -----------------------------------------------------
## New: newTextNode
## -----------------------------------------------------
##
#if ($element.canHaveText())
/**
* Add text content. Only elements which are allowed to have text content offer this method.
*/
public void newTextNode(String content) {
if (content != null && !content.isEmpty()) {
this.appendChild(this.getOwnerDocument().createTextNode(content));
}
}
#end
}