################################################################## ## ## 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)}Element") ## ## Set child element and child attributes #set ($children = ${element.getChildElements().withoutMultiples()}) #set ($attributes = ${element.getAttributes().withoutMultiples()}) ## ## Determine whether element is stylable. Set base class OdfElement, OdfStylableElement, or... #if ($odfmodel.isStylable($element)) #set ($stylable = true) #set ($baseclassname = "OdfStylableElement") #set ($elementStyleFamily=${odfmodel.getStyleFamilies($element)}) #set ($useOdfStyleableShapeElement = false) #foreach($f in $elementStyleFamily) #if (${f.getQName()}=="draw:graphic" || ${f.getQName()}=="presentation:presentation") #set ($useOdfStyleableShapeElement = true) #end #end #if ($useOdfStyleableShapeElement) #set ($baseclassname = "OdfStyleableShapeElement") #end #set ($baseHasMandatoryAttr = false) #set ($firstfamily = ${model.camelCase($model.extractLocalname($odfmodel.getStyleFamilies($element).get(0)))}) #else #set ($stylable = false) #set ($baseclassname = "OdfElement") #set ($baseHasMandatoryAttr = false) #end ## ## ...or configured base class #if (${javamodel.getBaseclassOf($element)}) #set ($base = ${javamodel.getBaseclassOf($element)}) ## Configured manually generated base class? #if ($base == "container") #set ($_specialbase = true) #set ($baseclassname = "OdfContainerElementBase") #set ($baseimport = "org.odftoolkit.odfdom.pkg.$baseclassname") #set ($baseHasMandatoryAttr = false) #end #if ($base == "style") #set ($_specialbase = true) #set ($baseclassname = "OdfStyleBase") #set ($baseimport = "org.odftoolkit.odfdom.dom.element.$baseclassname") #set ($baseHasMandatoryAttr = false) #end #if ($base == "styleproperties") #set ($_specialbase = true) #set ($baseclassname = "OdfStylePropertiesBase") #set ($baseimport = "org.odftoolkit.odfdom.dom.element.$baseclassname") #set ($baseHasMandatoryAttr = false) #end ## Configured automatic generated base class. If so, remove all attributes defined in base class #if (!$_specialbase) #set ($baseclassname = "${model.camelCase($base)}ElementBase") #if ($base.getNamespace() != $NS) #set ($baseimport = "org.odftoolkit.odfdom.dom.element.${base.getNamespace()}.$baseclassname") #end #set ($attributes = $attributes.without($base.getBaseAttributes())) #set ($baseElement = ${model.getElement($base.getQName())}) #set ($bAttributes = ${baseElement.getAttributes().withoutMultiples()}) #foreach ($bAttribute in $bAttributes) #if (${baseElement.isMandatory($bAttribute)}) #set ($baseHasMandatoryAttr = true) #end #end #end #end ## ## 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.dom.element.${NS}; ## ## --------------------------------------------------- ## Imports ## --------------------------------------------------- ## #if ($stylable) import org.odftoolkit.odfdom.dom.element.OdfStylableElement; import org.odftoolkit.odfdom.dom.element.OdfStyleableShapeElement; import org.odftoolkit.odfdom.dom.style.OdfStyleFamily; #else import org.odftoolkit.odfdom.pkg.OdfElement; #end #if ($base == "styleproperties") import org.odftoolkit.odfdom.dom.style.props.OdfStyleProperty; import org.odftoolkit.odfdom.dom.style.props.OdfStylePropertiesSet; #end import org.odftoolkit.odfdom.pkg.ElementVisitor; import org.odftoolkit.odfdom.pkg.OdfFileDom; import org.odftoolkit.odfdom.pkg.OdfName; import org.odftoolkit.odfdom.dom.OdfDocumentNamespace; import org.odftoolkit.odfdom.dom.DefaultElementVisitor; #foreach ($child in $children) #if ($child == "*") #set ($anychild = true) #else #set ($childNS = ${child.getNamespace()}) #set ($childClassname = "${model.camelCase($child)}Element") #if ($childNS != $NS) import org.odftoolkit.odfdom.dom.element.${childNS}.$childClassname; #end #end #end ## #foreach ($child in $attributes) #if ($child == "*") #set ($anyattribute = true) #else #set ($childNS = ${child.getNamespace()}) #set ($childClassname = "${model.camelCase($child)}Attribute") import org.odftoolkit.odfdom.dom.attribute.${childNS}.$childClassname; #end #end ## ## If there is a base class which is not in the current package #if ($baseimport) import ${baseimport}; #end ## ## --------------------------------------------------- ## Class ## --------------------------------------------------- ## /** * DOM 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(OdfDocumentNamespace.${NS.toUpperCase()}, "${element.getLocalName()}"); /** * Create the instance of $classname * * @param ownerDoc The type is OdfFileDom */ public $classname(OdfFileDom ownerDoc) { #if (($stylable && ($useOdfStyleableShapeElement == false))) super(ownerDoc, ELEMENT_NAME, OdfStyleFamily.${firstfamily}, OdfName.newName(OdfDocumentNamespace.${NS.toUpperCase()}, "style-name")); #else super(ownerDoc, ELEMENT_NAME); #end } /** * Get the element name * * @return return OdfName the name of element {@odf.element ${context}}. */ public OdfName getOdfName() { return ELEMENT_NAME; } ## --------------------------------------------------- ## Only for base = styleproperties ## --------------------------------------------------- #if ($base == "styleproperties") #foreach ($attribute in $attributes) #if ($attribute != "*") #set($propertyName = ${attribute.getLocalName()}) #if (${element.getLocalName()}=="graphic-properties" && $propertyName =="shadow") #set($propertyName = ${attribute.getQName()}) #end public final static OdfStyleProperty ${model.camelCase($propertyName)} = OdfStyleProperty.get(OdfStylePropertiesSet.${model.camelCase($element.getLocalName())}, OdfName.newName(OdfDocumentNamespace.${model.firstWord($attribute).toUpperCase()}, "${attribute.getLocalName()}")); #end #end #end ## ## --------------------------------------------------- ## 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)}Attribute") #set ($aParam = "${model.javaCase($attribute)}Value") /** * Receives the value of the ODFDOM attribute representation $aClassname , See {@odf.attribute ${attribute.getQName()}} * #if (${element.isMandatory($attribute)}) * Attribute is mandatory. * #end * @return - the $valueObject , the value or null, if the attribute is not set and no default value defined. */ public $valueObject get${aClassname}() { $aClassname attr = ($aClassname) getOdfAttribute(OdfDocumentNamespace.${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 $aClassname , See {@odf.attribute ${attribute.getQName()}} * * @param $aParam The type is $valueObject */ 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)}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)}Attribute") #set ($aParam = "${model.javaCase($attribute)}Value") * @param $aParam the $ch_ValueObject value of $aClassname, 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)}Attribute") #set ($aParam = "${model.javaCase($ch_attr)}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 @Override public void accept(ElementVisitor visitor) { if (visitor instanceof DefaultElementVisitor) { DefaultElementVisitor defaultVisitor = (DefaultElementVisitor) visitor; defaultVisitor.visit(this); } else { visitor.visit(this); } } ## ## ----------------------------------------------------- ## 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.equals("")) { this.appendChild(this.getOwnerDocument().createTextNode(content)); } } #end }