diff --git a/builds/SFB_CreateStudy.jar b/builds/SFB_CreateStudy.jar index 7cd044a272f1c48e07c2168d063a2485e3dc6160..7a6af3feb8ddacf3faf4ffd098774e511670fb54 100644 Binary files a/builds/SFB_CreateStudy.jar and b/builds/SFB_CreateStudy.jar differ diff --git a/src/main/Main.java b/src/main/Main.java index fdd4c9336531040218b8006a1050bbb2da3ebeaa..e98ac29819a8e3a47c50abb08fceb629d127570a 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -14,15 +14,15 @@ import uiutils.LabelPanel; import uiutils.SimpleFrame; import uiutils.SpinnerINTPanel; import utils.CSV_Reader; +import utils.SFB_CreateMeta; import utils.SFB_JSON_Util; import utils.SFB_Util; public class Main { - private static final String XLSX_SESSION_PREFIX = "SessionDate"; - private static final String SFB_SUBJID = "Subject ID"; + private static final String XLSX_SESSION_PREFIX = "Session Date"; private static final String SFB_RECORD_DATE = "Record Date"; - private static int xlsx_subjIdHeaderIndex = -1; + private static final String[] DEFAULT_HEADER_NAMES = new String[] {"Subject ID", "Subject Age", "Subject Sex", "Subject Type", "Extra Information"}; public static void main(String[] args) { SimpleFrame frame = new SimpleFrame("Create Study", 600, 400); @@ -99,18 +99,25 @@ public class Main { xlsxReader = CSV_Reader.fromXLSX(xlsxImportFile.getOutput(), null); + for(int i = 0; i < DEFAULT_HEADER_NAMES.length; i++) { + if (!xlsxReader.getColumnHead(i).equals(DEFAULT_HEADER_NAMES[i])) { + SimpleFrame.promt("Excel error: Column header Nr. " + i + " should be " + DEFAULT_HEADER_NAMES[i]); + return; + } + } + sessions = 0; - while(xlsxReader.getColumn(XLSX_SESSION_PREFIX + " " + (sessions + 1)) != -1) + while(xlsxReader.getMaxColumns() > sessions + DEFAULT_HEADER_NAMES.length && xlsxReader.getColumnHead(sessions + DEFAULT_HEADER_NAMES.length).equals(XLSX_SESSION_PREFIX + " " + String.format("%02d", sessions + 1))) sessions++; if (sessions == 0) { - SimpleFrame.promt("Please specify session dates in excel file: " + XLSX_SESSION_PREFIX + " 0"); + SimpleFrame.promt("Please specify session dates in excel file: " + XLSX_SESSION_PREFIX + " 01"); return; } + xlsxReader.nullEntriesToEmptyStr(); - xlsx_subjIdHeaderIndex = xlsxReader.getColumnUncased(SFB_SUBJID); // - codes = xlsxReader.getCompleteColumn(xlsx_subjIdHeaderIndex); + codes = xlsxReader.getCompleteColumn(0); // 0 for Subject ID } else { @@ -188,7 +195,7 @@ public class Main { subjFolder.mkdir(); for(int i = 1; i <= sessionAmount; i++) { - File sessionFolder = new File(subjFolder.getAbsolutePath() + "\\ses-" + i); + File sessionFolder = new File(subjFolder.getAbsolutePath() + "\\ses-" + String.format("%02d", i)); sessionFolder.mkdir(); if (xlsxReader != null) @@ -211,23 +218,29 @@ public class Main { SFB_Util.copy(baseMeta, metaJson); SFB_JSON_Util.performOnJson(metaJson, (obj) -> { - String[] currentRow = xlsxReader.getCompleteRow(xlsxReader.findRow(sfbSubjCode, xlsx_subjIdHeaderIndex)); + String[] currentRow = xlsxReader.getCompleteRow(xlsxReader.findRow(sfbSubjCode, 0)); // SubjID - for(int i = 0; i < currentRow.length; i++) { + //new String[] {"Subject ID", "Subject Age", "Subject Sex", "Subject Type", "Extra Information"} + obj.put("Subject ID", currentRow[0]); + obj.put("Subject age", currentRow[1]); + obj.put("Subject sex", SFB_JSON_Util.getGenderFromStringStart(currentRow[2]).toString()); + + if (!currentRow[3].equals("Healthy test subject") && !currentRow[3].equals("Patient") && !currentRow[3].equals("Healthy control subject")) + currentRow[3] = "Healthy test subject"; + + obj.put("Subject type", currentRow[3]); + obj.put("Extra information", currentRow[4]); + + for(int i = DEFAULT_HEADER_NAMES.length; i < currentRow.length; i++) { String header = xlsxReader.getColumnHead(i); if (header.startsWith(XLSX_SESSION_PREFIX)) { - if (header.endsWith("" + currentSession)) { //Identifies the current session. This breaks in case of more than 9 sessions. But this wont happen. + if (header.endsWith("" + String.format("%02d", currentSession))) { //Identifies the current session. This breaks in case of more than 9 sessions. But this wont happen. obj.put("DataCite-Date", currentRow[i]); obj.put("DublinCore-Date", currentRow[i]); header = SFB_RECORD_DATE; }else continue; } - - if (header.trim().equals("") || currentRow[i].equals("")) - continue; - - obj.put(header, currentRow[i]); } }); diff --git a/src/utils/CSV_Reader.java b/src/utils/CSV_Reader.java index 00cf1100f88f3c913270c3c368430a78d03976bc..6bae4a5e8eede6484ec7f4d082cd3f954715bb65 100644 --- a/src/utils/CSV_Reader.java +++ b/src/utils/CSV_Reader.java @@ -67,6 +67,15 @@ public class CSV_Reader { } } + public void nullEntriesToEmptyStr() { + for(int r = 0; r < getMaxRows(); r++) { + for(int c = 0; c < getMaxColumns(); c++) { + if (entries[r][c] == null) + entries[r][c] = ""; + } + } + } + private String[] arrayExpand(String[] arr) { if (arr.length < headers.length) { String[] newArr = new String[headers.length]; diff --git a/src/utils/SFB_JSON_Util.java b/src/utils/SFB_JSON_Util.java index bb3c3e2cbcc8caf1d234cd6b7b3ec1ac6f4ec7d0..952e9bb41fd7960ddd1db729b3243d6afb2f74ae 100644 --- a/src/utils/SFB_JSON_Util.java +++ b/src/utils/SFB_JSON_Util.java @@ -221,6 +221,16 @@ public class SFB_JSON_Util { return Gender.UNDEFINED; } + public static Gender getGenderFromStringStart(String gen) { + gen = gen.toLowerCase(); + if(gen.startsWith("m")) { + return Gender.MALE; + } else if (gen.startsWith("w") || gen.startsWith("f")) { + return Gender.FEMALE; + } + return Gender.UNDEFINED; + } + public enum PatientType { HEALTY_TEST_SUBJ("Healthy test subject"), PATIENT("Patient"),