Commit 566bac43 by Nilu

test analysis output

parent 028f1b0d
...@@ -36,9 +36,9 @@ public class TestAnalysisFP extends ORMProcessFormProcessor ...@@ -36,9 +36,9 @@ public class TestAnalysisFP extends ORMProcessFormProcessor
try try
{ {
loadData(testInput, process.getTransaction()); SingleValueTableModel model = loadData(testInput, process.getTransaction());
ExcelExporter.ExportAppender excelRenderer = getExportAppender(testInput.getCSV()); ExcelExporter.ExportAppender excelRenderer = getExportAppender(model);
excelRenderer.export(bos); excelRenderer.export(bos);
bytes = bos.toByteArray(); bytes = bos.toByteArray();
} }
...@@ -55,7 +55,7 @@ public class TestAnalysisFP extends ORMProcessFormProcessor ...@@ -55,7 +55,7 @@ public class TestAnalysisFP extends ORMProcessFormProcessor
}; };
} }
private static ExcelExporter.ExportAppender getExportAppender(BinaryContent file) throws IOException private static ExcelExporter.ExportAppender getExportAppender(SingleValueTableModel model) throws IOException
{ {
Properties props = new Properties(); Properties props = new Properties();
props.load(TestAnalysisFP.class.getClassLoader().getResourceAsStream("excel-styles.properties")); props.load(TestAnalysisFP.class.getClassLoader().getResourceAsStream("excel-styles.properties"));
...@@ -67,7 +67,7 @@ public class TestAnalysisFP extends ORMProcessFormProcessor ...@@ -67,7 +67,7 @@ public class TestAnalysisFP extends ORMProcessFormProcessor
ExcelExporter.ExportAppender exportAppender = new ExcelExporter(props).getAppender(); ExcelExporter.ExportAppender exportAppender = new ExcelExporter(props).getAppender();
exportAppender.appendTable("New Sheet", 1, getExcelContent(file)); exportAppender.appendTable("New Sheet", 0, model);
return exportAppender; return exportAppender;
} }
...@@ -81,14 +81,15 @@ public class TestAnalysisFP extends ORMProcessFormProcessor ...@@ -81,14 +81,15 @@ public class TestAnalysisFP extends ORMProcessFormProcessor
} }
public void loadData(TestInput testInput, ObjectTransaction objTran) public SingleValueTableModel loadData(TestInput testInput, ObjectTransaction objTran)
{ {
BufferedReader bReader = null; SingleValueTableModel model = null;
String line = ""; BufferedReader bReader = null;
String csvSeparator = ","; String line = "";
boolean first = true; String csvSeparator = ",";
List<Candidate> candidates = new ArrayList<>(); boolean first = true;
List<Answer> answers = new ArrayList<>(); List<Candidate> candidates = new ArrayList<>();
List<Answer> answers = new ArrayList<>();
try try
{ {
...@@ -128,7 +129,7 @@ public class TestAnalysisFP extends ORMProcessFormProcessor ...@@ -128,7 +129,7 @@ public class TestAnalysisFP extends ORMProcessFormProcessor
} }
} }
AnalysisEngine.analyseAnswers(answers.toArray(new Answer[0]), testInput.getLevel()); model = AnalysisEngine.analyseAnswers(answers.toArray(new Answer[0]), testInput.getLevel());
} }
catch (FileNotFoundException ex) catch (FileNotFoundException ex)
...@@ -161,6 +162,8 @@ public class TestAnalysisFP extends ORMProcessFormProcessor ...@@ -161,6 +162,8 @@ public class TestAnalysisFP extends ORMProcessFormProcessor
throw new NestedException(ex); throw new NestedException(ex);
} }
} }
return model;
} }
......
...@@ -11,11 +11,15 @@ import oneit.objstore.ObjectTransaction; ...@@ -11,11 +11,15 @@ import oneit.objstore.ObjectTransaction;
import oneit.objstore.rdbms.filters.EqualsFilter; import oneit.objstore.rdbms.filters.EqualsFilter;
import oneit.objstore.rdbms.filters.GreaterThanEqualFilter; import oneit.objstore.rdbms.filters.GreaterThanEqualFilter;
import oneit.objstore.rdbms.filters.LessThanEqualFilter; import oneit.objstore.rdbms.filters.LessThanEqualFilter;
import oneit.utils.MultiHashtable;
import oneit.utils.table.SingleValueTableModel;
import performa.orm.Answer; import performa.orm.Answer;
import performa.orm.Candidate;
import performa.orm.Factor; import performa.orm.Factor;
import performa.orm.FactorQuestionLink; import performa.orm.FactorQuestionLink;
import performa.orm.FactorScoreResult; import performa.orm.FactorScoreResult;
import performa.orm.Level; import performa.orm.Level;
import performa.orm.types.QuestionType;
/** /**
* *
...@@ -24,61 +28,93 @@ import performa.orm.Level; ...@@ -24,61 +28,93 @@ import performa.orm.Level;
public class AnalysisEngine public class AnalysisEngine
{ {
public static void analyseAnswers(Answer[] answers, Level level) public static SingleValueTableModel analyseAnswers(Answer[] answers, Level level)
{ {
ObjectTransaction objTran = level.getTransaction(); SingleValueTableModel model = new SingleValueTableModel();
Map<Factor, Integer> factorScoreMap = new HashMap<>(); ObjectTransaction objTran = level.getTransaction();
MultiHashtable<Candidate, Answer> answersByCandidate = new MultiHashtable<>();
for (Answer answer : answers) answersByCandidate.groupValues(answers, Answer.pipesAnswer().toCandidate());
{
FactorQuestionLink[] links = FactorQuestionLink.SearchByAll()
.andQuestion(new EqualsFilter<>(answer.getQuestion()))
.search(objTran);
int factorScore = 0; int index = 0;
for (Candidate candidate : answersByCandidate.keySet())
{
int rowNumber = 0;
int colNumber = ( index * 3 ) + 1;
Map<Factor, Integer> factorScoreMap = new HashMap<>();
model.addCell(rowNumber++, colNumber, new SingleValueTableModel.CellModel(candidate.getFirstName(), ""));
for (FactorQuestionLink link: links) for (Answer answer : answersByCandidate.getValuesForKey(candidate))
{ {
Factor factor = link.getFactor(); FactorQuestionLink[] links = FactorQuestionLink.SearchByAll()
.andQuestion(new EqualsFilter<>(answer.getQuestion()))
if(factorScoreMap.containsKey(factor)) .search(objTran);
{
factorScore += factorScoreMap.get(factor); int factorScore = 0;
}
for (FactorQuestionLink link: links)
if(link.getReverseScore().equals("Yes"))
{ {
// ipsative is stored in quest_hdr. bo not created yet Factor factor = link.getFactor();
factorScore += (10 - answer.getAnswerNo()); if(factorScoreMap.containsKey(factor))
{
factorScore += factorScoreMap.get(factor);
}
if(link.getReverseScore())
{
if(answer.getQuestion().getSection().getQuestionType() == QuestionType.IPSATIVE)
{
factorScore += (10 - answer.getAnswerNo());
}
else
{
factorScore += (8 - answer.getAnswerNo());
}
}
else
{
factorScore += answer.getAnswerNo();
}
factorScoreMap.put(factor, factorScore);
} }
else }
for (Map.Entry<Factor, Integer> entrySet : factorScoreMap.entrySet())
{
Factor factor = entrySet.getKey();
Integer factorScore = entrySet.getValue();
if(index == 0)
{ {
factorScore += answer.getAnswerNo(); model.addCell(rowNumber, 0, new SingleValueTableModel.CellModel(factor.getDescription(), ""));
} }
factorScoreMap.put(factor, factorScore); FactorScoreResult result = FactorScoreResult.SearchByFactorScore()
.andFactor(new EqualsFilter<>(factor))
.andLevel(new EqualsFilter<>(level))
.andFromScore(new LessThanEqualFilter<>(factorScore))
.andToScore(new GreaterThanEqualFilter<>(factorScore))
.search(objTran);
int score = result != null ? result.getColorCode().getWeightage() : 0;
// TODO: calculate normalised score based on importance
model.addCell(rowNumber, colNumber, new SingleValueTableModel.CellModel(String.valueOf(score), ""));
model.addCell(rowNumber, colNumber + 1, new SingleValueTableModel.CellModel(result != null ? result.getColorCode().getDescription() : "", ""));
model.addCell(rowNumber++, colNumber + 2, new SingleValueTableModel.CellModel(result != null ? result.getNarrative().getGraphicNotes(): "", ""));
} }
}
for (Map.Entry<Factor, Integer> entrySet : factorScoreMap.entrySet())
{
Factor factor = entrySet.getKey();
Integer factorScore = entrySet.getValue();
FactorScoreResult result = FactorScoreResult.SearchByFactorScore() index++;
.andFactor(new EqualsFilter<>(factor))
.andLevel(new EqualsFilter<>(level))
.andFromScore(new LessThanEqualFilter<>(factorScore))
.andToScore(new GreaterThanEqualFilter<>(factorScore))
.search(objTran);
int score = result != null ? result.getColorCode().getWeightage() : 0;
System.out.println("score :: " + score);
// TODO: calculate normalised score based on importance
} }
return model;
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment