blob: 9083006760fb4d4e2b16fbaf00d040f7e993bee1 [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 list of artefacts which are to be generated
##
## Documentation of template development can be found in local file
## TemplateHelp.html.
##
## Returns PuzzleComponent covering a PuzzlePiece or PuzzlePieceSet dependent if attribute is multiple times defined
#set($attribute = $model.getAttribute($context))
#set($NS = $attribute.getNamespace())
#set($localname = ${model.extractLocalname($attribute)})
#set($classname = "${model.camelCase($attribute.getLocalName())}Attribute")
#set ($valueobject = "String")
##
#set($datatypes = ${attribute.getDatatypes().withoutMultiples()})
#if ($datatypes.size() > 0)
#set ($hasdatatype = true)
#else
#set ($hasdatatype = false)
#end
##
##2DO: Svante - getValues() vs. getValueLiterals() - only literals / constants for attribute values are taken
#set($values = ${attribute.getValues().withoutMultiples()})
#if ($values.size() > 0)
#if ($values.size() ==2 && $hasdatatype == false)
#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
#set ($enum = true)
#if ($valueobject == "Boolean")
#set ($enum = false)
#end
#else
#set ($enum = false)
#end
##
## Check whether the attribute has default value.
##
#set ($hasDefaultValue = false)
#foreach ($parent in ${attribute.getParents().withoutMultiples()})
#if (${odfmodel.getDefaultAttributeValue($attribute, $parent)})
#set ($hasDefaultValue = true)
#end
#end
##
#set ($defaultValueSet = $odfmodel.getDefaultAttributeValues($attribute))
#if ($hasDefaultValue and $defaultValueSet.size() == 1)
#foreach ($value in $defaultValueSet)
#set ($uniqueDefaultValue = $value)
#end
#end
##
#include('copyright.txt')
/*
* This file is automatically generated.
* Don't edit manually.
*/
package org.odftoolkit.odfdom.pkg.manifest;
import org.odftoolkit.odfdom.pkg.OdfAttribute;
#if ($hasDefaultValue)
import org.odftoolkit.odfdom.pkg.OdfElement;
#end
import org.odftoolkit.odfdom.pkg.OdfFileDom;
import org.odftoolkit.odfdom.pkg.OdfName;
import org.odftoolkit.odfdom.pkg.OdfPackageNamespace;
#if ($hasDefaultValue and $defaultValueSet.size()>1)
#foreach ($parent in ${attribute.getParents().withoutMultiples()})
#if ($odfmodel.getDefaultAttributeValue($attribute, $parent))
#if (!$parent.equals("manifest")) ## Do not generate "import" for the same package!
import org.odftoolkit.odfdom.pkg.manifest.${model.camelCase($parent.getLocalName())}Element;
#end
#end
#end
#end
/**
* Manifest implementation of OpenDocument attribute {@odf.attribute ${attribute.getQName()}}.
*
*/
public class $classname extends OdfAttribute {
public static final OdfName ATTRIBUTE_NAME = OdfName.newName(OdfPackageNamespace.${NS.toUpperCase()}, "$localname");
#if ($hasDefaultValue)
#if ($defaultValueSet.size()>1)
#foreach ($defaultValue in $defaultValueSet)
#set ($constant = $model.constantCase($defaultValue))
#if (($defaultValue=="true" or $defaultValue=="false") and $enum == false)
public static final String DEFAULT_VALUE_${model.escapeKeyword($constant)}= "$defaultValue";
#else
public static final String DEFAULT_VALUE_${model.escapeKeyword($constant)}= Value.${model.escapeKeyword($constant)}.toString();
#end
#end
#else
#if ($uniqueDefaultValue==""")
public static final String DEFAULT_VALUE = "\${uniqueDefaultValue}";
#else
public static final String DEFAULT_VALUE = "$uniqueDefaultValue";
#end
#end
#end
/**
* Create the instance of OpenDocument attribute {@odf.attribute ${attribute}}.
*
* @param ownerDocument The type is <code>OdfFileDom</code>
*/
public $classname(OdfFileDom ownerDocument) {
super(ownerDocument, ATTRIBUTE_NAME);
}
/**
* Returns the attribute name.
*
* @return the <code>OdfName</code> for {@odf.attribute ${attribute}}.
*/
@Override
public OdfName getOdfName() {
return ATTRIBUTE_NAME;
}
/**
* @return Returns the name of this attribute.
*/
@Override
public String getName() {
return ATTRIBUTE_NAME.getLocalName();
}
##
#if ($enum)
/**
* The value set of {@odf.attribute ${attribute}}.
*/
public enum Value {
#set ($separator=" ")
#foreach($value in $values)
#if (${value.toString().length()} == 1)
#set ($constant = $value)
#else
#set ($constant = $model.constantCase($value))
#end${separator}${model.escapeKeyword($constant)}("${model.escapeLiteral($value)}")#set ($separator=", ")
#end ;
private String mValue;
Value(String value) {
mValue = value;
}
@Override
public String toString() {
return mValue;
}
public static Value enumValueOf(String value) {
for(Value aIter : values()) {
if (value.equals(aIter.toString())) {
return aIter;
}
}
return null;
}
}
/**
* @param attrValue The <code>Enum</code> value of the attribute.
*/
public void setEnumValue(Value attrValue) {
setValue(attrValue.toString());
}
/**
* @return Returns the <code>Enum</code> value of the attribute
*/
public Value getEnumValue() {
return Value.enumValueOf(this.getValue());
}
#end
##
## Handle Non-String-Attributes
#set ($valuetypes = ${javamodel.getValuetypes($datatypes)})
#if ($valueobject != "Boolean")
#foreach ($valuetype in $valuetypes)
#set ($valueobject = $valuetype)
#end
#end
#if ($valueobject != "String" && $valueobject != "Double" && $valueobject != "Integer" && $valueobject != "Boolean")
#set ($valueobject = "String")
#end
#if ($valueobject != "String")
#set ($simplevalue = ${javamodel.getPrimitiveType($valueobject)})
##
/**
* @param value The <code>${simplevalue}</code> value of the attribute.
*/
public void set${model.camelCase($simplevalue)}Value(${simplevalue} value) {
super.setValue(String.valueOf(value));
}
/**
* @return Returns the <code>${simplevalue}</code> value of the attribute
*/
public ${simplevalue} ${simplevalue}Value() {
String val = super.getValue();
try {
return ${valueobject}.parse${model.camelCase($simplevalue)}(val);
} catch (NumberFormatException e) {
// TODO: validation handling/logging
throw (e);
}
}
#end
##
/**
* @param attrValue The <code>String</code> value of the attribute.
* @throws IllegalArgumentException If the provided attribute value is invalid
*/
@Override
public void setValue(String attrValue) {
#if ($enum)
#if ($hasdatatype)
## enum and datatype
// Since we have not only enumValues, but also a DataType, we use String as common base and don't validate.
super.setValue(attrValue);
#else
## enum and no datatype
try {
super.setValue(Value.enumValueOf(attrValue).toString());
} catch (NullPointerException e) {
throw new IllegalArgumentException(e);
}
#end
#else
try {
super.setValue(attrValue);
} catch (NullPointerException e) {
// TODO: validation handling/logging
throw new IllegalArgumentException(e);
} catch (IllegalArgumentException e) {
// TODO: validation handling/logging
throw (e);
}
#end
}
/**
* @return Returns the <code>String</code> value of the attribute
*/
@Override
public String getValue() {
#if ($enum)
#if ($hasdatatype)
## enum and datatype
// Since we have not only enumValues, but also a DataType, we use String as common base and don't validate.
return super.getValue();
#else
## enum and no datatype
try {
return Value.enumValueOf(super.getValue()).toString();
} catch (NullPointerException e) {
throw new IllegalArgumentException("the value of ${attribute} is not valid");
}
#end
#else
try {
return super.getValue();
} catch (IllegalArgumentException e) {
// TODO: validation handling/logging
throw new NumberFormatException("the value of ${attribute} is not valid");
}
#end
}
#if ($hasDefaultValue)
/**
* Returns the default value of {@odf.attribute ${attribute}}.
*
* @return the default value as <code>String</code> dependent of its element name
* return <code>null</code> if the default value does not exist
*/
@Override
public String getDefault() {
OdfElement parentElement = (OdfElement)getOwnerElement();
String defaultValue = null;
if (parentElement != null) {
#if ($defaultValueSet.size()>1)
#foreach ($parent in ${attribute.getParents().withoutMultiples()})
#if ($odfmodel.getDefaultAttributeValue($attribute, $parent))
if (parentElement instanceof ${model.camelCase($parent)}Element) {
defaultValue = "${model.escapeLiteral($odfmodel.getDefaultAttributeValue($attribute, $parent))}";
}
#end
#end
#else
defaultValue = "${model.escapeLiteral($uniqueDefaultValue)}";
#end
}
return defaultValue;
}
/**
* Default value indicator. As the attribute default value is dependent from its element, the attribute has only a default, when a parent element exists.
*
* @return <code>true</code> if {@odf.attribute ${attribute}} has an element parent
* otherwise return <code>false</code> as undefined.
*/
@Override
public boolean hasDefault() {
return getOwnerElement() == null ? false : true;
}
#else
/**
* Returns the default value of {@odf.attribute ${attribute}}.
*
* @return the default value as <code>String</code> dependent of its element name
* return <code>null</code> if the default value does not exist
*/
@Override
public String getDefault() {
return null;
}
/**
* Default value indicator. As the attribute default value is dependent from its element, the attribute has only a default, when a parent element exists.
*
* @return <code>true</code> if {@odf.attribute ${attribute}} has an element parent
* otherwise return <code>false</code> as undefined.
*/
@Override
public boolean hasDefault() {
return false;
}
#end
/**
* @return Returns whether this attribute is known to be of type ID (i.e. xml:id ?)
*/
@Override
public boolean isId() {
#if ($hasdatatype and $datatypes.size() > 0)
#set ($datatype="")
#foreach($value in $datatypes)
#set ($datatype=$value)
#end
#if ($datatype == "ID")
return true;
#else
return false;
#end
#else
return false;
#end
}
}