/**
* 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 java.util.Map;
import org.dom4j.Element;
import org.olat.ims.qti.QTIResult;
import org.olat.ims.qti.QTIResultManager;
/**
* @author
*/
public class ItemWithResponseStr implements QTIItemObject{
private boolean isEssay = true;
private String itemIdent = null;
private String itemTitle = null;
private String itemMinValue = null;
private String itemMaxValue = null;
private String itemCutValue = null;
private List responseColumnHeaders = new ArrayList(5);
private List responseStrIdents = new ArrayList(5);
/**
* Constructor for ItemWithResponseLid.
* @param el_item
*/
public ItemWithResponseStr(Element el_item) {
this.itemTitle = el_item.attributeValue("title");
this.itemIdent = el_item.attributeValue("ident");
List el_responseStrs = el_item.selectNodes(".//response_str");
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");
}
int i = 1;
for (Iterator itRespStr = el_responseStrs.iterator(); itRespStr.hasNext();) {
Element el_respStr = (Element) itRespStr.next();
responseStrIdents.add(el_respStr.attributeValue("ident"));
Element render_fib = el_respStr.element("render_fib");
if(render_fib != null){
isEssay = (render_fib.attributeValue("rows") == null) ? false : true;
responseColumnHeaders.add((isEssay ? "A" : "B") + i); // A -> Area, B -> Blank
}
else {
responseColumnHeaders.add("unknownType");
}
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);
}
}
/**
*
* @return itemTitle
*/
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();
if (qtiresult == null){
// item has not been choosen
addTextAndTabs(responseColumns, "", getNumColumnHeaders());
}else{
String answer = qtiresult.getAnswer();
if (answer.length() == 0) addTextAndTabs(responseColumns, ".", getNumColumnHeaders());
else {
Map answerMap = QTIResultManager.parseResponseStrAnswers(answer);
for (Iterator iter = responseStrIdents.iterator(); iter.hasNext();) {
String element = (String) iter.next();
if (answerMap.containsKey(element)) {
responseColumns.add(answerMap.get(element));
} else {
// should not happen
}
}
}
}
return responseColumns;
}
public TYPE getItemType() {
return isEssay ? TYPE.A : TYPE.B; // A -> Area, B -> Blank
}
/**
*
* @see org.olat.ims.qti.export.helper.QTIItemObject#getResponseIdentifier()
*/
public List getResponseIdentifier() {
return responseStrIdents;
}
public List getResponseLabelMaterials() {
return null;
}
/**
*
* @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 false;
}
public String getPositionsOfResponses() {
return null;
}
}