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

BIS-772: Merging Java tests to master.

parent c3c14080
No related branches found
No related tags found
1 merge request!40SSDM-13578 : 2PT : Database and V3 Implementation - include the new AFS "free"...
Showing
with 1557 additions and 2 deletions
/*
* 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.asapi.v3.executor.exporter;
import static org.testng.Assert.assertEquals;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class ExportExecutorTest
{
private static final String NEXT_ZIP_ENTRY_DATA_PROVIDER = "nextZipEntryData";
private static final String ERRONEOUS_NEXT_ZIP_ENTRY_DATA_PROVIDER = "erroneousNextZipEntryData";
private static final String FOLDER_NAME_DATA_PROVIDER = "folderNameData";
private static final String ERRONEOUS_FOLDER_NAME_DATA_PROVIDER = "erroneousFolderNameData";
private static final String SPACE_CODE = "TEST_SPACE";
private static final String PROJECT_CODE = "TEST_PROJECT";
private static final String EXPERIMENT_CODE = "TEST_EXPERIMENT";
private static final String EXPERIMENT_NAME = "Test experiment name";
private static final String SAMPLE_CODE = "TEST_SAMPLE";
private static final String SAMPLE_NAME = "Test sample name";
private static final String EXTENSION = ".pdf";
private static final String DATA_SET_CODE = "TEST_DATA_SET";
private static final Object[][] NEXT_ZIP_ENTRY_DATA = {
{
null, null, null, null, null, null, null, null, null, "/"
},
{
SPACE_CODE, null, null, null, null, null, null, null, null,
String.format("%s/", SPACE_CODE)
},
{
SPACE_CODE, null, null, null, null, null, null, null, EXTENSION,
String.format("%s%s", SPACE_CODE, EXTENSION)
},
{
SPACE_CODE, null, null, null, null, SAMPLE_CODE, null, null, null,
String.format("%s/%s/", SPACE_CODE, SAMPLE_CODE)
},
{
SPACE_CODE, null, null, null, null, SAMPLE_CODE, null, null, EXTENSION,
String.format("%s/%s%s", SPACE_CODE, SAMPLE_CODE, EXTENSION)
},
{
SPACE_CODE, null, null, null, null, SAMPLE_CODE, SAMPLE_NAME, null, null,
String.format("%s/%s (%s)/", SPACE_CODE, SAMPLE_NAME, SAMPLE_CODE)
},
{
SPACE_CODE, null, null, null, null, SAMPLE_CODE, SAMPLE_NAME, null, EXTENSION,
String.format("%s/%s (%s)%s", SPACE_CODE, SAMPLE_NAME, SAMPLE_CODE, EXTENSION)
},
{
SPACE_CODE, null, null, null, null, SAMPLE_CODE, null, DATA_SET_CODE, null,
String.format("%s/%s/%s/", SPACE_CODE, SAMPLE_CODE, DATA_SET_CODE)
},
{
SPACE_CODE, null, null, null, null, SAMPLE_CODE, null, DATA_SET_CODE, EXTENSION,
String.format("%s/%s/%s%s", SPACE_CODE, SAMPLE_CODE, DATA_SET_CODE, EXTENSION)
},
{
SPACE_CODE, null, null, null, null, SAMPLE_CODE, SAMPLE_NAME, DATA_SET_CODE, null,
String.format("%s/%s (%s)/%s/", SPACE_CODE, SAMPLE_NAME, SAMPLE_CODE, DATA_SET_CODE)
},
{
SPACE_CODE, null, null, null, null, SAMPLE_CODE, SAMPLE_NAME, DATA_SET_CODE, EXTENSION,
String.format("%s/%s (%s)/%s%s", SPACE_CODE, SAMPLE_NAME, SAMPLE_CODE, DATA_SET_CODE, EXTENSION)
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, null, null, null, null,
String.format("%s/%s/", SPACE_CODE, PROJECT_CODE)
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, null, null, null, EXTENSION,
String.format("%s/%s%s", SPACE_CODE, PROJECT_CODE, EXTENSION)
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, SAMPLE_CODE, SAMPLE_NAME, null, null,
String.format("%s/%s/%s (%s)/", SPACE_CODE, PROJECT_CODE, SAMPLE_NAME, SAMPLE_CODE)
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, SAMPLE_CODE, SAMPLE_NAME, null, EXTENSION,
String.format("%s/%s/%s (%s)%s", SPACE_CODE, PROJECT_CODE, SAMPLE_NAME, SAMPLE_CODE, EXTENSION)
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, SAMPLE_CODE, null, null, null,
String.format("%s/%s/%s/", SPACE_CODE, PROJECT_CODE, SAMPLE_CODE)
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, SAMPLE_CODE, null, null, EXTENSION,
String.format("%s/%s/%s%s", SPACE_CODE, PROJECT_CODE, SAMPLE_CODE, EXTENSION)
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, SAMPLE_CODE, SAMPLE_NAME, DATA_SET_CODE, null,
String.format("%s/%s/%s (%s)/%s/", SPACE_CODE, PROJECT_CODE, SAMPLE_NAME, SAMPLE_CODE, DATA_SET_CODE)
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, SAMPLE_CODE, SAMPLE_NAME, DATA_SET_CODE, EXTENSION,
String.format("%s/%s/%s (%s)/%s%s", SPACE_CODE, PROJECT_CODE, SAMPLE_NAME, SAMPLE_CODE, DATA_SET_CODE,
EXTENSION)
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, SAMPLE_CODE, null, DATA_SET_CODE, null,
String.format("%s/%s/%s/%s/", SPACE_CODE, PROJECT_CODE, SAMPLE_CODE, DATA_SET_CODE)
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, SAMPLE_CODE, null, DATA_SET_CODE, EXTENSION,
String.format("%s/%s/%s/%s%s", SPACE_CODE, PROJECT_CODE, SAMPLE_CODE, DATA_SET_CODE, EXTENSION)
},
{
SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, null, null, null, null, null, null,
String.format("%s/%s/%s/", SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE)
},
{
SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, null, null, null, null, null, EXTENSION,
String.format("%s/%s/%s%s", SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, EXTENSION)
},
{
SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, EXPERIMENT_NAME, null, null, null, null, null,
String.format("%s/%s/%s (%s)/", SPACE_CODE, PROJECT_CODE, EXPERIMENT_NAME, EXPERIMENT_CODE)
},
{
SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, EXPERIMENT_NAME, null, null, null, null, EXTENSION,
String.format("%s/%s/%s (%s)%s", SPACE_CODE, PROJECT_CODE, EXPERIMENT_NAME, EXPERIMENT_CODE, EXTENSION)
},
{
SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, EXPERIMENT_NAME, null, null, null, DATA_SET_CODE, null,
String.format("%s/%s/%s (%s)/%s/", SPACE_CODE, PROJECT_CODE, EXPERIMENT_NAME, EXPERIMENT_CODE, DATA_SET_CODE)
},
{
SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, EXPERIMENT_NAME, null, null, null, DATA_SET_CODE, EXTENSION,
String.format("%s/%s/%s (%s)/%s%s", SPACE_CODE, PROJECT_CODE, EXPERIMENT_NAME, EXPERIMENT_CODE, DATA_SET_CODE,
EXTENSION)
},
{
SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, EXPERIMENT_NAME, null, SAMPLE_CODE, SAMPLE_NAME, null, null,
String.format("%s/%s/%s (%s)/%s (%s)/", SPACE_CODE, PROJECT_CODE, EXPERIMENT_NAME, EXPERIMENT_CODE, SAMPLE_NAME,
SAMPLE_CODE)
},
{
SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, EXPERIMENT_NAME, null, SAMPLE_CODE, SAMPLE_NAME, null, EXTENSION,
String.format("%s/%s/%s (%s)/%s (%s)%s", SPACE_CODE, PROJECT_CODE, EXPERIMENT_NAME, EXPERIMENT_CODE,
SAMPLE_NAME, SAMPLE_CODE, EXTENSION)
},
{
SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, EXPERIMENT_NAME, null, SAMPLE_CODE, SAMPLE_NAME, DATA_SET_CODE, null,
String.format("%s/%s/%s (%s)/%s (%s)/%s/", SPACE_CODE, PROJECT_CODE, EXPERIMENT_NAME, EXPERIMENT_CODE,
SAMPLE_NAME, SAMPLE_CODE, DATA_SET_CODE)
},
{
SPACE_CODE, PROJECT_CODE, EXPERIMENT_CODE, EXPERIMENT_NAME, null, SAMPLE_CODE, SAMPLE_NAME, DATA_SET_CODE, EXTENSION,
String.format("%s/%s/%s (%s)/%s (%s)/%s%s", SPACE_CODE, PROJECT_CODE, EXPERIMENT_NAME, EXPERIMENT_CODE,
SAMPLE_NAME, SAMPLE_CODE, DATA_SET_CODE, EXTENSION)
},
{
null, null, null, null, null, SAMPLE_CODE, null, null, null,
String.format("%s/", SAMPLE_CODE)
},
{
null, null, null, null, null, SAMPLE_CODE, SAMPLE_NAME, null, null,
String.format("%s (%s)/", SAMPLE_NAME, SAMPLE_CODE)
},
{
null, null, null, null, null, SAMPLE_CODE, null, null, EXTENSION,
String.format("%s%s", SAMPLE_CODE, EXTENSION)
},
{
null, null, null, null, null, SAMPLE_CODE, SAMPLE_NAME, null, EXTENSION,
String.format("%s (%s)%s", SAMPLE_NAME, SAMPLE_CODE, EXTENSION)
},
};
private static final Object[][] ERRONEOUS_NEXT_ZIP_ENTRY_DATA = {
{
null, PROJECT_CODE, null, null, null, null, null, null, null
},
{
null, null, EXPERIMENT_CODE, null, null, null, null, null, null
},
{
null, null, null, null, null, null, null, DATA_SET_CODE, null
},
{
null, null, null, null, null, null, null, null, EXTENSION
},
{
null, PROJECT_CODE, EXPERIMENT_CODE, null, null, SAMPLE_CODE, null, DATA_SET_CODE, null
},
{
null, PROJECT_CODE, EXPERIMENT_CODE, EXPERIMENT_NAME, null, SAMPLE_CODE, SAMPLE_NAME, DATA_SET_CODE, EXTENSION
},
{
SPACE_CODE, null, EXPERIMENT_CODE, EXPERIMENT_NAME, null, null, null, null, EXTENSION
},
{
SPACE_CODE, null, null, null, null, null, null, DATA_SET_CODE, EXTENSION
},
{
SPACE_CODE, null, null, null, null, null, null, DATA_SET_CODE, null
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, null, null, DATA_SET_CODE, EXTENSION
},
{
SPACE_CODE, PROJECT_CODE, null, null, null, null, null, DATA_SET_CODE, null
},
};
private static final Object[][] FOLDER_NAME_DATA = {
{
'O', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", null, "OBJ1", "ANALYZED_DATA", "20231201115004780-27", "my dataset", null,
"O+DEFAULT_LAB_NOTEBOOK+DEFAULT_PROJECT+OBJ1+ANALYZED_DATA+my dataset (20231201115004780-27)"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", null, "OBJ1", "ANALYZED_DATA", "20231201115004780-27", "my dataset", "file",
"O+DEFAULT_LAB_NOTEBOOK+DEFAULT_PROJECT+OBJ1+ANALYZED_DATA+my dataset (20231201115004780-27)/file"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", null, "OBJ1", "ANALYZED_DATA", "20231201115004780-27", null, "file",
"O+DEFAULT_LAB_NOTEBOOK+DEFAULT_PROJECT+OBJ1+ANALYZED_DATA+20231201115004780-27/file"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", null, null, "OBJ1", "ANALYZED_DATA", "20231201115004780-27", "my dataset", "file",
"O+DEFAULT_LAB_NOTEBOOK+OBJ1+ANALYZED_DATA+my dataset (20231201115004780-27)/file"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", null, null, "OBJ1", "ANALYZED_DATA", "20231201115004780-27", null, "file",
"O+DEFAULT_LAB_NOTEBOOK+OBJ1+ANALYZED_DATA+20231201115004780-27/file"
},
{
'O', null, null, null, "OBJ1", "ANALYZED_DATA", "20231201115004780-27", "my dataset", "file",
"O+OBJ1+ANALYZED_DATA+my dataset (20231201115004780-27)/file"
},
{
'O', null, null, null, "OBJ1", "ANALYZED_DATA", "20231201115004780-27", null, "file",
"O+OBJ1+ANALYZED_DATA+20231201115004780-27/file"
},
{
'E', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", null, "EXP1", "ANALYZED_DATA", "20231201115004780-27", "my dataset", "file",
"E+DEFAULT_LAB_NOTEBOOK+DEFAULT_PROJECT+EXP1+ANALYZED_DATA+my dataset (20231201115004780-27)/file"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", "OBJ_CONTAINER", "OBJ1", "ANALYZED_DATA", "20231201115004780-27", "my dataset",
"file", "O+DEFAULT_LAB_NOTEBOOK+DEFAULT_PROJECT+OBJ_CONTAINER*OBJ1+ANALYZED_DATA+my dataset (20231201115004780-27)/file"
},
};
private static final Object[][] ERRONEOUS_FOLDER_NAME_DATA = {
{
'P', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", null, "OBJ1", "ANALYZED_DATA", "20231201115004780-27", "my dataset", "file"
},
{
'O', null, "DEFAULT_PROJECT", null, "OBJ1", "ANALYZED_DATA", "20231201115004780-27", "my dataset", "file"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", null, null, "ANALYZED_DATA", "20231201115004780-27", "my dataset", "file"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", "OBJ_CONTAINER", null, "ANALYZED_DATA", "20231201115004780-27", "my dataset",
"file"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", null, "OBJ1", null, "20231201115004780-27", "my dataset", "file"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", null, "OBJ1", "ANALYZED_DATA", null, "my dataset", "file"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", null, "OBJ1", "ANALYZED_DATA", null, null, "file"
},
{
'O', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", null, "OBJ1", "ANALYZED_DATA", null, null, null
},
{
// Experiments cannot have containers
'E', "DEFAULT_LAB_NOTEBOOK", "DEFAULT_PROJECT", "EXP_CONTAINER", "EXP1", "ANALYZED_DATA", "20231201115004780-27", "my dataset",
"file"
},
{
// Experiments cannot be on the space level
'E', "DEFAULT_LAB_NOTEBOOK", null, null, "EXP1", "ANALYZED_DATA", "20231201115004780-27", "my dataset", "file"
},
{
// Experiments cannot be shared (w/o space)
'E', null, null, null, "EXP1", "ANALYZED_DATA", "20231201115004780-27", "my dataset", "file"
},
};
@DataProvider
private Object[][] nextZipEntryData()
{
return NEXT_ZIP_ENTRY_DATA;
}
@DataProvider
private Object[][] erroneousNextZipEntryData()
{
return ERRONEOUS_NEXT_ZIP_ENTRY_DATA;
}
@DataProvider
private Object[][] folderNameData()
{
return FOLDER_NAME_DATA;
}
@DataProvider
private Object[][] erroneousFolderNameData()
{
return ERRONEOUS_FOLDER_NAME_DATA;
}
@Test(dataProvider = NEXT_ZIP_ENTRY_DATA_PROVIDER)
public void testGetNextDirectoryName(final String spaceCode, final String projectCode, final String experimentCode, final String experimentName,
final String containerCode, final String sampleCode, final String sampleName, final String dataSetCode, final String extension,
final String expectedResult)
{
assertEquals(ExportExecutor.getNextDocDirectoryName(spaceCode, projectCode, experimentCode, experimentName, containerCode, sampleCode,
sampleName, dataSetCode, extension), expectedResult);
}
@Test(dataProvider = ERRONEOUS_NEXT_ZIP_ENTRY_DATA_PROVIDER, expectedExceptions = IllegalArgumentException.class)
public void testGetNextDirectoryNameError(final String spaceCode, final String projectCode, final String experimentCode,
final String experimentName, final String containerCode, final String sampleCode, final String sampleName, final String dataSetCode,
final String extension)
{
ExportExecutor.getNextDocDirectoryName(spaceCode, projectCode, experimentCode, experimentName, containerCode, sampleCode, sampleName, dataSetCode,
extension);
}
@Test(dataProvider = FOLDER_NAME_DATA_PROVIDER)
public void testGetDataDirectoryName(final char prefix, final String spaceCode, final String projectCode,
final String containerCode, final String entityCode, final String dataSetTypeCode, final String dataSetCode,
final String dataSetName, final String fileName, final String expectedResult)
{
assertEquals(ExportExecutor.getDataDirectoryName(prefix, spaceCode, projectCode, containerCode, entityCode, dataSetTypeCode, dataSetCode,
dataSetName, fileName), expectedResult);
}
@Test(dataProvider = ERRONEOUS_FOLDER_NAME_DATA_PROVIDER, expectedExceptions = IllegalArgumentException.class)
public void testGetDataDirectoryNameError(final char prefix, final String spaceCode, final String projectCode,
final String containerCode, final String entityCode, final String dataSetTypeCode, final String dataSetCode,
final String dataSetName, final String fileName)
{
ExportExecutor.getDataDirectoryName(prefix, spaceCode, projectCode, containerCode, entityCode, dataSetTypeCode, dataSetCode, dataSetName, fileName);
}
@Test()
public void testEscapeUnsafeCharacters()
{
final String input = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 $!#%'()+,-.;=@[]^_{}~\\/:*?\"<>|`";
final String expectedOutput = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 $!#%'()+,-.;=@[]^_{}~__________";
assertEquals(ExportExecutor.escapeUnsafeCharacters(input), expectedOutput);
}
}
\ No newline at end of file
...@@ -280,7 +280,7 @@ public class XLSExportTest ...@@ -280,7 +280,7 @@ public class XLSExportTest
} }
} }
private static void assertWorkbooksEqual(final Workbook actual, final Workbook expected) public static void assertWorkbooksEqual(final Workbook actual, final Workbook expected)
{ {
final int sheetsCount = expected.getNumberOfSheets(); final int sheetsCount = expected.getNumberOfSheets();
assertEquals(actual.getNumberOfSheets(), sheetsCount); assertEquals(actual.getNumberOfSheets(), sheetsCount);
......
...@@ -61,7 +61,7 @@ public class AbstractImportTest extends AbstractTest ...@@ -61,7 +61,7 @@ public class AbstractImportTest extends AbstractTest
protected static byte[] getFileContent(final String fileName) protected static byte[] getFileContent(final String fileName)
{ {
try (final InputStream is = AbstractImportTest.class.getResourceAsStream("test_files/xls/" + fileName)) try (final InputStream is = AbstractImportTest.class.getResourceAsStream("test_files/import/" + fileName))
{ {
if (is == null) if (is == null)
{ {
......
/*
* 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.systemtest.asapi.v3;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.AUTO_GENERATE_CODES;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.CHILDREN;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.CODE;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.DESCRIPTION;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.DISALLOW_DELETION;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.EXPERIMENT;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.GENERATED_CODE_PREFIX;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.IDENTIFIER;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.MODIFICATION_DATE;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.MODIFIER;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.PARENTS;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.PERM_ID;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.PRESENT_IN_ARCHIVE;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.PROJECT;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.REGISTRATION_DATE;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.REGISTRATOR;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.SAMPLE;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.SPACE;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.STORAGE_CONFIRMATION;
import static ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.Attribute.UNIQUE_SUBCODES;
import java.util.EnumSet;
import java.util.List;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.DataSetPermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.EntityKind;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentPermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.AllFields;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.ExportableKind;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.ExportablePermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.SelectedFields;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.options.ExportFormat;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.options.XlsTextFormat;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectPermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.id.PropertyTypePermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId;
class ExportData
{
static final String RICH_TEXT_PROPERTY_NAME = "MULTILINE";
static final String RICH_TEXT_WITH_IMAGE_PROPERTY_NAME = "MULTILINE_WITH_IMAGE";
static final String RICH_TEXT_WITH_SPREADSHEET_PROPERTY_NAME = "MULTILINE_WITH_SPREADSHEET";
static final Object[][] EXPORT_DATA = {
// XLS: All fields
{
// Non-existing sample
"empty-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("WrongPermId"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Space: TEST-SPACE
"export-space-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SPACE, new SpacePermId("TEST-SPACE"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Project: TEST-PROJECT
"export-project-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.PROJECT, new ProjectPermId("20120814110011738-105"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Experiment: EXP-SPACE-TEST
"export-experiment-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.EXPERIMENT, new ExperimentPermId("201206190940555-1032"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /TEST-SPACE/TEST-PROJECT/EV-TEST
"export-sample-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("201206191219327-1055"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /TEST-SPACE/TEST-PROJECT/FV-TEST
"export-sample-compatible-with-import-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("201206191219327-1054"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
true // withImportCompatibility
},
{
// Sample: /MP
"export-sample-shared-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("200811050947161-652"))),
new AllFields(),
XlsTextFormat.RICH,
true, // withReferredTypes
false // withImportCompatibility
},
// {
// // Sample: /MP:A03
// "export-sample-contained-xlsx.zip",
// EnumSet.of(ExportFormat.XLSX),
// List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("200811050947161-653"))),
// new AllFields(),
// XlsTextFormat.RICH,
// true, // withReferredTypes
// false // withImportCompatibility
// },
{
// Data set: "ROOT_CONTAINER"
"export-data-set-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.DATASET, new DataSetPermId("ROOT_CONTAINER"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample Type: CELL_PLATE
"export-sample-type-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SAMPLE_TYPE, new EntityTypePermId("CELL_PLATE", EntityKind.SAMPLE))),
new AllFields(),
XlsTextFormat.PLAIN,
false, // withReferredTypes
false // withImportCompatibility
},
{
// Sample Type: CELL_PLATE
"export-sample-type-with-referred-types-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SAMPLE_TYPE, new EntityTypePermId("CELL_PLATE", EntityKind.SAMPLE))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Experiment Type: SIRNA_HCS
"export-experiment-type-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.EXPERIMENT_TYPE, new EntityTypePermId("SIRNA_HCS", EntityKind.EXPERIMENT))),
new AllFields(),
XlsTextFormat.PLAIN,
false, // withReferredTypes
false // withImportCompatibility
},
{
// Dataset Type: HCS_IMAGE
"export-data-set-type-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.DATASET_TYPE, new EntityTypePermId("HCS_IMAGE", EntityKind.DATA_SET))),
new AllFields(),
XlsTextFormat.PLAIN,
false, // withReferredTypes
false // withImportCompatibility
},
// XLS: Selected fields
{
// Space: TEST-SPACE
"export-space-filtered-attributes-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SPACE, new SpacePermId("TEST-SPACE"))),
new SelectedFields(List.of(CODE, REGISTRATOR, DESCRIPTION), List.of()),
XlsTextFormat.PLAIN,
false, // withReferredTypes
false // withImportCompatibility
},
{
// Project: TEST-PROJECT
"export-project-filtered-fields-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.PROJECT, new ProjectPermId("20120814110011738-105"))),
new SelectedFields(
List.of(REGISTRATOR, REGISTRATION_DATE, CODE, IDENTIFIER, SPACE, DESCRIPTION),
List.of()),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Experiment: EXP-SPACE-TEST
"export-experiment-filtered-fields-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.EXPERIMENT, new ExperimentPermId("201206190940555-1032"))),
new SelectedFields(
List.of(CODE, PERM_ID, IDENTIFIER, PROJECT, REGISTRATOR, MODIFIER),
List.of(new PropertyTypePermId("GENDER"), new PropertyTypePermId("DESCRIPTION"))),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /TEST-SPACE/TEST-PROJECT/FV-TEST
"export-sample-filtered-fields-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("201206191219327-1054"))),
new SelectedFields(
List.of(CODE, PERM_ID, IDENTIFIER, SPACE, PARENTS, CHILDREN, REGISTRATOR, REGISTRATION_DATE),
List.of(new PropertyTypePermId("BACTERIUM"), new PropertyTypePermId("COMMENT"), new PropertyTypePermId("ORGANISM"))),
XlsTextFormat.PLAIN,
false, // withReferredTypes
false // withImportCompatibility
},
{
// Data set: "20081105092159188-3", type: "HCS_IMAGE"
"export-data-set-filtered-fields-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.DATASET, new DataSetPermId("20081105092159188-3"))),
new SelectedFields(
List.of(REGISTRATOR, REGISTRATION_DATE, CODE, IDENTIFIER, PARENTS, CHILDREN, STORAGE_CONFIRMATION, PRESENT_IN_ARCHIVE,
SAMPLE, EXPERIMENT),
List.of(new PropertyTypePermId("COMMENT"), new PropertyTypePermId("GENDER"))),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample Type: CELL_PLATE
"export-sample-type-filtered-attributes-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SAMPLE_TYPE, new EntityTypePermId("CELL_PLATE", EntityKind.SAMPLE))),
new SelectedFields(List.of(CODE, AUTO_GENERATE_CODES, DESCRIPTION, GENERATED_CODE_PREFIX, UNIQUE_SUBCODES), List.of()),
XlsTextFormat.PLAIN,
false, // withReferredTypes
false // withImportCompatibility
},
{
// Experiment Type: SIRNA_HCS
"export-experiment-type-filtered-attributes-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.EXPERIMENT_TYPE, new EntityTypePermId("SIRNA_HCS", EntityKind.EXPERIMENT))),
new SelectedFields(List.of(DESCRIPTION, CODE, MODIFICATION_DATE), List.of()),
XlsTextFormat.PLAIN,
false, // withReferredTypes
false // withImportCompatibility
},
{
// Dataset Type: HCS_IMAGE
"export-data-set-type-filtered-attributes-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.DATASET_TYPE, new EntityTypePermId("HCS_IMAGE", EntityKind.DATA_SET))),
new SelectedFields(List.of(CODE, DISALLOW_DELETION, DESCRIPTION), List.of()),
XlsTextFormat.PLAIN,
false, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /TEST-SPACE/TEST-PROJECT/FV-TEST
"export-sample-plain-text-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SAMPLE, null)), // null perm ID indicates that the newly created value in the setup of the test should be used.
new SelectedFields(List.of(IDENTIFIER, CODE), List.of(new PropertyTypePermId(RICH_TEXT_PROPERTY_NAME))),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /TEST-SPACE/TEST-PROJECT/FV-TEST
"export-sample-rich-text-xlsx.zip",
EnumSet.of(ExportFormat.XLSX),
List.of(new ExportablePermId(ExportableKind.SAMPLE, null)), // null perm ID indicates that the newly created value in the setup of the test should be used.
new SelectedFields(List.of(IDENTIFIER, CODE), List.of(new PropertyTypePermId(RICH_TEXT_PROPERTY_NAME))),
XlsTextFormat.RICH,
true, // withReferredTypes
false // withImportCompatibility
},
// HTML: All fields
{
// Space: TEST-SPACE
"export-space-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.SPACE, new SpacePermId("TEST-SPACE"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Project: TEST-PROJECT
"export-project-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.PROJECT, new ProjectPermId("20120814110011738-105"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Experiment: EXP-SPACE-TEST
"export-experiment-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.EXPERIMENT, new ExperimentPermId("201206190940555-1032"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /TEST-SPACE/TEST-PROJECT/EV-TEST
"export-sample-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("201206191219327-1055"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /MP
"export-sample-shared-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("200811050947161-652"))),
new AllFields(),
XlsTextFormat.RICH,
true, // withReferredTypes
false // withImportCompatibility
},
// {
// // Sample: /MP:A03
// "export-sample-contained-html.zip",
// EnumSet.of(ExportFormat.HTML),
// List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("200811050947161-653"))),
// new AllFields(),
// XlsTextFormat.RICH,
// true, // withReferredTypes
// false // withImportCompatibility
// },
{
// Data set: "ROOT_CONTAINER"
"export-data-set-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.DATASET, new DataSetPermId("ROOT_CONTAINER"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
// HTML: Selected fields
{
// Space: TEST-SPACE
"export-space-filtered-fields-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.SPACE, new SpacePermId("TEST-SPACE"))),
new SelectedFields(List.of(CODE, PERM_ID, MODIFICATION_DATE), List.of()),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Project: TEST-PROJECT
"export-project-filtered-fields-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.PROJECT, new ProjectPermId("20120814110011738-105"))),
new SelectedFields(List.of(PERM_ID, IDENTIFIER, REGISTRATOR, REGISTRATION_DATE), List.of()),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Experiment: EXP-SPACE-TEST
"export-experiment-filtered-fields-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.EXPERIMENT, new ExperimentPermId("201206190940555-1032"))),
new SelectedFields(List.of(CODE, PARENTS, CHILDREN, REGISTRATOR, REGISTRATION_DATE),
List.of(new PropertyTypePermId("DESCRIPTION"))),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /CISD/NEMO/3VCP6
"export-sample-filtered-fields-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("200811050946559-980"))),
new SelectedFields(
List.of(CODE, PARENTS, CHILDREN),
List.of(new PropertyTypePermId("BACTERIUM"), new PropertyTypePermId("COMMENT"), new PropertyTypePermId("ORGANISM"))),
XlsTextFormat.PLAIN,
false, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /TEST-SPACE/TEST-PROJECT/FV-TEST
"export-sample-plain-text-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.SAMPLE, null)), // null perm ID indicates that the newly created value in the setup of the test should be used.
new SelectedFields(List.of(IDENTIFIER, CODE), List.of(new PropertyTypePermId(RICH_TEXT_PROPERTY_NAME))),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /TEST-SPACE/TEST-PROJECT/FV-TEST
"export-sample-rich-text-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.SAMPLE, null)), // null perm ID indicates that the newly created value in the setup of the test should be used.
new SelectedFields(List.of(IDENTIFIER, CODE), List.of(new PropertyTypePermId(RICH_TEXT_PROPERTY_NAME))),
XlsTextFormat.RICH,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /TEST-SPACE/TEST-PROJECT/FV-TEST
"export-sample-with-image-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.SAMPLE, null)), // null perm ID indicates that the newly created value in the setup of the test should be used.
new SelectedFields(List.of(IDENTIFIER, CODE), List.of(new PropertyTypePermId(RICH_TEXT_WITH_IMAGE_PROPERTY_NAME))),
XlsTextFormat.RICH,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /TEST-SPACE/TEST-PROJECT/FV-TEST
"export-sample-with-spreadsheet-html.zip",
EnumSet.of(ExportFormat.HTML),
List.of(new ExportablePermId(ExportableKind.SAMPLE, null)), // null perm ID indicates that the newly created value in the setup of the test should be used.
new SelectedFields(List.of(IDENTIFIER, CODE), List.of(new PropertyTypePermId(RICH_TEXT_WITH_SPREADSHEET_PROPERTY_NAME))),
XlsTextFormat.RICH,
true, // withReferredTypes
false // withImportCompatibility
},
// PDF: All fields
{
// Space: TEST-SPACE
"export-space-pdf.zip",
EnumSet.of(ExportFormat.PDF),
List.of(new ExportablePermId(ExportableKind.SPACE, new SpacePermId("TEST-SPACE"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Project: TEST-PROJECT
"export-project-pdf.zip",
EnumSet.of(ExportFormat.PDF),
List.of(new ExportablePermId(ExportableKind.PROJECT, new ProjectPermId("20120814110011738-105"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Experiment: EXP-SPACE-TEST
"export-experiment-pdf.zip",
EnumSet.of(ExportFormat.PDF),
List.of(new ExportablePermId(ExportableKind.EXPERIMENT, new ExperimentPermId("201206190940555-1032"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /CISD/NEMO/3VCP6
"export-sample-pdf.zip",
EnumSet.of(ExportFormat.PDF),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("200811050946559-980"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /MP
"export-sample-shared-pdf.zip",
EnumSet.of(ExportFormat.PDF),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("200811050947161-652"))),
new AllFields(),
XlsTextFormat.RICH,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Data set: "ROOT_CONTAINER"
"export-data-set-pdf.zip",
EnumSet.of(ExportFormat.PDF),
List.of(new ExportablePermId(ExportableKind.DATASET, new DataSetPermId("ROOT_CONTAINER"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
// Data
{
// Sample: /CISD/NEMO/CP-TEST-3
"export-sample-data.zip",
EnumSet.of(ExportFormat.DATA),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("200902091225616-1027"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
{
// Sample: /CISD/NEMO/EXP1
"export-experiment-data.zip",
EnumSet.of(ExportFormat.DATA),
List.of(new ExportablePermId(ExportableKind.EXPERIMENT, new SamplePermId("200811050951882-1028"))),
new AllFields(),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
// All
{
// Sample: /TEST-SPACE/TEST-PROJECT/FV-TEST
"export-sample-all.zip",
EnumSet.of(ExportFormat.XLSX, ExportFormat.HTML, ExportFormat.PDF, ExportFormat.DATA),
List.of(new ExportablePermId(ExportableKind.SAMPLE, new SamplePermId("200902091250077-1026"))),
new SelectedFields(
List.of(CODE, PARENTS, CHILDREN, REGISTRATOR, REGISTRATION_DATE),
List.of(new PropertyTypePermId("BACTERIUM"), new PropertyTypePermId("SIZE"), new PropertyTypePermId("ORGANISM"))),
XlsTextFormat.PLAIN,
true, // withReferredTypes
false // withImportCompatibility
},
};
private ExportData()
{
throw new UnsupportedOperationException();
}
}
/*
* 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.systemtest.asapi.v3;
import static ch.ethz.sis.openbis.generic.server.FileServiceServlet.REPO_PATH_KEY;
import static ch.ethz.sis.openbis.generic.server.asapi.v3.executor.exporter.ExportExecutor.JSON_EXTENSION;
import static ch.ethz.sis.openbis.generic.server.asapi.v3.executor.exporter.ExportExecutor.METADATA_FILE_NAME;
import static ch.ethz.sis.openbis.generic.server.asapi.v3.executor.exporter.ExportExecutor.PDF_EXTENSION;
import static ch.ethz.sis.openbis.generic.server.xls.export.XLSExport.XLSX_EXTENSION;
import static ch.ethz.sis.openbis.generic.server.xls.export.XLSExport.ZIP_EXTENSION;
import static ch.ethz.sis.openbis.systemtest.asapi.v3.ExportData.RICH_TEXT_PROPERTY_NAME;
import static ch.ethz.sis.openbis.systemtest.asapi.v3.ExportData.RICH_TEXT_WITH_IMAGE_PROPERTY_NAME;
import static ch.ethz.sis.openbis.systemtest.asapi.v3.ExportData.RICH_TEXT_WITH_SPREADSHEET_PROPERTY_NAME;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import javax.annotation.Resource;
import org.apache.commons.io.filefilter.NameFileFilter;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.testng.annotations.AfterClass;
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.dto.common.search.SearchResult;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.DataSetPermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.id.IDeletionId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.ExportResult;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.ExportData;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.ExportablePermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.data.IExportableFields;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.options.ExportFormat;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.options.ExportOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.exporter.options.XlsTextFormat;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.DataType;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.create.PropertyAssignmentCreation;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.create.PropertyTypeCreation;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.delete.PropertyTypeDeletionOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.id.PropertyTypePermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleCreation;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleTypeCreation;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleDeletionOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleTypeDeletionOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId;
import ch.ethz.sis.openbis.generic.dssapi.v3.IDataStoreServerApi;
import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.DataSetFile;
import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.download.DataSetFileDownloadOptions;
import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.fetchoptions.DataSetFileFetchOptions;
import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.id.DataSetFilePermId;
import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.id.IDataSetFileId;
import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.search.DataSetFileSearchCriteria;
import ch.ethz.sis.openbis.generic.server.xls.export.XLSExportTest;
import ch.systemsx.cisd.common.spring.ExposablePropertyPlaceholderConfigurer;
import ch.systemsx.cisd.openbis.generic.server.CommonServiceProvider;
public class ExportTest extends AbstractTest
{
private static final String EXPORT_DATA_PROVIDER = "exportData";
private static final String PLAIN_TEXT_VALUE = "Rich format test";
private static final String RICH_TEXT_VALUE = String.format("<b>%s</b>", PLAIN_TEXT_VALUE);
private static final String XLS_EXPORT_RESOURCES_PATH = "ch/ethz/sis/openbis/systemtest/asapi/v3/test_files/export/";
private static final String RICH_TEXT_WITH_IMAGE_VALUE = String.format("<b>Here goes the image: <figure class=\"image\">\n"
+ "<img src=\"%snature.png\"/></figure></b>", XLS_EXPORT_RESOURCES_PATH);
private static final String RICH_TEXT_SAMPLE_CODE = "RICH_TEXT";
private static final String JAVA_FOLDER_PATH = "./sourceTest/java/";
protected String sessionToken;
private PropertyTypePermId richTextPropertyTypePermId;
private PropertyTypePermId richTextWithImagePropertyTypePermId;
private PropertyTypePermId richTextWithSpreadsheetPropertyTypePermId;
private EntityTypePermId sampleTypePermId;
private SamplePermId samplePermId;
@Resource(name = ExposablePropertyPlaceholderConfigurer.PROPERTY_CONFIGURER_BEAN_NAME)
private ExposablePropertyPlaceholderConfigurer configurer;
private Mockery mockery;
private IDataStoreServerApi v3Dss;
@DataProvider
protected Object[][] exportData()
{
return ch.ethz.sis.openbis.systemtest.asapi.v3.ExportData.EXPORT_DATA;
}
@BeforeClass
public void beforeClass()
{
mockery = new Mockery();
configurer.getResolvedProps().setProperty(REPO_PATH_KEY, JAVA_FOLDER_PATH);
sessionToken = v3api.login(TEST_USER, PASSWORD);
final PropertyTypeCreation richTextPropertyTypeCreation = new PropertyTypeCreation();
richTextPropertyTypeCreation.setCode(RICH_TEXT_PROPERTY_NAME);
richTextPropertyTypeCreation.setLabel("Multiline");
richTextPropertyTypeCreation.setDescription("Property type with multiline text value");
richTextPropertyTypeCreation.setDataType(DataType.MULTILINE_VARCHAR);
final PropertyTypeCreation richTextWithImagePropertyTypeCreation = new PropertyTypeCreation();
richTextWithImagePropertyTypeCreation.setCode(RICH_TEXT_WITH_IMAGE_PROPERTY_NAME);
richTextWithImagePropertyTypeCreation.setLabel("Image");
richTextWithImagePropertyTypeCreation.setDescription("Property type with image");
richTextWithImagePropertyTypeCreation.setMetaData(Map.of("custom_widget", "Word Processor"));
richTextWithImagePropertyTypeCreation.setDataType(DataType.MULTILINE_VARCHAR);
final PropertyTypeCreation richTextWithSpreadsheetPropertyTypeCreation = new PropertyTypeCreation();
richTextWithSpreadsheetPropertyTypeCreation.setCode(RICH_TEXT_WITH_SPREADSHEET_PROPERTY_NAME);
richTextWithSpreadsheetPropertyTypeCreation.setLabel("Spreadsheet");
richTextWithSpreadsheetPropertyTypeCreation.setDescription("Property type with spreadsheet");
richTextWithSpreadsheetPropertyTypeCreation.setMetaData(Map.of("custom_widget", "Spreadsheet"));
richTextWithSpreadsheetPropertyTypeCreation.setDataType(DataType.XML);
final List<PropertyTypePermId> propertyTypes =
v3api.createPropertyTypes(sessionToken, List.of(richTextPropertyTypeCreation, richTextWithImagePropertyTypeCreation,
richTextWithSpreadsheetPropertyTypeCreation));
richTextPropertyTypePermId = propertyTypes.get(0);
richTextWithImagePropertyTypePermId = propertyTypes.get(1);
richTextWithSpreadsheetPropertyTypePermId = propertyTypes.get(2);
final SampleTypeCreation sampleTypeCreation = new SampleTypeCreation();
sampleTypeCreation.setCode("MULTI_LINE_VALUE_SAMPLE_TYPE");
final PropertyAssignmentCreation richTextPropertyAssignmentCreation = new PropertyAssignmentCreation();
richTextPropertyAssignmentCreation.setPropertyTypeId(richTextPropertyTypePermId);
final PropertyAssignmentCreation richTextWithImagePropertyAssignmentCreation = new PropertyAssignmentCreation();
richTextWithImagePropertyAssignmentCreation.setPropertyTypeId(richTextWithImagePropertyTypePermId);
final PropertyAssignmentCreation richTextWithSpreadsheetPropertyAssignmentCreation = new PropertyAssignmentCreation();
richTextWithSpreadsheetPropertyAssignmentCreation.setPropertyTypeId(richTextWithSpreadsheetPropertyTypePermId);
sampleTypeCreation.setPropertyAssignments(List.of(richTextPropertyAssignmentCreation, richTextWithImagePropertyAssignmentCreation,
richTextWithSpreadsheetPropertyAssignmentCreation));
sampleTypePermId = v3api.createSampleTypes(sessionToken, List.of(sampleTypeCreation)).get(0);
final SampleCreation richTextSampleCreation = new SampleCreation();
richTextSampleCreation.setSpaceId(new SpacePermId("TEST-SPACE"));
richTextSampleCreation.setCode(RICH_TEXT_SAMPLE_CODE);
richTextSampleCreation.setTypeId(sampleTypePermId);
richTextSampleCreation.setProperty(RICH_TEXT_PROPERTY_NAME, RICH_TEXT_VALUE);
richTextSampleCreation.setProperty(RICH_TEXT_WITH_IMAGE_PROPERTY_NAME, RICH_TEXT_WITH_IMAGE_VALUE);
richTextSampleCreation.setProperty(RICH_TEXT_WITH_SPREADSHEET_PROPERTY_NAME, SpreadsheetData.BASE64_SPREADSHEET_DATA);
samplePermId = v3api.createSamples(sessionToken, List.of(richTextSampleCreation)).get(0);
registerDss();
v3api.logout(sessionToken);
}
private void registerDss()
{
v3Dss = mockery.mock(IDataStoreServerApi.class);
CommonServiceProvider.setDataStoreServerApi(v3Dss);
}
@AfterClass
public void afterClass()
{
sessionToken = v3api.login(TEST_USER, PASSWORD);
final SampleDeletionOptions sampleDeletionOptions = new SampleDeletionOptions();
sampleDeletionOptions.setReason("Test");
final IDeletionId deletionId = v3api.deleteSamples(sessionToken, List.of(samplePermId), sampleDeletionOptions);
v3api.confirmDeletions(systemSessionToken, List.of(deletionId));
final SampleTypeDeletionOptions sampleTypeDeletionOptions = new SampleTypeDeletionOptions();
sampleTypeDeletionOptions.setReason("Test");
v3api.deleteSampleTypes(sessionToken, List.of(sampleTypePermId), sampleTypeDeletionOptions);
final PropertyTypeDeletionOptions propertyTypeDeletionOptions = new PropertyTypeDeletionOptions();
propertyTypeDeletionOptions.setReason("Test");
v3api.deletePropertyTypes(sessionToken,
List.of(richTextPropertyTypePermId, richTextWithImagePropertyTypePermId, richTextWithSpreadsheetPropertyTypePermId),
propertyTypeDeletionOptions);
v3api.logout(sessionToken);
}
@BeforeMethod
public void beforeMethod()
{
sessionToken = v3api.login(TEST_USER, PASSWORD);
}
@AfterMethod
public void afterMethod()
{
v3api.logout(sessionToken);
}
@SuppressWarnings({ "unchecked", "resource" })
@Test(dataProvider = EXPORT_DATA_PROVIDER)
public void testDataExport(final String expectedResultFileName, final Set<ExportFormat> formats, final List<ExportablePermId> permIds,
final IExportableFields fields, final XlsTextFormat xlsTextFormat, final boolean withReferredTypes,
final boolean withImportCompatibility) throws Exception
{
processPermIds(permIds);
if (formats.contains(ExportFormat.DATA))
{
final String fileContent1 = "This is some test data.";
final DataSetFile dataSetFile1 = createDataSetFile("default/data1.txt", fileContent1.length());
final SearchResult<DataSetFile> results1 = new SearchResult<>(List.of(dataSetFile1), 1);
final InputStream is1 = objectAndDataToStream(dataSetFile1, fileContent1);
final String fileContent2 = "This is some other test data.";
final DataSetFile dataSetFile2 = createDataSetFile("my-folder/data2.txt", fileContent2.length());
final SearchResult<DataSetFile> results2 = new SearchResult<>(List.of(dataSetFile2), 1);
final InputStream is2 = objectAndDataToStream(dataSetFile2, fileContent2);
mockery.checking(new Expectations()
{{
atLeast(1).of(v3Dss).searchFiles(with(equal(sessionToken)), with(any(DataSetFileSearchCriteria.class)),
with(any(DataSetFileFetchOptions.class)));
will(onConsecutiveCalls(returnValue(results1), returnValue(results2)));
exactly(1).of(v3Dss).downloadFiles(with(equal(sessionToken)), with(equal(List.<IDataSetFileId>of(dataSetFile1.getPermId()))),
with(any(DataSetFileDownloadOptions.class)));
will(returnValue(is1));
atMost(1).of(v3Dss).downloadFiles(with(equal(sessionToken)), with(equal(List.<IDataSetFileId>of(dataSetFile2.getPermId()))),
with(any(DataSetFileDownloadOptions.class)));
will(returnValue(is2));
}});
}
final ExportData exportData = new ExportData(permIds, fields);
final ExportOptions exportOptions = new ExportOptions(formats, xlsTextFormat, withReferredTypes, withImportCompatibility);
final ExportResult exportResult = v3api.executeExport(sessionToken, exportData, exportOptions);
compareFiles(XLS_EXPORT_RESOURCES_PATH + expectedResultFileName, exportResult.getDownloadURL());
mockery.assertIsSatisfied();
}
private static DataSetFile createDataSetFile(final String filePath, final int fileLength)
{
final DataSetFilePermId dataSetFilePermId = new DataSetFilePermId(new DataSetPermId("20230904175944612-1"), filePath);
final DataSetFile dataSetFile = new DataSetFile();
dataSetFile.setPermId(dataSetFilePermId);
dataSetFile.setFileLength(fileLength);
dataSetFile.setPath(filePath);
return dataSetFile;
}
public static InputStream objectAndDataToStream(final Object obj, final String data) throws IOException {
final byte[] objectBytes = getObjectBytes(obj);
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final DataOutputStream dos = new DataOutputStream(baos);
// Write the size of the object
dos.writeLong(objectBytes.length);
// Write the object again
dos.write(objectBytes);
// Convert the string to bytes and write its size followed by the data
final byte[] stringBytes = data.getBytes();
final long stringSize = stringBytes.length;
dos.writeLong(stringSize);
dos.write(stringBytes);
dos.close();
// Return a ByteArrayInputStream containing the sequence
return new ByteArrayInputStream(baos.toByteArray());
}
private static byte[] getObjectBytes(final Object obj) throws IOException
{
try (
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final ObjectOutputStream oos = new ObjectOutputStream(baos)
)
{
oos.writeObject(obj);
return baos.toByteArray();
}
}
/**
* Searches for ExportablePermIds with null perm IDs, which should indicate that it should be replaced with {@link #samplePermId}.
*
* @param permIds the list of ExportablePermId values to be processed.
*/
private void processPermIds(final List<ExportablePermId> permIds)
{
permIds.forEach(exportablePermId ->
{
if (exportablePermId.getPermId() == null)
{
exportablePermId.setPermId(samplePermId);
}
});
}
private void compareFiles(final String expectedResultFilePath, final String actualResultFilePath) throws IOException
{
final URL expectedResultUrl = getClass().getClassLoader().getResource(expectedResultFilePath);
assertNotNull(expectedResultUrl, String.format("Expected result file path produces null URL: %s.", expectedResultFilePath));
final File expectedResultFile;
try
{
expectedResultFile = new File(expectedResultUrl.toURI());
} catch (final URISyntaxException e)
{
throw new RuntimeException(e);
}
assertTrue(expectedResultFile.exists(), String.format("Expected result file does not exist: %s.", expectedResultUrl.getPath()));
if (expectedResultFile.isDirectory())
{
final File actualResultFile = getActualFile(actualResultFilePath);
assertTrue(actualResultFile.exists(), String.format("Actual result file does not exist: %s.", actualResultFilePath));
assertTrue(actualResultFile.isDirectory());
compareDirectories(expectedResultFile, actualResultFile);
} else if (expectedResultFilePath.endsWith(XLSX_EXTENSION) && actualResultFilePath.endsWith(XLSX_EXTENSION))
{
compareXlsxFiles(expectedResultFilePath, actualResultFilePath);
} else if (expectedResultFilePath.endsWith(ZIP_EXTENSION) && actualResultFilePath.endsWith(ZIP_EXTENSION))
{
compareZipFiles(expectedResultFilePath, actualResultFilePath);
} else
{
throw new IllegalArgumentException(String.format("Expected ('%s') and actual ('%s') files have different formats.",
expectedResultFilePath, actualResultFilePath));
}
}
private void compareXlsxFiles(final String expectedResultFilePath, final String actualResultFilePath) throws IOException
{
final InputStream expectedResultStream = getClass().getClassLoader().getResourceAsStream(expectedResultFilePath);
if (expectedResultStream == null)
{
throw new IllegalArgumentException(String.format("Expected result file '%s' not found.", expectedResultFilePath));
}
compareXlsxStreams(expectedResultStream, new FileInputStream(getActualFile(actualResultFilePath)));
}
private void compareZipFiles(final String expectedResultFilePath, final String actualResultFilePath) throws IOException
{
final URL expectedResultUrl = getClass().getClassLoader().getResource(expectedResultFilePath);
assertNotNull(expectedResultUrl);
final File actualFile = getActualFile(actualResultFilePath);
try (
final ZipFile extectedZipFile = new ZipFile(expectedResultUrl.getPath());
final ZipFile actualZipFile = new ZipFile(actualFile);
)
{
final Set<String> expectedZipEntries = extectedZipFile.stream().map(ZipEntry::getName).collect(Collectors.toSet());
final Set<String> actualZipEntries = actualZipFile.stream().map(ZipEntry::getName).collect(Collectors.toSet());
assertEquals(actualZipEntries, expectedZipEntries);
for (final String expectedZipEntry : expectedZipEntries)
{
if (expectedZipEntry.endsWith(XLSX_EXTENSION))
{
try (
final InputStream expectedInputStream = extectedZipFile.getInputStream(extectedZipFile.getEntry(expectedZipEntry));
final InputStream actualInputStream = actualZipFile.getInputStream(actualZipFile.getEntry(expectedZipEntry));
)
{
compareXlsxStreams(expectedInputStream, actualInputStream);
}
} else if (!expectedZipEntry.endsWith(PDF_EXTENSION) && !expectedZipEntry.endsWith(JSON_EXTENSION))
{
// We ignore PDF and JSON files in comparison
try (
final InputStream expectedInputStream = extectedZipFile.getInputStream(extectedZipFile.getEntry(expectedZipEntry));
final InputStream actualInputStream = actualZipFile.getInputStream(actualZipFile.getEntry(expectedZipEntry));
)
{
compareStreams(expectedInputStream, actualInputStream);
}
}
}
}
}
private void compareDirectories(final File expectedDirectory, final File actualDirectory) throws IOException
{
final File[] expectedFiles = expectedDirectory.listFiles();
final File[] actualFiles = actualDirectory.listFiles();
final Set<String> expectedFileNames = Stream.of(Objects.requireNonNull(expectedFiles)).map(File::getName)
.collect(Collectors.toSet());
final Set<String> actualFileNames = Stream.of(Objects.requireNonNull(actualFiles)).map(File::getName)
.collect(Collectors.toSet());
assertEquals(actualFileNames, expectedFileNames);
final Map<String, File> actualFileByName = Stream.of(Objects.requireNonNull(actualFiles))
.collect(Collectors.toMap(File::getName, Function.identity()));
for (final File expectedFile : expectedFiles)
{
final String expectedFileName = expectedFile.getName();
final File actualFile = actualFileByName.get(expectedFileName);
final boolean expectedFileIsDirectory = expectedFile.isDirectory();
final boolean actualFileIsDirectory = actualFile.isDirectory();
assertEquals(actualFileIsDirectory, expectedFileIsDirectory, "One of the compared files is a directory whereas the other is not.");
if (expectedFileIsDirectory)
{
compareDirectories(expectedFile, actualFile);
} else
{
try (
final InputStream expectedInputStream = new BufferedInputStream(new FileInputStream(expectedFile));
final InputStream actualInputStream = new BufferedInputStream(new FileInputStream(actualFile));
)
{
if (expectedFileName.equals(METADATA_FILE_NAME))
{
compareXlsxStreams(expectedInputStream, actualInputStream);
} else
{
compareStreams(expectedInputStream, actualInputStream);
}
}
}
}
}
private static void compareXlsxStreams(final InputStream expectedResultInputStream, final InputStream actualResultInputStream) throws IOException
{
final Workbook expectedResult = new XSSFWorkbook(expectedResultInputStream);
final Workbook actualResult = new XSSFWorkbook(actualResultInputStream);
XLSExportTest.assertWorkbooksEqual(actualResult, expectedResult);
}
private static void compareStreams(final InputStream expectedResultInputStream, final InputStream actualResultInputStream) throws IOException
{
try (
final BufferedReader expectedReader = new BufferedReader(new InputStreamReader(expectedResultInputStream, StandardCharsets.UTF_8));
final BufferedReader actualReader = new BufferedReader(new InputStreamReader(actualResultInputStream, StandardCharsets.UTF_8));
)
{
String expectedLine;
while ((expectedLine = expectedReader.readLine()) != null)
{
final String actualLine = actualReader.readLine();
assertEquals(actualLine, expectedLine);
}
assertNull(actualReader.readLine());
}
}
private File getActualFile(final String actualResultFilePath)
{
final int pathSeparatorLocation = actualResultFilePath.lastIndexOf("/");
final String intermediatePath = pathSeparatorLocation > 0 ? actualResultFilePath.substring(0, pathSeparatorLocation) : "";
final String actualResultFileName = pathSeparatorLocation > 0
? actualResultFilePath.substring(pathSeparatorLocation + 1) : actualResultFilePath;
final File sessionWorkspace = sessionWorkspaceProvider.getSessionWorkspace(sessionToken);
final File sessionWorkspaceSubfolder = new File(sessionWorkspace, intermediatePath);
final File[] files = sessionWorkspaceSubfolder.listFiles((FilenameFilter) new NameFileFilter(actualResultFileName));
assertNotNull(files);
assertEquals(1, files.length, String.format("Session workspace should contain only one file with the download URL '%s'.",
actualResultFilePath));
return files[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.systemtest.asapi.v3;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
class SpreadsheetData
{
private static final String DECODED_SPREADSHEET_DATA = "{\"headers\":[\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\","
+ "\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"AA\",\"AB\",\"AC\",\"AD\"],"
+ "\"data\":[[\"A1\",\"B1\",\"C1\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"A2\",\"B2\",\"C2\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],"
+ "[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\","
+ "\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],"
+ "[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"]],\"style\":{\"A1\":\"text-align: center; overflow: hidden;\",\"B1\":\"text-align: center; overflow: hidden;\",\"C1\":\"text-align: center;\",\"D1\":\"text-align: center;\",\"E1\":\"text-align: center;\",\"F1\":\"text-align: center;\",\"G1\":\"text-align: center;\",\"H1\":\"text-align: center;\",\"I1\":\"text-align: center;\",\"J1\":\"text-align: center;\",\"K1\":\"text-align: center;\",\"L1\":\"text-align: center;\",\"M1\":\"text-align: center;\",\"N1\":\"text-align: center;\",\"O1\":\"text-align: center;\",\"P1\":\"text-align: center;\",\"Q1\":\"text-align: center;\",\"R1\":\"text-align: center;\",\"S1\":\"text-align: center;\",\"T1\":\"text-align: center;\",\"U1\":\"text-align: center;\",\"V1\":\"text-align: center;\",\"W1\":\"text-align: center;\",\"X1\":\"text-align: center;\",\"Y1\":\"text-align: center;\",\"Z1\":\"text-align: center;\",\"AA1\":\"text-align: center;\",\"AB1\":\"text-align: center;\",\"AC1\":\"text-align: center;\",\"AD1\":\"text-align: center;\",\"A2\":\"text-align: center; overflow: hidden;\",\"B2\":\"text-align: center; overflow: hidden;\",\"C2\":\"text-align: center;\",\"D2\":\"text-align: center;\",\"E2\":\"text-align: center;\",\"F2\":\"text-align: center;\",\"G2\":\"text-align: center;\",\"H2\":\"text-align: center;\",\"I2\":\"text-align: center;\",\"J2\":\"text-align: center;\",\"K2\":\"text-align: center;\",\"L2\":\"text-align: center;\",\"M2\":\"text-align: center;\",\"N2\":\"text-align: center;\",\"O2\":\"text-align: center;\",\"P2\":\"text-align: center;\",\"Q2\":\"text-align: center;\",\"R2\":\"text-align: center;\",\"S2\":\"text-align: center;\",\"T2\":\"text-align: center;\",\"U2\":\"text-align: center;\",\"V2\":\"text-align: center;\",\"W2\":\"text-align: center;\",\"X2\":\"text-align: center;\",\"Y2\":\"text-align: center;\",\"Z2\":\"text-align: center;\",\"AA2\":\"text-align: center;\",\"AB2\":\"text-align: center;\",\"AC2\":\"text-align: center;\",\"AD2\":\"text-align: center;\",\"A3\":\"text-align: center;\",\"B3\":\"text-align: center;\",\"C3\":\"text-align: center;\",\"D3\":\"text-align: center;\",\"E3\":\"text-align: center;\",\"F3\":\"text-align: center;\",\"G3\":\"text-align: center;\",\"H3\":\"text-align: center;\",\"I3\":\"text-align: center;\",\"J3\":\"text-align: center;\",\"K3\":\"text-align: center;\",\"L3\":\"text-align: center;\",\"M3\":\"text-align: center;\",\"N3\":\"text-align: center;\",\"O3\":\"text-align: center;\",\"P3\":\"text-align: center;\",\"Q3\":\"text-align: center;\",\"R3\":\"text-align: center;\",\"S3\":\"text-align: center;\",\"T3\":\"text-align: center;\",\"U3\":\"text-align: center;\",\"V3\":\"text-align: center;\",\"W3\":\"text-align: center;\",\"X3\":\"text-align: center;\",\"Y3\":\"text-align: center;\",\"Z3\":\"text-align: center;\",\"AA3\":\"text-align: center;\",\"AB3\":\"text-align: center;\",\"AC3\":\"text-align: center;\",\"AD3\":\"text-align: center;\",\"A4\":\"text-align: center;\",\"B4\":\"text-align: center;\",\"C4\":\"text-align: center;\",\"D4\":\"text-align: center;\",\"E4\":\"text-align: center;\",\"F4\":\"text-align: center;\",\"G4\":\"text-align: center;\",\"H4\":\"text-align: center;\",\"I4\":\"text-align: center;\",\"J4\":\"text-align: center;\",\"K4\":\"text-align: center;\",\"L4\":\"text-align: center;\",\"M4\":\"text-align: center;\",\"N4\":\"text-align: center;\",\"O4\":\"text-align: center;\",\"P4\":\"text-align: center;\",\"Q4\":\"text-align: center;\",\"R4\":\"text-align: center;\",\"S4\":\"text-align: center;\",\"T4\":\"text-align: center;\",\"U4\":\"text-align: center;\",\"V4\":\"text-align: center;\",\"W4\":\"text-align: center;\",\"X4\":\"text-align: center;\",\"Y4\":\"text-align: center;\",\"Z4\":\"text-align: center;\",\"AA4\":\"text-align: center;\",\"AB4\":\"text-align: center;\",\"AC4\":\"text-align: center;\",\"AD4\":\"text-align: center;\",\"A5\":\"text-align: center;\",\"B5\":\"text-align: center;\",\"C5\":\"text-align: center;\",\"D5\":\"text-align: center;\",\"E5\":\"text-align: center;\",\"F5\":\"text-align: center;\",\"G5\":\"text-align: center;\",\"H5\":\"text-align: center;\",\"I5\":\"text-align: center;\",\"J5\":\"text-align: center;\",\"K5\":\"text-align: center;\",\"L5\":\"text-align: center;\",\"M5\":\"text-align: center;\",\"N5\":\"text-align: center;\",\"O5\":\"text-align: center;\",\"P5\":\"text-align: center;\",\"Q5\":\"text-align: center;\",\"R5\":\"text-align: center;\",\"S5\":\"text-align: center;\",\"T5\":\"text-align: center;\",\"U5\":\"text-align: center;\",\"V5\":\"text-align: center;\",\"W5\":\"text-align: center;\",\"X5\":\"text-align: center;\",\"Y5\":\"text-align: center;\",\"Z5\":\"text-align: center;\",\"AA5\":\"text-align: center;\",\"AB5\":\"text-align: center;\",\"AC5\":\"text-align: center;\",\"AD5\":\"text-align: center;\",\"A6\":\"text-align: center;\",\"B6\":\"text-align: center;\",\"C6\":\"text-align: center;\",\"D6\":\"text-align: center;\",\"E6\":\"text-align: center;\",\"F6\":\"text-align: center;\",\"G6\":\"text-align: center;\",\"H6\":\"text-align: center;\",\"I6\":\"text-align: center;\",\"J6\":\"text-align: center;\",\"K6\":\"text-align: center;\",\"L6\":\"text-align: center;\",\"M6\":\"text-align: center;\",\"N6\":\"text-align: center;\",\"O6\":\"text-align: center;\",\"P6\":\"text-align: center;\",\"Q6\":\"text-align: center;\",\"R6\":\"text-align: center;\",\"S6\":\"text-align: center;\",\"T6\":\"text-align: center;\",\"U6\":\"text-align: center;\",\"V6\":\"text-align: center;\",\"W6\":\"text-align: center;\",\"X6\":\"text-align: center;\",\"Y6\":\"text-align: center;\",\"Z6\":\"text-align: center;\",\"AA6\":\"text-align: center;\",\"AB6\":\"text-align: center;\",\"AC6\":\"text-align: center;\",\"AD6\":\"text-align: center;\",\"A7\":\"text-align: center;\",\"B7\":\"text-align: center;\",\"C7\":\"text-align: center;\",\"D7\":\"text-align: center;\",\"E7\":\"text-align: center;\",\"F7\":\"text-align: center;\",\"G7\":\"text-align: center;\",\"H7\":\"text-align: center;\",\"I7\":\"text-align: center;\",\"J7\":\"text-align: center;\",\"K7\":\"text-align: center;\",\"L7\":\"text-align: center;\",\"M7\":\"text-align: center;\",\"N7\":\"text-align: center;\",\"O7\":\"text-align: center;\",\"P7\":\"text-align: center;\",\"Q7\":\"text-align: center;\",\"R7\":\"text-align: center;\",\"S7\":\"text-align: center;\",\"T7\":\"text-align: center;\",\"U7\":\"text-align: center;\",\"V7\":\"text-align: center;\",\"W7\":\"text-align: center;\",\"X7\":\"text-align: center;\",\"Y7\":\"text-align: center;\",\"Z7\":\"text-align: center;\",\"AA7\":\"text-align: center;\",\"AB7\":\"text-align: center;\",\"AC7\":\"text-align: center;\",\"AD7\":\"text-align: center;\",\"A8\":\"text-align: center;\",\"B8\":\"text-align: center;\",\"C8\":\"text-align: center;\",\"D8\":\"text-align: center;\",\"E8\":\"text-align: center;\",\"F8\":\"text-align: center;\",\"G8\":\"text-align: center;\",\"H8\":\"text-align: center;\",\"I8\":\"text-align: center;\",\"J8\":\"text-align: center;\",\"K8\":\"text-align: center;\",\"L8\":\"text-align: center;\",\"M8\":\"text-align: center;\",\"N8\":\"text-align: center;\",\"O8\":\"text-align: center;\",\"P8\":\"text-align: center;\",\"Q8\":\"text-align: center;\",\"R8\":\"text-align: center;\",\"S8\":\"text-align: center;\",\"T8\":\"text-align: center;\",\"U8\":\"text-align: center;\",\"V8\":\"text-align: center;\",\"W8\":\"text-align: center;\",\"X8\":\"text-align: center;\",\"Y8\":\"text-align: center;\",\"Z8\":\"text-align: center;\",\"AA8\":\"text-align: center;\",\"AB8\":\"text-align: center;\",\"AC8\":\"text-align: center;\",\"AD8\":\"text-align: center;\",\"A9\":\"text-align: center;\",\"B9\":\"text-align: center;\",\"C9\":\"text-align: center;\",\"D9\":\"text-align: center;\",\"E9\":\"text-align: center;\",\"F9\":\"text-align: center;\",\"G9\":\"text-align: center;\",\"H9\":\"text-align: center;\",\"I9\":\"text-align: center;\",\"J9\":\"text-align: center;\",\"K9\":\"text-align: center;\",\"L9\":\"text-align: center;\",\"M9\":\"text-align: center;\",\"N9\":\"text-align: center;\",\"O9\":\"text-align: center;\",\"P9\":\"text-align: center;\",\"Q9\":\"text-align: center;\",\"R9\":\"text-align: center;\",\"S9\":\"text-align: center;\",\"T9\":\"text-align: center;\",\"U9\":\"text-align: center;\",\"V9\":\"text-align: center;\",\"W9\":\"text-align: center;\",\"X9\":\"text-align: center;\",\"Y9\":\"text-align: center;\",\"Z9\":\"text-align: center;\",\"AA9\":\"text-align: center;\",\"AB9\":\"text-align: center;\",\"AC9\":\"text-align: center;\",\"AD9\":\"text-align: center;\",\"A10\":\"text-align: center;\",\"B10\":\"text-align: center;\",\"C10\":\"text-align: center;\",\"D10\":\"text-align: center;\",\"E10\":\"text-align: center;\",\"F10\":\"text-align: center;\",\"G10\":\"text-align: center;\",\"H10\":\"text-align: center;\",\"I10\":\"text-align: center;\",\"J10\":\"text-align: center;\",\"K10\":\"text-align: center;\",\"L10\":\"text-align: center;\",\"M10\":\"text-align: center;\",\"N10\":\"text-align: center;\",\"O10\":\"text-align: center;\",\"P10\":\"text-align: center;\",\"Q10\":\"text-align: center;\",\"R10\":\"text-align: center;\",\"S10\":\"text-align: center;\",\"T10\":\"text-align: center;\",\"U10\":\"text-align: center;\",\"V10\":\"text-align: center;\",\"W10\":\"text-align: center;\",\"X10\":\"text-align: center;\",\"Y10\":\"text-align: center;\",\"Z10\":\"text-align: center;\",\"AA10\":\"text-align: center;\",\"AB10\":\"text-align: center;\",\"AC10\":\"text-align: center;\",\"AD10\":\"text-align: center;\",\"A11\":\"text-align: center;\",\"B11\":\"text-align: center;\",\"C11\":\"text-align: center;\",\"D11\":\"text-align: center;\",\"E11\":\"text-align: center;\",\"F11\":\"text-align: center;\",\"G11\":\"text-align: center;\",\"H11\":\"text-align: center;\",\"I11\":\"text-align: center;\",\"J11\":\"text-align: center;\",\"K11\":\"text-align: center;\",\"L11\":\"text-align: center;\",\"M11\":\"text-align: center;\",\"N11\":\"text-align: center;\",\"O11\":\"text-align: center;\",\"P11\":\"text-align: center;\",\"Q11\":\"text-align: center;\",\"R11\":\"text-align: center;\",\"S11\":\"text-align: center;\",\"T11\":\"text-align: center;\",\"U11\":\"text-align: center;\",\"V11\":\"text-align: center;\",\"W11\":\"text-align: center;\",\"X11\":\"text-align: center;\",\"Y11\":\"text-align: center;\",\"Z11\":\"text-align: center;\",\"AA11\":\"text-align: center;\",\"AB11\":\"text-align: center;\",\"AC11\":\"text-align: center;\",\"AD11\":\"text-align: center;\",\"A12\":\"text-align: center;\",\"B12\":\"text-align: center;\",\"C12\":\"text-align: center;\",\"D12\":\"text-align: center;\",\"E12\":\"text-align: center;\",\"F12\":\"text-align: center;\",\"G12\":\"text-align: center;\",\"H12\":\"text-align: center;\",\"I12\":\"text-align: center;\",\"J12\":\"text-align: center;\",\"K12\":\"text-align: center;\",\"L12\":\"text-align: center;\",\"M12\":\"text-align: center;\",\"N12\":\"text-align: center;\",\"O12\":\"text-align: center;\",\"P12\":\"text-align: center;\",\"Q12\":\"text-align: center;\",\"R12\":\"text-align: center;\",\"S12\":\"text-align: center;\",\"T12\":\"text-align: center;\",\"U12\":\"text-align: center;\",\"V12\":\"text-align: center;\",\"W12\":\"text-align: center;\",\"X12\":\"text-align: center;\",\"Y12\":\"text-align: center;\",\"Z12\":\"text-align: center;\",\"AA12\":\"text-align: center;\",\"AB12\":\"text-align: center;\",\"AC12\":\"text-align: center;\",\"AD12\":\"text-align: center;\",\"A13\":\"text-align: center;\",\"B13\":\"text-align: center;\",\"C13\":\"text-align: center;\",\"D13\":\"text-align: center;\",\"E13\":\"text-align: center;\",\"F13\":\"text-align: center;\",\"G13\":\"text-align: center;\",\"H13\":\"text-align: center;\",\"I13\":\"text-align: center;\",\"J13\":\"text-align: center;\",\"K13\":\"text-align: center;\",\"L13\":\"text-align: center;\",\"M13\":\"text-align: center;\",\"N13\":\"text-align: center;\",\"O13\":\"text-align: center;\",\"P13\":\"text-align: center;\",\"Q13\":\"text-align: center;\",\"R13\":\"text-align: center;\",\"S13\":\"text-align: center;\",\"T13\":\"text-align: center;\",\"U13\":\"text-align: center;\",\"V13\":\"text-align: center;\",\"W13\":\"text-align: center;\",\"X13\":\"text-align: center;\",\"Y13\":\"text-align: center;\",\"Z13\":\"text-align: center;\",\"AA13\":\"text-align: center;\",\"AB13\":\"text-align: center;\",\"AC13\":\"text-align: center;\",\"AD13\":\"text-align: center;\",\"A14\":\"text-align: center;\",\"B14\":\"text-align: center;\",\"C14\":\"text-align: center;\",\"D14\":\"text-align: center;\",\"E14\":\"text-align: center;\",\"F14\":\"text-align: center;\",\"G14\":\"text-align: center;\",\"H14\":\"text-align: center;\",\"I14\":\"text-align: center;\",\"J14\":\"text-align: center;\",\"K14\":\"text-align: center;\",\"L14\":\"text-align: center;\",\"M14\":\"text-align: center;\",\"N14\":\"text-align: center;\",\"O14\":\"text-align: center;\",\"P14\":\"text-align: center;\",\"Q14\":\"text-align: center;\",\"R14\":\"text-align: center;\",\"S14\":\"text-align: center;\",\"T14\":\"text-align: center;\",\"U14\":\"text-align: center;\",\"V14\":\"text-align: center;\",\"W14\":\"text-align: center;\",\"X14\":\"text-align: center;\",\"Y14\":\"text-align: center;\",\"Z14\":\"text-align: center;\",\"AA14\":\"text-align: center;\",\"AB14\":\"text-align: center;\",\"AC14\":\"text-align: center;\",\"AD14\":\"text-align: center;\",\"A15\":\"text-align: center;\",\"B15\":\"text-align: center;\",\"C15\":\"text-align: center;\",\"D15\":\"text-align: center;\",\"E15\":\"text-align: center;\",\"F15\":\"text-align: center;\",\"G15\":\"text-align: center;\",\"H15\":\"text-align: center;\",\"I15\":\"text-align: center;\",\"J15\":\"text-align: center;\",\"K15\":\"text-align: center;\",\"L15\":\"text-align: center;\",\"M15\":\"text-align: center;\",\"N15\":\"text-align: center;\",\"O15\":\"text-align: center;\",\"P15\":\"text-align: center;\",\"Q15\":\"text-align: center;\",\"R15\":\"text-align: center;\",\"S15\":\"text-align: center;\",\"T15\":\"text-align: center;\",\"U15\":\"text-align: center;\",\"V15\":\"text-align: center;\",\"W15\":\"text-align: center;\",\"X15\":\"text-align: center;\",\"Y15\":\"text-align: center;\",\"Z15\":\"text-align: center;\",\"AA15\":\"text-align: center;\",\"AB15\":\"text-align: center;\",\"AC15\":\"text-align: center;\",\"AD15\":\"text-align: center;\",\"A16\":\"text-align: center;\",\"B16\":\"text-align: center;\",\"C16\":\"text-align: center;\",\"D16\":\"text-align: center;\",\"E16\":\"text-align: center;\",\"F16\":\"text-align: center;\",\"G16\":\"text-align: center;\",\"H16\":\"text-align: center;\",\"I16\":\"text-align: center;\",\"J16\":\"text-align: center;\",\"K16\":\"text-align: center;\",\"L16\":\"text-align: center;\",\"M16\":\"text-align: center;\",\"N16\":\"text-align: center;\",\"O16\":\"text-align: center;\",\"P16\":\"text-align: center;\",\"Q16\":\"text-align: center;\",\"R16\":\"text-align: center;\",\"S16\":\"text-align: center;\",\"T16\":\"text-align: center;\",\"U16\":\"text-align: center;\",\"V16\":\"text-align: center;\",\"W16\":\"text-align: center;\",\"X16\":\"text-align: center;\",\"Y16\":\"text-align: center;\",\"Z16\":\"text-align: center;\",\"AA16\":\"text-align: center;\",\"AB16\":\"text-align: center;\",\"AC16\":\"text-align: center;\",\"AD16\":\"text-align: center;\",\"A17\":\"text-align: center;\",\"B17\":\"text-align: center;\",\"C17\":\"text-align: center;\",\"D17\":\"text-align: center;\",\"E17\":\"text-align: center;\",\"F17\":\"text-align: center;\",\"G17\":\"text-align: center;\",\"H17\":\"text-align: center;\",\"I17\":\"text-align: center;\",\"J17\":\"text-align: center;\",\"K17\":\"text-align: center;\",\"L17\":\"text-align: center;\",\"M17\":\"text-align: center;\",\"N17\":\"text-align: center;\",\"O17\":\"text-align: center;\",\"P17\":\"text-align: center;\",\"Q17\":\"text-align: center;\",\"R17\":\"text-align: center;\",\"S17\":\"text-align: center;\",\"T17\":\"text-align: center;\",\"U17\":\"text-align: center;\",\"V17\":\"text-align: center;\",\"W17\":\"text-align: center;\",\"X17\":\"text-align: center;\",\"Y17\":\"text-align: center;\",\"Z17\":\"text-align: center;\",\"AA17\":\"text-align: center;\",\"AB17\":\"text-align: center;\",\"AC17\":\"text-align: center;\",\"AD17\":\"text-align: center;\",\"A18\":\"text-align: center;\",\"B18\":\"text-align: center;\",\"C18\":\"text-align: center;\",\"D18\":\"text-align: center;\",\"E18\":\"text-align: center;\",\"F18\":\"text-align: center;\",\"G18\":\"text-align: center;\",\"H18\":\"text-align: center;\",\"I18\":\"text-align: center;\",\"J18\":\"text-align: center;\",\"K18\":\"text-align: center;\",\"L18\":\"text-align: center;\",\"M18\":\"text-align: center;\",\"N18\":\"text-align: center;\",\"O18\":\"text-align: center;\",\"P18\":\"text-align: center;\",\"Q18\":\"text-align: center;\",\"R18\":\"text-align: center;\",\"S18\":\"text-align: center;\",\"T18\":\"text-align: center;\",\"U18\":\"text-align: center;\",\"V18\":\"text-align: center;\",\"W18\":\"text-align: center;\",\"X18\":\"text-align: center;\",\"Y18\":\"text-align: center;\",\"Z18\":\"text-align: center;\",\"AA18\":\"text-align: center;\",\"AB18\":\"text-align: center;\",\"AC18\":\"text-align: center;\",\"AD18\":\"text-align: center;\",\"A19\":\"text-align: center;\",\"B19\":\"text-align: center;\",\"C19\":\"text-align: center;\",\"D19\":\"text-align: center;\",\"E19\":\"text-align: center;\",\"F19\":\"text-align: center;\",\"G19\":\"text-align: center;\",\"H19\":\"text-align: center;\",\"I19\":\"text-align: center;\",\"J19\":\"text-align: center;\",\"K19\":\"text-align: center;\",\"L19\":\"text-align: center;\",\"M19\":\"text-align: center;\",\"N19\":\"text-align: center;\",\"O19\":\"text-align: center;\",\"P19\":\"text-align: center;\",\"Q19\":\"text-align: center;\",\"R19\":\"text-align: center;\",\"S19\":\"text-align: center;\",\"T19\":\"text-align: center;\",\"U19\":\"text-align: center;\",\"V19\":\"text-align: center;\",\"W19\":\"text-align: center;\",\"X19\":\"text-align: center;\",\"Y19\":\"text-align: center;\",\"Z19\":\"text-align: center;\",\"AA19\":\"text-align: center;\",\"AB19\":\"text-align: center;\",\"AC19\":\"text-align: center;\",\"AD19\":\"text-align: center;\",\"A20\":\"text-align: center;\",\"B20\":\"text-align: center;\",\"C20\":\"text-align: center;\",\"D20\":\"text-align: center;\",\"E20\":\"text-align: center;\",\"F20\":\"text-align: center;\",\"G20\":\"text-align: center;\",\"H20\":\"text-align: center;\",\"I20\":\"text-align: center;\",\"J20\":\"text-align: center;\",\"K20\":\"text-align: center;\",\"L20\":\"text-align: center;\",\"M20\":\"text-align: center;\",\"N20\":\"text-align: center;\",\"O20\":\"text-align: center;\",\"P20\":\"text-align: center;\",\"Q20\":\"text-align: center;\",\"R20\":\"text-align: center;\",\"S20\":\"text-align: center;\",\"T20\":\"text-align: center;\",\"U20\":\"text-align: center;\",\"V20\":\"text-align: center;\",\"W20\":\"text-align: center;\",\"X20\":\"text-align: center;\",\"Y20\":\"text-align: center;\",\"Z20\":\"text-align: center;\",\"AA20\":\"text-align: center;\",\"AB20\":\"text-align: center;\",\"AC20\":\"text-align: center;\",\"AD20\":\"text-align: center;\",\"A21\":\"text-align: center;\",\"B21\":\"text-align: center;\",\"C21\":\"text-align: center;\",\"D21\":\"text-align: center;\",\"E21\":\"text-align: center;\",\"F21\":\"text-align: center;\",\"G21\":\"text-align: center;\",\"H21\":\"text-align: center;\",\"I21\":\"text-align: center;\",\"J21\":\"text-align: center;\",\"K21\":\"text-align: center;\",\"L21\":\"text-align: center;\",\"M21\":\"text-align: center;\",\"N21\":\"text-align: center;\",\"O21\":\"text-align: center;\",\"P21\":\"text-align: center;\",\"Q21\":\"text-align: center;\",\"R21\":\"text-align: center;\",\"S21\":\"text-align: center;\",\"T21\":\"text-align: center;\",\"U21\":\"text-align: center;\",\"V21\":\"text-align: center;\",\"W21\":\"text-align: center;\",\"X21\":\"text-align: center;\",\"Y21\":\"text-align: center;\",\"Z21\":\"text-align: center;\",\"AA21\":\"text-align: center;\",\"AB21\":\"text-align: center;\",\"AC21\":\"text-align: center;\",\"AD21\":\"text-align: center;\",\"A22\":\"text-align: center;\",\"B22\":\"text-align: center;\",\"C22\":\"text-align: center;\",\"D22\":\"text-align: center;\",\"E22\":\"text-align: center;\",\"F22\":\"text-align: center;\",\"G22\":\"text-align: center;\",\"H22\":\"text-align: center;\",\"I22\":\"text-align: center;\",\"J22\":\"text-align: center;\",\"K22\":\"text-align: center;\",\"L22\":\"text-align: center;\",\"M22\":\"text-align: center;\",\"N22\":\"text-align: center;\",\"O22\":\"text-align: center;\",\"P22\":\"text-align: center;\",\"Q22\":\"text-align: center;\",\"R22\":\"text-align: center;\",\"S22\":\"text-align: center;\",\"T22\":\"text-align: center;\",\"U22\":\"text-align: center;\",\"V22\":\"text-align: center;\",\"W22\":\"text-align: center;\",\"X22\":\"text-align: center;\",\"Y22\":\"text-align: center;\",\"Z22\":\"text-align: center;\",\"AA22\":\"text-align: center;\",\"AB22\":\"text-align: center;\",\"AC22\":\"text-align: center;\",\"AD22\":\"text-align: center;\",\"A23\":\"text-align: center;\",\"B23\":\"text-align: center;\",\"C23\":\"text-align: center;\",\"D23\":\"text-align: center;\",\"E23\":\"text-align: center;\",\"F23\":\"text-align: center;\",\"G23\":\"text-align: center;\",\"H23\":\"text-align: center;\",\"I23\":\"text-align: center;\",\"J23\":\"text-align: center;\",\"K23\":\"text-align: center;\",\"L23\":\"text-align: center;\",\"M23\":\"text-align: center;\",\"N23\":\"text-align: center;\",\"O23\":\"text-align: center;\",\"P23\":\"text-align: center;\",\"Q23\":\"text-align: center;\",\"R23\":\"text-align: center;\",\"S23\":\"text-align: center;\",\"T23\":\"text-align: center;\",\"U23\":\"text-align: center;\",\"V23\":\"text-align: center;\",\"W23\":\"text-align: center;\",\"X23\":\"text-align: center;\",\"Y23\":\"text-align: center;\",\"Z23\":\"text-align: center;\",\"AA23\":\"text-align: center;\",\"AB23\":\"text-align: center;\",\"AC23\":\"text-align: center;\",\"AD23\":\"text-align: center;\",\"A24\":\"text-align: center;\",\"B24\":\"text-align: center;\",\"C24\":\"text-align: center;\",\"D24\":\"text-align: center;\",\"E24\":\"text-align: center;\",\"F24\":\"text-align: center;\",\"G24\":\"text-align: center;\",\"H24\":\"text-align: center;\",\"I24\":\"text-align: center;\",\"J24\":\"text-align: center;\",\"K24\":\"text-align: center;\",\"L24\":\"text-align: center;\",\"M24\":\"text-align: center;\",\"N24\":\"text-align: center;\",\"O24\":\"text-align: center;\",\"P24\":\"text-align: center;\",\"Q24\":\"text-align: center;\",\"R24\":\"text-align: center;\",\"S24\":\"text-align: center;\",\"T24\":\"text-align: center;\",\"U24\":\"text-align: center;\",\"V24\":\"text-align: center;\",\"W24\":\"text-align: center;\",\"X24\":\"text-align: center;\",\"Y24\":\"text-align: center;\",\"Z24\":\"text-align: center;\",\"AA24\":\"text-align: center;\",\"AB24\":\"text-align: center;\",\"AC24\":\"text-align: center;\",\"AD24\":\"text-align: center;\",\"A25\":\"text-align: center;\",\"B25\":\"text-align: center;\",\"C25\":\"text-align: center;\",\"D25\":\"text-align: center;\",\"E25\":\"text-align: center;\",\"F25\":\"text-align: center;\",\"G25\":\"text-align: center;\",\"H25\":\"text-align: center;\",\"I25\":\"text-align: center;\",\"J25\":\"text-align: center;\",\"K25\":\"text-align: center;\",\"L25\":\"text-align: center;\",\"M25\":\"text-align: center;\",\"N25\":\"text-align: center;\",\"O25\":\"text-align: center;\",\"P25\":\"text-align: center;\",\"Q25\":\"text-align: center;\",\"R25\":\"text-align: center;\",\"S25\":\"text-align: center;\",\"T25\":\"text-align: center;\",\"U25\":\"text-align: center;\",\"V25\":\"text-align: center;\",\"W25\":\"text-align: center;\",\"X25\":\"text-align: center;\",\"Y25\":\"text-align: center;\",\"Z25\":\"text-align: center;\",\"AA25\":\"text-align: center;\",\"AB25\":\"text-align: center;\",\"AC25\":\"text-align: center;\",\"AD25\":\"text-align: center;\",\"A26\":\"text-align: center;\",\"B26\":\"text-align: center;\",\"C26\":\"text-align: center;\",\"D26\":\"text-align: center;\",\"E26\":\"text-align: center;\",\"F26\":\"text-align: center;\",\"G26\":\"text-align: center;\",\"H26\":\"text-align: center;\",\"I26\":\"text-align: center;\",\"J26\":\"text-align: center;\",\"K26\":\"text-align: center;\",\"L26\":\"text-align: center;\",\"M26\":\"text-align: center;\",\"N26\":\"text-align: center;\",\"O26\":\"text-align: center;\",\"P26\":\"text-align: center;\",\"Q26\":\"text-align: center;\",\"R26\":\"text-align: center;\",\"S26\":\"text-align: center;\",\"T26\":\"text-align: center;\",\"U26\":\"text-align: center;\",\"V26\":\"text-align: center;\",\"W26\":\"text-align: center;\",\"X26\":\"text-align: center;\",\"Y26\":\"text-align: center;\",\"Z26\":\"text-align: center;\",\"AA26\":\"text-align: center;\",\"AB26\":\"text-align: center;\",\"AC26\":\"text-align: center;\",\"AD26\":\"text-align: center;\",\"A27\":\"text-align: center;\",\"B27\":\"text-align: center;\",\"C27\":\"text-align: center;\",\"D27\":\"text-align: center;\",\"E27\":\"text-align: center;\",\"F27\":\"text-align: center;\",\"G27\":\"text-align: center;\",\"H27\":\"text-align: center;\",\"I27\":\"text-align: center;\",\"J27\":\"text-align: center;\",\"K27\":\"text-align: center;\",\"L27\":\"text-align: center;\",\"M27\":\"text-align: center;\",\"N27\":\"text-align: center;\",\"O27\":\"text-align: center;\",\"P27\":\"text-align: center;\",\"Q27\":\"text-align: center;\",\"R27\":\"text-align: center;\",\"S27\":\"text-align: center;\",\"T27\":\"text-align: center;\",\"U27\":\"text-align: center;\",\"V27\":\"text-align: center;\",\"W27\":\"text-align: center;\",\"X27\":\"text-align: center;\",\"Y27\":\"text-align: center;\",\"Z27\":\"text-align: center;\",\"AA27\":\"text-align: center;\",\"AB27\":\"text-align: center;\",\"AC27\":\"text-align: center;\",\"AD27\":\"text-align: center;\",\"A28\":\"text-align: center;\",\"B28\":\"text-align: center;\",\"C28\":\"text-align: center;\",\"D28\":\"text-align: center;\",\"E28\":\"text-align: center;\",\"F28\":\"text-align: center;\",\"G28\":\"text-align: center;\",\"H28\":\"text-align: center;\",\"I28\":\"text-align: center;\",\"J28\":\"text-align: center;\",\"K28\":\"text-align: center;\",\"L28\":\"text-align: center;\",\"M28\":\"text-align: center;\",\"N28\":\"text-align: center;\",\"O28\":\"text-align: center;\",\"P28\":\"text-align: center;\",\"Q28\":\"text-align: center;\",\"R28\":\"text-align: center;\",\"S28\":\"text-align: center;\",\"T28\":\"text-align: center;\",\"U28\":\"text-align: center;\",\"V28\":\"text-align: center;\",\"W28\":\"text-align: center;\",\"X28\":\"text-align: center;\",\"Y28\":\"text-align: center;\",\"Z28\":\"text-align: center;\",\"AA28\":\"text-align: center;\",\"AB28\":\"text-align: center;\",\"AC28\":\"text-align: center;\",\"AD28\":\"text-align: center;\",\"A29\":\"text-align: center;\",\"B29\":\"text-align: center;\",\"C29\":\"text-align: center;\",\"D29\":\"text-align: center;\",\"E29\":\"text-align: center;\",\"F29\":\"text-align: center;\",\"G29\":\"text-align: center;\",\"H29\":\"text-align: center;\",\"I29\":\"text-align: center;\",\"J29\":\"text-align: center;\",\"K29\":\"text-align: center;\",\"L29\":\"text-align: center;\",\"M29\":\"text-align: center;\",\"N29\":\"text-align: center;\",\"O29\":\"text-align: center;\",\"P29\":\"text-align: center;\",\"Q29\":\"text-align: center;\",\"R29\":\"text-align: center;\",\"S29\":\"text-align: center;\",\"T29\":\"text-align: center;\",\"U29\":\"text-align: center;\",\"V29\":\"text-align: center;\",\"W29\":\"text-align: center;\",\"X29\":\"text-align: center;\",\"Y29\":\"text-align: center;\",\"Z29\":\"text-align: center;\",\"AA29\":\"text-align: center;\",\"AB29\":\"text-align: center;\",\"AC29\":\"text-align: center;\",\"AD29\":\"text-align: center;\",\"A30\":\"text-align: center;\",\"B30\":\"text-align: center;\",\"C30\":\"text-align: center;\",\"D30\":\"text-align: center;\",\"E30\":\"text-align: center;\",\"F30\":\"text-align: center;\",\"G30\":\"text-align: center;\",\"H30\":\"text-align: center;\",\"I30\":\"text-align: center;\",\"J30\":\"text-align: center;\",\"K30\":\"text-align: center;\",\"L30\":\"text-align: center;\",\"M30\":\"text-align: center;\",\"N30\":\"text-align: center;\",\"O30\":\"text-align: center;\",\"P30\":\"text-align: center;\",\"Q30\":\"text-align: center;\",\"R30\":\"text-align: center;\",\"S30\":\"text-align: center;\",\"T30\":\"text-align: center;\",\"U30\":\"text-align: center;\",\"V30\":\"text-align: center;\",\"W30\":\"text-align: center;\",\"X30\":\"text-align: center;\",\"Y30\":\"text-align: center;\",\"Z30\":\"text-align: center;\",\"AA30\":\"text-align: center;\",\"AB30\":\"text-align: center;\",\"AC30\":\"text-align: center;\",\"AD30\":\"text-align: center;\"},\"meta\":null,\"width\":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}";
static final String BASE64_SPREADSHEET_DATA = String.format("<DATA>%s</DATA>", Base64.getEncoder().encodeToString(
DECODED_SPREADSHEET_DATA.getBytes(StandardCharsets.UTF_8)));
}
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