@@ -123,34 +167,14 @@
<%@ include file="/jsf/author/item/attachment.jsp" %>
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
+
@@ -159,32 +183,39 @@
-
+
-
-
+
+
-
+
-
+
+
-
+
@@ -193,7 +224,35 @@
-
+
+
+
+
+
+-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -312,8 +371,6 @@
-
-
Index: samigo-app/src/webapp/jsf/author/item/itemHeadings.jsp
===================================================================
--- samigo-app/src/webapp/jsf/author/item/itemHeadings.jsp (revision 180)
+++ samigo-app/src/webapp/jsf/author/item/itemHeadings.jsp (revision 201)
@@ -124,7 +124,7 @@
<%-- not from qpool , show the last option: copy from question pool --%>
-
@@ -145,7 +145,7 @@
-
+
Index: samigo-app/src/webapp/jsf/author/preview_item/MultipleChoiceSingleCorrect.jsp
===================================================================
--- samigo-app/src/webapp/jsf/author/preview_item/MultipleChoiceSingleCorrect.jsp (revision 180)
+++ samigo-app/src/webapp/jsf/author/preview_item/MultipleChoiceSingleCorrect.jsp (revision 201)
@@ -25,6 +25,11 @@
-->
+
+
+
+
+
<%@ include file="/jsf/author/preview_item/attachment.jsp" %>
Index: samigo-app/src/webapp/js/authoring.js
===================================================================
--- samigo-app/src/webapp/js/authoring.js (revision 180)
+++ samigo-app/src/webapp/js/authoring.js (revision 201)
@@ -101,26 +101,101 @@
// this is for multiple choice authoring. uncheck all other radio buttons when one is checked, to make it behave like they are in an array.
+/*function uncheckOthers(field){
+ var fieldname = field.getAttribute("name");
+ var tables= document.getElementsByTagName("TABLE");
+
+ for (var i = 0; i < tables.length; i++) {
+ if ( tables[i].id.indexOf("mcradiobtn") >=0){
+ var radiobtn = tables[i].getElementsByTagName("INPUT")[0];
+ // go through the radio buttons, if it's the one clicked on, uncheck all others
+ if (fieldname!=radiobtn.getAttribute("name")){
+ radiobtn.checked = false;
+ }
+ }
+ }
+
+ var selectId = field.getAttribute("value");
+ var inputhidden = document.getElementById("itemForm:selectedRadioBtn");
+ inputhidden.setAttribute("value", selectId);
+
+ }*/
+function resetPartialCreditValue(){
+ var pTables= document.getElementsByTagName("TABLE");
+ for (var i = 0; i < pTables.length; i++) {
+ if ( pTables[i].id.indexOf("partialCreditInput") >=0){
+ var pcInput = pTables[i].getElementsByTagName("INPUT")[0];
+ var pcInputVal=pcInput.valueOf().value;
+ var fltpcValue= parseFloat(pcInputVal);
+ if(fltpcValue<100||isNaN(fltpcValue)){
+ pcInput.valueOf().value="0.0";
+ }
+ }
+}
+}
function uncheckOthers(field){
- var fieldname = field.getAttribute("name");
- var tables= document.getElementsByTagName("TABLE");
+ var fieldname = field.getAttribute("name");
+ var tables= document.getElementsByTagName("TABLE");
+ var prevCorrectBtn=null;
- for (var i = 0; i < tables.length; i++) {
- if ( tables[i].id.indexOf("mcradiobtn") >=0){
- var radiobtn = tables[i].getElementsByTagName("INPUT")[0];
-// go through the radio buttons, if it's the one clicked on, uncheck all others
- if (fieldname!=radiobtn.getAttribute("name")){
- radiobtn.checked = false;
+ for (var i = 0; i < tables.length; i++) {
+ if ( tables[i].id.indexOf("mcradiobtn") >=0){
+ var radiobtn = tables[i].getElementsByTagName("INPUT")[0];
+ if (fieldname!=radiobtn.getAttribute("name")){
+ if(radiobtn.checked){
+ prevCorrectBtn=radiobtn.getAttribute("name");
+ radiobtn.checked = false;
+ }
+ else{
+ radiobtn.checked = false;
+ }
+ }
+ }
}
- }
+ var selectId = field.getAttribute("value");
+ var inputhidden = document.getElementById("itemForm:selectedRadioBtn");
+ inputhidden.setAttribute("value", selectId);
+ swtichPartialCredit(fieldname,prevCorrectBtn );
+
+ }
+ function swtichPartialCredit(newCorrect,oldCorrect){
+ var toggleDiv=document.getElementById('partialCredit_toggle');
+ if( typeof(toggleDiv) == 'undefined' ||toggleDiv == null){
+ return;
}
-
-var selectId = field.getAttribute("value");
-var inputhidden = document.getElementById("itemForm:selectedRadioBtn");
-inputhidden.setAttribute("value", selectId);
-
-}
+ else{
+ //setting old one to zero
+ if(oldCorrect!=null && oldCorrect!='undefined'){
+ var position= oldCorrect.split(":");
+ var prevcorrId="itemForm:mcchoices:"+position[2]+":partialCredit";
+ var pInput= document.getElementById(prevcorrId);
+ pInput.valueOf().value=0;
+ pInput.style.borderStyle = "solid double";
+ pInput.style.borderColor="red";
+ pInput.focus();
+ var reminderTextId="itemForm:mcchoices:"+position[2]+":partialCreditReminder";
+ var reminderTexElement= document.getElementById(reminderTextId);
+ reminderTexElement.style.visibility="visible"
+ }
+ else{;}
+ //setting new one to 100
+
+ position= newCorrect.split(":");
+ var currCorrId="itemForm:mcchoices:"+position[2]+":partialCredit";
+ var correctPInput= document.getElementById(currCorrId);
+ correctPInput.valueOf().value=100;
+ }
+ }
+ function verifyPCValue(partialCreditInput){
+ var pcValue=partialCreditInput.valueOf().value;
+ var fltValue= parseFloat(pcValue);
+ if(fltValue >100||isNaN(fltValue))
+ {
+ partialCreditInput.valueOf().value="0.0"
+ }
+
+}
function resetInsertAnswerSelectMenus(){
var selectlist = document.getElementsByTagName("SELECT");
@@ -129,6 +204,13 @@
selectlist[i].value = 0;
}
}
+
+ var toggleDiv=document.getElementById('partialCredit_toggle');
+ if( typeof(toggleDiv) == 'undefined' || toggleDiv == null){ return;}
+ else{
+ var QtypeTable=document.getElementById('itemForm:chooseAnswerTypeForMC');
+ QtypeTable.rows[0].cells[0].appendChild(toggleDiv);
+ }
}
@@ -189,3 +271,14 @@
}
}
}
+//Author Mustansar Mehmood
+//mustansar@rice.edu
+function relocatePartialCreditToggle(){
+ var toggleDiv=document.getElementById('partialCredit_toggle');
+ if( typeof(toggleDiv) == 'undefined' || toggleDiv == null){ return;}
+ else{
+ var QtypeTable=document.getElementById('itemForm:chooseAnswerTypeForMC');
+ QtypeTable.rows[0].cells[0].appendChild(toggleDiv);
+ }
+}
+
Index: samigo-archive/sam-handlers/pom.xml
===================================================================
--- samigo-archive/sam-handlers/pom.xml (revision 180)
+++ samigo-archive/sam-handlers/pom.xml (revision 201)
@@ -25,12 +25,12 @@
sakai-kernel-api
- org.sakaiproject
- sakai-import-api
+ org.sakaiproject.common
+ archive-api
- org.sakaiproject
- sakai-import-impl
+ org.sakaiproject.common
+ import-impl
@@ -68,3 +68,4 @@
+
Index: samigo-services/src/java/org/sakaiproject/tool/assessment/facade/TypeFacade.java
===================================================================
--- samigo-services/src/java/org/sakaiproject/tool/assessment/facade/TypeFacade.java (revision 180)
+++ samigo-services/src/java/org/sakaiproject/tool/assessment/facade/TypeFacade.java (revision 201)
@@ -49,6 +49,7 @@
public static final Long FILL_IN_NUMERIC = Long.valueOf(11);
public static final Long MATCHING = Long.valueOf(9);
public static final Long MULTIPLE_CORRECT_SINGLE_SELECTION = Long.valueOf(12);
+ //public static final Long MULTIPLE_CHOICE_SINGLE_SELECTION_WITH_PARTIAL_CREDIT=Long.valueOf(13);
// these are section type available in this site,
public static final Long DEFAULT_SECTION = Long.valueOf(21);
// these are assessment template type available in this site,
Index: samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ItemFacadeQueries.java
===================================================================
--- samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ItemFacadeQueries.java (revision 180)
+++ samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ItemFacadeQueries.java (revision 201)
@@ -369,14 +369,20 @@
HashSet answerSet1 = new HashSet();
HashSet answerFeedbackSet1 = new HashSet();
Answer answer1 = new Answer(text1, "2 legs", Long.valueOf(1), "i",
- Boolean.FALSE, null, Float.valueOf(0), Float.valueOf(0));
+ Boolean.FALSE, null, Float.valueOf(0),
+ new Float(0.0),//partical credit,
+ Float.valueOf(0));
answerFeedbackSet1.add(new AnswerFeedback(answer1, "incorrect", "sorry"));
answer1.setAnswerFeedbackSet(answerFeedbackSet1);
answerSet1.add(answer1);
answerSet1.add(new Answer(text1, "3 legs", Long.valueOf(2), "ii",
- Boolean.FALSE, null, Float.valueOf(0), Float.valueOf(0)));
+ Boolean.FALSE, null, Float.valueOf(0),
+ new Float(0.0),//partical credit
+ Float.valueOf(0)));
answerSet1.add(new Answer(text1, "4 legs", Long.valueOf(3), "iii",
- Boolean.TRUE, null, Float.valueOf(5), Float.valueOf(0)));
+ Boolean.TRUE, null, Float.valueOf(5),
+ new Float(0.0),//partical credit
+ Float.valueOf(0)));
text1.setAnswerSet(answerSet1);
textSet.add(text1);
@@ -387,11 +393,17 @@
text2.setText("chicken has");
HashSet answerSet2 = new HashSet();
answerSet2.add(new Answer(text2, "2 legs", Long.valueOf(1), "i",
- Boolean.TRUE, null, Float.valueOf(5), Float.valueOf(0)));
+ Boolean.TRUE, null, Float.valueOf(5),
+ new Float(0.0),//partical credit
+ Float.valueOf(0)));
answerSet2.add(new Answer(text2, "3 legs", Long.valueOf(2), "ii",
- Boolean.FALSE, null, Float.valueOf(0), Float.valueOf(0)));
+ Boolean.FALSE, null, Float.valueOf(0),
+ new Float(0.0),//partical credit
+ Float.valueOf(0)));
answerSet2.add(new Answer(text2, "4 legs", Long.valueOf(3), "iii",
- Boolean.FALSE, null, Float.valueOf(0), Float.valueOf(0)));
+ Boolean.FALSE, null, Float.valueOf(0),
+ new Float(0.0),//partical credit
+ Float.valueOf(0)));
text2.setAnswerSet(answerSet2);
textSet.add(text2);
@@ -401,11 +413,17 @@
text3.setText("baby has");
HashSet answerSet3 = new HashSet();
answerSet3.add(new Answer(text3, "2 legs", Long.valueOf(1), "i",
- Boolean.FALSE, null, Float.valueOf(0), Float.valueOf(0)));
+ Boolean.FALSE, null, Float.valueOf(0),
+ new Float(0.0),//partical credit
+ Float.valueOf(0)));
answerSet3.add(new Answer(text3, "3 legs", Long.valueOf(2), "ii",
- Boolean.FALSE, null, Float.valueOf(0), Float.valueOf(0)));
+ Boolean.FALSE, null, Float.valueOf(0),
+ new Float(0.0),//partical credit
+ Float.valueOf(0)));
answerSet3.add(new Answer(text3, "4 legs", Long.valueOf(3), "iii",
- Boolean.TRUE, null, Float.valueOf(5), Float.valueOf(0)));
+ Boolean.TRUE, null, Float.valueOf(5),
+ new Float(0.0),//partical credit
+ Float.valueOf(0)));
text3.setAnswerSet(answerSet3);
textSet.add(text3);
return textSet;
@@ -441,6 +459,7 @@
item.setCreatedDate(new Date());
item.setLastModifiedBy("1");
item.setLastModifiedDate(new Date());
+
// prepare itemText
item.setItemTextSet(prepareText((ItemData)item.getData()));
@@ -471,6 +490,16 @@
public ItemFacade saveItem(ItemFacade item) throws DataFacadeException {
try{
+ /*diagnostic code for partial credit
+ * ArrayList al1= item.getItemTextArray();
+ ItemText iText=null;
+ Iterator it = al1.iterator();
+ //we need to figure out what is there in the item;
+
+ while(it.hasNext()){
+ iText=(ItemText)it.next();
+ }
+ ArrayList al= iText.getAnswerArray();*/
ItemDataIfc itemdata = (ItemDataIfc) item.getData();
itemdata.setLastModifiedDate(new Date());
itemdata.setLastModifiedBy(AgentFacade.getAgentString());
Index: samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ItemFacade.java
===================================================================
--- samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ItemFacade.java (revision 180)
+++ samigo-services/src/java/org/sakaiproject/tool/assessment/facade/ItemFacade.java (revision 201)
@@ -79,6 +79,7 @@
protected Float score;
protected Float discount;
protected String hint;
+ protected Boolean partialCreditFlag;
protected Boolean hasRationale;
protected Integer status;
protected String createdBy;
@@ -517,7 +518,20 @@
this.hasRationale = hasRationale;
this.data.setHasRationale(hasRationale);
}
-
+ public void setPartialCreditFlag(Boolean partialCreditFlag){
+ this.partialCreditFlag=partialCreditFlag;
+ this.data.setPartialCreditFlag(partialCreditFlag);
+
+ }
+ public Boolean getPartialCreditFlag(){
+ try {
+ this.data = (ItemDataIfc) item.getData();
+ }
+ catch (AssessmentException ex) {
+ throw new DataFacadeException(ex.getMessage());
+ }
+ return this.data.getPartialCreditFlag();
+ }
/**
* Get status of ItemFacade. 1 = active, 0 = inactive
* @return
Index: samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueries.java
===================================================================
--- samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueries.java (revision 180)
+++ samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueries.java (revision 201)
@@ -407,7 +407,7 @@
.getLastModifiedBy(), item.getLastModifiedDate(),
null, null, null, // set ItemTextSet, itemMetaDataSet and
// itemFeedbackSet later
- item.getTriesAllowed());
+ item.getTriesAllowed(), item.getPartialCreditFlag());
Set publishedItemTextSet = preparePublishedItemTextSet(
publishedItem, item.getItemTextSet());
Set publishedItemMetaDataSet = preparePublishedItemMetaDataSet(
@@ -608,7 +608,9 @@
PublishedAnswer publishedAnswer = new PublishedAnswer(
publishedItemText, answer.getText(), answer.getSequence(),
answer.getLabel(), answer.getIsCorrect(),
- answer.getGrade(), answer.getScore(), answer.getDiscount(), null);
+ answer.getGrade(), answer.getScore(),
+ answer.getPartialCredit(),//partical credit
+ answer.getDiscount(), null);
Set publishedAnswerFeedbackSet = preparePublishedAnswerFeedbackSet(
publishedAnswer, answer.getAnswerFeedbackSet());
publishedAnswer.setAnswerFeedbackSet(publishedAnswerFeedbackSet);
Index: samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentFacadeQueries.java
===================================================================
--- samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentFacadeQueries.java (revision 180)
+++ samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentFacadeQueries.java (revision 201)
@@ -2110,7 +2110,7 @@
.getLastModifiedBy(), item.getLastModifiedDate(),
null, null, null, // set ItemTextSet, itemMetaDataSet and
// itemFeedbackSet later
- item.getTriesAllowed());
+ item.getTriesAllowed(), item.getPartialCreditFlag());
Set newItemTextSet = prepareItemTextSet(newItem, item
.getItemTextSet());
Set newItemMetaDataSet = prepareItemMetaDataSet(newItem, item
@@ -2272,7 +2272,9 @@
Answer answer = (Answer) l.next();
Answer newAnswer = new Answer(newItemText, answer.getText(), answer
.getSequence(), answer.getLabel(), answer.getIsCorrect(),
- answer.getGrade(), answer.getScore(), answer.getDiscount(), null);
+ answer.getGrade(), answer.getScore(),
+ answer.getPartialCredit(),
+ answer.getDiscount(), null);
Set newAnswerFeedbackSet = prepareAnswerFeedbackSet(newAnswer,
answer.getAnswerFeedbackSet());
newAnswer.setAnswerFeedbackSet(newAnswerFeedbackSet);
Index: samigo-services/src/java/org/sakaiproject/tool/assessment/facade/QuestionPoolFacadeQueries.java
===================================================================
--- samigo-services/src/java/org/sakaiproject/tool/assessment/facade/QuestionPoolFacadeQueries.java (revision 180)
+++ samigo-services/src/java/org/sakaiproject/tool/assessment/facade/QuestionPoolFacadeQueries.java (revision 201)
@@ -51,6 +51,7 @@
import org.sakaiproject.tool.assessment.data.dao.questionpool.QuestionPoolItemData;
import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemDataIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemMetaDataIfc;
+import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemTextIfc;
import org.sakaiproject.tool.assessment.data.model.Tree;
import org.sakaiproject.tool.assessment.osid.shared.impl.IdImpl;
import org.sakaiproject.tool.assessment.services.ItemService;
@@ -1352,9 +1353,22 @@
Iterator answerIter = fromAnswerSet.iterator();
while (answerIter.hasNext()) {
Answer fromAnswer = (Answer) answerIter.next();
- Answer toAnswer = new Answer(toItemText, fromAnswer.getText(), fromAnswer.getSequence(), fromAnswer.getLabel(),
- fromAnswer.getIsCorrect(), fromAnswer.getGrade(), fromAnswer.getScore(), fromAnswer.getDiscount());
-
+ Answer toAnswer = new Answer(toItemText,
+ fromAnswer.getText(), fromAnswer.getSequence(), fromAnswer.getLabel(),
+ fromAnswer.getIsCorrect(), fromAnswer.getGrade(), fromAnswer.getScore(),
+ fromAnswer.getPartialCredit(),
+ fromAnswer.getDiscount());
+ /*
+ * public Answer(
+ * ItemTextIfc itemText,
+ * String text,
+ * Long sequence,
+ * String label,
+ Boolean isCorrect,
+ String grade,
+ Float score,
+ Float partialCredit,
+ Float discount) */
HashSet toAnswerFeedbackSet = new HashSet();
Set fromAnswerFeedbackSet = fromAnswer.getAnswerFeedbackSet();
Iterator answerFeedbackIter = fromAnswerFeedbackSet.iterator();
Index: samigo-services/src/java/org/sakaiproject/tool/assessment/services/ItemService.java
===================================================================
--- samigo-services/src/java/org/sakaiproject/tool/assessment/services/ItemService.java (revision 180)
+++ samigo-services/src/java/org/sakaiproject/tool/assessment/services/ItemService.java (revision 201)
@@ -235,7 +235,9 @@
item.getDescription(),item.getTypeId(),item.getGrade(),item.getScore(), item.getDiscount(),
item.getHint(),item.getHasRationale(),item.getStatus(),item.getCreatedBy(),
item.getCreatedDate(),item.getLastModifiedBy(),item.getLastModifiedDate(),
- null, null, null, item.getTriesAllowed());
+ null, null, null, item.getTriesAllowed(), item.getPartialCreditFlag()
+
+ );
// perform deep copy, set ItemTextSet, itemMetaDataSet and itemFeedbackSet
Set newItemTextSet = copyItemTextSet(cloned, item.getItemTextSet());
@@ -271,7 +273,9 @@
Answer newAnswer = new Answer(
newItemText, answer.getText(), answer.getSequence(),
answer.getLabel(),
- answer.getIsCorrect(), answer.getGrade(), answer.getScore(), answer.getDiscount(), null);
+ answer.getIsCorrect(), answer.getGrade(), answer.getScore(),
+ answer.getPartialCredit(),
+ answer.getDiscount(), null);
Set newAnswerFeedbackSet = copyAnswerFeedbackSet(
newAnswer, answer.getAnswerFeedbackSet());
newAnswer.setAnswerFeedbackSet(newAnswerFeedbackSet);
Index: samigo-services/src/java/org/sakaiproject/tool/assessment/services/PersistenceService.java
===================================================================
--- samigo-services/src/java/org/sakaiproject/tool/assessment/services/PersistenceService.java (revision 180)
+++ samigo-services/src/java/org/sakaiproject/tool/assessment/services/PersistenceService.java (revision 201)
@@ -213,6 +213,8 @@
}
catch(InterruptedException ex){
log.warn(ex.getMessage());
+ ex.printStackTrace();
+
}
}
else retryCount = 0;
Index: samigo-services/src/java/org/sakaiproject/tool/assessment/services/GradingService.java
===================================================================
--- samigo-services/src/java/org/sakaiproject/tool/assessment/services/GradingService.java (revision 180)
+++ samigo-services/src/java/org/sakaiproject/tool/assessment/services/GradingService.java (revision 201)
@@ -888,7 +888,17 @@
Long itemId = item.getItemId();
int type = itemType.intValue();
switch (type){
- case 1: // MC Single Correct
+ case 1:
+ if(item.getPartialCreditFlag())
+ autoScore = getAnswerScoreMCQ(itemGrading, publishedAnswerHash);
+ else{
+ autoScore = getAnswerScore(itemGrading, publishedAnswerHash);
+ }
+ //overridescore
+ if (itemGrading.getOverrideScore() != null)
+ autoScore += itemGrading.getOverrideScore().floatValue();
+ totalItems.put(itemId, new Float(autoScore));
+ break;// MC Single Correct
case 12: // MC Multiple Correct Single Selection
case 3: // MC Survey
case 4: // True/False
@@ -1019,6 +1029,8 @@
{
// return (float) 0;
// Para que descuente (For discount)
+
+
if ((TypeIfc.MULTIPLE_CHOICE).equals(itemType)||(TypeIfc.TRUE_FALSE).equals(itemType)){
return (answer.getDiscount().floatValue() * ((float) -1));
}else{
@@ -1027,7 +1039,28 @@
}
return answer.getScore().floatValue();
}
-
+ /**
+ * This grades multiple choice and true false questions. Since
+ * multiple choice/multiple select has a separate ItemGradingIfc for
+ * each choice, they're graded the same way the single choice are.
+ * BUT since we have Partial Credit stuff around we have to have a separate method here --mustansar
+ * Choices should be given negative score values if one wants them
+ * to lose points for the wrong choice.
+ */
+ public float getAnswerScoreMCQ(ItemGradingIfc data, HashMap publishedAnswerHash)
+ {
+ AnswerIfc answer = (AnswerIfc) publishedAnswerHash.get(data.getPublishedAnswerId());
+ if (answer == null || answer.getScore() == null)
+ return (float) 0;
+
+ else if (answer.getIsCorrect().booleanValue()){ // instead of using answer score Item score needs to be used here
+ return (answer.getItem().getScore().floatValue()); //--mustansar
+ }
+ return (answer.getItem().getScore().floatValue()*answer.getPartialCredit().floatValue())/(new Float(100.0).floatValue());
+ }
+
+
+
public void notifyGradebook(AssessmentGradingIfc data, PublishedAssessmentIfc pub) throws GradebookServiceException {
// If the assessment is published to the gradebook, make sure to update the scores in the gradebook
String toGradebook = pub.getEvaluationModel().getToGradeBook();
Index: samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/ExtractionHelper.java
===================================================================
--- samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/ExtractionHelper.java (revision 180)
+++ samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/ExtractionHelper.java (revision 201)
@@ -1283,6 +1283,7 @@
String hasRationale = item.getItemMetaDataByLabel("hasRationale");//rshastri :SAK-1824
String status = (String) itemMap.get("status");
String createdBy = (String) itemMap.get("createdBy");
+ String partialCreditFlag= (String)itemMap.get("PARTIAL_CREDIT");
// created by is not nullable
if (createdBy == null)
@@ -1320,7 +1321,15 @@
else {
item.setDiscount(Float.valueOf(0));
}
-
+
+ if (notNullOrEmpty( partialCreditFlag))
+ {
+ item.setPartialCreditFlag((Boolean.parseBoolean( partialCreditFlag)));
+ }
+ else {
+ item.setPartialCreditFlag((Boolean.FALSE));
+ }
+
item.setHint( (String) itemMap.get("hint"));
if (notNullOrEmpty(hasRationale))
{
@@ -1444,6 +1453,10 @@
List answerList = new ArrayList();
List aList = (List) itemMap.get("itemAnswer");
answerList = aList == null ? answerList : aList;
+ boolean MCSC=itemMap.get("itemIntrospect").equals("Multiple Choice");
+ List answerScoreList=new ArrayList();//--mustansar
+ List sList = (List) itemMap.get("answerScore");//--mustansar
+ answerScoreList = sList == null ? answerScoreList : sList; //--mustansar
HashSet answerSet = new HashSet();
char answerLabel = 'A';
List answerFeedbackList = (List) itemMap.get("itemAnswerFeedback");
@@ -1519,7 +1532,20 @@
answer.setAnswerFeedbackSet(set);
}
}
-
+ if(MCSC){
+ long index =answer.getSequence().longValue();
+ index=index - 1L;
+ int indexInteger= new Long(index).intValue();
+ String strPCredit= (String)answerScoreList.get(indexInteger );
+ float fltPCredit=new Float(strPCredit).floatValue();
+ Float pCredit=(fltPCredit/(item.getScore().floatValue()))*100;
+ if( pCredit.isNaN()){
+ answer.setPartialCredit(new Float(0.0));
+ }else{
+ answer.setPartialCredit(pCredit);
+ }
+ }
+ // if(answer.getPartialCredit())
answerSet.add(answer);
}
}
Index: samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/item/ItemHelper12Impl.java
===================================================================
--- samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/item/ItemHelper12Impl.java (revision 180)
+++ samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/item/ItemHelper12Impl.java (revision 201)
@@ -1614,8 +1614,25 @@
isInsert = false;
}
- addAnswerFeedback(itemXml, value,
- isInsert, xpathIndex, "" + label);
+ //addAnswerFeedback(itemXml, value, isInsert, xpathIndex, "" + label);
+ if(itemXml.isMCSC()){
+ //MC Single Correct
+ if(answer.getIsCorrect().booleanValue()){
+ answer.setPartialCredit(new Float(100.0));
+ addAnswerFeedbackPartialCredit(itemXml, value,
+ isInsert, xpathIndex, "" + label , new Float(((answer.getItem().getScore().floatValue())*answer.getPartialCredit().floatValue())/(new Float(100.0).floatValue())));
+ }//may have to move to itemAddListener.java --mustansar
+ else {
+
+ addAnswerFeedbackPartialCredit(itemXml, value,
+ isInsert, xpathIndex, "" + label , new Float(((answer.getItem().getScore().floatValue())*answer.getPartialCredit().floatValue())/(new Float(100.0)).floatValue())); //--mustansar
+ }
+ }
+ else
+ { // for MC Mulitiple Correct
+ addAnswerFeedback(itemXml, value,
+ isInsert, xpathIndex, "" + label );
+ }
label++;
xpathIndex++;
}
@@ -1625,7 +1642,35 @@
}
}
-
+ /**
+ * Adds feedback with ident referencing answer ident.
+ *
+ * @param itemXml
+ * @param value
+ * @param isInsert
+ * @param responseNo
+ * @param responseLabel
+ */
+ private void addAnswerFeedbackPartialCredit(Item itemXml, String value,
+ boolean isInsert, int responseNo,
+ String responseLabel, Float partialCredit)
+ {
+ log.debug("addAnswerFeedback()");
+ log.debug("answer feedback value: " + value);
+ if (value == null) {
+ value = "";
+ }
+ else {
+ value = "";
+ }
+ String respCond = "item/resprocessing/respcondition[" + responseNo + "]";
+
+ // updateItemXml(itemXml, respCond + "/setvar", "" + currentPerItemScore);
+ updateItemXml(itemXml, respCond + "/setvar", "" + partialCredit);
+ updateItemXml(itemXml,
+ respCond + "/displayfeedback[2]/@linkrefid", "AnswerFeedback");
+ updateItemXml(itemXml, respCond + "/displayfeedback[2]", value);
+ }
/**
* Adds feedback with idents of Correct and InCorrect
* @param itemXml
Index: samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/asi/Item.java
===================================================================
--- samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/asi/Item.java (revision 180)
+++ samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/asi/Item.java (revision 201)
@@ -183,6 +183,12 @@
{
setFieldentry("hasRationale", item.getHasRationale().toString());
}
+ if(item.getTypeId().equals(TypeIfc.MULTIPLE_CHOICE)&&item.getPartialCreditFlag()){
+ setFieldentry("PARTIAL_CREDIT", "TRUE");
+
+ }else{
+ setFieldentry("PARTIAL_CREDIT", "FALSE");
+ }
// rshastri: SAK-1824
// item data
// ItemHelper helper = new ItemHelper();
Index: samigo-audio/.classpath
===================================================================
--- samigo-audio/.classpath (revision 180)
+++ samigo-audio/.classpath (revision 201)
@@ -1,7 +1,7 @@
-
+
-
+
\ No newline at end of file
Index: samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/PublishedItemData.hbm.xml
===================================================================
--- samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/PublishedItemData.hbm.xml (revision 180)
+++ samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/PublishedItemData.hbm.xml (revision 201)
@@ -25,6 +25,7 @@
+
@@ -105,6 +106,8 @@
+
+
Index: samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ItemData.hbm.xml
===================================================================
--- samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ItemData.hbm.xml (revision 180)
+++ samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ItemData.hbm.xml (revision 201)
@@ -22,6 +22,8 @@
+
+
@@ -116,6 +118,7 @@
+
Index: samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/Answer.java
===================================================================
--- samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/Answer.java (revision 180)
+++ samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/Answer.java (revision 201)
@@ -50,13 +50,15 @@
private String grade;
private Float score;
private Float discount;
+ private Float partialCredit=new Float(0.0); //--mustansar
+ // private boolean partialCreditFlag ;
private Set answerFeedbackSet;
private HashMap answerFeedbackMap;
private ItemData dat=new ItemData();
public Answer() {}
public Answer(ItemTextIfc itemText, String text, Long sequence, String label,
- Boolean isCorrect, String grade, Float score, Float discount) {
+ Boolean isCorrect, String grade, Float score, Float partialCredit, Float discount) {
this.itemText = itemText;
this.item = itemText.getItem();
this.text = text;
@@ -65,11 +67,13 @@
this.isCorrect = isCorrect;
this.grade = grade;
this.score = score;
+ this.partialCredit=partialCredit;
this.discount=discount;
+
}
public Answer(ItemTextIfc itemText, String text, Long sequence, String label,
- Boolean isCorrect, String grade, Float score, Float discount,
+ Boolean isCorrect, String grade, Float score, Float partialCredit,Float discount,
Set answerFeedbackSet) {
this.itemText = itemText;
this.item = itemText.getItem();
@@ -79,10 +83,18 @@
this.isCorrect = isCorrect;
this.grade = grade;
this.score = score;
+ this.partialCredit=partialCredit;
this.discount=discount;
this.answerFeedbackSet = answerFeedbackSet;
}
-
+ //--mustansar for partial credit
+ public Float getPartialCredit(){
+ return this.partialCredit;
+ }
+ public void setPartialCredit(Float pCredit ){
+ this.partialCredit=pCredit;
+ }
+
public Long getId() {
return id;
}
Index: samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/PublishedAnswer.java
===================================================================
--- samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/PublishedAnswer.java (revision 180)
+++ samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/PublishedAnswer.java (revision 201)
@@ -49,6 +49,7 @@
private String grade;
private Float score;
private Float discount;
+ private Float partialCredit; //partial credit
private Set answerFeedbackSet;
private HashMap answerFeedbackMap;
private PublishedItemData publishedItemData = new PublishedItemData();
@@ -56,7 +57,7 @@
public PublishedAnswer() {}
public PublishedAnswer(ItemTextIfc itemText, String text, Long sequence, String label,
- Boolean isCorrect, String grade, Float score, Float discount) {
+ Boolean isCorrect, String grade, Float score, Float partialCredit,Float discount) {
this.itemText = itemText;
this.item = itemText.getItem();
this.text = text;
@@ -66,10 +67,11 @@
this.grade = grade;
this.score = score;
this.discount = discount;
+ this.partialCredit=partialCredit;
}
public PublishedAnswer(ItemTextIfc itemText, String text, Long sequence, String label,
- Boolean isCorrect, String grade, Float score, Float discount,
+ Boolean isCorrect, String grade, Float score,Float partialCredit, Float discount,
Set answerFeedbackSet) {
this.itemText = itemText;
this.item = itemText.getItem();
@@ -81,8 +83,15 @@
this.score = score;
this.discount = discount;
this.answerFeedbackSet = answerFeedbackSet;
+ this.partialCredit=partialCredit;
}
-
+ //--mustansar for partial credit
+ public Float getPartialCredit(){
+ return partialCredit;
+ }
+ public void setPartialCredit(Float pCredit ){
+ this.partialCredit=pCredit;
+ }
public Long getId() {
return id;
}
Index: samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/PublishedItemData.java
===================================================================
--- samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/PublishedItemData.java (revision 180)
+++ samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/PublishedItemData.java (revision 201)
@@ -64,6 +64,7 @@
private Float discount;
private String hint;
private Boolean hasRationale;
+
private Integer status;
private String createdBy;
private Date createdDate;
@@ -76,8 +77,17 @@
private HashMap itemFeedbackMap = new HashMap();
private ItemGradingData lastItemGradingDataByAgent;
private Set itemAttachmentSet;
+ private Boolean partialCreditFlag;
+
+ public Boolean getPartialCreditFlag() {
+ return partialCreditFlag;
+}
+
+public void setPartialCreditFlag(Boolean partialCreditFlag) {
+ this.partialCreditFlag = partialCreditFlag;
+}
- public PublishedItemData() {}
+public PublishedItemData() {}
// this constructor should be deprecated, it is missing triesAllowed
public PublishedItemData(SectionDataIfc section, Integer sequence,
@@ -86,7 +96,7 @@
Boolean hasRationale, Integer status, String createdBy,
Date createdDate, String lastModifiedBy,
Date lastModifiedDate,
- Set itemTextSet, Set itemMetaDataSet, Set itemFeedbackSet) {
+ Set itemTextSet, Set itemMetaDataSet, Set itemFeedbackSet, Boolean partialCrditFlag) {
this.section = section;
this.sequence = sequence;
this.duration = duration;
@@ -106,6 +116,7 @@
this.itemTextSet = itemTextSet;
this.itemMetaDataSet = itemMetaDataSet;
this.itemFeedbackSet = itemFeedbackSet;
+ this.partialCreditFlag=partialCreditFlag;
}
public PublishedItemData(SectionDataIfc section, Integer sequence,
@@ -115,7 +126,7 @@
Date createdDate, String lastModifiedBy,
Date lastModifiedDate,
Set itemTextSet, Set itemMetaDataSet, Set itemFeedbackSet,
- Integer triesAllowed) {
+ Integer triesAllowed, Boolean partialCreditFlag) {
this.section = section;
this.sequence = sequence;
this.duration = duration;
@@ -136,8 +147,10 @@
this.itemMetaDataSet = itemMetaDataSet;
this.itemFeedbackSet = itemFeedbackSet;
this.triesAllowed = triesAllowed;
+ this.partialCreditFlag=partialCreditFlag;
}
+
public Long getItemId() {
return this.itemId;
}
@@ -679,4 +692,12 @@
return list;
}
+/*public Boolean getPartialCreditFlag() {
+ return partialCreditFlag;
+}
+
+public void setPartialCreditFlag(Boolean partialCreditFlag) {
+ this.partialCreditFlag = partialCreditFlag;
+}*/
+
}
Index: samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ItemData.java
===================================================================
--- samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ItemData.java (revision 180)
+++ samigo-hibernate/src/java/org/sakaiproject/tool/assessment/data/dao/assessment/ItemData.java (revision 201)
@@ -43,7 +43,8 @@
private Float discount;
private String hint;
private Boolean hasRationale;
- private Integer status;
+ private Boolean partialCreditFlag;
+ private Integer status;
private String createdBy;
private Date createdDate;
private String lastModifiedBy;
@@ -54,6 +55,7 @@
private HashMap itemMetaDataMap = new HashMap();
private HashMap itemFeedbackMap;
private Set itemAttachmentSet;
+ // private Float partialCredit;
public ItemData() {}
@@ -64,7 +66,9 @@
Boolean hasRationale, Integer status, String createdBy,
Date createdDate, String lastModifiedBy,
Date lastModifiedDate,
- Set itemTextSet, Set itemMetaDataSet, Set itemFeedbackSet) {
+ Set itemTextSet, Set itemMetaDataSet, Set itemFeedbackSet, Boolean partialCreditFlag
+ //, Float partialCredit
+ ) {
this.section = section;
this.sequence = sequence;
this.duration = duration;
@@ -84,6 +88,9 @@
this.itemTextSet = itemTextSet;
this.itemMetaDataSet = itemMetaDataSet;
this.itemFeedbackSet = itemFeedbackSet;
+ this.partialCreditFlag=partialCreditFlag;
+ // this.partialCredit=partialCredit;
+
}
public ItemData(SectionDataIfc section, Integer sequence,
@@ -93,7 +100,9 @@
Date createdDate, String lastModifiedBy,
Date lastModifiedDate,
Set itemTextSet, Set itemMetaDataSet, Set itemFeedbackSet,
- Integer triesAllowed) {
+ Integer triesAllowed, Boolean partialCreditFlag
+ //, Float partialCredit
+ ) {
this.section = section;
this.sequence = sequence;
this.duration = duration;
@@ -114,9 +123,19 @@
this.itemMetaDataSet = itemMetaDataSet;
this.itemFeedbackSet = itemFeedbackSet;
this.triesAllowed = triesAllowed;
+ this.partialCreditFlag=partialCreditFlag;
+ //this.partialCredit=partialCredit;
}
- /*
+ //public Float getPartialCredit() {
+ //return this.partialCredit;
+//}
+
+//public void setPartialCredit(Float partialCredit) {
+ //this.partialCredit = partialCredit;
+//}
+
+/*
public Object clone() throws CloneNotSupportedException{
ItemData cloned= new ItemData(
@@ -206,25 +225,19 @@
}
*/
-
-
public Long getItemId() {
- return this.itemId;
- }
-
+ return this.itemId;
+ }
public void setItemId(Long itemId) {
this.itemId = itemId;
setItemIdString(itemId.toString());
}
-
public String getItemIdString() {
return this.itemIdString;
}
-
public void setItemIdString(String itemIdString) {
this.itemIdString = itemIdString;
}
-
public SectionDataIfc getSection() {
return this.section;
}
@@ -760,7 +773,10 @@
}
return list;
}
-
-
-
+public Boolean getPartialCreditFlag() {
+ return this.partialCreditFlag;
+}
+public void setPartialCreditFlag(Boolean particalCreditFlag) {
+ this.partialCreditFlag=particalCreditFlag;
+}
}