public static boolean isLcmTubeSample(Sample sample) { if (!isDetailedSample(sample)) return false; return sample instanceof SampleLCMTube; }
public static boolean isStockSingleCellSample(Sample sample) { if (!isDetailedSample(sample)) return false; return sample instanceof SampleStockSingleCell; }
public static boolean isAliquotSingleCellSample(Sample sample) { if (!isDetailedSample(sample)) return false; return sample instanceof SampleAliquotSingleCell; }
public static boolean isPlainSample(Sample sample) { return !isDetailedSample(sample); }
public static boolean isProcessingSingleCellSample(Sample sample) { if (!isDetailedSample(sample)) return false; return sample instanceof SampleSingleCell; }
public static boolean isValidRelationship(Iterable<SampleValidRelationship> relations, Sample parent, Sample child) { if (parent == null && !isDetailedSample(child)) { return true; // Simple sample has no relationships. } if (!isDetailedSample(child) || !isDetailedSample(parent)) { return false; } return isValidRelationship( relations, ((DetailedSample) parent).getSampleClass(), ((DetailedSample) child).getSampleClass()); }
public static boolean isTissueProcessingSample(Sample sample) { if (!isDetailedSample(sample)) return false; return sample instanceof SampleTissueProcessing || safeCategoryCheck(sample, SampleTissueProcessing.CATEGORY_NAME); }
private static <S extends DetailedSample, T> Function<Sample, T> detailedSample(Class<S> clazz, Function<S, T> function, T defaultValue) { return s -> { if (clazz.isInstance(s)) { return function.apply(clazz.cast(s)); } if (LimsUtils.isDetailedSample(s)) { S parent = LimsUtils.getParent(clazz, (DetailedSample) s); if (parent != null) { return function.apply(parent); } } return defaultValue; }; }
private static Function<Sample, String> effectiveGroupIdProperty(Function<DetailedSample, String> getter) { return s -> { if (LimsUtils.isDetailedSample(s)) { DetailedSample parent = ((DetailedSample) s).getEffectiveGroupIdSample().orElse(null); if (parent != null) { return getter.apply(parent); } } return ""; }; }
public static boolean isTissueSample(Sample sample) { if (!isDetailedSample(sample)) return false; return sample instanceof SampleTissue || safeCategoryCheck(sample, SampleTissue.CATEGORY_NAME); }
public static boolean isIdentitySample(Sample sample) { if (!isDetailedSample(sample)) return false; return sample instanceof SampleIdentity || safeCategoryCheck(sample, SampleIdentity.CATEGORY_NAME); }
private void validateSamples(Array array, List<ValidationError> errors) { array.getSamples().forEach((pos, sam) -> { if (sam == null) { // wasn't found during #loadChildEntities errors.add(new ValidationError("Invalid Sample in position " + pos)); } else if (isDetailedSample(sam) && !isAliquotSample(sam)) { errors.add(new ValidationError("Sample in position " + pos + " must be an aliquot")); } }); }
private static <S extends DetailedSample, T> Function<Library, T> detailedSample(Class<S> clazz, Function<S, T> function, T defaultValue) { return l -> { if (clazz.isInstance(l.getSample())) { return function.apply(clazz.cast(l.getSample())); } if (LimsUtils.isDetailedSample(l.getSample())) { S parent = LimsUtils.getParent(clazz, (DetailedSample) l.getSample()); if (parent != null) { return function.apply(parent); } } return defaultValue; }; }
private static <S extends DetailedSample, T> Function<LibraryDilution, T> detailedSample(Class<S> clazz, Function<S, T> function, T defaultValue) { return d -> { if (clazz.isInstance(d.getLibrary().getSample())) { return function.apply(clazz.cast(d.getLibrary().getSample())); } if (LimsUtils.isDetailedSample(d.getLibrary().getSample())) { S parent = LimsUtils.getParent(clazz, (DetailedSample) d.getLibrary().getSample()); if (parent != null) { return function.apply(parent); } } return defaultValue; }; }
/** * Checks whether the configured naming scheme allows duplicate alias. If not, checks whether an alias is used by multiple samples. * This method should be called <b>after</b> saving a new Sample. DetailedSamples marked as having non-standard alias are also * considered valid * * @param alias the alias to validate * @throws ConstraintViolationException if duplicate alias are <b>not</b> allowed, <b>and</b> the Sample does not have nonStandardAlias * <b>and</b> the alias is used by multiple Samples * @throws IOException */ private void validateAliasUniqueness(Sample sample) throws IOException { if (isDetailedSample(sample) && ((DetailedSample) sample).hasNonStandardAlias()) { return; } if (!namingScheme.duplicateSampleAliasAllowed() && sampleStore.listByAlias(sample.getAlias()).size() > 1) { throw new ConstraintViolationException(String.format("A sample with this alias '%s' already exists in the database", sample.getAlias()), null, "alias"); } }
/** * Checks whether sample's alias conforms to the naming scheme. Validation is skipped for DetailedSamples * {@code if (sample.hasNonStandardAlias())} * * @param sample */ private void validateAlias(Sample sample) { if (!isDetailedSample(sample) || !((DetailedSample) sample).hasNonStandardAlias()) { uk.ac.bbsrc.tgac.miso.core.service.naming.validation.ValidationResult aliasValidation = namingScheme.validateSampleAlias(sample .getAlias()); if (!aliasValidation.isValid()) { throw new IllegalArgumentException("Invalid sample alias: '" + sample.getAlias() + "' - " + aliasValidation.getMessage()); } } }
private void validateParentOrThrow(Library library) { if (!isDetailedLibrary(library)) return; if (!isAliquotSample(library.getSample())) { String sc = null; if (isDetailedSample(library.getSample())) { DetailedSample sample = (DetailedSample) library.getSample(); sc = sample.getSampleClass() == null ? "not set" : sample.getSampleClass().getAlias(); } else { sc = "Plain Sample"; } throw new IllegalArgumentException(String.format("Sample Class '%s' is not a valid parent for Libraries. Must be an aliquot", sc)); } }
@Override public ValidationResult validateDeletion(Sample object) { ValidationResult result = new ValidationResult(); if (isDetailedSample(object)) { long childCount = sampleStore.getChildSampleCount(object); if (childCount > 0L) { result.addError(new ValidationError(object.getName() + " has " + childCount + " child sample" + (childCount > 1 ? "s" : ""))); } } if (object.getLibraries() != null && !object.getLibraries().isEmpty()) { result.addError(new ValidationError(object.getName() + " has " + object.getLibraries().size() + " librar" + (object.getLibraries().size() > 1 ? "ies" : "y"))); } return result; }
public static SampleDto asDto(@Nonnull Sample from, boolean includeBoxPositions) { SampleDto dto = null; if (isDetailedSample(from)) { dto = asDetailedSampleDto((DetailedSample) from); } else { dto = new SampleDto(); } copySampleFields(from, dto, includeBoxPositions); dto.setAccession(from.getAccession()); if (from.getQCs() != null && !from.getQCs().isEmpty()) { dto.setQcs(asQcDtos(from.getQCs())); } return dto; }
public static SampleDto asMinimalDto(@Nonnull Sample from) { DetailedSampleDto dto = new DetailedSampleDto(); copySampleFields(from, dto, false); if (isDetailedSample(from)) { DetailedSample detailed = (DetailedSample) from; dto.setSampleClassId(detailed.getSampleClass().getId()); dto.setCreationDate(detailed.getCreationDate() == null ? "" : formatDate(detailed.getCreationDate())); dto.setIdentityConsentLevel(getIdentityConsentLevelString(detailed)); if (detailed.getSubproject() != null) { dto.setSubprojectAlias(detailed.getSubproject().getAlias()); dto.setSubprojectPriority(detailed.getSubproject().getPriority()); } } return dto; }