From: Vance K. <va...@us...> - 2006-02-17 02:32:47
|
User: vancek Date: 06/02/16 18:32:44 Modified: andromda-ejb3/src/main/resources/templates/ejb3/crud ManageableServiceRemote.vsl ManageableServiceBase.vsl Log: fixed create, update, delete and read operations one side of relationship lazy loading collection from the many side is NOT working Revision Changes Path 1.2 +12 -5 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/crud/ManageableServiceRemote.vsl Index: ManageableServiceRemote.vsl =================================================================== RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/main/resources/templates/ejb3/crud/ManageableServiceRemote.vsl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- ManageableServiceRemote.vsl 13 Feb 2006 15:47:17 -0000 1.1 +++ ManageableServiceRemote.vsl 17 Feb 2006 02:32:44 -0000 1.2 @@ -3,14 +3,21 @@ #set ($generatedFile = "${manageable.manageableServiceFullPath}.java") #set ($memberList = $manageable.listManageableMembers(true)) #if (!$manageable.identifiers.empty) -#**##set ($identifier = $manageable.manageableIdentifier) +#**##set ($identifier = $manageable.manageableIdentifierWorkaround) #end package $manageable.manageablePackageName; +/** + * Manageable service bean remote interface + * + * NOTE: This is currently using the workaround to get the manageable entity identifer + * Once the metafacade engine is fixed, search for all calls with suffix "Workaround" + * and remove this suffix. + */ public interface $manageable.manageableServiceName { #if ($manageable.create) - public $manageable.fullyQualifiedEntityName create($memberList) + public $manageable.fullyQualifiedName create($memberList) throws ${manageable.fullyQualifiedManageableServiceCreateExceptionName}; #end @@ -34,12 +41,12 @@ #**##end #end -#if ($manageable.update) - public $manageable.fullyQualifiedEntityImplementationName update($memberList) +#if ($manageable.updateWorkaround) + public $manageable.fullyQualifiedName update($memberList) throws ${manageable.fullyQualifiedManageableServiceUpdateExceptionName}; #end -#if ($manageable.delete) +#if ($manageable.deleteWorkaround) public void delete(${identifier.type.fullyQualifiedName}[] ids) throws ${manageable.fullyQualifiedManageableServiceDeleteExceptionName}; 1.2 +293 -111 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/crud/ManageableServiceBase.vsl Index: ManageableServiceBase.vsl =================================================================== RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/main/resources/templates/ejb3/crud/ManageableServiceBase.vsl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- ManageableServiceBase.vsl 13 Feb 2006 15:47:17 -0000 1.1 +++ ManageableServiceBase.vsl 17 Feb 2006 02:32:44 -0000 1.2 @@ -4,22 +4,16 @@ #set ($memberList = $manageable.listManageableMembers(true)) #set ($memberListArguments = $manageable.listManageableMembers(false)) #if (!$manageable.identifiers.empty) -#**##set ($identifier = $manageable.manageableIdentifier) +#**##set ($identifier = $manageable.manageableIdentifierWorkaround) #end package $manageable.manageablePackageName; -$manageable.identifiers.empty -identifier = $identifier -name = $identifier.name -type = $identifier.type -$manageable.manageableIdentifier - -THE IDENTIFIER IS $manageable.getIdentifiers(true).iterator().next() -$manageable.getIdentifiers(true).iterator().next().name - /** * Autogenerated EJB manageable session bean class ${manageable.manageableServiceName}. * + * NOTE: This is currently using the workaround to get the manageable entity identifer + * Once the metafacade engine is fixed, search for all calls with suffix "Workaround" + * and remove this suffix. */ /** * Do not specify the javax.ejb.${service.type} annotation @@ -45,6 +39,29 @@ @javax.persistence.PersistenceContext#if ($service.persistenceContextUnitName)(unitName = "${manageable.defaultPersistenceContextUnitName}")#end protected javax.persistence.EntityManager emanager; +#set ($associatedClasses = $manageable.allAssociatedClasses) +#if (!$associatedClasses.empty) + + // ------------ Private Operations ---------- + +#**##foreach ($associatedClass in $associatedClasses) + private java.util.List<${associatedClass.fullyQualifiedEntityName}> find${associatedClass.name}ByIds(${associatedClass.manageableIdentifierWorkaround.type.fullyQualifiedName}[] ids) + throws ${manageable.fullyQualifiedManageableServiceReadExceptionName} + { + try + { + javax.persistence.Query query = emanager.createQuery("from ${associatedClass.entityName} as entity where entity.${associatedClass.manageableIdentifierWorkaround.name} in (:${associatedClass.manageableIdentifierWorkaround.name})"); + query.setParameter("${associatedClass.manageableIdentifierWorkaround.name}", java.util.Arrays.asList(ids)); + return query.getResultList(); + } + catch (Exception ex) + { + throw new ${manageable.fullyQualifiedManageableServiceReadExceptionName}(ex); + } + } + +#**##end +#end // ------------ CRUD Operations ------------- @@ -52,10 +69,10 @@ /** * Create operations * - * @return $manageable.fullyQualifiedEntityName + * @return $manageable.fullyQualifiedName * @throws $manageable.fullyQualifiedManageableServiceCreateExceptionName */ - public $manageable.fullyQualifiedEntityName create($memberList) + public $manageable.fullyQualifiedName create($memberList) throws ${manageable.fullyQualifiedManageableServiceCreateExceptionName} { #**##foreach ($member in $manageable.manageableMembers) @@ -68,36 +85,35 @@ #* *##end #**##end - final ${manageable.fullyQualifiedEntityName} entity = new ${manageable.fullyQualifiedEntityName}(); + final ${manageable.fullyQualifiedName} entity = new ${manageable.fullyQualifiedName}(); #**##foreach ($member in $manageable.manageableAttributes) entity.${member.setterName}($member.name); #**##end + + try + { #**##foreach ($member in $manageable.manageableAssociationEnds) #* *##if ($member.many) #* *##set ($memberEntityName = "${member.name}Entities") + final java.util.List<${member.type.fullyQualifiedName}> $memberEntityName = ($member.name != null && ${member.name}.length > 0) + ? this.find${member.type.name}ByIds($member.name) + : java.util.Collections.EMPTY_LIST; - java.util.Set $memberEntityName = null; - if ($member.name != null && ${member.name}.length > 0) - { - $memberEntityName = this.find${member.type.name}ByIds($member.name); - } #* *##else #* *##set ($memberEntityName = "${member.name}Entity") - $member.type.fullyQualifiedName $memberEntityName = null; if ($member.name != null) { - $memberEntityName = ($member.type.fullyQualifiedName)emanager.getReference(${member.type.fullyQualifiedName}.class, #if ($member.type.primitive)new ${member.type.wrapperName}($member.name)#else${member.name}#end); + $memberEntityName = ($member.type.fullyQualifiedName)emanager.find(${member.type.fullyQualifiedName}.class, #if ($member.type.primitive)new ${member.type.wrapperName}($member.name)#else${member.name}#end); } #* *##end -#* *##if ($member.required) - entity.${member.setterName}($memberEntityName); -#* *##else + if ($memberEntityName != null) { entity.${member.setterName}($memberEntityName); -#* *##if ($member.many) +#* *##if ($member.many2Many) #* *##if ($member.otherEnd.navigable) + // set the other ends of the many2many association too for (final java.util.Iterator iterator = ${memberEntityName}.iterator(); iterator.hasNext();) { @@ -113,12 +129,16 @@ #* *##end } #* *##end -#**##end emanager.persist(entity); - emanager.refresh(entity); + emanager.flush(); return entity; } + catch (Exception ex) + { + throw new ${manageable.fullyQualifiedManageableServiceCreateExceptionName}(ex); + } + } #end #if ($manageable.read) @@ -128,10 +148,157 @@ * @return java.util.List * @throws $manageable.fullyQualifiedManageableServiceReadExceptionName */ - public java.util.List read($memberList) + public java.util.List<${manageable.fullyQualifiedEntityName}> read($memberList) throws ${manageable.fullyQualifiedManageableServiceReadExceptionName} { - return toValueObjects(dao.read($memberListArguments)); + String logicalOperator = ""; + StringBuffer buf = new StringBuffer("from ${manageable.entityName} as entity"); +#**##foreach ($member in $manageable.manageableAssociationEnds) +#* *##if ($member.many) + buf.append(" join entity.${member.name} as ${member.type.name} "); +#* *##end +#**##end + buf.append(" where "); +#**##foreach ($member in $manageable.manageableAttributes) +#* *##if ($member.type.primitive) + buf.append(logicalOperator); +#* *##if ($member.type.fullyQualifiedName == 'boolean') + if ($member.name) + { + buf.append("entity.${member.name} is true"); + } + else + { + buf.append("entity.${member.name} is not true"); + } +#* *##else + buf.append("entity.${member.name} = :${member.name}"); +#* *##end + logicalOperator = " and "; +#* *##else + if ($member.name != null) + { + buf.append(logicalOperator); +#* *##if ($member.type.fullyQualifiedName == 'java.lang.Boolean') + if (${member.name}.booleanValue()) + { + buf.append("entity.${member.name} is true"); + } + else + { + buf.append("entity.${member.name} is not true"); + } +#* *##elseif ($member.type.dateType) + final java.util.Calendar calendar = new java.util.GregorianCalendar(); + calendar.setTime($member.name); + if (calendar.get(java.util.Calendar.HOUR) != 0 + || calendar.get(java.util.Calendar.MINUTE) != 0 + || calendar.get(java.util.Calendar.SECOND) != 0 + || calendar.get(java.util.Calendar.MILLISECOND) != 0) + { + buf.append("entity.${member.name} = :${member.name}"); + } + else + { + buf.append("entity.${member.name} between = :${member.name}Start and :${member.name}End"); + } +#* *##elseif ($member.type.stringType) + buf.append("entity.${member.name} like :${member.name}"); +#* *##else + buf.append("entity.${member.name} = :${member.name}"); +#* *##end + logicalOperator = " and "; + } +#* *##end +#**##end +#**##foreach ($member in $manageable.manageableAssociationEnds) +#* *##if ($member.many) + if ($member.name != null && ${member.name}.length > 0) + { + buf.append(logicalOperator); + buf.append("${member.type.name} IN (:${member.name})"); + logicalOperator = " and "; + } +#* *##else + if ($member.name != null) + { + buf.append(logicalOperator); + buf.append("entity.${member.name} = :${member.name}"); + logicalOperator = " and "; + } +#* *##end +#**##end + + try + { + final javax.persistence.Query query = emanager.createQuery(buf.toString()); + +#**##foreach ($member in $manageable.manageableAttributes) +#* *##if ($member.type.primitive) +#* *##if ($member.type.fullyQualifiedName != 'boolean') + query.setParameter("$member.name", new ${member.type.wrapperName}($member.name)); +#* *##end +#* *##else +#* *##if ($member.type.fullyQualifiedName != 'java.lang.Boolean') + if ($member.name != null) + { +#* *##if ($member.type.dateType) + // we check whether or not the user supplied time information within this particular date argument + // if he/she didn't we assume he/she wishes to search in the scope of the entire day + final java.util.Calendar calendar = new java.util.GregorianCalendar(); + calendar.setTime($member.name); + if ( calendar.get(java.util.Calendar.HOUR) != 0 + || calendar.get(java.util.Calendar.MINUTE) != 0 + || calendar.get(java.util.Calendar.SECOND) != 0 + || calendar.get(java.util.Calendar.MILLISECOND) != 0 ) + { +## +## Need to fix the temporal type once the metafacde engine is fixed to detect the EJB3ManageableEntityAttributeFacade +## + query.setParameter("$member.name", ${member.name}, javax.persistence.TemporalType.#if ($stringUtils.isBlank(${member.temporalType}))TIMESTAMP#else${member.temporalType}#end); + } + else + { +## +## Need to fix the temporal type once the metafacde engine is fixed to detect the EJB3ManageableEntityAttributeFacade +## + calendar.add(java.util.Calendar.DATE, 1); + query.setParameter("${member.name}Start", $member.name, javax.persistence.TemporalType.#if ($stringUtils.isBlank(${member.temporalType}))TIMESTAMP#else${member.temporalType}#end); + query.setParameter("${member.name}End", calendar.getTime(), javax.persistence.TemporalType.#if ($stringUtils.isBlank(${member.temporalType}))TIMESTAMP#else${member.temporalType}#end); + } +#* *##else + query.setParameter("$member.name", $member.name); +#* *##end + } +#* *##end +#* *##end +#**##end +#**##foreach ($member in $manageable.manageableAssociationEnds) +#* *##if ($member.many) + if ($member.name != null && ${member.name}.length > 0) + { + query.setParameter("$member.name", java.util.Arrays.asList($member.name)); + } +#* *##else +#* *##if ($member.type.primitive) + query.setParameter("$member.name", new ${member.manageableIdentifier.type.wrapperName}($member.name)); +#* *##else + if ($member.name != null) + { + query.setParameter("$member.name", $member.name); + } +#* *##end +#* *##end +#**##end +#**##if ($manageable.maximumListSize > 0) + query.setMaxResults($manageable.maximumListSize); +#**##end + return query.getResultList(); + } + catch (Exception ex) + { + throw new ${manageable.fullyQualifiedManageableServiceReadExceptionName}(ex); + } } /** @@ -140,10 +307,21 @@ * @return java.util.List * @throws $manageable.fullyQualifiedManageableServiceReadExceptionName */ - public java.util.List readAll() + public java.util.List<${manageable.fullyQualifiedEntityName}> readAll() throws ${manageable.fullyQualifiedManageableServiceReadExceptionName} { - return toValueObjects(dao.readAll()); + try + { + javax.persistence.Query query = emanager.createQuery("from ${manageable.entityName} as entity"); +#if ($manageable.maximumListSize > 0) + query.setMaxResults($manageable.maximumListSize); +#end + return query.getResultList(); + } + catch (Exception ex) + { + throw new ${manageable.fullyQualifiedManageableServiceReadExceptionName}(ex); + } } #**##foreach ($member in $manageable.manageableAttributes) @@ -167,25 +345,17 @@ #* *##end try { - $member.type.fullyQualifiedName value = $member.type.javaNullString; - - final javax.persistence.Query queryObject = emanager.createNativeQuery("SELECT entity.${member.name} FROM $manageable.entityName AS entity where entity.${identifier.name} = :$identifier.name"); + final javax.persistence.Query query = emanager.createNativeQuery("select entity.${member.name} from $manageable.entityName as entity where entity.${identifier.name} = :$identifier.name"); #* *##if ($identifier.type.primitive) - queryObject.setParameter("$identifier.name", new ${identifier.type.wrapperName}($identifier.name)); + query.setParameter("$identifier.name", new ${identifier.type.wrapperName}($identifier.name)); #* *##else - queryObject.setParameter("$identifier.name", $identifier.name); + query.setParameter("$identifier.name", $identifier.name); #* *##end - final java.util.Iterator iterator = queryObject.iterate(); - if (iterator.hasNext()) - { - value = ($member.type.fullyQualifiedName)iterator.next(); - } - - return value; + return query.getSingleResult(); } - catch (${hibernateUtils.basePackage}.HibernateException ex) + catch (Exception ex) { - throw super.convertHibernateAccessException(ex); + throw new ${manageable.fullyQualifiedManageableServiceReadExceptionName}(ex); } } @@ -201,19 +371,31 @@ public java.util.Map readBackingLists() throws ${manageable.fullyQualifiedManageableServiceReadExceptionName} { - return getDao().readBackingLists(); + final java.util.Map lists = new java.util.HashMap(); + + try + { +#* *##foreach ($member in $manageable.manageableAssociationEnds) + lists.put("${member.name}", emanager.createQuery("select item.${member.type.manageableIdentifierWorkaround.name}, item.${member.type.displayAttributeWorkaround.name} from ${member.type.entityName} as item order by item.${member.type.displayAttributeWorkaround.name}").getResultList()); +#* *##end + } + catch (Exception ex) + { + throw new ${manageable.fullyQualifiedManageableServiceReadExceptionName}(ex); + } + return lists; } #**##end #end -#if ($manageable.update) +#if ($manageable.updateWorkaround) /** * Update Operation * - * @return $manageable.fullyQualifiedEntityName + * @return $manageable.fullyQualifiedName * @throws $manageable.fullyQualifiedManageableServiceUpdateExceptionName */ - public $manageable.fullyQualifiedEntityName update($memberList) + public $manageable.fullyQualifiedName update($memberList) throws ${manageable.fullyQualifiedManageableServiceUpdateExceptionName} { #**##foreach ($member in $manageable.manageableMembers) @@ -226,39 +408,35 @@ #* *##end #**##end -#**##set ($identifier = $manageable.manageableIdentifier) - final $manageable.fullyQualifiedEntityName entity = (${manageable.fullyQualifiedEntityName})emanager.getReference(${manageable.fullyQualifiedEntityName}.class, #if ($identifier.type.primitive)new ${identifier.type.wrapperName}($identifier.name)#else${identifier.name}#end); - + final $manageable.fullyQualifiedName entity = (${manageable.fullyQualifiedName})emanager.find(${manageable.fullyQualifiedName}.class, #if ($identifier.type.primitive)new ${identifier.type.wrapperName}($identifier.name)#else${identifier.name}#end); #**##foreach ($member in $manageable.manageableAttributes) #* *##if (!$member.identifier)## the identifier is already present since we loaded the entity entity.${member.setterName}(${member.name}); #* *##end #**##end + + try + { #**##foreach ($member in $manageable.manageableAssociationEnds) #* *##if ($member.many) #* *##set ($memberEntityName = "${member.name}Entities") + final java.util.List<${member.type.fullyQualifiedName}> $memberEntityName = ($member.name != null && ${member.name}.length > 0) + ? this.find${member.type.name}ByIds($member.name) + : java.util.Collections.EMPTY_LIST; - java.util.Set $memberEntityName = null; - if ($member.name != null && ${member.name}.length > 0) - { - $memberEntityName = this.find${member.type.name}ByIds($member.name); - } #* *##else #* *##set ($memberEntityName = "${member.name}Entity") - $member.type.fullyQualifiedName $memberEntityName = null; if ($member.name != null) { - $memberEntityName = (${member.type.fullyQualifiedName})emanager.getReference(${member.type.fullyQualifiedName}.class, #if ($memeber.type.primitive)new ${member.type.wrapperName}($member.name)#else${member.name}#end); + $memberEntityName = (${member.type.fullyQualifiedName})emanager.find(${member.type.fullyQualifiedName}.class, #if ($memeber.type.primitive)new ${member.type.wrapperName}($member.name)#else${member.name}#end); } #* *##end -#* *##if ($member.required) - entity.${member.setterName}($memberEntityName); -#* *##else + if ($memberEntityName != null) { entity.${member.setterName}($memberEntityName); -#* *##if ($member.many) +#* *##if ($member.many2Many) #* *##if ($member.otherEnd.navigable) // set the other ends of the many2many association too for (final java.util.Iterator iterator = ${memberEntityName}.iterator(); iterator.hasNext();) @@ -275,14 +453,19 @@ #* *##end } #* *##end -#**##end emanager.merge(entity); + emanager.flush(); return entity; } + catch (Exception ex) + { + throw new ${manageable.fullyQualifiedManageableServiceUpdateExceptionName}(ex); + } + } #end -#if ($manageable.delete) +#if ($manageable.deleteWorkaround) /** * Delete operation * @@ -299,9 +482,8 @@ try { - final javax.persistence.Query queryObject = - emanager.createQuery("DELETE FROM $manageable.name WHERE $identifier.name in (:ids)"); - queryObject.setParameter("ids", ids); + final javax.persistence.Query queryObject = emanager.createQuery("delete from $manageable.name where $identifier.name in (:ids)"); + queryObject.setParameter("ids", java.util.Arrays.asList(ids)); queryObject.executeUpdate(); } catch (Exception ex) |