Skip to content
Snippets Groups Projects
Commit 7f40af9f authored by vkovtun's avatar vkovtun
Browse files

SSDM-13256: Fixing a corner case when exporting a property type which is...

SSDM-13256: Fixing a corner case when exporting a property type which is absent in the type of the exported sample.
parent bd65cdbd
No related branches found
No related tags found
1 merge request!40SSDM-13578 : 2PT : Database and V3 Implementation - include the new AFS "free"...
...@@ -123,22 +123,22 @@ public abstract class AbstractXLSEntityExportHelper<ENTITY extends IPermIdHolder ...@@ -123,22 +123,22 @@ public abstract class AbstractXLSEntityExportHelper<ENTITY extends IPermIdHolder
final String[] selectedFieldHeaders = selectedExportFields.stream() final String[] selectedFieldHeaders = selectedExportFields.stream()
.filter(field -> isFieldAcceptable(possibleAttributeNameSet, field)) .filter(field -> isFieldAcceptable(possibleAttributeNameSet, field))
.map(field -> .flatMap(field ->
{ {
final String fieldId = field.get(FIELD_ID_KEY); final String fieldId = field.get(FIELD_ID_KEY);
switch (FieldType.valueOf(field.get(FIELD_TYPE_KEY))) switch (FieldType.valueOf(field.get(FIELD_TYPE_KEY)))
{ {
case ATTRIBUTE: case ATTRIBUTE:
{ {
return Attribute.valueOf(fieldId).getName(); return Stream.of(Attribute.valueOf(fieldId).getName());
} }
case PROPERTY: case PROPERTY:
{ {
return propertyTypes.stream() return propertyTypes.stream()
.filter(propertyType -> Objects.equals(propertyType.getCode(), fieldId)) .filter(propertyType -> Objects.equals(propertyType.getCode(), fieldId))
.findFirst() .findFirst()
.orElseThrow(() -> new IllegalArgumentException("Property type not found for id: " + fieldId)) .stream()
.getLabel(); .map(PropertyType::getLabel);
} }
default: default:
{ {
...@@ -157,10 +157,10 @@ public abstract class AbstractXLSEntityExportHelper<ENTITY extends IPermIdHolder ...@@ -157,10 +157,10 @@ public abstract class AbstractXLSEntityExportHelper<ENTITY extends IPermIdHolder
? Arrays.stream(requiredForImportAttributes).filter(attribute -> !selectedAttributes.contains(attribute)) ? Arrays.stream(requiredForImportAttributes).filter(attribute -> !selectedAttributes.contains(attribute))
.map(Attribute::getName) .map(Attribute::getName)
: Stream.empty(); : Stream.empty();
final String[] allFieldNames = Stream.concat(Arrays.stream(selectedFieldHeaders), requiredForImportAttributeNameStream) final String[] allFieldHeaders = Stream.concat(Arrays.stream(selectedFieldHeaders), requiredForImportAttributeNameStream)
.toArray(String[]::new); .toArray(String[]::new);
warnings.addAll(addRow(rowNumber++, true, typeExportableKind, typePermId, allFieldNames)); warnings.addAll(addRow(rowNumber++, true, typeExportableKind, typePermId, allFieldHeaders));
// Values // Values
final Set<Map<String, String>> selectedExportFieldSet = new HashSet<>(selectedExportFields); final Set<Map<String, String>> selectedExportFieldSet = new HashSet<>(selectedExportFields);
...@@ -178,19 +178,21 @@ public abstract class AbstractXLSEntityExportHelper<ENTITY extends IPermIdHolder ...@@ -178,19 +178,21 @@ public abstract class AbstractXLSEntityExportHelper<ENTITY extends IPermIdHolder
final String[] entityValues = Stream.concat(selectedExportFields.stream(), final String[] entityValues = Stream.concat(selectedExportFields.stream(),
extraExportFields.stream()) extraExportFields.stream())
.filter(field -> isFieldAcceptable(possibleAttributeNameSet, field)) .filter(field -> isFieldAcceptable(possibleAttributeNameSet, field))
.map(field -> .flatMap(field ->
{ {
final String fieldId = field.get(FIELD_ID_KEY); final String fieldId = field.get(FIELD_ID_KEY);
switch (FieldType.valueOf(field.get(FIELD_TYPE_KEY))) switch (FieldType.valueOf(field.get(FIELD_TYPE_KEY)))
{ {
case ATTRIBUTE: case ATTRIBUTE:
{ {
return getAttributeValue(entity, Attribute.valueOf(fieldId)); return Stream.of(getAttributeValue(entity, Attribute.valueOf(fieldId)));
} }
case PROPERTY: case PROPERTY:
{ {
return getPropertiesMappingFunction(textFormatting, entity.getProperties()) final PropertyType propertyType = codeToPropertyTypeMap.get(fieldId);
.apply(codeToPropertyTypeMap.get(fieldId)); return propertyType != null
? Stream.of(getPropertiesMappingFunction(textFormatting, entity.getProperties()).apply(propertyType))
: Stream.of();
} }
default: default:
{ {
......
...@@ -30,6 +30,7 @@ import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.SAMPLE; ...@@ -30,6 +30,7 @@ import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.SAMPLE;
import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.STORAGE_CONFIRMATION; import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.STORAGE_CONFIRMATION;
import java.util.Collection; import java.util.Collection;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
...@@ -43,6 +44,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSet; ...@@ -43,6 +44,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSet;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSetType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSetType;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetFetchOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.DataSetPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.DataSetPermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.Person;
import ch.ethz.sis.openbis.generic.server.xls.export.Attribute; import ch.ethz.sis.openbis.generic.server.xls.export.Attribute;
import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind; import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind;
import ch.ethz.sis.openbis.generic.server.xls.export.XLSExport; import ch.ethz.sis.openbis.generic.server.xls.export.XLSExport;
...@@ -153,19 +155,23 @@ public class XLSDataSetExportHelper extends AbstractXLSEntityExportHelper<DataSe ...@@ -153,19 +155,23 @@ public class XLSDataSetExportHelper extends AbstractXLSEntityExportHelper<DataSe
} }
case REGISTRATOR: case REGISTRATOR:
{ {
return dataSet.getRegistrator().getUserId(); final Person registrator = dataSet.getRegistrator();
return registrator != null ? registrator.getUserId() : null;
} }
case REGISTRATION_DATE: case REGISTRATION_DATE:
{ {
return DATE_FORMAT.format(dataSet.getRegistrationDate()); final Date registrationDate = dataSet.getRegistrationDate();
return registrationDate != null ? DATE_FORMAT.format(registrationDate) : null;
} }
case MODIFIER: case MODIFIER:
{ {
return dataSet.getModifier().getUserId(); final Person modifier = dataSet.getModifier();
return modifier != null ? modifier.getUserId() : null;
} }
case MODIFICATION_DATE: case MODIFICATION_DATE:
{ {
return DATE_FORMAT.format(dataSet.getModificationDate()); final Date modificationDate = dataSet.getModificationDate();
return modificationDate != null ? DATE_FORMAT.format(modificationDate) : null;
} }
case PARENTS: case PARENTS:
{ {
......
...@@ -25,6 +25,7 @@ import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.REGISTRATI ...@@ -25,6 +25,7 @@ import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.REGISTRATI
import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.REGISTRATOR; import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.REGISTRATOR;
import java.util.Collection; import java.util.Collection;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -36,6 +37,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment; ...@@ -36,6 +37,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.ExperimentType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.ExperimentType;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions.ExperimentFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions.ExperimentFetchOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentPermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.Person;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.Project;
import ch.ethz.sis.openbis.generic.server.xls.export.Attribute; import ch.ethz.sis.openbis.generic.server.xls.export.Attribute;
import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind; import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind;
...@@ -102,23 +105,28 @@ public class XLSExperimentExportHelper extends AbstractXLSEntityExportHelper<Exp ...@@ -102,23 +105,28 @@ public class XLSExperimentExportHelper extends AbstractXLSEntityExportHelper<Exp
} }
case PROJECT: case PROJECT:
{ {
return experiment.getProject().getIdentifier().getIdentifier(); final Project project = experiment.getProject();
return project != null ? project.getIdentifier().getIdentifier() : null;
} }
case REGISTRATOR: case REGISTRATOR:
{ {
return experiment.getRegistrator().getUserId(); final Person registrator = experiment.getRegistrator();
return registrator != null ? registrator.getUserId() : null;
} }
case REGISTRATION_DATE: case REGISTRATION_DATE:
{ {
return DATE_FORMAT.format(experiment.getRegistrationDate()); final Date registrationDate = experiment.getRegistrationDate();
return registrationDate != null ? DATE_FORMAT.format(registrationDate) : null;
} }
case MODIFIER: case MODIFIER:
{ {
return experiment.getModifier().getUserId(); final Person modifier = experiment.getModifier();
return modifier != null ? modifier.getUserId() : null;
} }
case MODIFICATION_DATE: case MODIFICATION_DATE:
{ {
return DATE_FORMAT.format(experiment.getModificationDate()); final Date modificationDate = experiment.getModificationDate();
return modificationDate != null ? DATE_FORMAT.format(modificationDate) : null;
} }
default: default:
{ {
......
...@@ -18,6 +18,7 @@ package ch.ethz.sis.openbis.generic.server.xls.export.helper; ...@@ -18,6 +18,7 @@ package ch.ethz.sis.openbis.generic.server.xls.export.helper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Date;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
...@@ -30,9 +31,11 @@ import org.apache.poi.ss.usermodel.Workbook; ...@@ -30,9 +31,11 @@ import org.apache.poi.ss.usermodel.Workbook;
import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IEntityType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IEntityType;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.Person;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.Project; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.Project;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.fetchoptions.ProjectFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.fetchoptions.ProjectFetchOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectPermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.Space;
import ch.ethz.sis.openbis.generic.server.xls.export.Attribute; import ch.ethz.sis.openbis.generic.server.xls.export.Attribute;
import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind; import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind;
import ch.ethz.sis.openbis.generic.server.xls.export.FieldType; import ch.ethz.sis.openbis.generic.server.xls.export.FieldType;
...@@ -171,23 +174,28 @@ public class XLSProjectExportHelper extends AbstractXLSExportHelper<IEntityType> ...@@ -171,23 +174,28 @@ public class XLSProjectExportHelper extends AbstractXLSExportHelper<IEntityType>
} }
case SPACE: case SPACE:
{ {
return project.getSpace().getCode(); final Space space = project.getSpace();
return space != null ? space.getCode() : null;
} }
case REGISTRATOR: case REGISTRATOR:
{ {
return project.getRegistrator().getUserId(); final Person registrator = project.getRegistrator();
return registrator != null ? registrator.getUserId() : null;
} }
case REGISTRATION_DATE: case REGISTRATION_DATE:
{ {
return DATE_FORMAT.format(project.getRegistrationDate()); final Date registrationDate = project.getRegistrationDate();
return registrationDate != null ? DATE_FORMAT.format(registrationDate) : null;
} }
case MODIFIER: case MODIFIER:
{ {
return project.getModifier().getUserId(); final Person modifier = project.getModifier();
return modifier != null ? modifier.getUserId() : null;
} }
case MODIFICATION_DATE: case MODIFICATION_DATE:
{ {
return DATE_FORMAT.format(project.getModificationDate()); final Date modificationDate = project.getModificationDate();
return modificationDate != null ? DATE_FORMAT.format(modificationDate) : null;
} }
default: default:
{ {
......
...@@ -31,6 +31,7 @@ import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.REGISTRATO ...@@ -31,6 +31,7 @@ import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.REGISTRATO
import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.SPACE; import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.SPACE;
import java.util.Collection; import java.util.Collection;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -38,6 +39,7 @@ import java.util.stream.Collectors; ...@@ -38,6 +39,7 @@ import java.util.stream.Collectors;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.Person;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions;
...@@ -151,19 +153,23 @@ public class XLSSampleExportHelper extends AbstractXLSEntityExportHelper<Sample, ...@@ -151,19 +153,23 @@ public class XLSSampleExportHelper extends AbstractXLSEntityExportHelper<Sample,
} }
case REGISTRATOR: case REGISTRATOR:
{ {
return sample.getRegistrator().getUserId(); final Person registrator = sample.getRegistrator();
return registrator != null ? registrator.getUserId() : null;
} }
case REGISTRATION_DATE: case REGISTRATION_DATE:
{ {
return DATE_FORMAT.format(sample.getRegistrationDate()); final Date registrationDate = sample.getRegistrationDate();
return registrationDate != null ?DATE_FORMAT.format(registrationDate) : null;
} }
case MODIFIER: case MODIFIER:
{ {
return sample.getModifier().getUserId(); final Person modifier = sample.getModifier();
return modifier != null ? modifier.getUserId() : null;
} }
case MODIFICATION_DATE: case MODIFICATION_DATE:
{ {
return DATE_FORMAT.format(sample.getModificationDate()); final Date modificationDate = sample.getModificationDate();
return modificationDate != null ? DATE_FORMAT.format(modificationDate) : null;
} }
case $: case $:
{ {
......
...@@ -680,6 +680,36 @@ public class XLSExportData ...@@ -680,6 +680,36 @@ public class XLSExportData
List.of(), List.of(),
false false
}, },
{
"export-experiment-filtered-fields.xlsx",
Map.of(),
ExperimentExpectations.class,
List.of(
new ExportablePermId(EXPERIMENT, new ExperimentPermId("200001010000000-0001")),
new ExportablePermId(EXPERIMENT, new ExperimentPermId("200001010000000-0002")),
new ExportablePermId(EXPERIMENT, new ExperimentPermId("200001010000000-0003"))
),
true,
Map.of(
EXPERIMENT.toString(), Map.of(
"COLLECTION", List.of(
Map.of(FIELD_TYPE_KEY, FieldType.ATTRIBUTE.toString(), FIELD_ID_KEY, "IDENTIFIER"),
Map.of(FIELD_TYPE_KEY, FieldType.ATTRIBUTE.toString(), FIELD_ID_KEY, "PROJECT"),
Map.of(FIELD_TYPE_KEY, FieldType.PROPERTY.toString(), FIELD_ID_KEY,
"$DEFAULT_OBJECT_TYPE"),
Map.of(FIELD_TYPE_KEY, FieldType.PROPERTY.toString(), FIELD_ID_KEY, "FINISHED_FLAG")),
"DEFAULT_EXPERIMENT", List.of(
Map.of(FIELD_TYPE_KEY, FieldType.PROPERTY.toString(), FIELD_ID_KEY, "FINISHED_FLAG"),
Map.of(FIELD_TYPE_KEY, FieldType.ATTRIBUTE.toString(), FIELD_ID_KEY, "IDENTIFIER"),
Map.of(FIELD_TYPE_KEY, FieldType.ATTRIBUTE.toString(), FIELD_ID_KEY, "CODE"),
Map.of(FIELD_TYPE_KEY, FieldType.PROPERTY.toString(), FIELD_ID_KEY,
"$DEFAULT_OBJECT_TYPE"))
)
),
XLSExport.TextFormatting.PLAIN,
List.of(),
false
},
{ {
"export-sample-compatible-with-import.xlsx", "export-sample-compatible-with-import.xlsx",
Map.of(), Map.of(),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment