diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java index cab505d29455e4730ac642de6f34ead4307161f5..01ec4eb5d6450424c2c0e184cd44a562597a779e 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java @@ -32,19 +32,33 @@ import org.apache.poi.ss.usermodel.Workbook; 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.plugin.Plugin; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyType; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.Vocabulary; 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.FieldType; import ch.ethz.sis.openbis.generic.server.xls.export.XLSExport; +import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes; +import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; public abstract class AbstractXLSEntityTypeExportHelper<ENTITY_TYPE extends IEntityType> extends AbstractXLSExportHelper<ENTITY_TYPE> { + + protected static Map<String, Integer> allVersions = VersionUtils.loadAllVersions(); + public AbstractXLSEntityTypeExportHelper(final Workbook wb) { super(wb); } + public static void setAllVersions(final Map<String, Integer> allVersions) + { + AbstractXLSEntityTypeExportHelper.allVersions = allVersions; + } + @Override public AdditionResult add(final IApplicationServerApi api, final String sessionToken, final Workbook wb, final List<String> permIds, int rowNumber, @@ -156,10 +170,66 @@ public abstract class AbstractXLSEntityTypeExportHelper<ENTITY_TYPE extends IEnt } } + protected AdditionResult addEntityTypePropertyAssignments(int rowNumber, + final Collection<PropertyAssignment> propertyAssignments, final ExportableKind exportableKind, + final String permId, final Map<String, List<Map<String, String>>> entityTypeExportFieldsMap, + final boolean compatibleWithImport) + { + final Collection<String> warnings = new ArrayList<>( + addRow(rowNumber++, true, exportableKind, permId, compatibleWithImport + ? ENTITY_ASSIGNMENT_COLUMNS + : Arrays.copyOfRange(ENTITY_ASSIGNMENT_COLUMNS, 1, ENTITY_ASSIGNMENT_COLUMNS.length))); + for (final PropertyAssignment propertyAssignment : propertyAssignments) + { + final PropertyType propertyType = propertyAssignment.getPropertyType(); + final Plugin plugin = propertyAssignment.getPlugin(); + final Vocabulary vocabulary = propertyType.getVocabulary(); + + final String[] values = { + String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.PROPERTY_TYPE, null, propertyType.getCode())), + propertyType.getCode(), + String.valueOf(propertyAssignment.isMandatory()).toUpperCase(), + String.valueOf(propertyAssignment.isShowInEditView()).toUpperCase(), + propertyAssignment.getSection(), + propertyType.getLabel(), + getFullDataTypeString(propertyType), + String.valueOf(vocabulary != null ? vocabulary.getCode() : ""), + propertyType.getDescription(), + mapToJSON(propertyType.getMetaData()), + plugin != null ? (plugin.getName() != null ? plugin.getName() + ".py" : "") : "" }; + warnings.addAll(addRow(rowNumber++, false, exportableKind, permId, + compatibleWithImport ? values : Arrays.copyOfRange(values, 1, values.length))); + } + return new AdditionResult(rowNumber, warnings); + } + + private String getFullDataTypeString(final PropertyType propertyType) + { + final String dataTypeString = String.valueOf(propertyType.getDataType()); + switch (propertyType.getDataType()) + { + case SAMPLE: + { + return dataTypeString + + ((propertyType.getSampleType() != null) ? ':' + propertyType.getSampleType().getCode() : ""); + } + case MATERIAL: + { + return dataTypeString + + ((propertyType.getMaterialType() != null) + ? ':' + propertyType.getMaterialType().getCode() : ""); + } + default: + { + return dataTypeString; + } + } + } + protected abstract Attribute[] getAttributes(final ENTITY_TYPE entityType); protected abstract String getAttributeValue(final ENTITY_TYPE entityType, final Attribute attribute); - + protected abstract ExportableKind getExportableKind(); } diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java index 0a88730f19d244f310126ceb3fdd5377c872f7fb..804f7eaaca3e1e37c59692d97664767070048e37 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java @@ -156,60 +156,6 @@ public abstract class AbstractXLSExportHelper<ENTITY_TYPE extends IEntityType> i return warnings; } - protected AdditionResult addEntityTypePropertyAssignments(int rowNumber, - final Collection<PropertyAssignment> propertyAssignments, final ExportableKind exportableKind, - final String permId, final Map<String, List<Map<String, String>>> entityTypeExportFieldsMap, - final boolean compatibleWithImport) - { - final Collection<String> warnings = new ArrayList<>( - addRow(rowNumber++, true, exportableKind, permId, compatibleWithImport - ? ENTITY_ASSIGNMENT_COLUMNS - : Arrays.copyOfRange(ENTITY_ASSIGNMENT_COLUMNS, 1, ENTITY_ASSIGNMENT_COLUMNS.length))); - for (final PropertyAssignment propertyAssignment : propertyAssignments) - { - final PropertyType propertyType = propertyAssignment.getPropertyType(); - final Plugin plugin = propertyAssignment.getPlugin(); - final Vocabulary vocabulary = propertyType.getVocabulary(); - - final String[] values = { "1", propertyType.getCode(), - String.valueOf(propertyAssignment.isMandatory()).toUpperCase(), - String.valueOf(propertyAssignment.isShowInEditView()).toUpperCase(), - propertyAssignment.getSection(), - propertyType.getLabel(), - getFullDataTypeString(propertyType), - String.valueOf(vocabulary != null ? vocabulary.getCode() : ""), - propertyType.getDescription(), - mapToJSON(propertyType.getMetaData()), - plugin != null ? (plugin.getName() != null ? plugin.getName() + ".py" : "") : "" }; - warnings.addAll(addRow(rowNumber++, false, exportableKind, permId, - compatibleWithImport ? values : Arrays.copyOfRange(values, 1, values.length))); - } - return new AdditionResult(rowNumber, warnings); - } - - private String getFullDataTypeString(final PropertyType propertyType) - { - final String dataTypeString = String.valueOf(propertyType.getDataType()); - switch (propertyType.getDataType()) - { - case SAMPLE: - { - return dataTypeString + - ((propertyType.getSampleType() != null) ? ':' + propertyType.getSampleType().getCode() : ""); - } - case MATERIAL: - { - return dataTypeString + - ((propertyType.getMaterialType() != null) - ? ':' + propertyType.getMaterialType().getCode() : ""); - } - default: - { - return dataTypeString; - } - } - } - @Override public ENTITY_TYPE getEntityType(final IApplicationServerApi api, final String sessionToken, final String permId) { diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSPermIdHolderExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSPermIdHolderExportHelper.java deleted file mode 100644 index 861383f3a77b85ba1cc2b3adb97cf6ba77a1c297..0000000000000000000000000000000000000000 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSPermIdHolderExportHelper.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright ETH 2023 Zürich, Scientific IT Services - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package ch.ethz.sis.openbis.generic.server.xls.export.helper; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.EnumSet; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.apache.poi.ss.usermodel.Workbook; - -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.IPermIdHolder; -import ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.Vocabulary; -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.FieldType; -import ch.ethz.sis.openbis.generic.server.xls.export.XLSExport; -import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; - -public abstract class AbstractXLSPermIdHolderExportHelper<HOLDER extends IPermIdHolder> extends AbstractXLSExportHelper<IEntityType> -{ - public AbstractXLSPermIdHolderExportHelper(final Workbook wb) - { - super(wb); - } - - @Override - public AdditionResult add(final IApplicationServerApi api, final String sessionToken, final Workbook wb, - final List<String> permIds, int rowNumber, - final Map<String, List<Map<String, String>>> entityTypeExportFieldsMap, - final XLSExport.TextFormatting textFormatting, final boolean compatibleWithImport) - { - if (permIds.size() != 1) - { - throw new UserFailureException("For entity type export number of permIds should be equal to 1."); - } - final HOLDER permIdHolder = getPermIdHolder(api, sessionToken, permIds.get(0)); - final Collection<String> warnings = new ArrayList<>(); - - if (permIdHolder != null) - { - final String permId = permIdHolder.getPermId().toString(); - final ExportableKind exportableKind = getExportableKind(); - warnings.addAll(addRow(rowNumber++, true, exportableKind, permId, exportableKind.name())); - - final Attribute[] possibleAttributes = getAttributes(permIdHolder); - if (entityTypeExportFieldsMap == null || entityTypeExportFieldsMap.isEmpty() || - !entityTypeExportFieldsMap.containsKey(exportableKind.toString()) || - entityTypeExportFieldsMap.get(exportableKind.toString()).isEmpty()) - { - // Export all attributes in any order - // Headers - final Attribute[] importableAttributes = Arrays.stream(possibleAttributes).filter(Attribute::isImportable) - .toArray(Attribute[]::new); - final Attribute[] attributes = compatibleWithImport ? importableAttributes : possibleAttributes; - final String[] attributeHeaders = Arrays.stream(attributes).map(Attribute::getName).toArray(String[]::new); - - warnings.addAll(addRow(rowNumber++, true, exportableKind, permId, attributeHeaders)); - - // Values - final String[] values = Arrays.stream(attributes).map(attribute -> getAttributeValue(permIdHolder, attribute)).toArray(String[]::new); - warnings.addAll(addRow(rowNumber++, false, exportableKind, permId, values)); - } else - { - // Export selected attributes in predefined order - // Headers - final Set<Attribute> possibleAttributeNameSet = Stream.of(possibleAttributes) - .filter(attribute -> !compatibleWithImport || attribute.isImportable()) - .collect(Collectors.toCollection(() -> EnumSet.noneOf(Attribute.class))); - final List<Map<String, String>> selectedExportAttributes = entityTypeExportFieldsMap.get(exportableKind.toString()); - - final String[] selectedAttributeHeaders = selectedExportAttributes.stream() - .filter(attribute -> AbstractXLSExportHelper.isFieldAcceptable(possibleAttributeNameSet, attribute)) - .map(attribute -> - { - if (FieldType.valueOf(attribute.get(FIELD_TYPE_KEY)) == FieldType.ATTRIBUTE) - { - return Attribute.valueOf(attribute.get(FIELD_ID_KEY)).getName(); - } else - { - throw new IllegalArgumentException(); - } - }).toArray(String[]::new); - final Attribute[] requiredForImportAttributes = Arrays.stream(possibleAttributes) - .filter(Attribute::isRequiredForImport) - .toArray(Attribute[]::new); - final Set<Attribute> selectedAttributes = selectedExportAttributes.stream() - .filter(map -> map.get(FIELD_TYPE_KEY).equals(FieldType.ATTRIBUTE.toString())) - .map(map -> Attribute.valueOf(map.get(FIELD_ID_KEY))) - .collect(Collectors.toCollection(() -> EnumSet.noneOf(Attribute.class))); - final Stream<String> requiredForImportAttributeNameStream = compatibleWithImport - ? Arrays.stream(requiredForImportAttributes) - .filter(attribute -> !selectedAttributes.contains(attribute)) - .map(Attribute::getName) - : Stream.empty(); - final String[] allAttributeNames = Stream.concat(Arrays.stream(selectedAttributeHeaders), requiredForImportAttributeNameStream) - .toArray(String[]::new); - - warnings.addAll(addRow(rowNumber++, true, exportableKind, permId, allAttributeNames)); - - // Values - final Set<Map<String, String>> selectedExportFieldSet = new HashSet<>(selectedExportAttributes); - final List<Map<String, String>> extraExportFields = compatibleWithImport - ? Arrays.stream(requiredForImportAttributes) - .map(attribute -> Map.of(FIELD_TYPE_KEY, FieldType.ATTRIBUTE.toString(), FIELD_ID_KEY, attribute.toString())) - .filter(map -> !selectedExportFieldSet.contains(map)) - .collect(Collectors.toList()) - : List.of(); - final String[] entityValues = Stream.concat(selectedExportAttributes.stream(), extraExportFields.stream()) - .filter(field -> isFieldAcceptable(possibleAttributeNameSet, field)) - .map(field -> - { - if (FieldType.valueOf(field.get(FIELD_TYPE_KEY)) == FieldType.ATTRIBUTE) - { - return getAttributeValue(permIdHolder, Attribute.valueOf(field.get(FIELD_ID_KEY))); - } else - { - throw new IllegalArgumentException(); - } - }).toArray(String[]::new); - - warnings.addAll(addRow(rowNumber++, false, exportableKind, permId, entityValues)); - } - - return new AdditionResult(rowNumber + 1, warnings); - } else - { - return new AdditionResult(rowNumber, warnings); - } - } - - protected abstract Attribute[] getAttributes(final HOLDER entityType); - - protected abstract String getAttributeValue(final HOLDER entityType, final Attribute attribute); - - protected abstract ExportableKind getExportableKind(); - - protected abstract HOLDER getPermIdHolder(final IApplicationServerApi api, final String sessionToken, final String permId); - -} diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSDataSetTypeExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSDataSetTypeExportHelper.java index 6db73952509d6a507c3cabb641f8a7d7b5197552..10ebf8b0c3fa27c06ecfaaa0a636eccbf2de004b 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSDataSetTypeExportHelper.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSDataSetTypeExportHelper.java @@ -36,6 +36,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.Plugin; import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.fetchoptions.PropertyAssignmentFetchOptions; 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.importer.enums.ImportTypes; +import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils; public class XLSDataSetTypeExportHelper extends AbstractXLSEntityTypeExportHelper<DataSetType> { @@ -72,29 +74,27 @@ public class XLSDataSetTypeExportHelper extends AbstractXLSEntityTypeExportHelpe } @Override - protected String getAttributeValue(final DataSetType entityType, final Attribute attribute) + protected String getAttributeValue(final DataSetType dataSetType, final Attribute attribute) { switch (attribute) { case CODE: { - return entityType.getCode(); + return dataSetType.getCode(); } case DESCRIPTION: { - return entityType.getDescription(); + return dataSetType.getDescription(); } case VALIDATION_SCRIPT: { - final Plugin validationPlugin = entityType.getValidationPlugin(); - return validationPlugin != null - ? (validationPlugin.getName() != null ? validationPlugin.getName() + ".py" : "") : ""; + final Plugin validationPlugin = dataSetType.getValidationPlugin(); + return validationPlugin != null ? (validationPlugin.getName() != null ? validationPlugin.getName() + ".py" : "") : ""; } case VERSION: { - // TODO: implement - return "1"; + return String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.DATASET_TYPE, null, dataSetType.getCode())); } default: { diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSExperimentTypeExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSExperimentTypeExportHelper.java index e3fa8642cb704fb064a81e28c82300c0cddf5d29..a11dc8df48c5a9616a477e0ca613717cb41fa1ea 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSExperimentTypeExportHelper.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSExperimentTypeExportHelper.java @@ -36,6 +36,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.Plugin; import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.fetchoptions.PropertyAssignmentFetchOptions; 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.importer.enums.ImportTypes; +import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils; public class XLSExperimentTypeExportHelper extends AbstractXLSEntityTypeExportHelper<ExperimentType> { @@ -73,8 +75,7 @@ public class XLSExperimentTypeExportHelper extends AbstractXLSEntityTypeExportHe } case VERSION: { - // TODO: implement - return "1"; + return String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.EXPERIMENT_TYPE, null, experimentType.getCode())); } default: { diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSSampleTypeExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSSampleTypeExportHelper.java index 8d3028fdf5c5a3b58b915c718a9d0e1ec229b0b2..6ec881c69149bef5e4584c43277cdbfac646e908 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSSampleTypeExportHelper.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSSampleTypeExportHelper.java @@ -38,6 +38,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleTypeFetchOptions; 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.importer.enums.ImportTypes; +import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils; public class XLSSampleTypeExportHelper extends AbstractXLSEntityTypeExportHelper<SampleType> { @@ -99,8 +101,7 @@ public class XLSSampleTypeExportHelper extends AbstractXLSEntityTypeExportHelper } case VERSION: { - // TODO: implement - return "1"; + return String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.SAMPLE_TYPE, null, sampleType.getCode())); } case AUTO_GENERATE_CODES: { diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSVocabularyExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSVocabularyExportHelper.java index 8eeba50ef50a23c63c35c7810f3af3ee0c544f75..e75ea347d378059106d93fec27f69832b7fc199e 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSVocabularyExportHelper.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/XLSVocabularyExportHelper.java @@ -41,16 +41,25 @@ 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.FieldType; import ch.ethz.sis.openbis.generic.server.xls.export.XLSExport; +import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes; +import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; public class XLSVocabularyExportHelper extends AbstractXLSExportHelper<IEntityType> { + protected static Map<String, Integer> allVersions = VersionUtils.loadAllVersions(); + public XLSVocabularyExportHelper(final Workbook wb) { super(wb); } + public static void setAllVersions(final Map<String, Integer> allVersions) + { + XLSVocabularyExportHelper.allVersions = allVersions; + } + @Override public AdditionResult add(final IApplicationServerApi api, final String sessionToken, final Workbook wb, final List<String> permIds, int rowNumber, @@ -155,8 +164,12 @@ public class XLSVocabularyExportHelper extends AbstractXLSExportHelper<IEntityTy for (final VocabularyTerm vocabularyTerm : vocabulary.getTerms()) { warnings.addAll(addRow(rowNumber++, false, ExportableKind.VOCABULARY_TYPE, - permId, "1", vocabularyTerm.getCode(), - vocabularyTerm.getLabel(), vocabularyTerm.getDescription())); + permId, + String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.VOCABULARY_TYPE, vocabularyTerm.getCode(), + vocabulary.getCode())), + vocabularyTerm.getCode(), + vocabularyTerm.getLabel(), + vocabularyTerm.getDescription())); } return new AdditionResult(rowNumber + 1, warnings); @@ -177,8 +190,7 @@ public class XLSVocabularyExportHelper extends AbstractXLSExportHelper<IEntityTy { case VERSION: { - // TODO: implement - return "1"; + return String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.VOCABULARY_TYPE, null, vocabulary.getCode())); } case CODE: { diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/VersionUtils.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/VersionUtils.java index 43f11690d599c4457aeb97ac44e9579b8d7695dc..7988f4c7eefc46042de33245228852ec494dc193 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/VersionUtils.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/VersionUtils.java @@ -15,10 +15,32 @@ */ package ch.ethz.sis.openbis.generic.server.xls.importer.utils; +import java.util.Collections; import java.util.Map; +import ch.ethz.sis.openbis.generic.server.xls.importer.ImportOptions; +import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes; +import ch.ethz.sis.openbis.generic.server.xls.importer.handler.VersionInfoHandler; + public class VersionUtils { + + public static Map<String, Integer> loadAllVersions() { + final ImportOptions importOptions = new ImportOptions(); + importOptions.setIgnoreVersioning(false); + return Collections.unmodifiableMap(VersionInfoHandler.loadAllVersions(importOptions)); + } + + public static int getStoredVersion(final Map<String, Integer> versions, final ImportTypes importType, final String vocabularyCodeOrNull, + final String typeCode) + { + String importTypeAsString = importType.getType(); + if (importType == ImportTypes.VOCABULARY_TERM) { + importTypeAsString += "-" + vocabularyCodeOrNull; + } + return versions.getOrDefault(VersionUtils.getKey(importTypeAsString, typeCode), 0); + } + public static Integer getStoredVersion(Map<String, Integer> versions, String prefix, String creationCode) { String key = getKey(prefix, creationCode); @@ -44,7 +66,7 @@ public class VersionUtils } } - private static String getKey(String prefix, String creationCode) + public static String getKey(String prefix, String creationCode) { String key = String.format("%s-%s", prefix, creationCode); return key.toUpperCase(); diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportData.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportData.java index 0fa48b1a93d88a4bc6e6ccf85dc461745179c484..c47d06470cd29ca83d1cc6a270a0b86a4c53f467 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportData.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportData.java @@ -29,6 +29,7 @@ import static ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind.VOCAB import static ch.ethz.sis.openbis.generic.server.xls.export.helper.AbstractXLSExportHelper.FIELD_ID_KEY; import static ch.ethz.sis.openbis.generic.server.xls.export.helper.AbstractXLSExportHelper.FIELD_TYPE_KEY; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -39,6 +40,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.id.VocabularyPermId; +import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes; +import ch.ethz.sis.openbis.generic.server.xls.importer.utils.VersionUtils; public class XLSExportData { @@ -60,6 +63,39 @@ public class XLSExportData "Line: 5 Kind: /ELN_SETTINGS/STORAGES/STORAGES_COLLECTION ID: 'COLLECTION' - " + "Value exceeds the maximum size supported by Excel: 32767."); + static final Map<String, Integer> VERSIONS = new HashMap<>(); + + static + { + VERSIONS.put(VersionUtils.getKey(ImportTypes.VOCABULARY_TYPE.getType(), "ANTIBODY.HOST"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.VOCABULARY_TYPE.getType(), "ANTIBODY.DETECTION"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.EXPERIMENT_TYPE.getType(), "DEFAULT_EXPERIMENT"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.DATASET_TYPE.getType(), "ATTACHMENT"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "DEFAULT"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "ANTIBODY"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "VIRUS"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "PERSON"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "COURSE"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "DEPARTMENT"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.SAMPLE_TYPE.getType(), "ENTRY"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$NAME"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$BARCODE"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$DEFAULT_OBJECT_TYPE"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "NOTES"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "ANTIBODY.HOST"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "FIRST_NAME"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "LAST_NAME"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "OPEN"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "START_DATE"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "END_DATE"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "TEACHER"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "ADDRESS"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "DEPARTMENT"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$XMLCOMMENTS"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$DOCUMENT"), 1); + VERSIONS.put(VersionUtils.getKey(ImportTypes.PROPERTY_TYPE.getType(), "$ANNOTATIONS_STATE"), 1); + } + public static final Map<String, Map<String, List<Map<String, String>>>> EXPORT_FIELDS = Map.of( "TYPE", Map.of( @@ -395,8 +431,7 @@ public class XLSExportData "export-sample-type-with-bare-sample-property.xlsx", Map.of("date_range_validation", DATE_RANGE_VALIDATION_SCRIPT_CONTENT), SampleTypeWithBareSamplePropertyExpectations.class, - List.of( - new ExportablePermId(SAMPLE_TYPE, new EntityTypePermId("COURSE", EntityKind.SAMPLE))), + List.of(new ExportablePermId(SAMPLE_TYPE, new EntityTypePermId("COURSE", EntityKind.SAMPLE))), true, null, XLSExport.TextFormatting.PLAIN, diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportTest.java index faa44046ce577a2c91369c8a9edbcd3c85d53ce7..2201e49d20466a95875a9e96291007740c666713 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/XLSExportTest.java @@ -52,12 +52,15 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.jmock.Expectations; import org.jmock.Mockery; import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.ObjectPermId; +import ch.ethz.sis.openbis.generic.server.xls.export.helper.AbstractXLSEntityTypeExportHelper; +import ch.ethz.sis.openbis.generic.server.xls.export.helper.XLSVocabularyExportHelper; import ch.systemsx.cisd.common.exceptions.UserFailureException; public class XLSExportTest @@ -77,6 +80,13 @@ public class XLSExportTest return XLSExportData.EXPORT_DATA; } + @BeforeClass + public static void beforeClass() + { + AbstractXLSEntityTypeExportHelper.setAllVersions(XLSExportData.VERSIONS); + XLSVocabularyExportHelper.setAllVersions(XLSExportData.VERSIONS); + } + @BeforeMethod public void beforeMethod() {