Java tutorial
/*$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() + "]."); } }