001    /*-----------------------------------------------------------------------
002     *  Copyright (C) 2006
003     *  Associated Universities, Inc. Washington DC, USA.
004     *  This program is free software; you can redistribute it and/or
005     *  modify it under the terms of the GNU General Public License as
006     *  published by the Free Software Foundation; either version 2 of
007     *  the License, or (at your option) any later version.
008     *
009     *  This program is distributed in the hope that it will be useful,
010     *  but WITHOUT ANY WARRANTY; without even the implied warranty of
011     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012     *  GNU General Public License for more details.
013     *
014     *  Correspondence concerning this software should be addressed as follows:
015     *         Internet email: switz@nrao.edu
016     *         Postal address: SSS Software
017     *                         National Radio Astronomy Observatory
018     *                         Post Office Box 0
019     *                         Socorro, NM 87801  USA
020     *-----------------------------------------------------------------------*/
021    package edu.nrao.sss.model.parameter;
022    
023    import java.util.List;
024    
025    import org.apache.log4j.Logger;
026    
027    import edu.nrao.sss.validation.AbstractValidator;
028    import edu.nrao.sss.validation.FailureSeverity;
029    import edu.nrao.sss.validation.Validation;
030    import edu.nrao.sss.validation.ValidationFailure;
031    import edu.nrao.sss.validation.ValidationPurpose;
032    
033    public class BatchUpdateFileValidation extends Validation<BatchUpdateFile> {
034    
035            private static final Logger log = Logger.getLogger(BatchUpdateFileValidation.class);
036    
037            private String debugMessage;
038    
039            private String displayMessage;
040    
041            protected BatchUpdateFileValidation(AbstractValidator<BatchUpdateFile> validationContainer,
042                            ValidationPurpose reasonForValidation) {
043                    super(validationContainer, reasonForValidation);
044                    severity = (reasonForValidation == ValidationPurpose.CERTIFY_READY_TO_USE) ? FailureSeverity.ERROR
045                                    : FailureSeverity.WARNING;
046            }
047    
048            protected String debugMessage() {
049                    return debugMessage;
050            }
051    
052            protected String displayMessage() {
053                    return displayMessage;
054            }
055    
056            protected boolean passesTest() {
057                    BatchUpdateFile target = container.getTarget();
058                    List<String> fileContents = target.getFileContents();
059                    int lineNumber = 0;
060                    for (String line : fileContents) {
061                            lineNumber++;
062                            BatchUpdateLine batchUpdateLine = new BatchUpdateLine(line);
063                            List<ValidationFailure> failureList = new BatchUpdateLineValidator().validate(batchUpdateLine,
064                                            ValidationPurpose.CERTIFY_READY_TO_USE);
065                            if (!failureList.isEmpty()) {
066                                    log.error(failureList.get(0).getDisplayMessage());
067                                    debugMessage = "line " + lineNumber + ": " + failureList.get(0).getDebugMessage();
068                                    displayMessage = "line " + lineNumber + ": " + failureList.get(0).getDisplayMessage();
069                                    return false;
070                            } else if (!batchUpdateLine.isComment()) {
071                                    Parameter parameter = target.getParameterMap().get(new Integer(lineNumber));
072                                    failureList = new ParameterValidator().validate(parameter, ValidationPurpose.CERTIFY_READY_TO_USE);
073                                    if (!failureList.isEmpty()) {
074                                            log.error(failureList.get(0).getDisplayMessage());
075                                            debugMessage = "line " + lineNumber + ": " + failureList.get(0).getDebugMessage();
076                                            displayMessage = "line " + lineNumber + ": " + failureList.get(0).getDisplayMessage();
077                                            return false;
078                                    }
079                            }
080                    }
081                    return true;
082            }
083    }