From: Vance K. <va...@us...> - 2006-04-24 02:54:57
|
User: vancek Date: 06/04/23 19:54:56 Modified: andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades EJB3FinderMethodFacadeLogicImpl.java Log: refactored handleGetQuery - extracted translation from OCL to method and incorporated hibernate query implementation Revision Changes Path 1.7 +81 -55 cartridges/andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades/EJB3FinderMethodFacadeLogicImpl.java Index: EJB3FinderMethodFacadeLogicImpl.java =================================================================== RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades/EJB3FinderMethodFacadeLogicImpl.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -w -r1.6 -r1.7 --- EJB3FinderMethodFacadeLogicImpl.java 11 Apr 2006 16:16:07 -0000 1.6 +++ EJB3FinderMethodFacadeLogicImpl.java 24 Apr 2006 02:54:56 -0000 1.7 @@ -5,6 +5,7 @@ import org.andromda.cartridges.ejb3.EJB3Globals; import org.andromda.cartridges.ejb3.EJB3Profile; +import org.andromda.metafacades.uml.ModelElementFacade; import org.andromda.metafacades.uml.ParameterFacade; import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; @@ -37,65 +38,28 @@ // --------------- methods --------------------- /** - * @see org.andromda.cartridges.ejb3.metafacades.EJB3FinderMethodFacade#getQuery() + * Stores the translated query so that its only translated once. */ - protected java.lang.String handleGetQuery() - { - // first see if there is a query stored as a constraint - String queryString = super.getQuery("query.Hibernate-QL"); + private String translatedQuery = null; - // otherwise see if there is a query stored as a tagged value - if (StringUtils.isEmpty(queryString)) + /** + * Retrieves the translated query. + */ + private String getTranslatedQuery() { - Object value = this.findTaggedValue(EJB3Profile.TAGGEDVALUE_EJB_QUERY); - queryString = (String)value; - if (queryString != null) + if (this.translatedQuery == null) { - // remove any excess whitespace - queryString = queryString.replaceAll("[$\\s]+", " "); + this.translatedQuery = super.getQuery("query.Hibernate-QL"); } + return this.translatedQuery; } - // if there wasn't any stored query, create one by default. - if (StringUtils.isEmpty(queryString)) - { - String variableName = StringUtils.uncapitalize(this.getOwner().getName()); - queryString = "FROM " + this.getOwner().getName() + " AS " + variableName; - if (this.getArguments().size() > 0) - { - final Collection parameters = this.getArguments(); - if (parameters != null && !parameters.isEmpty()) - { - Iterator parameterIt = parameters.iterator(); - for (int ctr = 0; parameterIt.hasNext(); ctr++) - { - EJB3FinderMethodArgumentFacade param = (EJB3FinderMethodArgumentFacade)parameterIt.next(); - if (!param.isFirstResult() && !param.isMaxResults()) - { - if (ctr == 0) - { - queryString = queryString + " WHERE"; - } - String parameter = "?"; - if (this.isUseNamedParameters()) - { - parameter = ":" + param.getName(); - } - else - { - parameter = parameter + ctr; - } - queryString = queryString + " " + variableName + "." + param.getName() + " = " + parameter; - if (parameterIt.hasNext()) + /** + * @see org.andromda.cartridges.ejb3.metafacades.EJB3FinderMethodFacade#getQuery() + */ + protected java.lang.String handleGetQuery() { - queryString = queryString + " AND"; - } - } - } - } - } - } - return queryString; + return this.getQuery((EJB3EntityFacade)null); } /** @@ -129,4 +93,66 @@ return queryCacheEnabled; } + /** + * @see org.andromda.cartridges.ejb3.metafacades.EJB3FinderMethodFacadeLogic#handleGetQuery(org.andromda.cartridges.ejb3.metafacades.EJB3EntityFacade) + */ + protected String handleGetQuery(EJB3EntityFacade entity) + { + // first see if we can retrieve the query from the super class as an OCL + // translation + String queryString = this.getTranslatedQuery(); + + // otherwise see if there is a query stored as a tagged value + if (StringUtils.isEmpty(queryString)) + { + Object value = this.findTaggedValue(EJB3Profile.TAGGEDVALUE_EJB_QUERY); + queryString = (String)value; + if (queryString != null) + { + // remove any excess whitespace + queryString = queryString.replaceAll("[$\\s]+", " "); + } + } + + // if there wasn't any stored query, create one by default. + if (StringUtils.isEmpty(queryString)) + { + ModelElementFacade owner; + if (entity == null) + { + owner = this.getOwner(); + } + else + { + owner = entity; + } + String variableName = StringUtils.uncapitalize(owner.getName()); + queryString = "from " + owner.getName() + " as " + variableName; + if (this.getArguments().size() > 0) + { + queryString = queryString + " where"; + Collection arguments = this.getArguments(); + if (arguments != null && !arguments.isEmpty()) + { + Iterator argumentIt = arguments.iterator(); + for (int ctr = 0; argumentIt.hasNext(); ctr++) + { + ParameterFacade argument = (ParameterFacade)argumentIt.next(); + String parameter = "?"; + if (this.isUseNamedParameters()) + { + parameter = ":" + argument.getName(); + } + queryString = queryString + " " + variableName + "." + argument.getName() + " = " + parameter; + if (argumentIt.hasNext()) + { + queryString = queryString + " and"; + } + } + } + } + } + return queryString; + } + } \ No newline at end of file |