Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: support options and tables #131

Merged
merged 1 commit into from
Aug 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,23 @@

package io.github.genomicdatainfrastructure.daam.gateways;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.github.genomicdatainfrastructure.daam.model.*;
import io.github.genomicdatainfrastructure.daam.remote.rems.model.*;
import jakarta.enterprise.context.ApplicationScoped;
import lombok.RequiredArgsConstructor;

import java.util.*;

import static java.util.Optional.ofNullable;

@ApplicationScoped
@RequiredArgsConstructor
public class RemsApplicationMapper {

private final ObjectMapper mapper;

public RetrievedApplication from(String userId, Application application) {
return RetrievedApplication
.builder()
Expand Down Expand Up @@ -172,31 +178,80 @@ private List<RetrievedApplicationFormField> toFormFields(Form form) {

return potentialFields.map(fields -> fields
.stream()
.filter(Objects::nonNull)
.map(this::toFormField)
.toList())
.orElse(null);
}

private RetrievedApplicationFormField toFormField(Field formField) {
var potentialFormField = ofNullable(formField);

return new RetrievedApplicationFormField(potentialFormField.map(Field::getFieldId).orElse(
null),
potentialFormField.map(Field::getFieldValue).orElse(null),
potentialFormField.map(Field::getFieldOptional).orElse(null),
potentialFormField.map(Field::getFieldPrivate).orElse(null),
potentialFormField.map(Field::getFieldVisible).orElse(null),
potentialFormField.map(f -> toLabelObject(f.getFieldTitle())).orElse(null),
potentialFormField.map(this::toFieldType).orElse(null));
}
var type = formField.getFieldType();

var value = formField.getFieldValue();

private String toFieldType(Field field) {
var fieldType = Optional.of(field.getFieldType());
String stringValue = null;
var tableValues = List.<List<FormFieldTableValue>>of();

return fieldType.map(Field.FieldTypeEnum::value)
if (Field.FieldTypeEnum.TABLE == type) {
tableValues = mapper.convertValue(value, new TypeReference<>() {
});
} else {
stringValue = ofNullable(value).map(Object::toString).orElse(null);
}

return RetrievedApplicationFormField.builder()
.id(formField.getFieldId())
.value(stringValue)
.optional(formField.getFieldOptional())
._private(formField.getFieldPrivate())
.visible(formField.getFieldVisible())
.title(toLabelObject(formField.getFieldTitle()))
.type(ofNullable(type).map(Field.FieldTypeEnum::value).orElse(null))
.tableValues(tableValues)
.infoText(toLabelObject(formField.getFieldInfoText()))
.placeholder(toLabelObject(formField.getFieldPlaceholder()))
.maxLength(formField.getFieldMaxLength())
.privacy(toPrivacy(formField))
.options(toOptions(formField))
.tableColumns(toColumns(formField))
.build();
}

private RetrievedApplicationFormField.PrivacyEnum toPrivacy(Field formField) {
return ofNullable(formField)
.map(Field::getFieldPrivacy)
.map(it -> RetrievedApplicationFormField.PrivacyEnum.fromString(it.value()))
.orElse(null);
}

private List<FormFieldOption> toOptions(Field formField) {
var nonNullOptions = ofNullable(formField)
.map(Field::getFieldOptions)
.orElseGet(List::of);

return nonNullOptions.stream()
.filter(Objects::nonNull)
.map(it -> FormFieldOption.builder()
.key(it.getKey())
.label(toLabelObject(it.getLabel()))
.build())
.toList();
}

private List<FormFieldTableColumn> toColumns(Field formField) {
var nonNullOptions = ofNullable(formField)
.map(Field::getFieldColumns)
.orElseGet(List::of);

return nonNullOptions.stream()
.filter(Objects::nonNull)
.map(it -> FormFieldTableColumn.builder()
.key(it.getKey())
.label(toLabelObject(it.getLabel()))
.build())
.toList();
}

private List<String> toPermissions(Application application) {
var potentialPermissions = ofNullable(application.getApplicationPermissions());

Expand All @@ -210,7 +265,8 @@ private List<String> toPermissions(Application application) {
private String toPermission(Application.ApplicationPermissionsEnum permission) {
var potentialPermission = ofNullable(permission);

return potentialPermission.map(Application.ApplicationPermissionsEnum::value)
return potentialPermission
.map(Application.ApplicationPermissionsEnum::value)
.orElse(null);
}

Expand All @@ -220,25 +276,22 @@ private List<RetrievedApplicationEvent> toEvents(Application application) {

return potentialEvents
.stream()
.map(this::toEvent)
.filter(Objects::nonNull)
.map(this::toEvent)
.sorted(Comparator.comparing(RetrievedApplicationEvent::getEventTime).reversed())
.toList();
}

private RetrievedApplicationEvent toEvent(Event event) {
var potentialEvent = ofNullable(event);

return new RetrievedApplicationEvent(
potentialEvent.map(this::toUserId).orElse(null),
potentialEvent.map(Event::getEventTime).orElse(null),
potentialEvent.map(Event::getEventType).orElse(null));
return RetrievedApplicationEvent.builder()
.actorId(toUserId(event))
.eventTime(event.getEventTime())
.eventType(event.getEventType())
.build();
}

private String toUserId(Event event) {
var eventActorAttributes = ofNullable(event
.getEventActorAttributes());

var eventActorAttributes = ofNullable(event.getEventActorAttributes());
return eventActorAttributes.map(UserWithAttributes::getUserid).orElse(null);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,21 @@

package io.github.genomicdatainfrastructure.daam.gateways;

import static java.util.Optional.ofNullable;

import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;

import io.github.genomicdatainfrastructure.daam.model.SaveForm;
import io.github.genomicdatainfrastructure.daam.model.SaveFormField;
import io.github.genomicdatainfrastructure.daam.model.SaveFormsAndDuos;
import io.github.genomicdatainfrastructure.daam.remote.rems.model.FormTemplateTableValue;
import io.github.genomicdatainfrastructure.daam.remote.rems.model.SaveDraftCommand;
import io.github.genomicdatainfrastructure.daam.remote.rems.model.SaveDraftCommandFieldValues;

import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;

import static java.util.Optional.ofNullable;
import static java.util.function.Predicate.not;

public class SaveDraftCommandMapper {

private SaveDraftCommandMapper() {
Expand Down Expand Up @@ -47,10 +50,23 @@ private static Stream<SaveDraftCommandFieldValues> parseFieldValues(SaveForm for
}

private static SaveDraftCommandFieldValues parseFieldValue(SaveForm form, SaveFormField field) {
Object value = field.getValue();
if (Objects.nonNull(field.getTableValues())) {
brunopacheco1 marked this conversation as resolved.
Show resolved Hide resolved
value = field.getTableValues().stream()
.filter(Objects::nonNull)
.filter(not(Collection::isEmpty))
.map(it -> it.stream()
.map(columnValue -> FormTemplateTableValue.builder()
.column(columnValue.getColumn())
.value(columnValue.getValue())
.build()).toList()
)
.toList();
}
return SaveDraftCommandFieldValues.builder()
.form(form.getFormId())
.field(field.getFieldId())
.value(field.getValue())
.value(value)
.build();
}
}
61 changes: 60 additions & 1 deletion src/main/openapi/daam.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -656,6 +656,12 @@ components:
value:
type: string
title: Field value
tableValues:
type: array
items:
type: array
items:
$ref: "#/components/schemas/FormFieldTableValue"
SaveDUOCode:
properties:
duoId:
Expand Down Expand Up @@ -689,7 +695,6 @@ components:
type: integer
format: int64
applicant:
title: Applicant
$ref: "#/components/schemas/RetrievedApplicationApplicant"
members:
type: array
Expand Down Expand Up @@ -867,6 +872,60 @@ components:
type:
type: string
title: Field type
tableValues:
title: Table Values
type: array
items:
type: array
items:
$ref: "#/components/schemas/FormFieldTableValue"
tableColumns:
title: Table Columns
type: array
items:
$ref: "#/components/schemas/FormFieldTableColumn"
infoText:
type: array
items:
$ref: "#/components/schemas/Label"
placeholder:
type: array
items:
$ref: "#/components/schemas/Label"
maxLength:
type: integer
format: int64
privacy:
type: string
enum:
- private
- public
options:
type: array
items:
$ref: "#/components/schemas/FormFieldOption"
FormFieldTableValue:
properties:
column:
type: string
value:
type: string
FormFieldOption:
properties:
key:
type: string
label:
type: array
items:
$ref: "#/components/schemas/Label"
FormFieldTableColumn:
properties:
key:
type: string
label:
type: array
items:
$ref: "#/components/schemas/Label"
Label:
properties:
language:
Expand Down
Loading