Skip to content

Commit

Permalink
chore: support options and tables
Browse files Browse the repository at this point in the history
  • Loading branch information
brunopacheco1 committed Aug 23, 2024
1 parent 5e947e3 commit dd7d297
Show file tree
Hide file tree
Showing 5 changed files with 248 additions and 55 deletions.
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,79 @@ 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(formField.getFieldInfoText())
.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.valueOf(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 +264,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 +275,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())) {
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();
}
}
55 changes: 54 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,54 @@ 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: string
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

0 comments on commit dd7d297

Please sign in to comment.