/** * The contents of this file are subject to the Mozilla Public License * Version 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations under * the License. * * The Original Code is OpenELIS code. * * Copyright (C) The Minnesota Department of Health. All Rights Reserved. * * Contributor(s): CIRG, University of Washington, Seattle WA. */ package us.mn.state.health.lims.sample.util; import us.mn.state.health.lims.common.exception.LIMSInvalidConfigurationException; import us.mn.state.health.lims.common.log.LogEvent; import us.mn.state.health.lims.common.provider.validation.AccessionNumberValidatorFactory; import us.mn.state.health.lims.common.provider.validation.IAccessionNumberValidator; import us.mn.state.health.lims.common.provider.validation.IAccessionNumberValidator.ValidationResults; import us.mn.state.health.lims.common.services.StatusService; import us.mn.state.health.lims.common.services.StatusService.RecordStatus; import us.mn.state.health.lims.common.services.StatusSet; import static us.mn.state.health.lims.common.provider.validation.IAccessionNumberValidator.ValidationResults.*; public class AccessionNumberUtil { private static IAccessionNumberValidator accessionNumberValidator; public static IAccessionNumberValidator getAccessionNumberValidator() { if( accessionNumberValidator == null){ try { accessionNumberValidator = new AccessionNumberValidatorFactory().getValidator(); } catch (LIMSInvalidConfigurationException e) { LogEvent.logFatal("AccessionNumberUtil", "getAccessionNumberValidator", e.toString()); } } return accessionNumberValidator; } public static String getNextAccessionNumber(String optionalPrefix) throws IllegalStateException{ return getAccessionNumberValidator().getNextAvailableAccessionNumber(optionalPrefix); } public static String getInvalidMessage(ValidationResults result){ return getAccessionNumberValidator().getInvalidMessage(result); } public static String getInvalidFormatMessage(ValidationResults result){ return getAccessionNumberValidator().getInvalidFormatMessage(result); } public static boolean needProgramCode(){ return getAccessionNumberValidator().needProgramCode(); } public static ValidationResults checkAccessionNumberValidity(String accessionNumber, String recordType, String isRequired, String projectFormName){ try { return getAccessionNumberValidator().checkAccessionNumberValidity(accessionNumber, recordType, isRequired, projectFormName); } catch (NullPointerException e) { e.printStackTrace(); } return ValidationResults.SAMPLE_NOT_FOUND; } public static ValidationResults isPatientStatusValid(String accessionNumber, RecordStatus validStatus) { StatusSet statusSet = StatusService.getInstance().getStatusSetForAccessionNumber(accessionNumber); if ( statusSet.getPatientRecordStatus() == validStatus ) { return SAMPLE_FOUND; } else { return PATIENT_STATUS_FAIL; } } public static ValidationResults isSampleStatusValid(String accessionNumber, RecordStatus validStatus) { StatusSet statusSet = StatusService.getInstance().getStatusSetForAccessionNumber(accessionNumber); RecordStatus sampleRecordStatus = statusSet.getSampleRecordStatus(); if ( sampleRecordStatus == validStatus ) { return SAMPLE_FOUND; } else { return SAMPLE_STATUS_FAIL; } } public static int getInvarientLength(){ return getAccessionNumberValidator().getInvarientLength(); } public static int getChangeableLength(){ return getAccessionNumberValidator().getChangeableLength(); } public static int getMaxLength(){ return getAccessionNumberValidator().getMaxAccessionLength(); } public static ValidationResults correctFormat(String accessionNumber, boolean validateYear){ return getAccessionNumberValidator().validFormat(accessionNumber, validateYear); } public static boolean isUsed( String accessionNumber){ return getAccessionNumberValidator().accessionNumberIsUsed(accessionNumber, null); } public static String getAccessionNumberFromSampleItemAccessionNumber( String accessionNumber){ int lastDash = accessionNumber.lastIndexOf('-'); return accessionNumber.substring(0, lastDash); } }