no.abmu.questionnaire.webflow.QuestionnaireWebFlowValidator.java Source code

Java tutorial

Introduction

Here is the source code for no.abmu.questionnaire.webflow.QuestionnaireWebFlowValidator.java

Source

/*$Id: QuestionnaireWebFlowValidator.java 15432 2010-03-15 19:50:11Z jens $*/
/*
 ****************************************************************************
 *                                                                          *
 *                   (c) Copyright 2008 ABM-utvikling                       *
 *                                                                          *
 * This program is free software; you can redistribute it and/or modify it  *
 * under the terms of the GNU General Public License as published by the    *
 * Free Software Foundation; either version 2 of the License, or (at your   *
 * option) any later version.                                               *
 *                                                                          *
 * This program is distributed in the hope that it will be useful, but      *
 * WITHOUT ANY WARRANTY; without even the implied warranty of               *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General *
 * Public License for more details. http://www.gnu.org/licenses/gpl.html    *
 *                                                                          *
 ****************************************************************************
 */
package no.abmu.questionnaire.webflow;

import java.util.List;
import java.util.Map;
import java.util.Set;

import no.abmu.questionnaire.domain.data.FieldData;
import no.abmu.questionnaire.domain.data.QuestionnaireData;
import no.abmu.questionnaire.domain.data.SubSchemaData;
import no.abmu.questionnaire.domain.data.SubSchemaDataList;
import no.abmu.questionnaire.domain.metadata.Schema;
import no.abmu.questionnaire.domain.metadata.SubSchema;
import no.abmu.questionnaire.domain.util.LoggingOfFieldData;
import no.abmu.questionnaire.service.QuestionnaireService;
import no.abmu.questionnaire.web.QuestionnaireCommand;
import no.abmu.questionnaire.web.SchemaCommand;
import no.abmu.questionnaire.web.SchemaCommandValidator;
import no.abmu.questionnaire.web.SubSchemaCommand;
import no.abmu.util.test.Assert;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.StopWatch;
import org.springframework.validation.Errors;

/**
 * <code>HighSchoolLibraryValidator</code> validator that validates and 
 * save when validated OK, high school library schema (folkebiblSchema).
 * 
 * We only validate fields on current page.
 * 
 * @author Jens Vindvad, Jens.Vindvad@abm-utvikling.no
 * @author $Author: jens $
 * @version $Rev: 15432 $
 * @date $Date: 2010-03-15 20:50:11 +0100 (Mon, 15 Mar 2010) $
 * @since 2008-01-25
 * copyright ABM-Utvikling
 */
public class QuestionnaireWebFlowValidator extends SchemaCommandValidator {

    private static final Log logger = (Log) LogFactory.getLog(QuestionnaireWebFlowValidator.class);

    public void validateAndSave(Object object, Errors errors) {
        if (logger.isDebugEnabled()) {
            logger.debug("Executing validateAndSave");
            logger.debug("Object is of type ==>" + object.getClass().getName());
            logger.debug("Number of errors in error object=[" + errors.getErrorCount() + "]");
        }
        Assert.assertTrue("We expect object to implement interface SchemaCommand", object instanceof SchemaCommand);

        StopWatch stopWatchValidate = new StopWatch();
        stopWatchValidate.start("validate");

        validate(object, errors);
        SchemaCommand schemaCommand = (SchemaCommand) object;
        //        schemaCommand.setErrors(errors);

        stopWatchValidate.stop();
        logger.info("[validate] tok [" + stopWatchValidate.getTotalTimeMillis() + "] ms");
        logger.info("Number of errors after validating=[" + errors.getErrorCount() + "].");

        /*        
                logger.info("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
                logger.info("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
                logger.info("Error toString            ==> " + errors.toString());
                logger.info("Error getErrorCount       ==> " + errors.getErrorCount());
                logger.info("Error getGlobalErrorCount ==> " + errors.getGlobalErrorCount());
                logger.info("Error getNestedPath       ==> " + errors.getNestedPath());
                logger.info("Error getObjectName       ==> " + errors.getObjectName());
                logger.info("Error getClass            ==> " + errors.getClass());
                logger.info("NESTED_PATH_SEPARATOR     ==> " + errors.NESTED_PATH_SEPARATOR);
                logger.info("Error getClass            ==> " + errors.getClass());
                logger.info("Error getFieldError       ==> " + errors.getFieldError());
                logger.info("getFieldError('fields[06].value') ==> " + errors.getFieldError("fields[06].value"));
                logger.info("Error getFieldErrors      ==> " + errors.getFieldErrors());
                logger.info("Error getGlobalError      ==> " + errors.getGlobalError());
                logger.info("Error getGlobalErrors     ==> " + errors.getGlobalErrors());
                logger.info("Error hasErrors           ==> " + errors.hasErrors());
                logger.info("Error hasFieldErrors      ==> " + errors.hasFieldErrors());
                logger.info("Error hasGlobalErrors     ==> " + errors.hasGlobalErrors());
                logger.info("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
                logger.info("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
        */

        if (!errors.hasErrors()) {
            logger.info("No errors");
            StopWatch stopWatchSave = new StopWatch();
            stopWatchSave.start("save");

            if (schemaCommand instanceof QuestionnaireCommand) {
                logger.info("Command object of type QuestionnaireCommand");
                QuestionnaireCommand command = (QuestionnaireCommand) object;
                Assert.assertNotNull("command", command);
                questionnaireService.storeQuestionnaireData(command.getQuestionnaireData(), command.getOrgUnitId());

            } else if (schemaCommand instanceof SubSchemaCommand) {
                logger.info("Command object of type SubSchemaCommand");
                SubSchemaCommand subSchemaCommand = (SubSchemaCommand) object;
                SubSchemaData subSchemaData = subSchemaCommand.getSubSchemaData();
                logger.info("=============== SubSchemaData which was edited ======================");
                loggingOfSubschema(subSchemaData, 0);
                logger.info("=============== SubSchemaData which was edited ======================");

                QuestionnaireData questionnaireData = subSchemaCommand.getQuestionnaireData();
                Assert.assertNotNull("questionnaireData", questionnaireData);

                if (subSchemaData.getId() == null) {
                    questionnaireData.addSubSchemaData(subSchemaData);
                }
                logger.info("=============== All SubSchemaData Before store ======================");
                loggingOfSubSchemas(questionnaireData);
                logger.info("=============== All SubSchemaData Before store ======================");

                questionnaireService.storeQuestionnaireData(questionnaireData);
            } else {
                throw new IllegalArgumentException(
                        "Unsupported command object " + schemaCommand.getClass().getName());
            }

            stopWatchSave.stop();
            logger.info("[save] tok [" + stopWatchSave.getTotalTimeMillis() + "] ms");
        }
    }

    private void loggingOfSubSchemas(QuestionnaireData questionnaireData) {

        Map<String, SubSchemaDataList> subSchemaDataLists = questionnaireData.getSchemaDataListMap();
        Set<String> keys = subSchemaDataLists.keySet();
        for (String key : keys) {
            SubSchemaDataList subSchemaDataList = subSchemaDataLists.get(key);
            List<SubSchemaData> subSchemaDatas = subSchemaDataList.getSubSchemaDatas();
            logger.debug("SubSchemaDataList Key='" + key + "' has " + subSchemaDatas.size() + " subSchemas");
            int i = 1;
            for (SubSchemaData subSchemaData : subSchemaDatas) {
                loggingOfSubschema(subSchemaData, i);
                i++;
            }
        }
    }

    private void loggingOfSubschema(SubSchemaData subSchemaData, int nr) {
        int fields = subSchemaData.getFieldData().size();
        int orderIdx = subSchemaData.getOrderIdx();
        SubSchema subSchema = subSchemaData.getSubSchema();
        if (subSchema == null) {
            logger.debug("subSchema == null");
        }
        Schema schema = subSchemaData.getSchema();
        if (schema == null) {
            logger.debug("schema == null");
        }
        if (schema instanceof SubSchema) {
            logger.debug("schema is instanceof SubSchema");
            subSchema = (SubSchema) schema;
        }
        String subSchemaName = subSchema.getSubSchemaName();
        FieldData projectTitle = subSchemaData.getFieldData("01");
        logger.debug(nr + " subSchemaData with orderIdx=[" + orderIdx + "] has subSchemaName=[" + subSchemaName
                + "] and nr of fields=[" + fields + "] and projectTitle=["
                + LoggingOfFieldData.fieldDataValueAsString(projectTitle) + "] has DB Id=[" + subSchemaData.getId()
                + "].");

    }
}