View Javadoc

1   package org.andromda.cartridges.ejb.metafacades;
2   
3   import org.andromda.cartridges.ejb.EJBProfile;
4   import org.andromda.metafacades.uml.ParameterFacade;
5   import org.apache.commons.lang.StringUtils;
6   
7   import java.util.Collection;
8   import java.util.Iterator;
9   
10  /**
11   * <p>
12   * Represents an EJB finder method. </p> Metaclass facade implementation.
13   */
14  public class EJBFinderMethodFacadeLogicImpl
15          extends EJBFinderMethodFacadeLogic
16  {
17      // ---------------- constructor -------------------------------
18  
19      public EJBFinderMethodFacadeLogicImpl(java.lang.Object metaObject, String context)
20      {
21          super(metaObject, context);
22      }
23  
24      protected java.lang.String handleGetQuery()
25      {
26  
27          // first see if there is a query stored as a constraint
28          String queryString = super.getQuery("query.EJB-QL");
29  
30          // otherwise see if there is a query stored as a tagged value
31          if (StringUtils.isEmpty(queryString))
32          {
33              Object value = this.findTaggedValue(EJBProfile.TAGGEDVALUE_EJB_QUERY);
34              queryString = (String)value;
35              if (queryString != null)
36              {
37                  // remove any excess whitespace
38                  queryString = queryString.replaceAll("[$\\s]+", " ");
39              }
40          }
41  
42          // if there wasn't any stored query, create one by default.
43          if (StringUtils.isEmpty(queryString))
44          {
45              String variableName = StringUtils.uncapitalize(this.getOwner().getName());
46              queryString = "SELECT DISTINCT OBJECT(" + variableName + ") FROM " + this.getOwner().getName() + " as " +
47                      variableName;
48              if (this.getArguments().size() > 0)
49              {
50                  queryString = queryString + " WHERE";
51                  Collection parameters = this.getArguments();
52                  if (parameters != null && !parameters.isEmpty())
53                  {
54                      Iterator parameterIt = parameters.iterator();
55                      for (int ctr = 1; parameterIt.hasNext(); ctr++)
56                      {
57                          Object test = parameterIt.next();
58                          ParameterFacade param = (ParameterFacade)test;
59                          queryString = queryString + " " + variableName + "." + param.getName() + " = ?" + ctr;
60                          if (parameterIt.hasNext())
61                          {
62                              queryString = queryString + " AND";
63                          }
64                      }
65                  }
66              }
67          }
68          return queryString;
69      }
70  
71      /**
72       * @see org.andromda.cartridges.ejb.metafacades.EJBFinderMethodFacade#getTransactionType()
73       */
74      protected java.lang.String handleGetTransactionType()
75      {
76          return (String)this.findTaggedValue(EJBProfile.TAGGEDVALUE_EJB_TRANSACTION_TYPE, true);
77      }
78  
79  }