diff --git a/builds/SFB_CreateStudy.jar b/builds/SFB_CreateStudy.jar index bd631a95d985d45234e1d795d543b9f30d695234..7cd044a272f1c48e07c2168d063a2485e3dc6160 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 c1c5d8db2976895ac73c089d9cd294f94f8bd297..fdd4c9336531040218b8006a1050bbb2da3ebeaa 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -19,7 +19,7 @@ import utils.SFB_Util; public class Main { private static final String XLSX_SESSION_PREFIX = "SessionDate"; - private static final String SFB_SUBJID = "subjectID"; + private static final String SFB_SUBJID = "Subject ID"; private static final String SFB_RECORD_DATE = "Record Date"; private static int xlsx_subjIdHeaderIndex = -1; @@ -43,6 +43,23 @@ public class Main { FileChooserPanel xlsxImportFile = new FileChooserPanel("Excel import file").switchToFileSelect(".xlsx"); ConditionedPanel importFromXlsx = new ConditionedPanel("Import from Excel", false, baseMetaJson, xlsxImportFile); + importFromXlsx.addActionListener( (ActionEvent e) -> { + boolean notState = !importFromXlsx.getOutput(); + numberOfConsecutiveSubjects.setEnabled(notState); + if (!notState) + useCustomSubjectCodes.setValue(notState); + sessionAmount.setEnabled(notState); + + }); + + useCustomSubjectCodes.addActionListener( (ActionEvent e) -> { + numberOfConsecutiveSubjects.setEnabled(true); + if (useCustomSubjectCodes.getOutput()) + importFromXlsx.setValue(false); + sessionAmount.setEnabled(true); + + }); + ButtonPanel submit = new ButtonPanel("Create", new ActionListener() { @Override @@ -82,11 +99,13 @@ public class Main { xlsxReader = CSV_Reader.fromXLSX(xlsxImportFile.getOutput(), null); - for (int i = 0; i < sessions; i++) { - if (xlsxReader.getColumn(XLSX_SESSION_PREFIX + " " + i) == -1) { - SimpleFrame.promt("Excel file has not specifed Session date " + i + " [" + XLSX_SESSION_PREFIX + " " + i + "]"); - return; - } + sessions = 0; + while(xlsxReader.getColumn(XLSX_SESSION_PREFIX + " " + (sessions + 1)) != -1) + sessions++; + + if (sessions == 0) { + SimpleFrame.promt("Please specify session dates in excel file: " + XLSX_SESSION_PREFIX + " 0"); + return; } @@ -197,11 +216,17 @@ public class Main { for(int i = 0; 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("" + 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 + }else continue; } + + if (header.trim().equals("") || currentRow[i].equals("")) + continue; + obj.put(header, currentRow[i]); } diff --git a/src/uiutils/CheckboxPanel.java b/src/uiutils/CheckboxPanel.java index e6294ebdc81e14d07732168ddc21417595480682..99584bd022065b90f6eaddd8fa64ffba8228978f 100644 --- a/src/uiutils/CheckboxPanel.java +++ b/src/uiutils/CheckboxPanel.java @@ -5,7 +5,7 @@ import java.awt.FlowLayout; import javax.swing.JCheckBox; import javax.swing.JPanel; -public class CheckboxPanel extends JPanel implements IOutput<Boolean>{ +public class CheckboxPanel extends JPanel implements IOutput<Boolean, CheckboxPanel>{ private static final long serialVersionUID = 186566928368140438L; private JCheckBox checkBox; @@ -29,4 +29,10 @@ public class CheckboxPanel extends JPanel implements IOutput<Boolean>{ return checkBox.isSelected(); } + @Override + public CheckboxPanel setValue(Boolean val) { + this.checkBox.setSelected(val); + return this; + } + } diff --git a/src/uiutils/ComboSelectionPanel.java b/src/uiutils/ComboSelectionPanel.java index 87e737bbf861e49cfc02a96cf324d9bc95dec694..636ce9e4395c3df9beb317cb8b30e78128d3031d 100644 --- a/src/uiutils/ComboSelectionPanel.java +++ b/src/uiutils/ComboSelectionPanel.java @@ -6,7 +6,7 @@ import java.awt.FlowLayout; import javax.swing.JLabel; import javax.swing.JPanel; -public class ComboSelectionPanel extends JPanel implements IOutput<String[]>{ +public class ComboSelectionPanel extends JPanel implements IOutput<String[], ComboSelectionPanel>{ private static final long serialVersionUID = -2030551269354521325L; public static final String[] SFB_MODALITIES = new String[] {"Behavorial", "Calcium Imaging", "ECG|Pulse", "EDA", "EEG", "Eyetracking", "Histology", "Hormone measurements", "LFP", "MRI", "Questionaires", "Respiration", "Single cell recording", "TMS"}; @@ -31,5 +31,10 @@ public class ComboSelectionPanel extends JPanel implements IOutput<String[]>{ public String[] getOutput() { return comboSel.GetSelectedStrings(); } + + @Override + public ComboSelectionPanel setValue(String[] val) { + throw new RuntimeException("Not jet implemented!"); + } } diff --git a/src/uiutils/ConditionedPanel.java b/src/uiutils/ConditionedPanel.java index ca7a86ba1330aa7b1d7506243af98f83fda27c02..96c103a5cfbba56a37859d85c730316d4d7571bf 100644 --- a/src/uiutils/ConditionedPanel.java +++ b/src/uiutils/ConditionedPanel.java @@ -19,7 +19,7 @@ import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.border.EmptyBorder; -public class ConditionedPanel extends JPanel implements ActionListener, IOutput<Boolean>{ +public class ConditionedPanel extends JPanel implements ActionListener, IOutput<Boolean, ConditionedPanel>{ private static final long serialVersionUID = 9148401845646235697L; private JCheckBox checkBox; @@ -58,13 +58,17 @@ public class ConditionedPanel extends JPanel implements ActionListener, IOutput< actionPerformed(null); } + public void addActionListener(ActionListener listener) { + checkBox.addActionListener(listener); + } + private Component leftJustify( JComponent panel ) { Box b = Box.createHorizontalBox(); b.add( panel ); b.add( Box.createHorizontalGlue() ); return b; } - + @Override public Boolean getOutput() { return checkBox.isSelected(); @@ -81,14 +85,14 @@ public class ConditionedPanel extends JPanel implements ActionListener, IOutput< @SuppressWarnings("unchecked") public <T> T getInternalOutput() { - return ((IOutput<T>)interalPanels[0]).getOutput(); + return ((IOutput<T,?>)interalPanels[0]).getOutput(); } @SuppressWarnings("unchecked") public <T> LinkedList<T> getInternalOutputs() { LinkedList<T> list = new LinkedList<T>(); for(int i = 0; i < interalPanels.length; i++) { - list.add(((IOutput<T>)interalPanels[0]).getOutput()); + list.add(((IOutput<T,?>)interalPanels[0]).getOutput()); } return list; @@ -111,4 +115,12 @@ public class ConditionedPanel extends JPanel implements ActionListener, IOutput< } } + + @Override + public ConditionedPanel setValue(Boolean val) { + if (checkBox.isSelected() != val) { + checkBox.doClick(); + } + return this; + } } diff --git a/src/uiutils/FileChooserPanel.java b/src/uiutils/FileChooserPanel.java index b8df9e5b5a1b85807a3d549accea1aa58d100eb8..b7f2cbb4bebc28c94df6ef7e073a1619affeef73 100644 --- a/src/uiutils/FileChooserPanel.java +++ b/src/uiutils/FileChooserPanel.java @@ -11,7 +11,7 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.filechooser.FileFilter; -public class FileChooserPanel extends JPanel implements IOutput<File>, ActionListener{ +public class FileChooserPanel extends JPanel implements IOutput<File, FileChooserPanel>, ActionListener{ private static final long serialVersionUID = 3136641561102977065L; private JButton button; private JLabel text; @@ -104,5 +104,14 @@ public class FileChooserPanel extends JPanel implements IOutput<File>, ActionLis return filesOut; } + @Override + public FileChooserPanel setValue(File val) { + out = val; + text.setText(out.getAbsolutePath().substring( + (int)Math.max(0, out.getAbsolutePath().length() - maxFilenameCharactersShown))); + + return this; + } + } diff --git a/src/uiutils/IOutput.java b/src/uiutils/IOutput.java index d166c338a6a7cb0c66ab51fb4b00ed0e230c94f3..08a127c6a2f109a66b97b026b85435d592a9cff0 100644 --- a/src/uiutils/IOutput.java +++ b/src/uiutils/IOutput.java @@ -1,5 +1,6 @@ package uiutils; -public interface IOutput<T> { +public interface IOutput<T, THIS> { T getOutput(); + THIS setValue(T val); } diff --git a/src/uiutils/InputFieldPanel.java b/src/uiutils/InputFieldPanel.java index 1d7b2727fcbd23663e1f7655e963655e4b44f903..a298dcfb592a46dac32e809eeeb7b154190bf5c1 100644 --- a/src/uiutils/InputFieldPanel.java +++ b/src/uiutils/InputFieldPanel.java @@ -14,7 +14,7 @@ import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.text.Document; -public class InputFieldPanel extends JPanel implements IOutput<String>{ +public class InputFieldPanel extends JPanel implements IOutput<String, InputFieldPanel>{ private PlaceholderTextField txtField; @@ -94,4 +94,10 @@ public class InputFieldPanel extends JPanel implements IOutput<String>{ } } + + @Override + public InputFieldPanel setValue(String val) { + txtField.setText(val); + return this; + } } diff --git a/src/uiutils/ReportABugWindow.java b/src/uiutils/ReportABugWindow.java index 8a4a767e7c8369f2bd1b0a2ea6996d1311c34997..1df64692205631e4c1165b5be82be4d6c9e327bd 100644 --- a/src/uiutils/ReportABugWindow.java +++ b/src/uiutils/ReportABugWindow.java @@ -24,7 +24,7 @@ public class ReportABugWindow extends SimpleFrame{ private static final long serialVersionUID = -9110093488807819801L; - private HashMap<String, IOutput<?>> nameToFieldTable; + private HashMap<String, IOutput<?, ?>> nameToFieldTable; private CheckboxPanel includeLogData; private String applicationName; @@ -84,11 +84,11 @@ public class ReportABugWindow extends SimpleFrame{ } public void AddElement(String jsonName, JPanel ioutputPanel) { - if (!(ioutputPanel instanceof IOutput<?>)) { + if (!(ioutputPanel instanceof IOutput<?, ?>)) { throw new RuntimeException("Only IOutput panels can be added!"); } - nameToFieldTable.put(jsonName, (IOutput<?>)ioutputPanel); + nameToFieldTable.put(jsonName, (IOutput<?, ?>)ioutputPanel); super.addCenter(ioutputPanel); } @@ -97,7 +97,7 @@ public class ReportABugWindow extends SimpleFrame{ public JSONObject createJSON() { JSONObject json = new JSONObject(); - for(Entry<String, IOutput<?>> entry : nameToFieldTable.entrySet()) { + for(Entry<String, IOutput<?, ?>> entry : nameToFieldTable.entrySet()) { json.put(entry.getKey(), entry.getValue().getOutput().toString()); } diff --git a/src/uiutils/SpinnerINTPanel.java b/src/uiutils/SpinnerINTPanel.java index 77a177e7d6040caf0d4dee82bb563e7ac817a320..219c3cf8d1f81578d353d666895b391fc8941300 100644 --- a/src/uiutils/SpinnerINTPanel.java +++ b/src/uiutils/SpinnerINTPanel.java @@ -9,7 +9,7 @@ import javax.swing.JSpinner;import javax.swing.SpinnerModel; import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeListener; -public class SpinnerINTPanel extends JPanel implements IOutput<Integer>{ +public class SpinnerINTPanel extends JPanel implements IOutput<Integer, SpinnerINTPanel>{ private static final long serialVersionUID = -2030532269354521325L; private JSpinner spinner; @@ -34,6 +34,18 @@ public class SpinnerINTPanel extends JPanel implements IOutput<Integer>{ public Integer getOutput() { return (int)spinner.getValue(); } + + @Override + public void setEnabled(boolean enabled) { + spinner.setEnabled(enabled); + super.setEnabled(enabled); + } + + @Override + public SpinnerINTPanel setValue(Integer val) { + spinner.setValue(val); + return this; + } diff --git a/src/uiutils/TextAreaPanel.java b/src/uiutils/TextAreaPanel.java index 1e7a2679af8beaf85be889650ee5809c805e9f6a..8865b246d13b70de417b143bb85200c43ec7afc6 100644 --- a/src/uiutils/TextAreaPanel.java +++ b/src/uiutils/TextAreaPanel.java @@ -11,7 +11,7 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; -public class TextAreaPanel extends JPanel implements IOutput<String> { +public class TextAreaPanel extends JPanel implements IOutput<String, TextAreaPanel> { private static final long serialVersionUID = 5857892221079489896L; public JTextArea textArea; @@ -59,4 +59,10 @@ public class TextAreaPanel extends JPanel implements IOutput<String> { public String getOutput() { return textArea.getText(); } + + @Override + public TextAreaPanel setValue(String val) { + textArea.setText(val); + return this; + } }