/** delete specified Item */ public String deleteItem() { ItemService delegate = new ItemService(); Long deleteId = this.getItemToDelete().getItemId(); ItemFacade itemf = delegate.getItem(deleteId, AgentFacade.getAgentString()); // save the currSection before itemf.setSection(null), used to reorder question sequences SectionFacade currSection = (SectionFacade) itemf.getSection(); Integer currSeq = itemf.getSequence(); QuestionPoolService qpdelegate = new QuestionPoolService(); if (qpdelegate.getPoolIdsByItem(deleteId.toString()) == null || qpdelegate.getPoolIdsByItem(deleteId.toString()).isEmpty()) { // if no reference to this item at all, ie, this item is created in assessment but not // assigned to any pool AuthorizationBean authzBean = (AuthorizationBean) ContextUtil.lookupBean("authorization"); AssessmentService assessdelegate = new AssessmentService(); AssessmentFacade af = assessdelegate.getBasicInfoOfAnAssessmentFromSectionId(currSection.getSectionId()); if (!authzBean.isUserAllowedToEditAssessment( af.getAssessmentBaseId().toString(), af.getCreatedBy(), false)) { throw new IllegalArgumentException( "User does not have permission to delete item in assessment: " + af.getAssessmentBaseId()); } delegate.deleteItem(deleteId, AgentFacade.getAgentString()); } else { if (currSection == null) { // if this item is created from question pool QuestionPoolBean qpoolbean = (QuestionPoolBean) ContextUtil.lookupBean("questionpool"); ItemFacade itemfacade = delegate.getItem(deleteId, AgentFacade.getAgentString()); ArrayList items = new ArrayList(); items.add(itemfacade); qpoolbean.setItemsToDelete(items); qpoolbean.removeQuestionsFromPool(); return "editPool"; } else { // // if some pools still reference to this item, ie, this item is // created in assessment but also assigned a a pool // then just set section = null itemf.setSection(null); delegate.saveItem(itemf); } } // An item has been deleted EventTrackingService.post( EventTrackingService.newEvent( "sam.assessment.item.delete", "/sam/" + AgentFacade.getCurrentSiteId() + "/removed itemId=" + deleteId, true)); AssessmentService assessdelegate = new AssessmentService(); // reorder item numbers SectionFacade sectfacade = assessdelegate.getSection(currSection.getSectionId().toString()); Set itemset = sectfacade.getItemFacadeSet(); // should be size-1 now. Iterator iter = itemset.iterator(); while (iter.hasNext()) { ItemFacade itemfacade = (ItemFacade) iter.next(); Integer itemfacadeseq = itemfacade.getSequence(); if (itemfacadeseq.compareTo(currSeq) > 0) { itemfacade.setSequence(Integer.valueOf(itemfacadeseq.intValue() - 1)); delegate.saveItem(itemfacade); } } // go to editAssessment.jsp, need to first reset assessmentBean AssessmentBean assessmentBean = (AssessmentBean) ContextUtil.lookupBean("assessmentBean"); AssessmentFacade assessment = assessdelegate.getAssessment(assessmentBean.getAssessmentId()); assessmentBean.setAssessment(assessment); assessdelegate.updateAssessmentLastModifiedInfo(assessment); // Assessment has been revised EventTrackingService.post( EventTrackingService.newEvent( "sam.asessment.revise", "/sam/" + AgentFacade.getCurrentSiteId() + "/removed itemId=" + deleteId + "from assessmentId=" + assessmentBean.getAssessmentId(), true)); return "editAssessment"; }
public void processAction(ActionEvent ae) throws AbortProcessingException { FacesContext context = FacesContext.getCurrentInstance(); // Map reqMap = context.getExternalContext().getRequestMap(); // Map requestParams = context.getExternalContext().getRequestParameterMap(); AssessmentBean assessmentBean = (AssessmentBean) ContextUtil.lookupBean("assessmentBean"); String assessmentId = assessmentBean.getAssessmentId(); SectionBean sectionBean = (SectionBean) ContextUtil.lookupBean("sectionBean"); // create an assessment based on the title entered and the assessment // template selected // #1 - read from form editpart.jsp String title = TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, sectionBean.getSectionTitle()) .trim(); if (title == null || title.equals("")) { String err = ContextUtil.getLocalizedString( "org.sakaiproject.tool.assessment.bundle.AuthorMessages", "empty_part_title_error"); context.addMessage(null, new FacesMessage(err)); sectionBean.setOutcome("editPart"); return; } String description = sectionBean.getSectionDescription(); String sectionId = sectionBean.getSectionId(); AuthorBean author = (AuthorBean) ContextUtil.lookupBean("author"); isEditPendingAssessmentFlow = author.getIsEditPendingAssessmentFlow(); // #1a. prepare sectionBean AssessmentService assessmentService = null; SectionFacade section = null; // permission check String creator; if (isEditPendingAssessmentFlow) { assessmentService = new AssessmentService(); AssessmentFacade af = assessmentService.getBasicInfoOfAnAssessment(assessmentId); creator = af.getCreatedBy(); } else { PublishedAssessmentService pubService = new PublishedAssessmentService(); assessmentService = pubService; PublishedAssessmentFacade paf = pubService.getSettingsOfPublishedAssessment(assessmentId); creator = paf.getCreatedBy(); } AuthorizationBean authzBean = (AuthorizationBean) ContextUtil.lookupBean("authorization"); if (!authzBean.isUserAllowedToEditAssessment( assessmentId, creator, !isEditPendingAssessmentFlow)) { String err = ContextUtil.getLocalizedString( "org.sakaiproject.tool.assessment.bundle.AuthorMessages", "denied_edit_assessment_error"); context.addMessage(null, new FacesMessage(err)); sectionBean.setOutcome("editPart"); return; } if (isEditPendingAssessmentFlow) { EventTrackingService.post( EventTrackingService.newEvent( "sam.assessment.revise", "siteId=" + AgentFacade.getCurrentSiteId() + ", sectionId=" + sectionId, true)); } else { EventTrackingService.post( EventTrackingService.newEvent( "sam.pubassessment.revise", "siteId=" + AgentFacade.getCurrentSiteId() + ", sectionId=" + sectionId, true)); } boolean addItemsFromPool = false; sectionBean.setOutcome("editAssessment"); if ((sectionBean.getType().equals("2")) && (sectionBean.getSelectedPool().equals(""))) { String selectedPool_err = ContextUtil.getLocalizedString( "org.sakaiproject.tool.assessment.bundle.AuthorMessages", "selectedPool_error"); context.addMessage(null, new FacesMessage(selectedPool_err)); sectionBean.setOutcome("editPart"); return; } if (isEditPendingAssessmentFlow && !("".equals(sectionBean.getType())) && ((SectionDataIfc.RANDOM_DRAW_FROM_QUESTIONPOOL.toString()) .equals(sectionBean.getType()))) { addItemsFromPool = true; if (validateItemsDrawn(sectionBean)) { section = getOrAddSection(assessmentService, assessmentId, sectionId); } else { sectionBean.setOutcome("editPart"); return; } } else { section = getOrAddSection(assessmentService, assessmentId, sectionId); } if (section == null) { log.info("section == null - Should not come to here. Simply return."); log.info("assessmentId =" + assessmentId); log.info("sectionId =" + sectionId); return; } log.debug("**** section title =" + section.getTitle()); log.debug("**** title =" + title); // title, description, and question ordering are editable for both pending and publish // assessments if (title != null) section.setTitle(title); section.setDescription(description); if (!("".equals(sectionBean.getQuestionOrdering()))) section.addSectionMetaData( SectionDataIfc.QUESTIONS_ORDERING, sectionBean.getQuestionOrdering()); if (isEditPendingAssessmentFlow) { if (!("".equals(sectionBean.getKeyword()))) section.addSectionMetaData( SectionMetaDataIfc.KEYWORDS, TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, sectionBean.getKeyword())); if (!("".equals(sectionBean.getObjective()))) section.addSectionMetaData( SectionMetaDataIfc.OBJECTIVES, TextFormat.convertPlaintextToFormattedTextNoHighUnicode( log, sectionBean.getObjective())); if (!("".equals(sectionBean.getRubric()))) section.addSectionMetaData( SectionMetaDataIfc.RUBRICS, TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, sectionBean.getRubric())); if (!("".equals(sectionBean.getType()))) { section.addSectionMetaData(SectionDataIfc.AUTHOR_TYPE, sectionBean.getType()); if ((SectionDataIfc.RANDOM_DRAW_FROM_QUESTIONPOOL.toString()) .equals(sectionBean.getType())) { if ((sectionBean.getNumberSelected() != null) && !("".equals(sectionBean.getNumberSelected()))) { section.addSectionMetaData( SectionDataIfc.NUM_QUESTIONS_DRAWN, sectionBean.getNumberSelected()); } if (!("".equals(sectionBean.getSelectedPool()))) { section.addSectionMetaData( SectionDataIfc.POOLID_FOR_RANDOM_DRAW, sectionBean.getSelectedPool()); String poolname = ""; QuestionPoolService qpservice = new QuestionPoolService(); QuestionPoolFacade poolfacade = qpservice.getPool( new Long(sectionBean.getSelectedPool()), AgentFacade.getAgentString()); if (poolfacade != null) { poolname = poolfacade.getTitle(); } section.addSectionMetaData(SectionDataIfc.POOLNAME_FOR_RANDOM_DRAW, poolname); } section.addSectionMetaData( SectionDataIfc.RANDOMIZATION_TYPE, sectionBean.getRandomizationType()); } } if (addItemsFromPool) { boolean hasRandomPartScore = false; Double score = null; String requestedScore = sectionBean.getRandomPartScore(); if (requestedScore != null && !requestedScore.equals("")) { hasRandomPartScore = true; score = new Double(requestedScore); } boolean hasRandomPartDiscount = false; Double discount = null; String requestedDiscount = sectionBean.getRandomPartDiscount(); if (requestedDiscount != null && !requestedDiscount.equals("")) { hasRandomPartDiscount = true; discount = new Double(requestedDiscount); } if (hasRandomPartScore && score != null) { section.addSectionMetaData(SectionDataIfc.POINT_VALUE_FOR_QUESTION, score.toString()); } else { section.addSectionMetaData(SectionDataIfc.POINT_VALUE_FOR_QUESTION, ""); } if (hasRandomPartDiscount && discount != null) { section.addSectionMetaData( SectionDataIfc.DISCOUNT_VALUE_FOR_QUESTION, discount.toString()); } else { section.addSectionMetaData(SectionDataIfc.DISCOUNT_VALUE_FOR_QUESTION, ""); } } } assessmentService.saveOrUpdateSection(section); if (addItemsFromPool) { // update random questions from question pool int success = assessmentService.updateRandomPoolQuestions( assessmentService.getSection(section.getSectionId().toString())); if (success != AssessmentService.UPDATE_SUCCESS) { if (success == AssessmentService.UPDATE_ERROR_DRAW_SIZE_TOO_LARGE) { // shouldn't get here since there is a check, but might as well verify String err = ContextUtil.getLocalizedString( "org.sakaiproject.tool.assessment.bundle.AuthorMessages", "qdrawn_error"); context.addMessage( null, new FacesMessage( err + " " + section.getSectionMetaDataByLabel(SectionDataIfc.NUM_QUESTIONS_DRAWN))); } } } // added by daisyf, 10/10/06 updateAttachment( section.getSectionAttachmentList(), sectionBean.getAttachmentList(), section.getData()); // #2 - goto editAssessment.jsp, so reset assessmentBean AssessmentIfc assessment = assessmentService.getAssessment(Long.valueOf(assessmentBean.getAssessmentId())); assessmentBean.setAssessment(assessment); assessmentService.updateAssessmentLastModifiedInfo(assessment); EventTrackingService.post( EventTrackingService.newEvent( "sam.assessment.revise", "siteId=" + AgentFacade.getCurrentSiteId() + ", sectionId=" + section.getSectionId(), true)); }
/** * copy of method in AuthoringHelper with persistence turned off. Import an XML document in QTI * format, extract and persist the data. * * @param document the document * @return a persisted assessment */ public AssessmentFacade createImportedAssessment(Document document) { // if(log.isDebugEnabled()) // { log.info( // log.debug( document == null ? "DOCUMENT IS NULL IN createPublishedAssessment( Document)" : "createPublishedAssessment(Document)"); // } // AssessmentFacade assessment = null; AssessmentFacade assessment = new AssessmentFacade(); try { // create the assessment, later we'll add tests of 2.0 ExtractionHelper exHelper = new ExtractionHelper(QTIVersion.VERSION_1_2); exHelper.setOverridePath(xslPath); // we need to know who we are String me = "admin"; // AgentFacade.getAgentString(); // AssessmentService assessmentService = new AssessmentService(); // ItemService itemService = new ItemService(); Assessment assessmentXml = new Assessment(document); Map assessmentMap = exHelper.mapAssessment(assessmentXml); assessment = new AssessmentFacade(); // exHelper.createAssessment(assessmentMap); // update the remaining assessment properties exHelper.updateAssessment(assessment, assessmentMap); // make sure required fields are set assessment.setCreatedBy(me); assessment.setCreatedDate(assessment.getCreatedDate()); assessment.setLastModifiedBy(me); assessment.setLastModifiedDate(assessment.getCreatedDate()); assessment.setTypeId(TypeIfc.QUIZ); assessment.setStatus(new Integer(1)); // process each section and each item within each section List sectionList = exHelper.getSectionXmlList(assessmentXml); // log.debug("found: " + sectionList.size() + "sections"); log.debug("sections=" + sectionList.size()); for (int sec = 0; sec < sectionList.size(); sec++) // for each section... { Section sectionXml = (Section) sectionList.get(sec); Map sectionMap = exHelper.mapSection(sectionXml); log.debug("SECTION MAP=" + sectionMap); // create the assessment section SectionFacade section = new SectionFacade(); // assessmentService.addSection("" + assessment.getAssessmentId()); exHelper.updateSection(section, sectionMap); // make sure we are the creator log.debug("section " + section.getTitle() + "created by '" + me + "'."); section.setCreatedBy(me); section.setCreatedDate(assessment.getCreatedDate()); section.setLastModifiedBy(me); section.setLastModifiedDate(assessment.getCreatedDate()); section.setTypeId(TypeIfc.DEFAULT_SECTION); section.setStatus(new Integer(1)); // set the sequence section.setSequence(new Integer(sec + 1)); // // add the section to the assessment // section.setAssessmentId(assessment.getAssessmentId());//many to one // section.setAssessment(assessment); // assessment.getSectionArray().add(section);// one to many List itemList = exHelper.getItemXmlList(sectionXml); for (int itm = 0; itm < itemList.size(); itm++) // for each item { log.debug("items=" + itemList.size()); Item itemXml = (Item) itemList.get(itm); Map itemMap = exHelper.mapItem(itemXml); log.debug("ITEM MAP=" + itemMap); ItemFacade item = new ItemFacade(); exHelper.updateItem(item, itemMap); // make sure required fields are set item.setCreatedBy(me); item.setCreatedDate(assessment.getCreatedDate()); item.setLastModifiedBy(me); item.setLastModifiedDate(assessment.getCreatedDate()); log.debug("ITEM TYPE IS: " + item.getTypeId()); item.setStatus(ItemDataIfc.ACTIVE_STATUS); // assign the next sequence number item.setSequence(new Integer(itm + 1)); // add item to section item.setSection(section); // one to many section.addItem(item); // many to one // itemService.saveItem(item); // debugging // Set metaSet = item.getItemMetaDataSet(); // Iterator iter = metaSet.iterator(); // if (log.isDebugEnabled()) // { // while (iter.hasNext()) // { // ItemMetaData meta = (ItemMetaData) iter.next(); // log.debug("ITEM DEBUG meta " + meta.getLabel() + // "=" + meta.getEntry()); // } // } log.debug("ITEM: ans key" + item.getAnswerKey()); log.debug("ITEM: correct feed" + item.getCorrectItemFeedback()); log.debug("ITEM: incorrect feed " + item.getInCorrectItemFeedback()); log.debug("ITEM: by " + item.getCreatedBy()); log.debug("ITEM: date" + item.getCreatedDate()); log.debug("ITEM: desc " + item.getDescription()); log.debug("ITEM: duration" + item.getDuration()); log.debug("ITEM: general feed " + item.getGeneralItemFeedback()); log.debug("ITEM: incorrect " + item.getInCorrectItemFeedback()); log.debug("ITEM: is true " + item.getIsTrue()); log.debug("ITEM DEBUG item text" + item.getText()); log.debug("ITEM: item text" + item.getText()); } // ... end for each item } // ... end for each section log.debug("assessment created by '" + assessment.getCreatedBy() + "'."); // assessmentService.update(assessment); // debugging log.debug("ASSESSMENT: meta " + assessment.getAssessmentMetaDataMap()); log.debug("ASSESSMENT: feed " + assessment.getAssessmentFeedback()); log.debug("ASSESSMENT: comments " + assessment.getComments()); log.debug("ASSESSMENT: by " + assessment.getCreatedBy()); log.debug("ASSESSMENT: by date " + assessment.getCreatedDate()); log.debug("ASSESSMENT: desc" + assessment.getDescription()); log.debug("ASSESSMENT: disp " + assessment.getDisplayName()); log.debug("ASSESSMENT: last by " + assessment.getLastModifiedBy()); log.debug("ASSESSMENT: last date" + assessment.getLastModifiedDate()); log.debug("ASSESSMENT: mult " + assessment.getMultipartAllowed()); log.debug("ASSESSMENT: title " + assessment.getTitle()); log.debug("ASSESSMENT DEBUG title " + assessment.getTitle()); // assessmentService.saveAssessment(assessment); } catch (RuntimeException e) { log.error(e.getMessage(), e); throw new RuntimeException(e); } return assessment; }