Package org.olat.ims.qti.export.helper

Source Code of org.olat.ims.qti.export.helper.ItemWithResponseLid

/**
* OLAT - Online Learning and Training<br>
* http://www.olat.org
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
* University of Zurich, Switzerland.
* <p>
*/

package org.olat.ims.qti.export.helper;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Element;
import org.olat.ims.qti.QTIResult;
import org.olat.ims.qti.QTIResultManager;
import org.olat.ims.qti.editor.beecom.parser.ItemParser;


/**
* @author
*/

public class ItemWithResponseLid implements QTIItemObject{
  private boolean isSingle;
  private String itemIdent = null;
  private String itemTitle = null;
  private String itemMinValue = null;
  private String itemMaxValue = null;
  private String itemCutValue = null;
  private String positionsOfResponses = null;
  private List responseColumnHeaders = new ArrayList(5);
  private List responseLabelIdents = new ArrayList(5);
  private List responseLabelMaterials = new ArrayList(5);
 
 
  /**
   * Constructor for ItemWithResponseLid.
   * @param el_item
   */
  public ItemWithResponseLid(Element el_item) {
    this.itemTitle = el_item.attributeValue("title");
    this.itemIdent = el_item.attributeValue("ident");
   
    List responseLids= el_item.selectNodes(".//response_lid");
    int i = 1;
    for (Iterator itresponseLid = responseLids.iterator(); itresponseLid.hasNext();) { 
      Element el_responseLid = (Element) itresponseLid.next();
      isSingle = el_responseLid.attributeValue("rcardinality").equals("Single");
     
      List labels = el_responseLid.selectNodes(".//response_label");
      Element decvar = (Element) el_item.selectSingleNode(".//outcomes/decvar");
      if (decvar != null){
        this.itemMinValue = decvar.attributeValue("minvalue");
        this.itemMaxValue = decvar.attributeValue("maxvalue");
        this.itemCutValue = decvar.attributeValue("cutvalue");
      }
     
      for (Iterator itlabel = labels.iterator(); itlabel.hasNext();) {
        Element el_label = (Element) itlabel.next();
        String sIdent = el_label.attributeValue("ident");
        responseLabelIdents.add(sIdent);
       
        List materials = el_label.selectNodes(".//mattext");
        StringBuilder mat = new StringBuilder();
        for (Iterator itmaterial = materials.iterator(); itmaterial.hasNext();) {
          Element el_material = (Element) itmaterial.next();
          mat.append(el_material.getText());
        }
        responseLabelMaterials.add(mat.length() == 0 ? "IDENT: " + sIdent : mat.toString());       
        responseColumnHeaders.add((isSingle ? "R" : "C") + i); // R -> Radio button, C -> Check box
        i++;
      }
     
    }
   
  }
 
  /**
   * @see org.olat.ims.qti.export.helper.QTIItemObject#getNumColumnHeaders()
   */
  public int getNumColumnHeaders(){
    return responseColumnHeaders.size()
  }

  /**
   * @see org.olat.ims.qti.export.helper.QTIItemObject#extractQTIResult(java.util.List)
   */
  public QTIResult extractQTIResult(List resultSet) {
    for (Iterator iter = resultSet.iterator(); iter.hasNext();) {
      QTIResult element = (QTIResult) iter.next();
      if(element.getItemIdent().equals(itemIdent)){
        resultSet.remove(element);
        return element;
      }
    }
    return null;
  }
 
  private void addTextAndTabs(List responseColumns, String s, int num){
    for (int i = 0; i < num; i++) {
      responseColumns.add(s);
   
  }

  public String getItemTitle() {
    return itemTitle;
  }

  public List getResponseColumnHeaders() {
    return responseColumnHeaders;
  }

  /**
   *
   * @see org.olat.ims.qti.export.helper.QTIItemObject#getResponseColumns(org.olat.ims.qti.QTIResult)
   */
  public List getResponseColumns(QTIResult qtiresult) {
    List responseColumns = new ArrayList();
    positionsOfResponses = null;
    if (qtiresult == null){
      // item has not been choosen
      addTextAndTabs(responseColumns, "", getNumColumnHeaders());
    } else {
      String answer = qtiresult.getAnswer();
      // item submitted without choosing any checkboxes at all
      boolean submittedWithoutChoosing = answer.equals("[]");
      // test started and finished without submitting item
      boolean finishedWithoutSubmitting = answer.equals("");
     
      if (finishedWithoutSubmitting){
        addTextAndTabs(responseColumns, "", getNumColumnHeaders());
        return responseColumns;
      }
      String itemIdentifier = qtiresult.getItemIdent();
     
      // special case KPRIM
      if (itemIdentifier.startsWith(ItemParser.ITEM_PREFIX_KPRIM)){
        List answerList = QTIResultManager.parseResponseLidAnswers(answer);
        StringBuilder sb = new StringBuilder();

        int pos = 0;
        boolean firstAppendDone = false;
        for (Iterator iter = responseLabelIdents.iterator(); iter.hasNext();) {
          String labelid = (String) iter.next();
          boolean foundLabelId = false;
          for (Iterator iterator = answerList.iterator(); iterator.hasNext();) {
            String answerid = (String) iterator.next();
            if(answerid.startsWith(labelid)){
              pos++;
              if (answerid.endsWith("correct")){
                responseColumns.add("+");
                if (firstAppendDone){
                  sb.append(" ");
                }
                sb.append(String.valueOf(pos));
                pos++;
              }
              else {
                responseColumns.add("-");
                if (firstAppendDone){
                  sb.append(" ");
                }
                pos++;
                sb.append(String.valueOf(pos));
              }
              firstAppendDone = true;
              foundLabelId = true;
            }
          }
          if (!foundLabelId){
            responseColumns.add(".");
            if (firstAppendDone) sb.append(" ");
            sb.append("0");
            firstAppendDone = true;
            pos = pos + 2;
          }
        }
        positionsOfResponses = sb.toString();
      }
      else if (submittedWithoutChoosing){
        addTextAndTabs(responseColumns, ".", getNumColumnHeaders());
        positionsOfResponses = null;
      }
      else if (finishedWithoutSubmitting){
        addTextAndTabs(responseColumns, "", getNumColumnHeaders());
      }
      else {
        List answerList = QTIResultManager.parseResponseLidAnswers(answer);
        StringBuilder sb = new StringBuilder();
        int pos = 1;
        boolean firstLoopDone = false;
        for (Iterator iter = responseLabelIdents.iterator(); iter.hasNext();) {
          String element = (String) iter.next();
          if (answerList.contains(element)) {
            responseColumns.add("1");
            if (firstLoopDone){
              sb.append(" ");
            }
            sb.append(String.valueOf(pos));
            firstLoopDone = true;
          } else {
            responseColumns.add("0");
          }
          pos++;
        }
        positionsOfResponses = sb.toString();
      }   
    }
   
    return responseColumns;
  }

  public TYPE getItemType() {
    return isSingle ? TYPE.R : TYPE.C;
  }

  public List getResponseIdentifier() {
    return responseLabelIdents;
  }

  public List getResponseLabelMaterials() {
    return responseLabelMaterials;
  }

  /**
   *
   * @see org.olat.ims.qti.export.helper.QTIItemObject#getItemIdent()
   */
  public String getItemIdent() {
    return itemIdent;
  }

  public String getItemMinValue() {
    return itemMinValue;
  }

  public String getItemMaxValue() {
    return itemMaxValue;
  }

  public String getItemCutValue() {
    return itemCutValue;
  }

  public boolean hasPositionsOfResponses() {
    return true;
  }

  public String getPositionsOfResponses() {
    return positionsOfResponses;
  }
 
}    


TOP

Related Classes of org.olat.ims.qti.export.helper.ItemWithResponseLid

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.