WSDLEnumerationTypeLogicImpl.java
package org.andromda.cartridges.webservice.metafacades;
import org.andromda.cartridges.webservice.WebServiceGlobals;
import org.andromda.cartridges.webservice.WebServiceUtils;
import org.andromda.metafacades.uml.TypeMappings;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
/**
* MetafacadeLogic implementation for org.andromda.cartridges.webservice.metafacades.WSDLEnumerationType.
*
* @see org.andromda.cartridges.webservice.metafacades.WSDLEnumerationType
* @author Bob Fields
*/
public class WSDLEnumerationTypeLogicImpl
extends WSDLEnumerationTypeLogic
{
private static final long serialVersionUID = 34L;
// ---------------- constructor -------------------------------
/**
* @param metaObject
* @param context
*/
public WSDLEnumerationTypeLogicImpl(Object metaObject, String context)
{
super(metaObject, context);
}
/**
* The logger instance.
*/
private static final Logger logger = Logger.getLogger(WSDLEnumerationTypeLogicImpl.class);
/**
* @return getSchemaType(true, true)
* @see org.andromda.cartridges.webservice.metafacades.WSDLEnumerationType#getSchemaType()
*/
protected String handleGetSchemaType()
{
return this.getSchemaType(true, true);
}
/**
* @return qualfiedNameLocalPartPattern
* @see org.andromda.cartridges.webservice.metafacades.WSDLEnumerationType#getQName()
*/
protected String handleGetQName()
{
return this.getQualfiedNameLocalPartPattern().replaceAll("\\{0\\}", StringUtils.trimToEmpty(this.getName()));
}
/**
* @return configuredProperty(WebServiceLogicImpl.NAMESPACE_PREFIX)
* @see org.andromda.cartridges.webservice.metafacades.WSDLEnumerationType#getNamespacePrefix()
*/
protected String handleGetNamespacePrefix()
{
return (String)this.getConfiguredProperty(WebServiceLogicImpl.NAMESPACE_PREFIX);
}
/**
* Gets the <code>qualifiedNameLocalPartPattern</code> for this WSDL enumeration.
* @return getConfiguredProperty(WebServiceLogicImpl.QNAME_LOCAL_PART_PATTERN)
*/
protected String getQualfiedNameLocalPartPattern()
{
return (String)this.getConfiguredProperty(WebServiceLogicImpl.QNAME_LOCAL_PART_PATTERN);
}
/**
* @return WebServiceUtils.reversePackage(packageName)
* @see org.andromda.cartridges.webservice.metafacades.WSDLEnumerationType#getNamespace()
*/
protected String handleGetNamespace()
{
String packageName = this.getPackageName();
if (this.isReverseNamespace())
{
packageName = WebServiceUtils.reversePackage(packageName);
}
return this.getNamespacePattern().replaceAll("\\{0\\}", StringUtils.trimToEmpty(packageName));
}
/**
* Gets the <code>namespacePattern</code> for this type.
* @return getConfiguredProperty(WebServiceLogicImpl.NAMESPACE_PATTERN)
*/
protected String getNamespacePattern()
{
return (String)this.getConfiguredProperty(WebServiceLogicImpl.NAMESPACE_PATTERN);
}
/**
* Gets whether or not <code>reverseNamespace</code> is true/false for this type.
*
* @return boolean true/false
*/
private boolean isReverseNamespace()
{
return Boolean.valueOf(String.valueOf(this.getConfiguredProperty(WebServiceLogicImpl.REVERSE_NAMESPACE)))
.booleanValue();
}
/**
* @param withPrefix
* @param preserveArray
* @return WebServiceUtils.getSchemaType
* @see org.andromda.cartridges.webservice.metafacades.WSDLEnumerationType#getSchemaType(boolean, boolean)
* @see org.andromda.cartridges.webservice.WebServiceUtils#getSchemaType(org.andromda.metafacades.uml.ClassifierFacade, TypeMappings, String, String, String, boolean, boolean)
*/
public String handleGetSchemaType(boolean withPrefix, boolean preserveArray)
{
return WebServiceUtils.getSchemaType(this, this.getSchemaTypeMappings(), this.getNamespacePrefix(),
this.getName(), this.getWsdlArrayNamePrefix(), withPrefix, preserveArray);
}
/**
* @return getConfiguredProperty(WebServiceGlobals.ARRAY_NAME_PREFIX)
* @see org.andromda.cartridges.webservice.metafacades.WSDLEnumerationType#getWsdlArrayNamePrefix()
*/
protected String handleGetWsdlArrayNamePrefix()
{
return String.valueOf(this.getConfiguredProperty(WebServiceGlobals.ARRAY_NAME_PREFIX));
}
/**
* @return this.getWsdlArrayNamePrefix() + this.getName()
* @see org.andromda.cartridges.webservice.metafacades.WSDLEnumerationType#getWsdlArrayName()
*/
protected String handleGetWsdlArrayName()
{
StringBuilder name = new StringBuilder(StringUtils.trimToEmpty(this.getName()).replaceAll("\\[\\]", ""));
name.insert(0, this.getWsdlArrayNamePrefix());
return name.toString();
}
/**
* Gets the schemaType mappings that have been set for this schema type.
*
* @return the TypeMappings instance.
*/
private TypeMappings getSchemaTypeMappings()
{
final String propertyName = WebServiceGlobals.SCHEMA_TYPE_MAPPINGS_URI;
Object property = this.getConfiguredProperty(propertyName);
TypeMappings mappings = null;
String uri = null;
if (property != null && String.class.isAssignableFrom(property.getClass()))
{
uri = (String)property;
try
{
mappings = TypeMappings.getInstance((String)property);
this.setProperty(propertyName, mappings);
}
catch (Throwable th)
{
String errMsg = "Error getting '" + propertyName + "' --> '" + uri + '\'';
logger.error(errMsg, th);
// don't throw the exception
}
}
else
{
mappings = (TypeMappings)property;
}
return mappings;
}
/**
* Used to map between XML (list of restricted strings) and Java enum (has both a name and a value).
*
* @return useEnumValueInXSD true if EnumerationLiteral.value is used instead of EnumerationLiteral.Name.
*/
public Boolean useEnumValueInXSD()
{
final String propertyName = WebServiceGlobals.USE_ENUM_VALUE_IN_XSD;
// getConfiguredProperty is protected so we must wrap it for use in WebServiceUtils
Object property = this.getConfiguredProperty(propertyName);
if (property != null && String.class.isAssignableFrom(property.getClass()))
{
return Boolean.valueOf(String.valueOf(property)).booleanValue();
}
return Boolean.TRUE;
}
}