Skip to content

Commit

Permalink
Separate register from edit case
Browse files Browse the repository at this point in the history
  • Loading branch information
KochTobi committed Oct 17, 2024
1 parent 3b2ee4c commit d80258f
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,18 @@ public interface MeasurementMetadataConverter {
* </ul>
*
* @param parsingResult the parsing result to take as input for the conversion.
* @param ignoreMeasurementId weather to ignore the measurement identifier or not
* @return a list of converted implementations of {@link MeasurementMetadata}.
* @throws UnknownMetadataTypeException if no matching implementation of
* {@link MeasurementMetadata} can be associated from the
* provided {@link ParsingResult#columnMap()}.
* @since 1.4.0
*/
List<? extends MeasurementMetadata> convert(ParsingResult parsingResult,
boolean ignoreMeasurementId)
List<? extends MeasurementMetadata> convertRegister(ParsingResult parsingResult)
throws UnknownMetadataTypeException;

List<MeasurementMetadata> convertEdit(ParsingResult parsingResult)
throws UnknownMetadataTypeException, MissingSampleIdException;

class UnknownMetadataTypeException extends RuntimeException {

public UnknownMetadataTypeException(String message) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,14 +84,30 @@ private static Map<String, Integer> countHits(Collection<String> target, Set<Str
}

@Override
public List<MeasurementMetadata> convert(ParsingResult parsingResult, boolean ignoreMeasurementId)
public List<MeasurementMetadata> convertRegister(ParsingResult parsingResult)
throws UnknownMetadataTypeException, MissingSampleIdException {
Objects.requireNonNull(parsingResult);
var properties = parsingResult.columnMap().keySet();
if (looksLikeNgsMeasurement(properties, ignoreMeasurementId)) {
return tryConversion(this::convertNGSMeasurement, parsingResult);
} else if (looksLikeProteomicsMeasurement(properties, ignoreMeasurementId)) {
return tryConversion(this::convertProteomicsMeasurement, parsingResult);
if (looksLikeNgsMeasurement(properties, false)) {
return tryConversion(this::convertExistingNGSMeasurement, parsingResult);
} else if (looksLikeProteomicsMeasurement(properties, false)) {
return tryConversion(this::convertNewProteomicsMeasurement, parsingResult);
} else {
throw new UnknownMetadataTypeException(
"Unknown metadata type: cannot match properties to any known metadata type. Provided [%s]".formatted(
String.join(", ", properties)));
}
}

@Override
public List<MeasurementMetadata> convertEdit(ParsingResult parsingResult)
throws UnknownMetadataTypeException, MissingSampleIdException {
Objects.requireNonNull(parsingResult);
var properties = parsingResult.columnMap().keySet();
if (looksLikeNgsMeasurement(properties, true)) {
return tryConversion(this::convertExistingNGSMeasurement, parsingResult);
} else if (looksLikeProteomicsMeasurement(properties, true)) {
return tryConversion(this::convertExistingProteomicsMeasurement, parsingResult);
} else {
throw new UnknownMetadataTypeException(
"Unknown metadata type: cannot match properties to any known metadata type. Provided [%s]".formatted(
Expand All @@ -108,7 +124,65 @@ private List<MeasurementMetadata> tryConversion(
}
}

private List<MeasurementMetadata> convertProteomicsMeasurement(ParsingResult parsingResult) {
private List<MeasurementMetadata> convertNewProteomicsMeasurement(ParsingResult parsingResult) {
var result = new ArrayList<MeasurementMetadata>();
for (int i = 0; i < parsingResult.rows().size(); i++) {
var sampleCode = SampleCode.create(parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.SAMPLE_ID.headerName(), ""));
var technicalReplicateName = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.TECHNICAL_REPLICATE_NAME.headerName(), "");
var organisationId = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.ORGANISATION_ID.headerName(), "");
var msDevice = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.MS_DEVICE.headerName(), "");
var samplePoolGroup = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.POOL_GROUP.headerName(), "");
var facility = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.FACILITY.headerName(), "");
var fractionName = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.CYCLE_FRACTION_NAME.headerName(), "");
var digestionEnzyme = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.DIGESTION_ENZYME.headerName(), "");
var digestionMethod = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.DIGESTION_METHOD.headerName(), "");
var enrichmentMethod = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.ENRICHMENT_METHOD.headerName(), "");
var injectionVolume = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.INJECTION_VOLUME.headerName(), "");
var lcColumn = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.LC_COLUMN.headerName(), "");
var lcmsMethod = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.LCMS_METHOD.headerName(), "");
var labelingType = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.LABELING_TYPE.headerName(), "");
var label = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.LABEL.headerName(), "");
var comment = parsingResult.getValueOrDefault(i,
ProteomicsMeasurementRegisterColumn.COMMENT.headerName(), "");
var pxpMetaDaturm = new ProteomicsMeasurementMetadata(
"",
sampleCode,
technicalReplicateName,
organisationId,
msDevice,
samplePoolGroup,
facility,
fractionName,
digestionEnzyme,
digestionMethod,
enrichmentMethod,
injectionVolume,
lcColumn,
lcmsMethod,
new Labeling(labelingType, label),
comment);
result.add(pxpMetaDaturm);
}
return result;
}

private List<MeasurementMetadata> convertExistingProteomicsMeasurement(
ParsingResult parsingResult) {
var result = new ArrayList<MeasurementMetadata>();
for (int i = 0; i < parsingResult.rows().size(); i++) {
var measurementId = parsingResult.getValueOrDefault(i,
Expand Down Expand Up @@ -166,7 +240,7 @@ private List<MeasurementMetadata> convertProteomicsMeasurement(ParsingResult par
return result;
}

private List<MeasurementMetadata> convertNGSMeasurement(ParsingResult parsingResult) {
private List<MeasurementMetadata> convertExistingNGSMeasurement(ParsingResult parsingResult) {
var result = new ArrayList<MeasurementMetadata>();

for (int i = 0; i < parsingResult.rows().size(); i++) {
Expand All @@ -184,7 +258,7 @@ private List<MeasurementMetadata> convertNGSMeasurement(ParsingResult parsingRes
var facility = parsingResult.getValueOrDefault(i,
NGSMeasurementEditColumn.FACILITY.headerName(), "");
var sequencingReadType = parsingResult.getValueOrDefault(i,
NGSMeasurementEditColumn.SEQUENCING_RUN_PROTOCOL.headerName(), "");
NGSMeasurementEditColumn.SEQUENCING_READ_TYPE.headerName(), "");
var libraryKit = parsingResult.getValueOrDefault(i,
NGSMeasurementEditColumn.LIBRARY_KIT.headerName(), "");
var flowCell = parsingResult.getValueOrDefault(i,
Expand Down Expand Up @@ -219,6 +293,58 @@ private List<MeasurementMetadata> convertNGSMeasurement(ParsingResult parsingRes
return result;
}

private List<MeasurementMetadata> convertNewNGSMeasurement(ParsingResult parsingResult) {
var result = new ArrayList<MeasurementMetadata>();

for (int i = 0; i < parsingResult.rows().size(); i++) {
var sampleCodes = List.of(
SampleCode.create(
parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.SAMPLE_ID.headerName(),
""))
);
var organisationId = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.ORGANISATION_ID.headerName(), "");
var instrument = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.INSTRUMENT.headerName(), "");
var facility = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.FACILITY.headerName(), "");
var sequencingReadType = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.SEQUENCING_READ_TYPE.headerName(), "");
var libraryKit = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.LIBRARY_KIT.headerName(), "");
var flowCell = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.FLOW_CELL.headerName(), "");
var runProtocol = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.SEQUENCING_RUN_PROTOCOL.headerName(), "");
var poolGroup = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.POOL_GROUP.headerName(), "");
var indexI7 = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.INDEX_I7.headerName(), "");
var indexI5 = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.INDEX_I5.headerName(), "");
var comment = parsingResult.getValueOrDefault(i,
NGSMeasurementRegisterColumn.COMMENT.headerName(), "");
var metadatum = new NGSMeasurementMetadata(
"",
sampleCodes,
organisationId,
instrument,
facility,
sequencingReadType,
libraryKit,
flowCell,
runProtocol,
poolGroup,
indexI7,
indexI5,
comment
);
result.add(metadatum);
}
return result;
}

private boolean looksLikeNgsMeasurement(Collection<String> properties, boolean ignoreID) {
var formattedProperties = properties.stream().map(String::toLowerCase)
.collect(Collectors.toList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.html.ListItem;
import com.vaadin.flow.component.html.OrderedList;
import com.vaadin.flow.component.html.OrderedList.NumberingType;
import com.vaadin.flow.component.html.Span;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
Expand Down Expand Up @@ -210,8 +211,12 @@ private void onUploadSucceeded(SucceededEvent succeededEvent) {
};
List<MeasurementMetadata> result;
try {
result = MetadataConverter.measurementConverter()
.convert(parsingResult, mode.equals(MODE.ADD));
result = switch (mode) {
case ADD -> MetadataConverter.measurementConverter()
.convertRegister(parsingResult);
case EDIT -> MetadataConverter.measurementConverter()
.convertEdit(parsingResult);
};
} catch (
UnknownMetadataTypeException e) { // we want to display this in the dialog, not via the notification system
displayError(succeededEvent.getFileName(),
Expand Down Expand Up @@ -477,7 +482,7 @@ private Div createInvalidDisplayBox(Collection<String> invalidMeasurements) {
OrderedList invalidMeasurementsList = new OrderedList(
invalidMeasurements.stream().map(ListItem::new).toArray(ListItem[]::new));
invalidMeasurementsList.addClassName("invalid-measurement-list");
invalidMeasurementsList.setType(OrderedList.NumberingType.NUMBER);
invalidMeasurementsList.setType(NumberingType.NUMBER);
validationDetails.add(invalidMeasurementsList);
box.add(header, validationDetails, instruction);
return box;
Expand Down

0 comments on commit d80258f

Please sign in to comment.