View Javadoc

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      // ---------------- constructor -------------------------------
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                 // don't throw the exception
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 }