Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java =================================================================== diff -u -r7a6897909f33a09faec913848956d4012f477c7c -rdcbd160a14b4bee7d729345e19fec3ee4621d5c1 --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision 7a6897909f33a09faec913848956d4012f477c7c) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision dcbd160a14b4bee7d729345e19fec3ee4621d5c1) @@ -34,6 +34,7 @@ import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -435,8 +436,8 @@ public String getToolOutputDefinitions(Long outputToolContentID, int definitionType, Long inputToolContentID) throws IOException { - SortedMap defns = lamsCoreToolService.getOutputDefinitionsFromToolFiltered( - outputToolContentID, definitionType, inputToolContentID); + SortedMap defns = lamsCoreToolService + .getOutputDefinitionsFromToolFiltered(outputToolContentID, definitionType, inputToolContentID); ArrayList defnDTOList = new ArrayList( defns != null ? defns.size() : 0); @@ -458,8 +459,8 @@ public String getLearningDesignDetails(Long learningDesignID, String languageCode) throws IOException { FlashMessage flashMessage = null; - LearningDesignDTO learningDesignDTO = learningDesignService - .getLearningDesignDTO(learningDesignID, languageCode); + LearningDesignDTO learningDesignDTO = learningDesignService.getLearningDesignDTO(learningDesignID, + languageCode); if (learningDesignDTO == null) { flashMessage = FlashMessage.getNoSuchLearningDesignExists("getLearningDesignDetails", learningDesignID); @@ -475,8 +476,8 @@ */ @SuppressWarnings("unchecked") @Override - public boolean setupEditOnFlyLock(Long learningDesignID, Integer userID) throws LearningDesignException, - UserException, IOException { + public boolean setupEditOnFlyLock(Long learningDesignID, Integer userID) + throws LearningDesignException, UserException, IOException { User user = (User) baseDAO.find(User.class, userID); if (user == null) { throw new UserException(messageService.getMessage("no.such.user.exist", new Object[] { userID })); @@ -485,8 +486,8 @@ LearningDesign design = learningDesignID == null ? null : getLearningDesign(learningDesignID); if (design == null) { - throw new LearningDesignException(FlashMessage.getNoSuchLearningDesignExists("getLearningDesignDetails", - learningDesignID).serializeMessage()); + throw new LearningDesignException(FlashMessage + .getNoSuchLearningDesignExists("getLearningDesignDetails", learningDesignID).serializeMessage()); } boolean learningDesignAvailable = (design.getEditOverrideUser() == null) @@ -560,8 +561,8 @@ flashMessage = FlashMessage.getNoSuchUserExists("finishEditOnFly", userID); } - LearningDesign design = learningDesignID == null ? null : learningDesignDAO - .getLearningDesignById(learningDesignID); + LearningDesign design = learningDesignID == null ? null + : learningDesignDAO.getLearningDesignById(learningDesignID); if (design == null) { flashMessage = FlashMessage.getNoSuchLearningDesignExists("finishEditOnFly", learningDesignID); @@ -579,8 +580,8 @@ processor.parseLearningDesign(); Activity lastReadOnlyActivity = processor.lastReadOnlyActivity; - Long firstAddedActivityId = processor.firstAddedActivity == null ? null : processor.firstAddedActivity - .getActivityId(); + Long firstAddedActivityId = processor.firstAddedActivity == null ? null + : processor.firstAddedActivity.getActivityId(); // open and release waiting list on system gate if ((lastReadOnlyActivity != null) && lastReadOnlyActivity.isGateActivity() @@ -718,8 +719,8 @@ // set x / y position for Gate Integer x1 = toActivity.getXcoord() == null ? 0 : toActivity.getXcoord(); - Integer x2 = toActivity.getTransitionFrom() == null ? null : toActivity.getTransitionFrom().getToActivity() - .getXcoord(); + Integer x2 = toActivity.getTransitionFrom() == null ? null + : toActivity.getTransitionFrom().getToActivity().getXcoord(); if ((x1 != null) && (x2 != null)) { gate.setXcoord(x2 >= x1 ? (x1.intValue() - 13 - 20) : (x1.intValue() + 123 + 13 + 20)); @@ -742,8 +743,8 @@ activity.setTransitionFrom(newTransition); gate.setTransitionTo(newTransition); - Integer x1 = activity.getTransitionTo() == null ? 0 : activity.getTransitionTo().getFromActivity() - .getXcoord(); /* set x/y position for Gate */ + Integer x1 = activity.getTransitionTo() == null ? 0 + : activity.getTransitionTo().getFromActivity().getXcoord(); /* set x/y position for Gate */ Integer x2 = activity.getXcoord() == null ? null : activity.getXcoord(); if ((x1 != null) && (x2 != null)) { @@ -823,8 +824,8 @@ // a content record, then shortcomings in the createToolSession // code may throw exceptions. if (activity.isToolActivity()) { - ToolActivity toolActivity = (ToolActivity) activityDAO.getActivityByActivityId(activity - .getActivityId()); + ToolActivity toolActivity = (ToolActivity) activityDAO + .getActivityByActivityId(activity.getActivityId()); Long newContentId = lamsCoreToolService.notifyToolToCopyContent(toolActivity, null); toolActivity.setToolContentId(newContentId); @@ -847,13 +848,13 @@ @Override public LearningDesign copyLearningDesign(Long originalDesignID, Integer copyType, Integer userID, - Integer workspaceFolderID, boolean setOriginalDesign) throws UserException, LearningDesignException, - WorkspaceFolderException, IOException { + Integer workspaceFolderID, boolean setOriginalDesign) + throws UserException, LearningDesignException, WorkspaceFolderException, IOException { LearningDesign originalDesign = learningDesignDAO.getLearningDesignById(originalDesignID); if (originalDesign == null) { - throw new LearningDesignException(messageService.getMessage("no.such.learningdesign.exist", - new Object[] { originalDesignID })); + throw new LearningDesignException( + messageService.getMessage("no.such.learningdesign.exist", new Object[] { originalDesignID })); } User user = (User) baseDAO.find(User.class, userID); @@ -863,8 +864,8 @@ WorkspaceFolder workspaceFolder = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, workspaceFolderID); if (workspaceFolder == null) { - throw new WorkspaceFolderException(messageService.getMessage("no.such.workspace.exist", - new Object[] { workspaceFolderID })); + throw new WorkspaceFolderException( + messageService.getMessage("no.such.workspace.exist", new Object[] { workspaceFolderID })); } if (!workspaceManagementService.isUserAuthorizedToModifyFolderContents(workspaceFolder.getWorkspaceFolderId(), @@ -939,7 +940,7 @@ @Override public LearningDesign insertLearningDesign(Long originalDesignID, Long designToImportID, Integer userID, boolean createNewLearningDesign, String newDesignName, Integer workspaceFolderID, String customCSV) - throws UserException, WorkspaceFolderException, IOException { + throws UserException, WorkspaceFolderException, IOException { User user = (User) baseDAO.find(User.class, userID); if (user == null) { @@ -948,24 +949,24 @@ LearningDesign mainDesign = learningDesignDAO.getLearningDesignById(originalDesignID); if (mainDesign == null) { - throw new LearningDesignException(messageService.getMessage("no.such.learningdesign.exist", - new Object[] { originalDesignID })); + throw new LearningDesignException( + messageService.getMessage("no.such.learningdesign.exist", new Object[] { originalDesignID })); } LearningDesign designToImport = learningDesignDAO.getLearningDesignById(designToImportID); if (designToImport == null) { - throw new LearningDesignException(messageService.getMessage("no.such.learningdesign.exist", - new Object[] { designToImportID })); + throw new LearningDesignException( + messageService.getMessage("no.such.learningdesign.exist", new Object[] { designToImportID })); } if (createNewLearningDesign) { WorkspaceFolder workspaceFolder = (WorkspaceFolder) baseDAO.find(WorkspaceFolder.class, workspaceFolderID); if (workspaceFolder == null) { - throw new WorkspaceFolderException(messageService.getMessage("no.such.workspace.exist", - new Object[] { workspaceFolderID })); + throw new WorkspaceFolderException( + messageService.getMessage("no.such.workspace.exist", new Object[] { workspaceFolderID })); } - if (!workspaceManagementService.isUserAuthorizedToModifyFolderContents( - workspaceFolder.getWorkspaceFolderId(), user.getUserId())) { + if (!workspaceManagementService + .isUserAuthorizedToModifyFolderContents(workspaceFolder.getWorkspaceFolderId(), user.getUserId())) { throw new UserAccessDeniedException("User with user_id of " + user.getUserId() + " is not authorized to store a copy a learning design into the workspace folder " + workspaceFolder); @@ -976,8 +977,8 @@ } else { // updating the existing design so check the rights to the folder // containing the design. If this is in live edit mode - boolean authorised = workspaceManagementService.isUserAuthorizedToModifyFolderContents(mainDesign - .getWorkspaceFolder().getWorkspaceFolderId(), user.getUserId()); + boolean authorised = workspaceManagementService.isUserAuthorizedToModifyFolderContents( + mainDesign.getWorkspaceFolder().getWorkspaceFolderId(), user.getUserId()); if (!authorised) { authorised = (mainDesign.getEditOverrideLock() != null) && mainDesign.getEditOverrideLock().booleanValue() @@ -1062,9 +1063,7 @@ throw new LearningDesignException(error, e); } catch (ToolException e) { String error = "Unable to copy a design / initialise the lesson. Tool encountered an error copying the data is missing for activity " - + activity.getActivityUIID() - + " in learning design " - + originalLearningDesignId + + activity.getActivityUIID() + " in learning design " + originalLearningDesignId + " default content may be missing for the tool. Error was " + e.getMessage(); log.error(error, e); throw new LearningDesignException(error, e); @@ -1129,8 +1128,8 @@ ComplexActivity newComplex = (ComplexActivity) activity; Activity oldDefaultActivity = newComplex.getDefaultActivity(); if (oldDefaultActivity != null) { - Activity newDefaultActivity = newActivities.get(LearningDesign.addOffset( - oldDefaultActivity.getActivityUIID(), uiidOffset)); + Activity newDefaultActivity = newActivities + .get(LearningDesign.addOffset(oldDefaultActivity.getActivityUIID(), uiidOffset)); newComplex.setDefaultActivity(newDefaultActivity); } } @@ -1158,16 +1157,16 @@ // copy BranchActivityEntry entry = (BranchActivityEntry) beIter.next(); BranchingActivity oldBranchingActivity = (BranchingActivity) entry.getBranchingActivity(); - entry.setBranchingActivity(newActivities.get(LearningDesign.addOffset( - oldBranchingActivity.getActivityUIID(), uiidOffset))); + entry.setBranchingActivity(newActivities + .get(LearningDesign.addOffset(oldBranchingActivity.getActivityUIID(), uiidOffset))); Group oldGroup = entry.getGroup(); if (oldGroup != null) { Grouping oldGrouping = oldGroup.getGrouping(); - Grouping newGrouping = newGroupings.get(LearningDesign.addOffset( - oldGrouping.getGroupingUIID(), uiidOffset)); + Grouping newGrouping = newGroupings + .get(LearningDesign.addOffset(oldGrouping.getGroupingUIID(), uiidOffset)); if (newGrouping != null) { - entry.setGroup(newGrouping.getGroup(LearningDesign.addOffset( - oldGroup.getGroupUIID(), uiidOffset))); + entry.setGroup(newGrouping + .getGroup(LearningDesign.addOffset(oldGroup.getGroupUIID(), uiidOffset))); } } } @@ -1181,8 +1180,8 @@ Iterator inputIter = activity.getInputActivities().iterator(); while (inputIter.hasNext()) { Activity elem = (Activity) inputIter.next(); - newInputActivities.add(newActivities.get(LearningDesign.addOffset(elem.getActivityUIID(), - uiidOffset))); + newInputActivities + .add(newActivities.get(LearningDesign.addOffset(elem.getActivityUIID(), uiidOffset))); } activity.getInputActivities().clear(); activity.getInputActivities().addAll(newInputActivities); @@ -1253,7 +1252,8 @@ } if (newActivity.isToolActivity()) { - copyActivityToolContent(newActivity, newLearningDesign.getCopyTypeID(), originalLearningDesignId, customCSV); + copyActivityToolContent(newActivity, newLearningDesign.getCopyTypeID(), originalLearningDesignId, + customCSV); } Set oldChildActivities = getChildActivities(activity); @@ -1412,21 +1412,21 @@ // Check if competence mapping title already exists as a // competence in the original sequence // If so, simply use the existing competence to map to. - if ((oldCompetences != null) - && (oldCompetences.size() > 0) - && (getCompetenceFromSet(oldCompetences, competenceMapping.getCompetence().getTitle()) != null)) { - newMapping.setCompetence(getCompetenceFromSet(oldCompetences, competenceMapping - .getCompetence().getTitle())); + if ((oldCompetences != null) && (oldCompetences.size() > 0) + && (getCompetenceFromSet(oldCompetences, + competenceMapping.getCompetence().getTitle()) != null)) { + newMapping.setCompetence( + getCompetenceFromSet(oldCompetences, competenceMapping.getCompetence().getTitle())); competenceMappingDAO.insert(newMapping); newCompetenceMappings.add(newMapping); } // If competence was not already existing in the ld, add // a new mappping - else if ((newCompetences != null) - && (newCompetences.size() > 0) - && (getCompetenceFromSet(newCompetences, competenceMapping.getCompetence().getTitle()) != null)) { - newMapping.setCompetence(getCompetenceFromSet(newCompetences, competenceMapping - .getCompetence().getTitle())); + else if ((newCompetences != null) && (newCompetences.size() > 0) + && (getCompetenceFromSet(newCompetences, + competenceMapping.getCompetence().getTitle()) != null)) { + newMapping.setCompetence( + getCompetenceFromSet(newCompetences, competenceMapping.getCompetence().getTitle())); competenceMappingDAO.insert(newMapping); newCompetenceMappings.add(newMapping); } @@ -1577,8 +1577,8 @@ } Long learningDesignId = WDDXProcessor.convertToLong(table, "learningDesignID"); - LearningDesign existingLearningDesign = learningDesignId != null ? learningDesignDAO - .getLearningDesignById(learningDesignId) : null; + LearningDesign existingLearningDesign = learningDesignId != null + ? learningDesignDAO.getLearningDesignById(learningDesignId) : null; if (!authorised && (existingLearningDesign != null) && Boolean.TRUE.equals(existingLearningDesign.getEditOverrideLock())) { authorised = userID.equals(existingLearningDesign.getEditOverrideUser().getUserId()); @@ -1612,8 +1612,8 @@ } @Override - public LearningDesign saveLearningDesignDetails(JSONObject ldJSON) throws UserException, JSONException, - WorkspaceFolderException, ObjectExtractorException, ParseException { + public LearningDesign saveLearningDesignDetails(JSONObject ldJSON) + throws UserException, JSONException, WorkspaceFolderException, ObjectExtractorException, ParseException { User user = null; Integer userID = AuthoringService.getUserId(); if (userID != null) { @@ -1632,8 +1632,8 @@ } Long learningDesignId = ldJSON.optLong(AttributeNames.PARAM_LEARNINGDESIGN_ID); - LearningDesign existingLearningDesign = learningDesignId == null ? null : learningDesignDAO - .getLearningDesignById(learningDesignId); + LearningDesign existingLearningDesign = learningDesignId == null ? null + : learningDesignDAO.getLearningDesignById(learningDesignId); if (!authorised && (existingLearningDesign != null) && Boolean.TRUE.equals(existingLearningDesign.getEditOverrideLock())) { authorised = userID.equals(existingLearningDesign.getEditOverrideUser().getUserId()); @@ -1695,8 +1695,8 @@ // but we don't need to in this case as it is only doing it // for tool activities, and the extra parameter is only // used for branching activities - ToolActivity toolActivity = (ToolActivity) activityDAO.getActivityByActivityId(currentActivity - .getActivityId()); + ToolActivity toolActivity = (ToolActivity) activityDAO + .getActivityByActivityId(currentActivity.getActivityId()); AuthoringActivityDTO activityDTO = new AuthoringActivityDTO(toolActivity, null, languageCode); listOfAuthoringActivityDTOs.add(activityDTO); } catch (ToolException e) { @@ -1739,7 +1739,9 @@ return flashMessage.serializeMessage(); } - /** @see org.lamsfoundation.lams.authoring.service.IAuthoringService#insertToolContentID(java.lang.Long) */ + /** + * @see org.lamsfoundation.lams.authoring.service.IAuthoringService#insertToolContentID(java.lang.Long) + */ @Override public String getToolContentIDFlash(Long toolID) throws IOException { @@ -1789,7 +1791,9 @@ return idMap.length() > 0 ? idMap.substring(0, idMap.length() - 1) : ""; } - /** @see org.lamsfoundation.lams.authoring.service.IAuthoringService#getAvailableLicenses() */ + /** + * @see org.lamsfoundation.lams.authoring.service.IAuthoringService#getAvailableLicenses() + */ @Override public Vector getAvailableLicenses() { List licenses = licenseDAO.findAll(License.class); @@ -1820,12 +1824,13 @@ Activity activity = (Activity) iter.next(); if (activity.isToolActivity()) { try { - ToolActivity toolActivity = (ToolActivity) activityDAO.getActivityByActivityId(activity - .getActivityId()); + ToolActivity toolActivity = (ToolActivity) activityDAO + .getActivityByActivityId(activity.getActivityId()); lamsCoreToolService.notifyToolToDeleteContent(toolActivity); } catch (ToolException e) { - log.error("Unable to delete tool content for activity" + activity - + " as activity threw an exception", e); + log.error( + "Unable to delete tool content for activity" + activity + " as activity threw an exception", + e); } } } @@ -1834,7 +1839,9 @@ learningDesignDAO.delete(design); } - /** @see org.lamsfoundation.lams.authoring.service.IAuthoringService#generateUniqueContentFolder() */ + /** + * @see org.lamsfoundation.lams.authoring.service.IAuthoringService#generateUniqueContentFolder() + */ @Override public String generateUniqueContentFolder() throws FileUtilException, IOException { @@ -1845,7 +1852,9 @@ return flashMessage.serializeMessage(); } - /** @see org.lamsfoundation.lams.authoring.service.IAuthoringService#getHelpURL() */ + /** + * @see org.lamsfoundation.lams.authoring.service.IAuthoringService#getHelpURL() + */ @Override public String getHelpURL() throws Exception { @@ -2011,21 +2020,29 @@ toolContentID.toString()); } if (contentFolderID != null) { - authorUrl = WebUtil - .appendParameterToURL(authorUrl, AttributeNames.PARAM_CONTENT_FOLDER_ID, contentFolderID); + authorUrl = WebUtil.appendParameterToURL(authorUrl, AttributeNames.PARAM_CONTENT_FOLDER_ID, + contentFolderID); } return authorUrl; } @Override public List getLearningDesignAccessByUser(Integer userId) { List accessList = learningDesignDAO.getAccessByUser(userId); + List result = new LinkedList(); for (LearningDesignAccess access : accessList) { LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(access.getLearningDesignId()); - access.setTitle(learningDesign.getTitle()); - access.setWorkspaceFolderId(learningDesign.getWorkspaceFolder().getWorkspaceFolderId()); + if (learningDesign == null) { + log.warn("When getting recent access list for Author with ID " + userId + " LD with ID " + + access.getLearningDesignId() + " was found missing. Deleting access entry."); + learningDesignDAO.delete(access); + } else { + access.setTitle(learningDesign.getTitle()); + access.setWorkspaceFolderId(learningDesign.getWorkspaceFolder().getWorkspaceFolderId()); + result.add(access); + } } - return accessList; + return result; } @Override @@ -2043,10 +2060,12 @@ private static void copyLearningDesignImage(long originalLearningDesignID, long newLearningDesignID, String extension) throws IOException { String fullExtension = "." + extension; - File image = new File(IAuthoringService.LEARNING_DESIGN_IMAGES_FOLDER, originalLearningDesignID + fullExtension); + File image = new File(IAuthoringService.LEARNING_DESIGN_IMAGES_FOLDER, + originalLearningDesignID + fullExtension); if (image.canRead()) { - FileUtils.copyFile(image, new File(IAuthoringService.LEARNING_DESIGN_IMAGES_FOLDER, newLearningDesignID - + fullExtension), true); + FileUtils.copyFile(image, + new File(IAuthoringService.LEARNING_DESIGN_IMAGES_FOLDER, newLearningDesignID + fullExtension), + true); } } } \ No newline at end of file