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; }; }
/** * Finds the identity of a sample by climbing the hierarchy * * @param sample * @return identity attached to sample or null if no identity is attached * @throws IOException */ private SampleIdentity getIdentity(DetailedSample sample) throws IOException { if (sample.getParent() == null) { throw new IllegalArgumentException(ERR_MISSING_PARENT_ID); } SampleIdentity identity = LimsUtils.getParent(SampleIdentity.class, sample); return identity; }
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; }; }
public static ConsentLevel getIdentityConsentLevel(DetailedSample sample) { SampleIdentity identity = null; if (isIdentitySample(sample)) { identity = (SampleIdentity) sample; } else { identity = LimsUtils.getParent(SampleIdentity.class, sample); } if (identity != null && identity.getConsentLevel() != null) { return identity.getConsentLevel(); } return null; }
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; }; }
@Override public String generate(Sample sample) throws MisoNamingException, IOException { if (!LimsUtils.isDetailedSample(sample)) { throw new IllegalArgumentException("Can only generate an alias for detailed samples"); } DetailedSample detailed = (DetailedSample) sample; if (isIdentitySample(detailed)) { return generateIdentityAlias((SampleIdentity) detailed); } for (DetailedSample parent = detailed.getParent(); parent != null; parent = parent.getParent()) { if (isAliquotSample(parent)) { return addSiblingTag(parent.getAlias(), detailed); } if (isTissueSample(parent)) { if (isTissueSample(detailed)) { // tissues parented to tissues return generateTissueAlias((SampleTissue) detailed, LimsUtils.getParent(SampleIdentity.class, parent)); } else { return addSiblingTag(parent.getAlias(), detailed); } } if (isIdentitySample(parent)) { if (!isTissueSample(detailed)) throw new IllegalArgumentException("Missing parent tissue"); return generateTissueAlias((SampleTissue) detailed, (SampleIdentity) parent); } } throw new IllegalStateException("Unexpected conditions for alias generation"); }
to.setParent(getParent(from)); if (!LimsUtils.isStringEmptyOrNull(from.getExternalNames()) && to.getParent() != null) { SampleIdentity identity = LimsUtils.getParent(SampleIdentity.class, to); if (identity == null) { throw new IllegalStateException("Missing Identity at root of hierarchy");