Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -rdc53680eab1f358c574373f25db835a853094d04 -ra444a5eb183dee320427e5c1796ebfc40e53e79e Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/IActivityDAO.java =================================================================== diff -u -r79c858a92c17ab3ca404cab4a0cf6094254e68d5 -ra444a5eb183dee320427e5c1796ebfc40e53e79e --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/IActivityDAO.java (.../IActivityDAO.java) (revision 79c858a92c17ab3ca404cab4a0cf6094254e68d5) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/IActivityDAO.java (.../IActivityDAO.java) (revision a444a5eb183dee320427e5c1796ebfc40e53e79e) @@ -56,6 +56,12 @@ public Activity getActivityByActivityId(Long activityId, Class clasz); /** + * Returns an object that may be assigned to Activity, based + * on the UI id set by Flash. + *
+ * This must return a true Activity object, rather than + * the Hibernate CGLIB proxy, or other code gets too difficult. + *
* @param uiID The internal id (flash generated) of the activity * being looked for * @param design The learning_design_id of the design Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/ActivityDAO.java =================================================================== diff -u -r79c858a92c17ab3ca404cab4a0cf6094254e68d5 -ra444a5eb183dee320427e5c1796ebfc40e53e79e --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/ActivityDAO.java (.../ActivityDAO.java) (revision 79c858a92c17ab3ca404cab4a0cf6094254e68d5) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/ActivityDAO.java (.../ActivityDAO.java) (revision a444a5eb183dee320427e5c1796ebfc40e53e79e) @@ -63,11 +63,16 @@ */ public Activity getActivityByActivityId(Long activityId) { Activity act = (Activity) super.find(Activity.class,activityId); - - // we must return the real activity, not a Hibernate proxy. So relook - // it up. This should be quick as it should be in the cache. + return getNonCGLibActivity(act); + } + + /** we must return the real activity, not a Hibernate proxy. So relook + * it up. This should be quick as it should be in the cache. + */ + private Activity getNonCGLibActivity(Activity act) { if ( act != null ) { Integer activityType = act.getActivityTypeId(); + Long activityId = act.getActivityId(); if ( activityType != null ) { switch ( activityType.intValue() ) { case Activity.TOOL_ACTIVITY_TYPE: @@ -91,7 +96,7 @@ } throw new DataRetrievalFailureException("Unable to get activity as the activity type is unknown or missing. Activity type is "+activityType); } - return null; + return null; } /* @@ -149,15 +154,15 @@ } /** - * @see org.lamsfoundation.lams.learningdesign.dao.IActivityDAO#getActivityByID(java.lang.Integer) + * @see org.lamsfoundation.lams.learningdesign.dao.IActivityDAO#getActivityByUIID(java.lang.Integer, org.lamsfoundation.lams.learningdesign.LearningDesign) */ public Activity getActivityByUIID(Integer id, LearningDesign design) { if ( id != null && design != null ) { Long designID = design.getLearningDesignId(); Query query = this.getSession().createQuery(FIND_BY_UI_ID); query.setInteger(0,id.intValue()); query.setLong(1,designID.longValue()); - return (Activity) query.uniqueResult(); + return getNonCGLibActivity((Activity) query.uniqueResult()); } return null; }