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
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
28 String queryString = super.getQuery("query.EJB-QL");
29
30
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
38 queryString = queryString.replaceAll("[$//s]+", " ");
39 }
40 }
41
42
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 }