From 1d36a2664f46ef4b9ab8ea2720ba66f535598549 Mon Sep 17 00:00:00 2001 From: vkovtun <viktor.kovtun@id.ethz.ch> Date: Fri, 31 Mar 2023 12:25:47 +0200 Subject: [PATCH] SSDM-13256: Added missing columns for data set types. --- .../helper/XLSDataSetTypeExportHelper.java | 27 ++++++++++++++++-- .../xls/export/DataSetTypeExpectations.java | 11 +++++++ .../resources/export-data-set-type.xlsx | Bin 5657 -> 5821 bytes 3 files changed, 35 insertions(+), 3 deletions(-) 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 10ebf8b0c3f..ec05f56419b 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 @@ -17,6 +17,10 @@ package ch.ethz.sis.openbis.generic.server.xls.export.helper; import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.CODE; import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.DESCRIPTION; +import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.DISALLOW_DELETION; +import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.MAIN_DATA_SET_PATH; +import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.MAIN_DATA_SET_PATTERN; +import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.MODIFICATION_DATE; import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.VALIDATION_SCRIPT; import static ch.ethz.sis.openbis.generic.server.xls.export.Attribute.VERSION; @@ -70,7 +74,8 @@ public class XLSDataSetTypeExportHelper extends AbstractXLSEntityTypeExportHelpe @Override protected Attribute[] getAttributes(final DataSetType entityType) { - return new Attribute[] { VERSION, CODE, DESCRIPTION, VALIDATION_SCRIPT }; + return new Attribute[] { VERSION, CODE, DESCRIPTION, VALIDATION_SCRIPT, MAIN_DATA_SET_PATTERN, MAIN_DATA_SET_PATH, DISALLOW_DELETION, + MODIFICATION_DATE }; } @Override @@ -78,6 +83,10 @@ public class XLSDataSetTypeExportHelper extends AbstractXLSEntityTypeExportHelpe { switch (attribute) { + case VERSION: + { + return String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.DATASET_TYPE, null, dataSetType.getCode())); + } case CODE: { return dataSetType.getCode(); @@ -92,9 +101,21 @@ public class XLSDataSetTypeExportHelper extends AbstractXLSEntityTypeExportHelpe return validationPlugin != null ? (validationPlugin.getName() != null ? validationPlugin.getName() + ".py" : "") : ""; } - case VERSION: + case MAIN_DATA_SET_PATTERN: { - return String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.DATASET_TYPE, null, dataSetType.getCode())); + return dataSetType.getMainDataSetPattern(); + } + case MAIN_DATA_SET_PATH: + { + return dataSetType.getMainDataSetPath(); + } + case DISALLOW_DELETION: + { + return dataSetType.isDisallowDeletion().toString().toUpperCase(); + } + case MODIFICATION_DATE: + { + return DATE_FORMAT.format(dataSetType.getModificationDate()); } default: { diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetTypeExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetTypeExpectations.java index 4b2f430b9d3..a4c21b94aca 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetTypeExpectations.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetTypeExpectations.java @@ -16,7 +16,9 @@ package ch.ethz.sis.openbis.generic.server.xls.export; import java.util.Arrays; +import java.util.Calendar; import java.util.Collections; +import java.util.Date; import java.util.List; import org.jmock.Expectations; @@ -38,6 +40,11 @@ class DataSetTypeExpectations extends Expectations public DataSetTypeExpectations(final IApplicationServerApi api, final boolean exportReferred) { + final Calendar calendar = Calendar.getInstance(); + calendar.set(2023, Calendar.MARCH, 10, 17, 23, 44); + + final Date modificationDate = calendar.getTime(); + allowing(api).getDataSetTypes(with(XLSExportTest.SESSION_TOKEN), with(new CollectionMatcher<>( Collections.singletonList( new EntityTypePermId("ATTACHMENT", EntityKind.DATA_SET)))), @@ -58,6 +65,10 @@ class DataSetTypeExpectations extends Expectations dataSetType.setCode("ATTACHMENT"); dataSetType.setDescription("Attachment"); dataSetType.setPropertyAssignments(getPropertyAssignments(fetchOptions)); + dataSetType.setMainDataSetPattern(".*\\.jpg"); + dataSetType.setMainDataSetPath("original/images/"); + dataSetType.setDisallowDeletion(false); + dataSetType.setModificationDate(modificationDate); return Collections.singletonMap(new EntityTypePermId("ATTACHMENT"), dataSetType); } diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/resources/export-data-set-type.xlsx b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/resources/export-data-set-type.xlsx index abb65af2eddab40105eb04bef37c8ae25fc4ddc0..dbc02329a35833e4d7ad11995713e9f3fbd8432d 100644 GIT binary patch delta 3517 zcmZ8k2|UzK|6j|xc3o>7v2w2a4!N%gZHe3>SCS<+<@`z^Ig(`&xo<f(XO#QQwady? zl$^OrjzW6m`Tw6^&olFS&3tBFGxM35&wSpWd8doNk)Sg|lT#o-)YQ}<2@?QMCqPDi zQrF0l$%Fq0Sa)(Bz}7QE8WB2IRedxIc1;SSE@?7M-;*_S6TM=+|1q4b{8+PoEb91R zN|8~2x?)IB;zI}Y$3d1aL+_+FGE0gbvTrHMcaP%11#a*l^HX@1-q%~oN{aV2UAs(l zAiYd4sw0-aH5;uyo?iny(ZR?qn8a%(M^vw(Ah-0n9>aad04z;^qQaH*;Id@)!nYCZ zyOb>&d+dD39^UL4nlV}d$6<d8syoz;GsUFaoD95PeyM!&*VG*oP<e!4*+A0O%0d6& zw#f~xXR{G`icag7MPhex-JhkILkb;WwmkIX{Ed1fFM9VNzLG@Er5b8O!LZPATE<Sv z4Y;u^wu|x{&_!KgGkG5>kb)olHa>0}Uw6qZnJuYte;t0HLYe)FUSfH2ug<+acKw^3 z(@1vC3(o)oP2n4c5z6^$9c!n4p&~Ne$XJ;iH~joq8<7;)+Bb|Ui)b$)FYzqeyxd2+ z++5@X%3#!|c?;3oDT=d?D(R@E3uR<@P1D2MovzRYBrQa~aWf9W>A1BIUU+~n<nleV ze=C$W>ZTIidaJx)pKg_JCe!z|M_OS!#!g+i$eBC^RUz1sMEbl1-dan(u@aG#dG0mt z9xAdYrZP2085vz-KoOa^Ks1^m8%#Bst+ae5ps+B@299Sth$Zyl*{?9bQ%soMuL!7C zKr_?<GyRUOB1i3M4=0nUw;)r2yNY*oSOw$>hD8m1?=rV7)FCqmwWL=brsv=Lm;Hpz zCZx6B7(C}#pLIQ0=Ku4|qcdkWMx_>|Cq?8tpI<vSiIOh{tl}m<v@{QexNvK{58!O= zQ%JeHdsMX3P+z<?r4aJ`juiJ-U=09_Mrw$&HK~CL(?LPUdRc)3&XvCRh$<Cs`E6(E zbidZ99p`h+-160y|5Ukn2P_G3D(PpqsMbcT0ev0%JsZ)ZM)+Ysu(>pdE$c?^OLt~F z1l1V^HGVGkval4q1+(sRWtdMWG{5z%=Zod}V=^N&6*U`w{>?Qo2*k+>0vW;n_7JQe zr6^!I<1wSic;XR^J2%$mufr!LIp*N}9}pR}kiB@Ea4a<nV=!&Fy{l3ni4*Z)M#QR8 zBt}JdcKSxi3Smb^&iK=(K|8ifId?)P+5@{BleUUB_j|{Sp%YB-MVUPDUXy(YbpQMM zlm4gQgq}KzbLl6>mS$YCvI)$3bS;yY2slB89RwUyFTij79A<{}3cth3eu-?+*p}7t zX&ChCp2I#s(Zqa>&^?4Lzr5TbqYGb&O-AGm?;%^o>;{QU_152Ajct<oue8_``ct1i zI@b=LinTO1UfbLrZC0IGKF0t^nMgmZIQz&)^aa+L7#xt!dt57}uC)nHo`zpq0AgpW zRWeqN<{Gh#qB6hVI!Y^PncB095$HASf4(7n-hLYTKvQjfNbrVyph67IkK8mRq>#xz z+N<u2*h9)Ao*%;2BMJIb-jJg`M2zxt`bwpkE&T*u(Vs1}$K46O7d<th!ee`FbL=|h z<eBT&?C(W0PZcEJJ`5L05J;H$z6tCnb?`ArP2q@wT5-&^#n+6(7ul;mQ`xKf`=W#* zlV2F22W1K|8I{Z;>k<pxbT-Q=_;p@wgbr;;>+W%JmdC}E%)2X*8+GF2CCXOUd$LUR z7k5((g4iz2f=f*-@m^dML~_Zg7gQVjK4tvJ#HcpQ	N*hgDWstv)6z7Xwh5k=X*c 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 delta 3458 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 Zu{WPy#&Pn-|N1OYpp$4h2}6G){{_jb76||V -- GitLab