1 package org.andromda.cartridges.webservice.metafacades;
2
3 import org.andromda.cartridges.webservice.WebServiceGlobals;
4 import org.andromda.cartridges.webservice.WebServiceUtils;
5 import org.andromda.metafacades.uml.TypeMappings;
6 import org.andromda.metafacades.uml.UMLMetafacadeProperties;
7 import org.apache.commons.lang.StringUtils;
8
9 /**
10 * MetafacadeLogic implementation for org.andromda.cartridges.webservice.metafacades.WSDLType.
11 *
12 * @see org.andromda.cartridges.webservice.metafacades.WSDLType
13 */
14 public class WSDLTypeLogicImpl
15 extends WSDLTypeLogic
16 {
17
18
19 public WSDLTypeLogicImpl(Object metaObject, String context)
20 {
21 super(metaObject, context);
22 }
23
24 /**
25 * @see org.andromda.cartridges.webservice.metafacades.WSDLType#getSchemaType()
26 */
27 public java.lang.String handleGetSchemaType()
28 {
29 return this.getSchemaType(true, true);
30 }
31
32 /**
33 * @see org.andromda.cartridges.webservice.metafacades.WSDLType#getSchemaType(boolean, boolean)
34 */
35 public java.lang.String handleGetSchemaType(boolean withPrefix, boolean preserveArray)
36 {
37 return WebServiceUtils.getSchemaType(this, this.getSchemaTypeMappings(), this.getNamespacePrefix(),
38 this.getQName(), this.getWsdlArrayNamePrefix(), withPrefix, preserveArray);
39 }
40
41 /**
42 * @see org.andromda.cartridges.webservice.metafacades.WSDLType#getWsdlArrayName()
43 */
44 protected String handleGetWsdlArrayName()
45 {
46 StringBuffer name = new StringBuffer(StringUtils.trimToEmpty(this.getQName()).replaceAll("\\[\\]", ""));
47 name.insert(0, this.getWsdlArrayNamePrefix());
48 return name.toString();
49 }
50
51 /**
52 * @see org.andromda.cartridges.webservice.metafacades.WSDLType#getWsdlArrayNamePrefix()
53 */
54 protected String handleGetWsdlArrayNamePrefix()
55 {
56 return String.valueOf(this.getConfiguredProperty(WebServiceGlobals.ARRAY_NAME_PREFIX));
57 }
58
59 /**
60 * @see org.andromda.cartridges.webservice.metafacades.WSDLType#getQName()
61 */
62 protected String handleGetQName()
63 {
64 return this.getQualfiedNameLocalPartPattern().replaceAll("\\{0\\}", StringUtils.trimToEmpty(this.getName()));
65 }
66
67 /**
68 * @see org.andromda.cartridges.webservice.metafacades.WSDLType#getNamespace()
69 */
70 protected java.lang.String handleGetNamespace()
71 {
72 String packageName = this.getPackageName();
73 if (this.isReverseNamespace())
74 {
75 packageName = WebServiceUtils.reversePackage(packageName);
76 }
77 return this.getNamespacePattern().replaceAll("\\{0\\}", StringUtils.trimToEmpty(packageName));
78 }
79
80 /**
81 * Gets the array suffix from the configured metafacade properties.
82 *
83 * @return the array suffix.
84 */
85 private String getArraySuffix()
86 {
87 return String.valueOf(this.getConfiguredProperty(UMLMetafacadeProperties.ARRAY_NAME_SUFFIX));
88 }
89
90 /**
91 * Gets the schemaType mappings that have been set for this schema type.
92 *
93 * @return the TypeMappings instance.
94 */
95 private TypeMappings getSchemaTypeMappings()
96 {
97 final String propertyName = WebServiceGlobals.SCHEMA_TYPE_MAPPINGS_URI;
98 Object property = this.getConfiguredProperty(propertyName);
99 TypeMappings mappings = null;
100 String uri = null;
101 if (property instanceof String)
102 {
103 uri = (String)property;
104 try
105 {
106 mappings = TypeMappings.getInstance(uri);
107 mappings.setArraySuffix(this.getArraySuffix());
108 this.setProperty(propertyName, mappings);
109 }
110 catch (Throwable th)
111 {
112 String errMsg = "Error getting '" + propertyName + "' --> '" + uri + "'";
113 logger.error(errMsg, th);
114
115 }
116 }
117 else
118 {
119 mappings = (TypeMappings)property;
120 }
121 return mappings;
122 }
123
124 /**
125 * @see org.andromda.cartridges.webservice.metafacades.WSDLTypeLogic#handleGetNamespacePrefix()
126 */
127 protected String handleGetNamespacePrefix()
128 {
129 return (String)this.getConfiguredProperty(WebServiceLogicImpl.NAMESPACE_PREFIX);
130 }
131
132 /**
133 * Gets the <code>qualifiedNameLocalPartPattern</code> for this WSDL type.
134 */
135 protected String getQualfiedNameLocalPartPattern()
136 {
137 return (String)this.getConfiguredProperty(WebServiceLogicImpl.QNAME_LOCAL_PART_PATTERN);
138 }
139
140 /**
141 * Gets the <code>namespacePattern</code> for this type.
142 */
143 protected String getNamespacePattern()
144 {
145 return (String)this.getConfiguredProperty(WebServiceLogicImpl.NAMESPACE_PATTERN);
146 }
147
148 /**
149 * Gets whether or not <code>reverseNamespace</code> is true/false for this type.
150 *
151 * @return boolean true/false
152 */
153 private boolean isReverseNamespace()
154 {
155 return Boolean.valueOf(String.valueOf(this.getConfiguredProperty(WebServiceLogicImpl.REVERSE_NAMESPACE)))
156 .booleanValue();
157 }
158 }