net.sqs2.omr.session.output.MarkReadStatusOutputModule.java Source code

Java tutorial

Introduction

Here is the source code for net.sqs2.omr.session.output.MarkReadStatusOutputModule.java

Source

/**
 * MarkReadStatusReportModule.java
    
 Copyright 2009 KUBO Hiroya (hiroya@cuc.ac.jp).
    
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
    
 http://www.apache.org/licenses/LICENSE-2.0
    
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
    
 Author hiroya
 */

package net.sqs2.omr.session.output;

import java.util.List;

import net.sqs2.omr.model.Config;
import net.sqs2.omr.model.MarkAreaAnswer;
import net.sqs2.omr.model.MarkAreaAnswerItem;
import net.sqs2.omr.model.PageID;
import net.sqs2.omr.model.PageTaskException;
import net.sqs2.omr.model.SourceConfig;
import net.sqs2.omr.session.event.MasterEvent;
import net.sqs2.omr.session.event.PageEvent;
import net.sqs2.omr.session.event.QuestionEvent;
import net.sqs2.omr.session.event.QuestionItemEvent;
import net.sqs2.omr.session.event.RowEvent;
import net.sqs2.omr.session.event.RowGroupEvent;
import net.sqs2.omr.session.event.SessionEvent;
import net.sqs2.omr.session.event.SourceDirectoryEvent;
import net.sqs2.omr.session.event.SpreadSheetEvent;
import net.sqs2.omr.session.event.SpreadSheetOutputEventReciever;
import net.sqs2.omr.session.output.MarkReadStatus.Select1Status;
import net.sqs2.omr.session.output.MarkReadStatus.SelectStatus;

import org.apache.commons.collections15.multimap.MultiHashMap;

public class MarkReadStatusOutputModule implements SpreadSheetOutputEventReciever {

    MarkReadStatus totalMarkReadStatus;

    MarkReadStatus sessionMarkReadStatus;
    MarkReadStatus masterMarkReadStatus;
    MarkReadStatus sourceDirectoryMarkReadStatus;
    MarkReadStatus rowMarkReadStatus;

    float densityThreshold;
    float doubleMarkIgnoranceThreshold;
    float noMarkRecoveryThreshold;

    protected MarkReadStatusOutputModule() {
    }

    public MarkReadStatus getTotalMarkReadStatus() {
        return this.totalMarkReadStatus;
    }

    public MarkReadStatus getSessionMarkReadStatus() {
        return this.sessionMarkReadStatus;
    }

    public MarkReadStatus getMasterMarkReadStatus() {
        return this.masterMarkReadStatus;
    }

    public MarkReadStatus getSourceDirectoryMarkReadStatus() {
        return this.sourceDirectoryMarkReadStatus;
    }

    public MarkReadStatus getRowMarkReadStatus() {
        return this.rowMarkReadStatus;
    }

    @Override
    public void startSession(SessionEvent sessionEvent) {
        this.sessionMarkReadStatus = new MarkReadStatus();
        this.totalMarkReadStatus = new MarkReadStatus();
    }

    @Override
    public void startMaster(MasterEvent masterEvent) {
        this.masterMarkReadStatus = new MarkReadStatus();
    }

    @Override
    public void endMaster(MasterEvent masterEvent) {
        this.sessionMarkReadStatus.add(this.masterMarkReadStatus);
    }

    @Override
    public void startSourceDirectory(SourceDirectoryEvent sourceDirectoryEvent) {
        this.sourceDirectoryMarkReadStatus = new MarkReadStatus();
        Config config = sourceDirectoryEvent.getSourceDirectory().getConfiguration().getConfig();
        SourceConfig sourceConfig = (SourceConfig) config.getPrimarySourceConfig();
        this.densityThreshold = sourceConfig.getMarkRecognitionConfig().getMarkRecognitionDensityThreshold();
        this.doubleMarkIgnoranceThreshold = sourceConfig.getMarkRecognitionConfig()
                .getDoubleMarkErrorSuppressionThreshold();
        this.noMarkRecoveryThreshold = sourceConfig.getMarkRecognitionConfig().getNoMarkErrorSuppressionThreshold();
    }

    @Override
    public void endSourceDirectory(SourceDirectoryEvent sourceDirectoryEvent) {
        this.masterMarkReadStatus.add(this.sourceDirectoryMarkReadStatus);
    }

    @Override
    public void startSpreadSheet(SpreadSheetEvent spreadSheetEvent) {
    }

    @Override
    public void endSpreadSheet(SpreadSheetEvent spreadSheetEvent) {

    }

    @Override
    public void startRowGroup(RowGroupEvent rowGroupEvent) {
    }

    @Override
    public void endRowGroup(RowGroupEvent rowGroupEvent) {
    }

    @Override
    public void startRow(RowEvent rowEvent) {
        this.rowMarkReadStatus = new MarkReadStatus();
    }

    @Override
    public void endRow(RowEvent rowEvent) {
        this.sourceDirectoryMarkReadStatus.add(this.rowMarkReadStatus);
        this.totalMarkReadStatus.add(this.rowMarkReadStatus);
        MultiHashMap<PageID, PageTaskException> taskExceptionMap = rowEvent.getTaskExceptionMultiHashMap();
        if (taskExceptionMap != null && 0 < taskExceptionMap.size()) {
            this.totalMarkReadStatus.numErrorPages += taskExceptionMap.size();
        }
        int numPages = rowEvent.getRowGroupEvent().getFormMaster().getNumPages();
        this.totalMarkReadStatus.setNumPages(this.totalMarkReadStatus.getNumPages() + numPages);
    }

    @Override
    public void startPage(PageEvent pageEvent) {
    }

    @Override
    public void endPage(PageEvent pageEvent) {
    }

    @Override
    public void startQuestion(QuestionEvent questionEvent) {
    }

    @Override
    public void endQuestion(QuestionEvent questionEvent) {

        if (questionEvent.getPrimaryFormArea().isMarkArea()) {
            int numSelected = 0;
            MarkAreaAnswer answer = (MarkAreaAnswer) questionEvent.getAnswer();

            List<MarkAreaAnswerItem> markedAnswerItems = answer.createMarkAreaAnswerItemSet().getMarkedAnswerItems(
                    this.densityThreshold, this.doubleMarkIgnoranceThreshold, this.noMarkRecoveryThreshold);
            numSelected += markedAnswerItems.size();
            /*
             * for (int itemIndex = 0; itemIndex <
             * questionEvent.getFormAreaList().size(); itemIndex++) {
             * MarkAreaAnswerItem markAreaAnswerItem = ((MarkAreaAnswer)
             * answer).getMarkAreaAnswerItem(itemIndex);
             * 
             * if ((markAreaAnswerItem.isManualMode() &&
             * markAreaAnswerItem.isManualSelected()) ||
             * (!markAreaAnswerItem.isManualMode() &&
             * markAreaAnswerItem.getDensity() < this.densityThreshold)) {
             * numSelected++; } }
             */

            if (questionEvent.getPrimaryFormArea().isSelectSingle()) {
                Select1Status select1Status = this.rowMarkReadStatus.getSelect1Status();
                if (numSelected == 0) {
                    select1Status.numNoAnsweredQuestions += 1;
                } else if (numSelected == 1) {
                    select1Status.numOneSelectedQuestions += 1;
                } else {
                    select1Status.numMultiPleSelectedQuestions += 1;
                }
                select1Status.numQuestions++;
            } else if (questionEvent.getPrimaryFormArea().isSelectMultiple()) {
                SelectStatus selectStatus = this.rowMarkReadStatus.getSelectStatus();
                selectStatus.numMultipleSelectedMarks += numSelected;
                selectStatus.numQuestions += 1;
            }
        }
    }

    @Override
    public void startQuestionItem(QuestionItemEvent questionItemEvent) {
    }

    @Override
    public void endQuestionItem(QuestionItemEvent questionItemEvent) {
    }

    @Override
    public void endSession(SessionEvent sessionEvent) {
        // TODO Auto-generated method stub

    }

}