Example #1
0
  /** 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";
  }
  /**
   * 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;
  }