package org.webcat.outcomesmeasurement.reports;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver.WOResponse;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSMutableArray;
import org.webcat.outcomesmeasurement.Coursework;
import org.webcat.outcomesmeasurement.OutcomePair;
import org.webcat.outcomesmeasurement.OutcomePairStatistic;
import org.webcat.outcomesmeasurement.Program;
import org.webcat.outcomesmeasurement.ProgramOutcome;
import org.webcat.outcomesmeasurement.StudentAnswer;
@SuppressWarnings("serial")
public class OutcomeReportsPage extends BaseReportsPage {
public OutcomeReportsPage(WOContext context) {
super(context);
}
public String errorMessage = null;
public String reportType;
public String newReportType;
@Override
public void appendToResponse(WOResponse response, WOContext context) {
errorMessage = null;
NSArray<Program> programs = Program.allObjects(localContext());
if (programs.count() == 0) { errorMessage = "No eligible programs found."; }
else {
Program prog = programs.get(0);
NSArray<ProgramOutcome> programOutcomes = ProgramOutcome.objectsMatchingQualifier(localContext(), ProgramOutcome.program.eq(prog));
NSArray<OutcomePair> programOutcomePairs = OutcomePair.objectsMatchingQualifier(localContext(), OutcomePair.programOutcome.in(programOutcomes));
outcomePairStats = getStatsForOutcomePairs(programOutcomePairs);
}
super.appendToResponse(response, context);
}
private NSMutableArray<OutcomePairStatistic> getStatsForOutcomePairs(
NSArray<OutcomePair> abetOutcomePairs) {
Map<OutcomePair, OutcomePairStatistic> opMap = new HashMap<OutcomePair, OutcomePairStatistic>();
NSMutableArray<OutcomePairStatistic> retVal = new NSMutableArray<OutcomePairStatistic>();
for (OutcomePair pair : abetOutcomePairs){
if (!opMap.containsKey(pair)){
OutcomePairStatistic tempStat = new OutcomePairStatistic();
tempStat.setOutcomePair(pair);
opMap.put(pair, tempStat);
}
OutcomePairStatistic opStat = opMap.get(pair);
NSArray<Coursework> allCw = pair.courseworks();
for (Coursework cw : allCw){
NSArray<StudentAnswer> answers = cw.studentAnswers();
for (StudentAnswer answer: answers){
Double percent = answer.percentEarned();
if (percent != null){
percent = percent * 100;
if (percent.compareTo(Double.valueOf(opStat.getExcellentCutoff())) >= 0){
opStat.incrementExcellent();
} else if (percent.compareTo(Double.valueOf(opStat.getAdequateCutoff())) >= 0){
opStat.incrementAdequate();
} else {
opStat.incrementUnsatisfactory();
}
}
}
}
opMap.put(pair, opStat);
}
Set<OutcomePair> keySet = opMap.keySet();
for (OutcomePair op : keySet){
OutcomePairStatistic ops = opMap.get(op);
if (ops.getTotalNumber() > 0) retVal.add(ops);
}
return retVal;
}
}