diff --git a/ProgramData/field_templates/scidata.xml b/ProgramData/field_templates/scidata.xml new file mode 100644 index 00000000..cf71d869 --- /dev/null +++ b/ProgramData/field_templates/scidata.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index c958d370..4778cdda 100644 --- a/README.md +++ b/README.md @@ -19,14 +19,17 @@ ### Running ISAcreator To run ISAcreator locally: + 1. Clone the code to your machine. You may clone from the primary repository at ISA-tools/ISAcreator, or from your own fork. 2. Compile the code (`mvn assembly:assembly -Dmaven.test.skip=true -Pbuild`) - the build profile automatically sets some system variables like version etc. from information held within the pom. -3. Run the code (`java -cp target/ISAcreator-1.7.1-jar-with-dependencies.jar org.isatools.isacreator.launch.ISAcreatorApplication`) +3. Run the code (`java -cp target/ISAcreator--jar-with-dependencies.jar org.isatools.isacreator.launch.ISAcreatorApplication`) ### Contributing You should read this article about Github Flow: . Although we don't strictly use Github flow, it's a really useful tutorial on how to use Git for collaborative development. +Ensure you have maven 2.2.1 installed and enabled as well as git. If you have trouble with dependencies, and you are running behind a proxy, please ensure you set the proxy in both MAVEN_OPTS and settings.xml. See [here](https://answers.atlassian.com/questions/31384/plugin-sdk-proxy-setting-for-https-is-not-working-but-http-is) for more information. + 1. Fork it. 2. Clone your forked repository to your machine 3. Create a branch off of the development branch (`git checkout -b myisacreator`) @@ -55,4 +58,4 @@ For a list of contributors, please see \ No newline at end of file +CPAL License, available at diff --git a/isatab files/BII-I-1/a_metabolome.txt b/isatab files/BII-I-1/a_metabolome.txt index 57093eba..4f9465c9 100644 --- a/isatab files/BII-I-1/a_metabolome.txt +++ b/isatab files/BII-I-1/a_metabolome.txt @@ -1,112 +1,112 @@ -"Sample Name" "Material Type" "Term Source REF" "Term Accession Number" "Protocol REF" "Parameter Value[standard volume]" "Unit" "Term Source REF" "Term Accession Number" "Parameter Value[sample volume]" "Unit" "Term Source REF" "Term Accession Number" "Extract Name" "MS Assay Name" "Raw Spectral Data File" "Factor Value[limiting nutrient]" "Term Source REF" "Term Accession Number" "Factor Value[rate]" "Unit" "Term Source REF" "Term Accession Number" -"S-0.2-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "S-0.2-aliquot8" "JIC36_Sulphate_0.20_Internal_1_3" "JIC36_Sulphate_0.20_Internal_1_3.txt" "sulphur" "" "" "0.2" "l/hr" "" "" -"S-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "S-0.07-aliquot5" "JIC82_Sulphate_0.07_External_1_1" "JIC82_Sulphate_0.07_External_1_1.txt" "sulphur" "" "" "0.07" "l/hr" "" "" -"S-0.07-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "S-0.07-aliquot6" "JIC83_Sulphate_0.07_External_2_1" "/Users/eamonnmaguire/Downloads/sample-data" "sulphur" "" "" "0.07" "l/hr" "" "" -"S-0.07-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "S-0.07-aliquot7" "JIC84_Sulphate_0.07_External_3_1" "/Users/eamonnmaguire/Dropbox/ISAtab" "sulphur" "" "" "0.07" "l/hr" "" "" -"S-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "S-0.07-aliquot5" "JIC82_Sulphate_0.07_External_1_2" "/Users/eamonnmaguire/Dropbox/Presentation Images" "sulphur" "" "" "0.07" "l/hr" "" "" -"S-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "S-0.07-aliquot5" "JIC82_Sulphate_0.07_External_1_3" "/Users/eamonnmaguire/Dropbox/Presentations" "sulphur" "" "" "0.07" "l/hr" "" "" -"S-0.1-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "S-0.1-aliquot5" "JIC85_Sulphate_0.10_External_1_1" "JIC85_Sulphate_0.10_External_1_1.txt" "sulphur" "" "" "0.1" "l/hr" "" "" -"S-0.1-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "S-0.1-aliquot6" "JIC86_Sulphate_0.10_External_2_1" "JIC86_Sulphate_0.10_External_2_1.txt" "sulphur" "" "" "0.1" "l/hr" "" "" -"S-0.2-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "S-0.2-aliquot5" "JIC88_Sulphate_0.20_External_1_1" "JIC88_Sulphate_0.20_External_1_1.txt" "sulphur" "" "" "0.2" "l/hr" "" "" -"S-0.2-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "S-0.2-aliquot6" "JIC89_Sulphate_0.20_External_2_1" "JIC89_Sulphate_0.20_External_2_1.txt" "sulphur" "" "" "0.2" "l/hr" "" "" -"S-0.2-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "S-0.2-aliquot7" "JIC90_Sulphate_0.20_External_3_1" "JIC90_Sulphate_0.20_External_3_1.txt" "sulphur" "" "" "0.2" "l/hr" "" "" -"P-0.07-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "P-0.07-aliquot8" "JIC20_Phosphate_0.07_Internal_1_1" "JIC20_Phosphate_0.07_Internal_1_1.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.07-aliquot9" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "P-0.07-aliquot9" "JIC21_Phosphate_0.07_Internal_2_1" "JIC21_Phosphate_0.07_Internal_2_1.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.1-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "P-0.1-aliquot8" "JIC22_Phosphate_0.10_Internal_1_1" "JIC22_Phosphate_0.10_Internal_1_1.txt" "phosphorus" "" "" "0.1" "l/hr" "" "" -"P-0.1-aliquot9" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "P-0.1-aliquot9" "JIC23_Phosphate_0.10_Internal_2_1" "JIC23_Phosphate_0.10_Internal_2_1.txt" "phosphorus" "" "" "0.1" "l/hr" "" "" -"P-0.1-aliquot10" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "P-0.1-aliquot10" "JIC24_Phosphate_0.10_Internal_3_1" "JIC24_Phosphate_0.10_Internal_3_1.txt" "phosphorus" "" "" "0.1" "l/hr" "" "" -"P-0.2-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "P-0.2-aliquot8" "JIC25_Phosphate_0.20_Internal_1_1" "JIC25_Phosphate_0.20_Internal_1_1.txt" "phosphorus" "" "" "0.2" "l/hr" "" "" -"P-0.2-aliquot9" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "P-0.2-aliquot9" "JIC26_Phosphate_0.20_Internal_2_1" "JIC26_Phosphate_0.20_Internal_2_1.txt" "phosphorus" "" "" "0.2" "l/hr" "" "" -"P-0.2-aliquot10" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "P-0.2-aliquot10" "JIC27_Phosphate_0.20_Internal_3_1" "JIC27_Phosphate_0.20_Internal_3_1.txt" "phosphorus" "" "" "0.2" "l/hr" "" "" -"P-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.07-aliquot5" "JIC73_Phosphate_0.07_External_1_1" "JIC73_Phosphate_0.07_External_1_1.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.07-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.07-aliquot6" "JIC73_Phosphate_0.07_External_1_2" "JIC73_Phosphate_0.07_External_1_2.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.07-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.07-aliquot7" "JIC73_Phosphate_0.07_External_1_3" "JIC73_Phosphate_0.07_External_1_3.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.07-aliquot5" "JIC74_Phosphate_0.07_External_2_1" "JIC74_Phosphate_0.07_External_2_1.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.07-aliquot5" "JIC75_Phosphate_0.07_External_3_1" "JIC75_Phosphate_0.07_External_3_1.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.1-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.1-aliquot5" "JIC76_Phosphate_0.10_External_1_1" "JIC76_Phosphate_0.10_External_1_1.txt" "phosphorus" "" "" "0.1" "l/hr" "" "" -"P-0.1-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.1-aliquot6" "JIC77_Phosphate_0.10_External_2_1" "JIC77_Phosphate_0.10_External_2_1.txt" "phosphorus" "" "" "0.1" "l/hr" "" "" -"P-0.1-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.1-aliquot7" "JIC78_Phosphate_0.10_External_3_1" "JIC78_Phosphate_0.10_External_3_1.txt" "phosphorus" "" "" "0.1" "l/hr" "" "" -"P-0.2-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.2-aliquot5" "JIC79_Phosphate_0.20_External_1_1" "JIC79_Phosphate_0.20_External_1_1.txt" "phosphorus" "" "" "0.2" "l/hr" "" "" -"P-0.2-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.2-aliquot6" "JIC80_Phosphate_0.20_External_2_1" "JIC80_Phosphate_0.20_External_2_1.txt" "phosphorus" "" "" "0.2" "l/hr" "" "" -"P-0.2-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "P-0.2-aliquot7" "JIC81_Phosphate_0.20_External_3_1" "JIC81_Phosphate_0.20_External_3_1.txt" "phosphorus" "" "" "0.2" "l/hr" "" "" -"N-0.07-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.07-aliquot8" "JIC10_Nitrogen_0.07_Internal_1_1" "JIC10_Nitrogen_0.07_Internal_1_1.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.07-aliquot8" "JIC10_Nitrogen_0.07_Internal_1_2" "JIC10_Nitrogen_0.07_Internal_1_2.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.07-aliquot8" "JIC10_Nitrogen_0.07_Internal_1_3" "JIC10_Nitrogen_0.07_Internal_1_3.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot9" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.07-aliquot9" "JIC11_Nitrogen_0.07_Internal_2_1" "JIC11_Nitrogen_0.07_Internal_2_1.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot10" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.07-aliquot10" "JIC12_Nitrogen_0.07_Internal_3_1" "JIC12_Nitrogen_0.07_Internal_3_1.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.1-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.1-aliquot8" "JIC13_Nitrogen_0.10_Internal_1_1" "JIC13_Nitrogen_0.10_Internal_1_1.txt" "nitrogen" "" "" "0.1" "l/hr" "" "" -"N-0.1-aliquot9" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.1-aliquot9" "JIC14_Nitrogen_0.10_Internal_2_1" "JIC14_Nitrogen_0.10_Internal_2_1.txt" "nitrogen" "" "" "0.1" "l/hr" "" "" -"N-0.1-aliquot10" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.1-aliquot10" "JIC15_Nitrogen_0.10_Internal_3_1" "JIC15_Nitrogen_0.10_Internal_3_1.txt" "nitrogen" "" "" "0.1" "l/hr" "" "" -"N-0.2-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.2-aliquot8" "JIC16_Nitrogen_0.20_Internal_1_1" "JIC16_Nitrogen_0.20_Internal_1_1.txt" "nitrogen" "" "" "0.2" "l/hr" "" "" -"N-0.2-aliquot9" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.2-aliquot9" "JIC17_Nitrogen_0.20_Internal_2_1" "JIC17_Nitrogen_0.20_Internal_2_1.txt" "nitrogen" "" "" "0.2" "l/hr" "" "" -"N-0.2-aliquot10" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "N-0.2-aliquot10" "JIC18_Nitrogen_0.20_Internal_3_1" "JIC18_Nitrogen_0.20_Internal_3_1.txt" "nitrogen" "" "" "0.2" "l/hr" "" "" -"N-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.07-aliquot5" "JIC64_Nitrogen_0.07_External_1_1" "JIC64_Nitrogen_0.07_External_1_1.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.07-aliquot5" "JIC64_Nitrogen_0.07_External_1_2" "JIC64_Nitrogen_0.07_External_1_2.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.07-aliquot5" "JIC64_Nitrogen_0.07_External_1_3" "JIC64_Nitrogen_0.07_External_1_3.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.07-aliquot6" "JIC65_Nitrogen_0.07_External_2_1" "JIC65_Nitrogen_0.07_External_2_1.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.07-aliquot7" "JIC66_Nitrogen_0.07_External_3_1" "JIC66_Nitrogen_0.07_External_3_1.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.1-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.1-aliquot5" "JIC67_Nitrogen_0.10_External_1_1" "JIC67_Nitrogen_0.10_External_1_1.txt" "nitrogen" "" "" "0.1" "l/hr" "" "" -"N-0.1-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.1-aliquot6" "JIC68_Nitrogen_0.10_External_2_1" "JIC68_Nitrogen_0.10_External_2_1.txt" "nitrogen" "" "" "0.1" "l/hr" "" "" -"N-0.1-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.1-aliquot7" "JIC69_Nitrogen_0.10_External_3_1" "JIC69_Nitrogen_0.10_External_3_1.txt" "nitrogen" "" "" "0.1" "l/hr" "" "" -"N-0.2-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.2-aliquot5" "JIC70_Nitrogen_0.20_External_1_1" "JIC70_Nitrogen_0.20_External_1_1.txt" "nitrogen" "" "" "0.2" "l/hr" "" "" -"N-0.2-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.2-aliquot6" "JIC71_Nitrogen_0.20_External_2_1" "JIC71_Nitrogen_0.20_External_2_1.txt" "nitrogen" "" "" "0.2" "l/hr" "" "" -"N-0.2-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "N-0.2-aliquot7" "JIC72_Nitrogen_0.20_External_3_1" "JIC72_Nitrogen_0.20_External_3_1.txt" "nitrogen" "" "" "0.2" "l/hr" "" "" -"C-0.07-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.07-aliquot8" "JIC1_Carbon_0.07_Internal_1_1" "JIC1_Carbon_0.07_Internal_1_1.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.07-aliquot8" "JIC1_Carbon_0.07_Internal_1_2" "JIC1_Carbon_0.07_Internal_1_2.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.07-aliquot8" "JIC1_Carbon_0.07_Internal_1_3" "JIC1_Carbon_0.07_Internal_1_3.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot9" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.07-aliquot9" "JIC2_Carbon_0.07_Internal_2_1" "JIC2_Carbon_0.07_Internal_2_1.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot10" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.07-aliquot10" "JIC3_Carbon_0.07_Internal_3_1" "JIC3_Carbon_0.07_Internal_3_1.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.1-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.1-aliquot8" "JIC4_Carbon_0.10_Internal_1_1" "JIC4_Carbon_0.10_Internal_1_1.txt" "carbon" "" "" "0.1" "l/hr" "" "" -"C-0.1-aliquot9" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.1-aliquot9" "JIC5_Carbon_0.10_Internal_2_1" "JIC5_Carbon_0.10_Internal_2_1.txt" "carbon" "" "" "0.1" "l/hr" "" "" -"C-0.1-aliquot10" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.1-aliquot10" "JIC6_Carbon_0.10_Internal_3_1" "JIC6_Carbon_0.10_Internal_3_1.txt" "carbon" "" "" "0.1" "l/hr" "" "" -"C-0.2-aliquot8" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.2-aliquot8" "JIC7_Carbon_0.20_Internal_1_1" "JIC7_Carbon_0.20_Internal_1_1.txt" "carbon" "" "" "0.2" "l/hr" "" "" -"C-0.2-aliquot9" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.2-aliquot9" "JIC8_Carbon_0.20_Internal_2_1" "JIC8_Carbon_0.20_Internal_2_1.txt" "carbon" "" "" "0.2" "l/hr" "" "" -"C-0.2-aliquot10" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "C-0.2-aliquot10" "JIC9_Carbon_0.20_Internal_3_1" "JIC9_Carbon_0.20_Internal_3_1.txt" "carbon" "" "" "0.2" "l/hr" "" "" -"C-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.07-aliquot5" "JIC55_Carbon_0.07_External_1_1" "JIC55_Carbon_0.07_External_1_1.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.07-aliquot5" "JIC55_Carbon_0.07_External_1_2" "JIC55_Carbon_0.07_External_1_2.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.07-aliquot5" "JIC55_Carbon_0.07_External_1_3" "JIC55_Carbon_0.07_External_1_3.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.07-aliquot6" "JIC56_Carbon_0.07_External_2_1" "JIC56_Carbon_0.07_External_2_1.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.07-aliquot7" "JIC57_Carbon_0.07_External_3_1" "JIC57_Carbon_0.07_External_3_1.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.1-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.1-aliquot5" "JIC58_Carbon_0.10_External_1_1" "JIC58_Carbon_0.10_External_1_1.txt" "carbon" "" "" "0.1" "l/hr" "" "" -"C-0.1-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.1-aliquot6" "JIC59_Carbon_0.10_External_2_1" "JIC59_Carbon_0.10_External_2_1.txt" "carbon" "" "" "0.1" "l/hr" "" "" -"C-0.1-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.1-aliquot7" "JIC60_Carbon_0.10_External_3_1" "JIC60_Carbon_0.10_External_3_1.txt" "carbon" "" "" "0.1" "l/hr" "" "" -"C-0.2-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.2-aliquot5" "JIC61_Carbon_0.20_External_1_1" "JIC61_Carbon_0.20_External_1_1.txt" "carbon" "" "" "0.2" "l/hr" "" "" -"C-0.2-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.2-aliquot6" "JIC62_Carbon_0.20_External_2_1" "JIC62_Carbon_0.20_External_2_1.txt" "carbon" "" "" "0.2" "l/hr" "" "" -"C-0.2-aliquot7" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "C-0.2-aliquot7" "JIC63_Carbon_0.20_External_3_1" "JIC63_Carbon_0.20_External_3_1.txt" "carbon" "" "" "0.2" "l/hr" "" "" -"G-0.07-aliquot4" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.07-aliquot4" "JIC46_GlucoseO2_0.07_Internal_1_1" "JIC46_GlucoseO2_0.07_Internal_1_1.txt" "glucose" "" "" "0.07" "l/hr" "" "" -"G-0.07-aliquot4" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.07-aliquot4" "JIC46_GlucoseO2_0.07_Internal_1_2" "JIC46_GlucoseO2_0.07_Internal_1_2.txt" "glucose" "" "" "0.07" "l/hr" "" "" -"G-0.07-aliquot4" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.07-aliquot4" "JIC46_GlucoseO2_0.07_Internal_1_3" "JIC46_GlucoseO2_0.07_Internal_1_3.txt" "glucose" "" "" "0.07" "l/hr" "" "" -"G-0.07-aliquot5" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.07-aliquot5" "JIC47_GlucoseO2_0.07_Internal_2_1" "JIC47_GlucoseO2_0.07_Internal_2_1.txt" "glucose" "" "" "0.07" "l/hr" "" "" -"G-0.07-aliquot6" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.07-aliquot6" "JIC48_GlucoseO2_0.07_Internal_3_1" "JIC48_GlucoseO2_0.07_Internal_3_1.txt" "glucose" "" "" "0.07" "l/hr" "" "" -"G-0.1-aliquot4" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.1-aliquot4" "JIC49_GlucoseO2_0.10_Internal_1_1" "JIC49_GlucoseO2_0.10_Internal_1_1.txt" "glucose" "" "" "0.1" "l/hr" "" "" -"G-0.1-aliquot5" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.1-aliquot5" "JIC50_GlucoseO2_0.10_Internal_2_1" "JIC50_GlucoseO2_0.10_Internal_2_1.txt" "glucose" "" "" "0.1" "l/hr" "" "" -"G-0.1-aliquot6" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.1-aliquot6" "JIC51_GlucoseO2_0.10_Internal_3_1" "JIC51_GlucoseO2_0.10_Internal_3_1.txt" "glucose" "" "" "0.1" "l/hr" "" "" -"G-0.2-aliquot4" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.2-aliquot4" "JIC52_GlucoseO2_0.20_Internal_1_1" "JIC52_GlucoseO2_0.20_Internal_1_1.txt" "glucose" "" "" "0.2" "l/hr" "" "" -"G-0.2-aliquot5" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.2-aliquot5" "JIC53_GlucoseO2_0.20_Internal_2_1" "JIC53_GlucoseO2_0.20_Internal_2_1.txt" "glucose" "" "" "0.2" "l/hr" "" "" -"G-0.2-aliquot6" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "G-0.2-aliquot6" "JIC54_GlucoseO2_0.20_Internal_3_1" "JIC54_GlucoseO2_0.20_Internal_3_1.txt" "glucose" "" "" "0.2" "l/hr" "" "" -"G-0.07-aliquot1" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "G-0.07-aliquot1" "JIC100_GlucoseO2_0.07_External_1_1" "JIC100_GlucoseO2_0.07_External_1_1.txt" "glucose" "" "" "0.07" "l/hr" "" "" -"G-0.07-aliquot1" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "G-0.07-aliquot1" "JIC100_GlucoseO2_0.07_External_1_2" "JIC100_GlucoseO2_0.07_External_1_2.txt" "glucose" "" "" "0.07" "l/hr" "" "" -"G-0.07-aliquot2" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "G-0.07-aliquot2" "JIC101_GlucoseO2_0.07_External_2_1" "JIC101_GlucoseO2_0.07_External_2_1.txt" "glucose" "" "" "0.07" "l/hr" "" "" -"G-0.07-aliquot3" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "G-0.07-aliquot3" "JIC102_GlucoseO2_0.07_External_3_1" "JIC102_GlucoseO2_0.07_External_3_1.txt" "glucose" "" "" "0.07" "l/hr" "" "" -"G-0.1-aliquot1" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "G-0.1-aliquot1" "JIC103_GlucoseO2_0.10_External_1_1" "JIC103_GlucoseO2_0.10_External_1_1.txt" "glucose" "" "" "0.1" "l/hr" "" "" -"G-0.1-aliquot2" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "G-0.1-aliquot2" "JIC104_GlucoseO2_0.10_External_2_1" "JIC104_GlucoseO2_0.10_External_2_1.txt" "glucose" "" "" "0.1" "l/hr" "" "" -"G-0.1-aliquot3" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "G-0.1-aliquot3" "JIC105_GlucoseO2_0.10_External_3_1" "JIC105_GlucoseO2_0.10_External_3_1.txt" "glucose" "" "" "0.1" "l/hr" "" "" -"G-0.2-aliquot1" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "G-0.2-aliquot1" "JIC106_GlucoseO2_0.20_External_1_1" "JIC106_GlucoseO2_0.20_External_1_1.txt" "glucose" "" "" "0.2" "l/hr" "" "" -"G-0.2-aliquot2" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "G-0.2-aliquot2" "JIC107_GlucoseO2_0.20_External_2_1" "JIC107_GlucoseO2_0.20_External_2_1.txt" "glucose" "" "" "0.2" "l/hr" "" "" -"G-0.2-aliquot3" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "G-0.2-aliquot3" "JIC108_GlucoseO2_0.20_External_3_1" "JIC108_GlucoseO2_0.20_External_3_1.txt" "glucose" "" "" "0.2" "l/hr" "" "" -"E-0.07-aliquot1" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "E-0.07-aliquot1" "JIC37_Ethanol_0.07_Internal_1_1" "JIC37_Ethanol_0.07_Internal_1_1.txt" "ethanol" "" "" "0.07" "l/hr" "" "" -"E-0.07-aliquot1" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "E-0.07-aliquot1" "JIC37_Ethanol_0.07_Internal_1_2" "JIC37_Ethanol_0.07_Internal_1_2.txt" "ethanol" "" "" "0.07" "l/hr" "" "" -"E-0.07-aliquot1" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "E-0.07-aliquot1" "JIC37_Ethanol_0.07_Internal_1_3" "JIC37_Ethanol_0.07_Internal_1_3.txt" "ethanol" "" "" "0.07" "l/hr" "" "" -"E-0.07-aliquot2" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "E-0.07-aliquot2" "JIC38_Ethanol_0.07_Internal_2_1" "JIC38_Ethanol_0.07_Internal_2_1.txt" "ethanol" "" "" "0.07" "l/hr" "" "" -"E-0.07-aliquot3" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "E-0.07-aliquot3" "JIC39_Ethanol_0.07_Internal_3_1" "JIC39_Ethanol_0.07_Internal_3_1.txt" "ethanol" "" "" "0.07" "l/hr" "" "" -"E-0.1-aliquot1" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "E-0.1-aliquot1" "JIC40_Ethanol_0.10_Internal_1_1" "JIC40_Ethanol_0.10_Internal_1_1.txt" "ethanol" "" "" "0.1" "l/hr" "" "" -"E-0.1-aliquot2" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "E-0.1-aliquot2" "JIC41_Ethanol_0.10_Internal_2_1" "JIC41_Ethanol_0.10_Internal_2_1.txt" "ethanol" "" "" "0.1" "l/hr" "" "" -"E-0.1-aliquot3" "internal" "" "" "metabolite extraction" "4" "microliter" "UO" "101" "200" "microliter" "UO" "101" "E-0.1-aliquot3" "JIC42_Ethanol_0.10_Internal_3_1" "JIC42_Ethanol_0.10_Internal_3_1.txt" "ethanol" "" "" "0.1" "l/hr" "" "" -"E-0.07-aliquot4" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "E-0.07-aliquot4" "JIC91_Ethanol_0.07_External_1_1" "JIC91_Ethanol_0.07_External_1_1.txt" "ethanol" "" "" "0.07" "l/hr" "" "" -"E-0.07-aliquot4" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "E-0.07-aliquot4" "JIC91_Ethanol_0.07_External_1_2" "JIC91_Ethanol_0.07_External_1_2.txt" "ethanol" "" "" "0.07" "l/hr" "" "" -"E-0.07-aliquot4" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "E-0.07-aliquot4" "JIC91_Ethanol_0.07_External_1_3" "JIC91_Ethanol_0.07_External_1_3.txt" "ethanol" "" "" "0.07" "l/hr" "" "" -"E-0.07-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "E-0.07-aliquot5" "JIC92_Ethanol_0.07_External_2_1" "JIC92_Ethanol_0.07_External_2_1.txt" "ethanol" "" "" "0.07" "l/hr" "" "" -"E-0.07-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "E-0.07-aliquot6" "JIC93_Ethanol_0.07_External_3_1" "JIC93_Ethanol_0.07_External_3_1.txt" "ethanol" "" "" "0.07" "l/hr" "" "" -"E-0.1-aliquot4" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "E-0.1-aliquot4" "JIC94_Ethanol_0.10_External_1_1" "JIC94_Ethanol_0.10_External_1_1.txt" "ethanol" "" "" "0.1" "l/hr" "" "" -"E-0.1-aliquot5" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "E-0.1-aliquot5" "JIC95_Ethanol_0.10_External_2_1" "JIC95_Ethanol_0.10_External_2_1.txt" "ethanol" "" "" "0.1" "l/hr" "" "" -"E-0.1-aliquot6" "external" "" "" "metabolite extraction" "20" "microliter" "UO" "101" "1000" "microliter" "UO" "101" "E-0.1-aliquot6" "JIC96_Ethanol_0.10_External_3_1" "JIC96_Ethanol_0.10_External_3_1.txt" "ethanol" "" "" "0.1" "l/hr" "" "" +"Sample Name" "Material Type" "Term Source REF" "Term Accession Number" "Protocol REF" "Parameter Value[standard volume]" "Unit" "Term Source REF" "Term Accession Number" "Parameter Value[sample volume]" "Unit" "Term Source REF" "Term Accession Number" "Extract Name" "MS Assay Name" "Raw Spectral Data File" "Comment[Data Repository]" "Comment[Data Record Accession]" "Factor Value[limiting nutrient]" "Term Source REF" "Term Accession Number" "Factor Value[rate]" "Unit" "Term Source REF" "Term Accession Number" +"C-0.1-aliquot1" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.2-aliquot8" "JIC36_Sulphate_0.20_Internal_1_3" "JIC36_Sulphate_0.20_Internal_1_3.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"P-0.07-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.07-aliquot8" "JIC20_Phosphate_0.07_Internal_1_1" "JIC20_Phosphate_0.07_Internal_1_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.07-aliquot9" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.07-aliquot9" "JIC21_Phosphate_0.07_Internal_2_1" "JIC21_Phosphate_0.07_Internal_2_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.1-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.1-aliquot8" "JIC22_Phosphate_0.10_Internal_1_1" "JIC22_Phosphate_0.10_Internal_1_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"P-0.1-aliquot9" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.1-aliquot9" "JIC23_Phosphate_0.10_Internal_2_1" "JIC23_Phosphate_0.10_Internal_2_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"P-0.1-aliquot10" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.1-aliquot10" "JIC24_Phosphate_0.10_Internal_3_1" "JIC24_Phosphate_0.10_Internal_3_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"P-0.2-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.2-aliquot8" "JIC25_Phosphate_0.20_Internal_1_1" "JIC25_Phosphate_0.20_Internal_1_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"P-0.2-aliquot9" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.2-aliquot9" "JIC26_Phosphate_0.20_Internal_2_1" "JIC26_Phosphate_0.20_Internal_2_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"P-0.2-aliquot10" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.2-aliquot10" "JIC27_Phosphate_0.20_Internal_3_1" "JIC27_Phosphate_0.20_Internal_3_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"N-0.07-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.07-aliquot8" "JIC10_Nitrogen_0.07_Internal_1_1" "JIC10_Nitrogen_0.07_Internal_1_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.07-aliquot8" "JIC10_Nitrogen_0.07_Internal_1_2" "JIC10_Nitrogen_0.07_Internal_1_2.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.07-aliquot8" "JIC10_Nitrogen_0.07_Internal_1_3" "JIC10_Nitrogen_0.07_Internal_1_3.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot9" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.07-aliquot9" "JIC11_Nitrogen_0.07_Internal_2_1" "JIC11_Nitrogen_0.07_Internal_2_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot10" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.07-aliquot10" "JIC12_Nitrogen_0.07_Internal_3_1" "JIC12_Nitrogen_0.07_Internal_3_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.1-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.1-aliquot8" "JIC13_Nitrogen_0.10_Internal_1_1" "JIC13_Nitrogen_0.10_Internal_1_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"N-0.1-aliquot9" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.1-aliquot9" "JIC14_Nitrogen_0.10_Internal_2_1" "JIC14_Nitrogen_0.10_Internal_2_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"N-0.1-aliquot10" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.1-aliquot10" "JIC15_Nitrogen_0.10_Internal_3_1" "JIC15_Nitrogen_0.10_Internal_3_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"N-0.2-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.2-aliquot8" "JIC16_Nitrogen_0.20_Internal_1_1" "JIC16_Nitrogen_0.20_Internal_1_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"N-0.2-aliquot9" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.2-aliquot9" "JIC17_Nitrogen_0.20_Internal_2_1" "JIC17_Nitrogen_0.20_Internal_2_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"N-0.2-aliquot10" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.2-aliquot10" "JIC18_Nitrogen_0.20_Internal_3_1" "JIC18_Nitrogen_0.20_Internal_3_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"C-0.07-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.07-aliquot8" "JIC1_Carbon_0.07_Internal_1_1" "JIC1_Carbon_0.07_Internal_1_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.07-aliquot8" "JIC1_Carbon_0.07_Internal_1_2" "JIC1_Carbon_0.07_Internal_1_2.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.07-aliquot8" "JIC1_Carbon_0.07_Internal_1_3" "JIC1_Carbon_0.07_Internal_1_3.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot9" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.07-aliquot9" "JIC2_Carbon_0.07_Internal_2_1" "JIC2_Carbon_0.07_Internal_2_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot10" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.07-aliquot10" "JIC3_Carbon_0.07_Internal_3_1" "JIC3_Carbon_0.07_Internal_3_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.1-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.1-aliquot8" "JIC4_Carbon_0.10_Internal_1_1" "JIC4_Carbon_0.10_Internal_1_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"C-0.1-aliquot9" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.1-aliquot9" "JIC5_Carbon_0.10_Internal_2_1" "JIC5_Carbon_0.10_Internal_2_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"C-0.1-aliquot10" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.1-aliquot10" "JIC6_Carbon_0.10_Internal_3_1" "JIC6_Carbon_0.10_Internal_3_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"C-0.2-aliquot8" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.2-aliquot8" "JIC7_Carbon_0.20_Internal_1_1" "JIC7_Carbon_0.20_Internal_1_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"C-0.2-aliquot9" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.2-aliquot9" "JIC8_Carbon_0.20_Internal_2_1" "JIC8_Carbon_0.20_Internal_2_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"C-0.2-aliquot10" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.2-aliquot10" "JIC9_Carbon_0.20_Internal_3_1" "JIC9_Carbon_0.20_Internal_3_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"G-0.07-aliquot4" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.07-aliquot4" "JIC46_GlucoseO2_0.07_Internal_1_1" "JIC46_GlucoseO2_0.07_Internal_1_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hr" "" "" +"G-0.07-aliquot4" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.07-aliquot4" "JIC46_GlucoseO2_0.07_Internal_1_2" "JIC46_GlucoseO2_0.07_Internal_1_2.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hr" "" "" +"G-0.07-aliquot4" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.07-aliquot4" "JIC46_GlucoseO2_0.07_Internal_1_3" "JIC46_GlucoseO2_0.07_Internal_1_3.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hr" "" "" +"G-0.07-aliquot5" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.07-aliquot5" "JIC47_GlucoseO2_0.07_Internal_2_1" "JIC47_GlucoseO2_0.07_Internal_2_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hr" "" "" +"G-0.07-aliquot6" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.07-aliquot6" "JIC48_GlucoseO2_0.07_Internal_3_1" "JIC48_GlucoseO2_0.07_Internal_3_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hr" "" "" +"G-0.1-aliquot4" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.1-aliquot4" "JIC49_GlucoseO2_0.10_Internal_1_1" "JIC49_GlucoseO2_0.10_Internal_1_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hr" "" "" +"G-0.1-aliquot5" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.1-aliquot5" "JIC50_GlucoseO2_0.10_Internal_2_1" "JIC50_GlucoseO2_0.10_Internal_2_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hr" "" "" +"G-0.1-aliquot6" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.1-aliquot6" "JIC51_GlucoseO2_0.10_Internal_3_1" "JIC51_GlucoseO2_0.10_Internal_3_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hr" "" "" +"G-0.2-aliquot4" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.2-aliquot4" "JIC52_GlucoseO2_0.20_Internal_1_1" "JIC52_GlucoseO2_0.20_Internal_1_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hr" "" "" +"G-0.2-aliquot5" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.2-aliquot5" "JIC53_GlucoseO2_0.20_Internal_2_1" "JIC53_GlucoseO2_0.20_Internal_2_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hr" "" "" +"G-0.2-aliquot6" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.2-aliquot6" "JIC54_GlucoseO2_0.20_Internal_3_1" "JIC54_GlucoseO2_0.20_Internal_3_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hr" "" "" +"E-0.07-aliquot1" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.07-aliquot1" "JIC37_Ethanol_0.07_Internal_1_1" "JIC37_Ethanol_0.07_Internal_1_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hr" "" "" +"E-0.07-aliquot1" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.07-aliquot1" "JIC37_Ethanol_0.07_Internal_1_2" "JIC37_Ethanol_0.07_Internal_1_2.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hr" "" "" +"E-0.07-aliquot1" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.07-aliquot1" "JIC37_Ethanol_0.07_Internal_1_3" "JIC37_Ethanol_0.07_Internal_1_3.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hr" "" "" +"E-0.07-aliquot2" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.07-aliquot2" "JIC38_Ethanol_0.07_Internal_2_1" "JIC38_Ethanol_0.07_Internal_2_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hr" "" "" +"E-0.07-aliquot3" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.07-aliquot3" "JIC39_Ethanol_0.07_Internal_3_1" "JIC39_Ethanol_0.07_Internal_3_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hr" "" "" +"E-0.1-aliquot1" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.1-aliquot1" "JIC40_Ethanol_0.10_Internal_1_1" "JIC40_Ethanol_0.10_Internal_1_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hr" "" "" +"E-0.1-aliquot2" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.1-aliquot2" "JIC41_Ethanol_0.10_Internal_2_1" "JIC41_Ethanol_0.10_Internal_2_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hr" "" "" +"E-0.1-aliquot3" "intracellular" "CL" "http://purl.obolibrary.org/obo/GO_0005622" "metabolite extraction" "4" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "200" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.1-aliquot3" "JIC42_Ethanol_0.10_Internal_3_1" "JIC42_Ethanol_0.10_Internal_3_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hr" "" "" +"S-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.07-aliquot5" "JIC82_Sulphate_0.07_External_1_1" "JIC82_Sulphate_0.07_External_1_1.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hr" "" "" +"S-0.07-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.07-aliquot6" "JIC83_Sulphate_0.07_External_2_1" "JIC83_Sulphate_0.07_External_2_1.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hr" "" "" +"S-0.07-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.07-aliquot7" "JIC84_Sulphate_0.07_External_3_1" "JIC84_Sulphate_0.07_External_3_1.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hr" "" "" +"S-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.07-aliquot5" "JIC82_Sulphate_0.07_External_1_2" "JIC82_Sulphate_0.07_External_1_2.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hr" "" "" +"S-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.07-aliquot5" "JIC82_Sulphate_0.07_External_1_3" "JIC82_Sulphate_0.07_External_1_3.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hr" "" "" +"S-0.1-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.1-aliquot5" "JIC85_Sulphate_0.10_External_1_1" "JIC85_Sulphate_0.10_External_1_1.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hr" "" "" +"S-0.1-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.1-aliquot6" "JIC86_Sulphate_0.10_External_2_1" "JIC86_Sulphate_0.10_External_2_1.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hr" "" "" +"S-0.2-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.2-aliquot5" "JIC88_Sulphate_0.20_External_1_1" "JIC88_Sulphate_0.20_External_1_1.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hr" "" "" +"S-0.2-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.2-aliquot6" "JIC89_Sulphate_0.20_External_2_1" "JIC89_Sulphate_0.20_External_2_1.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hr" "" "" +"S-0.2-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "S-0.2-aliquot7" "JIC90_Sulphate_0.20_External_3_1" "JIC90_Sulphate_0.20_External_3_1.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hr" "" "" +"P-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.07-aliquot5" "JIC73_Phosphate_0.07_External_1_1" "JIC73_Phosphate_0.07_External_1_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.07-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.07-aliquot6" "JIC73_Phosphate_0.07_External_1_2" "JIC73_Phosphate_0.07_External_1_2.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.07-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.07-aliquot7" "JIC73_Phosphate_0.07_External_1_3" "JIC73_Phosphate_0.07_External_1_3.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.07-aliquot5" "JIC74_Phosphate_0.07_External_2_1" "JIC74_Phosphate_0.07_External_2_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.07-aliquot5" "JIC75_Phosphate_0.07_External_3_1" "JIC75_Phosphate_0.07_External_3_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.1-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.1-aliquot5" "JIC76_Phosphate_0.10_External_1_1" "JIC76_Phosphate_0.10_External_1_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"P-0.1-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.1-aliquot6" "JIC77_Phosphate_0.10_External_2_1" "JIC77_Phosphate_0.10_External_2_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"P-0.1-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.1-aliquot7" "JIC78_Phosphate_0.10_External_3_1" "JIC78_Phosphate_0.10_External_3_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"P-0.2-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.2-aliquot5" "JIC79_Phosphate_0.20_External_1_1" "JIC79_Phosphate_0.20_External_1_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"P-0.2-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.2-aliquot6" "JIC80_Phosphate_0.20_External_2_1" "JIC80_Phosphate_0.20_External_2_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"P-0.2-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "P-0.2-aliquot7" "JIC81_Phosphate_0.20_External_3_1" "JIC81_Phosphate_0.20_External_3_1.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"N-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.07-aliquot5" "JIC64_Nitrogen_0.07_External_1_1" "JIC64_Nitrogen_0.07_External_1_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.07-aliquot5" "JIC64_Nitrogen_0.07_External_1_2" "JIC64_Nitrogen_0.07_External_1_2.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.07-aliquot5" "JIC64_Nitrogen_0.07_External_1_3" "JIC64_Nitrogen_0.07_External_1_3.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.07-aliquot6" "JIC65_Nitrogen_0.07_External_2_1" "JIC65_Nitrogen_0.07_External_2_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.07-aliquot7" "JIC66_Nitrogen_0.07_External_3_1" "JIC66_Nitrogen_0.07_External_3_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.1-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.1-aliquot5" "JIC67_Nitrogen_0.10_External_1_1" "JIC67_Nitrogen_0.10_External_1_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"N-0.1-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.1-aliquot6" "JIC68_Nitrogen_0.10_External_2_1" "JIC68_Nitrogen_0.10_External_2_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"N-0.1-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.1-aliquot7" "JIC69_Nitrogen_0.10_External_3_1" "JIC69_Nitrogen_0.10_External_3_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"N-0.2-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.2-aliquot5" "JIC70_Nitrogen_0.20_External_1_1" "JIC70_Nitrogen_0.20_External_1_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"N-0.2-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.2-aliquot6" "JIC71_Nitrogen_0.20_External_2_1" "JIC71_Nitrogen_0.20_External_2_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"N-0.2-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "N-0.2-aliquot7" "JIC72_Nitrogen_0.20_External_3_1" "JIC72_Nitrogen_0.20_External_3_1.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"C-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.07-aliquot5" "JIC55_Carbon_0.07_External_1_1" "JIC55_Carbon_0.07_External_1_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.07-aliquot5" "JIC55_Carbon_0.07_External_1_2" "JIC55_Carbon_0.07_External_1_2.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.07-aliquot5" "JIC55_Carbon_0.07_External_1_3" "JIC55_Carbon_0.07_External_1_3.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.07-aliquot6" "JIC56_Carbon_0.07_External_2_1" "JIC56_Carbon_0.07_External_2_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.07-aliquot7" "JIC57_Carbon_0.07_External_3_1" "JIC57_Carbon_0.07_External_3_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.1-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.1-aliquot5" "JIC58_Carbon_0.10_External_1_1" "JIC58_Carbon_0.10_External_1_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"C-0.1-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.1-aliquot6" "JIC59_Carbon_0.10_External_2_1" "JIC59_Carbon_0.10_External_2_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"C-0.1-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.1-aliquot7" "JIC60_Carbon_0.10_External_3_1" "JIC60_Carbon_0.10_External_3_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"C-0.2-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.2-aliquot5" "JIC61_Carbon_0.20_External_1_1" "JIC61_Carbon_0.20_External_1_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"C-0.2-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.2-aliquot6" "JIC62_Carbon_0.20_External_2_1" "JIC62_Carbon_0.20_External_2_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"C-0.2-aliquot7" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "C-0.2-aliquot7" "JIC63_Carbon_0.20_External_3_1" "JIC63_Carbon_0.20_External_3_1.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"G-0.07-aliquot1" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.07-aliquot1" "JIC100_GlucoseO2_0.07_External_1_1" "JIC100_GlucoseO2_0.07_External_1_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hr" "" "" +"G-0.07-aliquot1" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.07-aliquot1" "JIC100_GlucoseO2_0.07_External_1_2" "JIC100_GlucoseO2_0.07_External_1_2.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hr" "" "" +"G-0.07-aliquot2" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.07-aliquot2" "JIC101_GlucoseO2_0.07_External_2_1" "JIC101_GlucoseO2_0.07_External_2_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hr" "" "" +"G-0.07-aliquot3" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.07-aliquot3" "JIC102_GlucoseO2_0.07_External_3_1" "JIC102_GlucoseO2_0.07_External_3_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hr" "" "" +"G-0.1-aliquot1" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.1-aliquot1" "JIC103_GlucoseO2_0.10_External_1_1" "JIC103_GlucoseO2_0.10_External_1_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hr" "" "" +"G-0.1-aliquot2" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.1-aliquot2" "JIC104_GlucoseO2_0.10_External_2_1" "JIC104_GlucoseO2_0.10_External_2_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hr" "" "" +"G-0.1-aliquot3" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.1-aliquot3" "JIC105_GlucoseO2_0.10_External_3_1" "JIC105_GlucoseO2_0.10_External_3_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hr" "" "" +"G-0.2-aliquot1" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.2-aliquot1" "JIC106_GlucoseO2_0.20_External_1_1" "JIC106_GlucoseO2_0.20_External_1_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hr" "" "" +"G-0.2-aliquot2" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.2-aliquot2" "JIC107_GlucoseO2_0.20_External_2_1" "JIC107_GlucoseO2_0.20_External_2_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hr" "" "" +"G-0.2-aliquot3" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "G-0.2-aliquot3" "JIC108_GlucoseO2_0.20_External_3_1" "JIC108_GlucoseO2_0.20_External_3_1.txt" "" "" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hr" "" "" +"E-0.07-aliquot4" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.07-aliquot4" "JIC91_Ethanol_0.07_External_1_1" "JIC91_Ethanol_0.07_External_1_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hr" "" "" +"E-0.07-aliquot4" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.07-aliquot4" "JIC91_Ethanol_0.07_External_1_2" "JIC91_Ethanol_0.07_External_1_2.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hr" "" "" +"E-0.07-aliquot4" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.07-aliquot4" "JIC91_Ethanol_0.07_External_1_3" "JIC91_Ethanol_0.07_External_1_3.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hr" "" "" +"E-0.07-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.07-aliquot5" "JIC92_Ethanol_0.07_External_2_1" "JIC92_Ethanol_0.07_External_2_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hr" "" "" +"E-0.07-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.07-aliquot6" "JIC93_Ethanol_0.07_External_3_1" "JIC93_Ethanol_0.07_External_3_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hr" "" "" +"E-0.1-aliquot4" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.1-aliquot4" "JIC94_Ethanol_0.10_External_1_1" "JIC94_Ethanol_0.10_External_1_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hr" "" "" +"E-0.1-aliquot5" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.1-aliquot5" "JIC95_Ethanol_0.10_External_2_1" "JIC95_Ethanol_0.10_External_2_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hr" "" "" +"E-0.1-aliquot6" "extracellular region part" "CL" "http://purl.obolibrary.org/obo/GO_0044421" "metabolite extraction" "20" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "1000" "microliter" "UO" "http://purl.obolibrary.org/obo/UO_0000101" "E-0.1-aliquot6" "JIC96_Ethanol_0.10_External_3_1" "JIC96_Ethanol_0.10_External_3_1.txt" "" "" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hr" "" "" diff --git a/isatab files/BII-I-1/a_microarray.txt b/isatab files/BII-I-1/a_microarray.txt index c7561a10..23a36f92 100644 --- a/isatab files/BII-I-1/a_microarray.txt +++ b/isatab files/BII-I-1/a_microarray.txt @@ -1,15 +1,15 @@ -"Sample Name" "Protocol REF" "Extract Name" "Protocol REF" "Labeled Extract Name" "Label" "Term Source REF" "Term Accession Number" "Protocol REF" "Hybridization Assay Name" "Comment[ArrayExpress Accession]" "Comment[ArrayExpress Raw Data URL]" "Comment[ArrayExpress Processed Data URL]" "Array Design REF" "Scan Name" "Array Data File" "Data Transformation Name" "Derived Array Data File" "Factor Value[dose]" "Unit" "Term Source REF" "Term Accession Number" "Factor Value[exposure time]" "Unit" "Term Source REF" "Term Accession Number" "Factor Value[compound]" "Term Source REF" "Term Accession Number" -"NZ_0hrs_Grow_1" "mRNA extraction" "NZ_0hrs_Sample_1_Extract" "biotin labeling" "NZ_0hrs_Sample_1_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_0hrs_Sample_1_Labelled_Hyb1" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_0hrs_Sample_1_Labelled_Hyb1_Scan1" "E-MAXD-4-raw-data-426648549.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "ng /ml" "" "" "0" "hour" "UO" "32" "" "" "" -"NZ_0hrs_Grow_1" "mRNA extraction" "NZ_1hrs_Drug_Sample_1_Extract" "biotin labeling" "NZ_1hrs_Drug_Sample_1_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_1hrs_Drug_Sample_1_Labelled_Hyb3" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_1hrs_Drug_Sample_1_Labelled_Hyb3_Scan3" "E-MAXD-4-raw-data-426648567.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "ng /ml" "" "" "1" "hour" "UO" "32" "rapamycin" "CHEBI" "9168" -"NZ_0hrs_Grow_1" "mRNA extraction" "NZ_2hrs_Drug_Sample_1_Extract" "biotin labeling" "NZ_2hrs_Drug_Sample_1_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_2hrs_Drug_Sample_1_Labelled_Hyb7" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_2hrs_Drug_Sample_1_Labelled_Hyb7_Scan7" "E-MAXD-4-raw-data-426648585.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "ng /ml" "" "" "2" "hour" "UO" "32" "rapamycin" "CHEBI" "9168" -"NZ_0hrs_Grow_1" "mRNA extraction" "NZ_4hrs_Drug_Sample_1_Extract" "biotin labeling" "NZ_4hrs_Drug_Sample_1_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_4hrs_Drug_Sample_1_Labelled_Hyb11" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_4hrs_Drug_Sample_1_Labelled_Hyb11_Scan11" "E-MAXD-4-raw-data-426648603.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "ng /ml" "" "" "4" "hour" "UO" "32" "rapamycin" "CHEBI" "9168" -"NZ_0hrs_Grow_1" "mRNA extraction" "NZ_2hrs_Vehicle_Sample_1_Extract" "biotin labeling" "NZ_2hrs_Vehicle_Sample_1_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_2hrs_Vehicle_Sample_1_Labelled_Hyb9" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_2hrs_Vehicle_Sample_1_Labelled_Hyb9_Scan9" "E-MAXD-4-raw-data-426648639.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "ng /ml" "" "" "2" "hour" "UO" "32" "drug vehicle (90% ethanol/10% tween-20)" "" "" -"NZ_0hrs_Grow_1" "mRNA extraction" "NZ_4hrs_Vehicle_Sample_1_Extract" "biotin labeling" "NZ_4hrs_Vehicle_Sample_1_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_4hrs_Vehicle_Sample_1_Labelled_Hyb13" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_4hrs_Vehicle_Sample_1_Labelled_Hyb13_Scan13" "E-MAXD-4-raw-data-426648657.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "ng /ml" "" "" "4" "hour" "UO" "32" "drug vehicle (90% ethanol/10% tween-20)" "" "" -"NZ_0hrs_Grow_1" "mRNA extraction" "NZ_1hrs_Vehicle_Sample_1_Extract" "biotin labeling" "NZ_1hrs_Vehicle_Sample_1_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_1hrs_Vehicle_Sample_1_Labelled_Hyb5" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_1hrs_Vehicle_Sample_1_Labelled_Hyb5_Scan5" "E-MAXD-4-raw-data-426648621.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "ng /ml" "" "" "1" "hour" "UO" "32" "drug vehicle (90% ethanol/10% tween-20)" "" "" -"NZ_0hrs_Grow_2" "mRNA extraction" "NZ_0hrs_Sample_2_Extract" "biotin labeling" "NZ_0hrs_Sample_2_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_0hrs_Sample_2_Labelled_Hyb2" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_0hrs_Sample_2_Labelled_Hyb2_Scan2" "E-MAXD-4-raw-data-426648675.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "ng /ml" "" "" "0" "hour" "UO" "32" "" "" "" -"NZ_0hrs_Grow_2" "mRNA extraction" "NZ_1hrs_Drug_Sample_2_Extract" "biotin labeling" "NZ_1hrs_Drug_Sample_2_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_1hrs_Drug_Sample_2_Labelled_Hyb4" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_1hrs_Drug_Sample_2_Labelled_Hyb4_Scan4" "E-MAXD-4-raw-data-426648693.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "ng /ml" "" "" "1" "hour" "UO" "32" "rapamycin" "CHEBI" "9168" -"NZ_0hrs_Grow_2" "mRNA extraction" "NZ_4hrs_Drug_Sample_2_Extract" "biotin labeling" "NZ_4hrs_Drug_Sample_2_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_4hrs_Drug_Sample_2_Labelled_Hyb12" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_4hrs_Drug_Sample_2_Labelled_Hyb12_Scan12" "E-MAXD-4-raw-data-426648729.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "ng /ml" "" "" "4" "hour" "UO" "32" "rapamycin" "CHEBI" "9168" -"NZ_0hrs_Grow_2" "mRNA extraction" "NZ_2hrs_Drug_Sample_2_Extract" "biotin labeling" "NZ_2hrs_Drug_Sample_2_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_2hrs_Drug_Sample_2_Labelled_Hyb8" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_2hrs_Drug_Sample_2_Labelled_Hyb8_Scan8" "E-MAXD-4-raw-data-426648711.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "ng /ml" "" "" "2" "hour" "UO" "32" "rapamycin" "CHEBI" "9168" -"NZ_0hrs_Grow_2" "mRNA extraction" "NZ_1hrs_Vehicle_Sample_2_Extract" "biotin labeling" "NZ_1hrs_Vehicle_Sample_2_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_1hrs_Vehicle_Sample_2_Labelled_Hyb6" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_1hrs_Vehicle_Sample_2_Labelled_Hyb6_Scan6" "E-MAXD-4-raw-data-426648747.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "ng /ml" "" "" "1" "hour" "UO" "32" "drug vehicle (90% ethanol/10% tween-20)" "" "" -"NZ_0hrs_Grow_2" "mRNA extraction" "NZ_2hrs_Vehicle_Sample_2_Extract" "biotin labeling" "NZ_2hrs_Vehicle_Sample_2_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_2hrs_Vehicle_Sample_2_Labelled_Hyb10" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_2hrs_Vehicle_Sample_2_Labelled_Hyb10_Scan10" "E-MAXD-4-raw-data-426648765.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "ng /ml" "" "" "2" "hour" "UO" "32" "drug vehicle (90% ethanol/10% tween-20)" "" "" -"NZ_0hrs_Grow_2" "mRNA extraction" "NZ_4hrs_Vehicle_Sample_2_Extract" "biotin labeling" "NZ_4hrs_Vehicle_Sample_2_Labelled" "biotin" "" "" "EukGE-WS4" "NZ_4hrs_Vehicle_Sample_2_Labelled_Hyb14" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_4hrs_Vehicle_Sample_2_Labelled_Hyb14_Scan14" "E-MAXD-4-raw-data-426648783.txt" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "ng /ml" "" "" "4" "hour" "UO" "32" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"Sample Name" "Protocol REF" "Extract Name" "Protocol REF" "Labeled Extract Name" "Label" "Term Source REF" "Term Accession Number" "Protocol REF" "Hybridization Assay Name" "Comment[ArrayExpress Accession]" "Comment[ArrayExpress Raw Data URL]" "Comment[ArrayExpress Processed Data URL]" "Array Design REF" "Scan Name" "Array Data File" "Comment[Data Repository]" "Comment[Data Record Accession]" "Data Transformation Name" "Derived Array Data File" "Factor Value[dose]" "Unit" "Term Source REF" "Term Accession Number" "Factor Value[exposure time]" "Unit" "Term Source REF" "Term Accession Number" "Factor Value[compound]" "Term Source REF" "Term Accession Number" +"NZ_0hrs_Grow1_Sample_1" "mRNA extraction" "NZ_0hrs_Sample_1_Extract" "biotin labeling" "NZ_0hrs_Sample_1_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_0hrs_Sample_1_Labelled_Hyb1" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_0hrs_Sample_1_Labelled_Hyb1_Scan1" "E-MAXD-4-raw-data-426648549.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "0" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "" "" "" +"NZ_1hrs_Grow1_Drug_Sample_1" "mRNA extraction" "NZ_1hrs_Drug_Sample_1_Extract" "biotin labeling" "NZ_1hrs_Drug_Sample_1_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_1hrs_Drug_Sample_1_Labelled_Hyb3" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_1hrs_Drug_Sample_1_Labelled_Hyb3_Scan3" "E-MAXD-4-raw-data-426648567.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "1" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_2hrs_Grow1_Drug_Sample_1" "mRNA extraction" "NZ_2hrs_Drug_Sample_1_Extract" "biotin labeling" "NZ_2hrs_Drug_Sample_1_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_2hrs_Drug_Sample_1_Labelled_Hyb7" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_2hrs_Drug_Sample_1_Labelled_Hyb7_Scan7" "E-MAXD-4-raw-data-426648585.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "2" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_4hrs_Grow1_Drug_Sample_1" "mRNA extraction" "NZ_4hrs_Drug_Sample_1_Extract" "biotin labeling" "NZ_4hrs_Drug_Sample_1_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_4hrs_Drug_Sample_1_Labelled_Hyb11" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_4hrs_Drug_Sample_1_Labelled_Hyb11_Scan11" "E-MAXD-4-raw-data-426648603.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "4" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_2hrs_Grow1_Vehicle_Sample_1" "mRNA extraction" "NZ_2hrs_Vehicle_Sample_1_Extract" "biotin labeling" "NZ_2hrs_Vehicle_Sample_1_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_2hrs_Vehicle_Sample_1_Labelled_Hyb9" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_2hrs_Vehicle_Sample_1_Labelled_Hyb9_Scan9" "E-MAXD-4-raw-data-426648639.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "2" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"NZ_4hrs_Grow1_Vehicle_Sample_1" "mRNA extraction" "NZ_4hrs_Vehicle_Sample_1_Extract" "biotin labeling" "NZ_4hrs_Vehicle_Sample_1_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_4hrs_Vehicle_Sample_1_Labelled_Hyb13" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_4hrs_Vehicle_Sample_1_Labelled_Hyb13_Scan13" "E-MAXD-4-raw-data-426648657.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "4" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"NZ_1hrs_Grow1_Vehicle_Sample_1" "mRNA extraction" "NZ_1hrs_Vehicle_Sample_1_Extract" "biotin labeling" "NZ_1hrs_Vehicle_Sample_1_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_1hrs_Vehicle_Sample_1_Labelled_Hyb5" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_1hrs_Vehicle_Sample_1_Labelled_Hyb5_Scan5" "E-MAXD-4-raw-data-426648621.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "1" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"NZ_0hrs_Grow2_Sample_2" "mRNA extraction" "NZ_0hrs_Sample_2_Extract" "biotin labeling" "NZ_0hrs_Sample_2_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_0hrs_Sample_2_Labelled_Hyb2" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_0hrs_Sample_2_Labelled_Hyb2_Scan2" "E-MAXD-4-raw-data-426648675.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "0" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "" "" "" +"NZ_1hrs_Grow2_Drug_Sample_2" "mRNA extraction" "NZ_1hrs_Drug_Sample_2_Extract" "biotin labeling" "NZ_1hrs_Drug_Sample_2_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_1hrs_Drug_Sample_2_Labelled_Hyb4" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_1hrs_Drug_Sample_2_Labelled_Hyb4_Scan4" "E-MAXD-4-raw-data-426648693.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "1" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_4hrs_Grow2_Drug_Sample_2" "mRNA extraction" "NZ_4hrs_Drug_Sample_2_Extract" "biotin labeling" "NZ_4hrs_Drug_Sample_2_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_4hrs_Drug_Sample_2_Labelled_Hyb12" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_4hrs_Drug_Sample_2_Labelled_Hyb12_Scan12" "E-MAXD-4-raw-data-426648729.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "4" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_2hrs_Grow2_Drug_Sample_2" "mRNA extraction" "NZ_2hrs_Drug_Sample_2_Extract" "biotin labeling" "NZ_2hrs_Drug_Sample_2_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_2hrs_Drug_Sample_2_Labelled_Hyb8" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_2hrs_Drug_Sample_2_Labelled_Hyb8_Scan8" "E-MAXD-4-raw-data-426648711.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "2" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_1hrs_Grow2_Vehicle_Sample_2" "mRNA extraction" "NZ_1hrs_Vehicle_Sample_2_Extract" "biotin labeling" "NZ_1hrs_Vehicle_Sample_2_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_1hrs_Vehicle_Sample_2_Labelled_Hyb6" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_1hrs_Vehicle_Sample_2_Labelled_Hyb6_Scan6" "E-MAXD-4-raw-data-426648747.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "1" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"NZ_2hrs_Grow2_Vehicle_Sample_2" "mRNA extraction" "NZ_2hrs_Vehicle_Sample_2_Extract" "biotin labeling" "NZ_2hrs_Vehicle_Sample_2_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_2hrs_Vehicle_Sample_2_Labelled_Hyb10" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_2hrs_Vehicle_Sample_2_Labelled_Hyb10_Scan10" "E-MAXD-4-raw-data-426648765.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "2" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"NZ_4hrs_Grow2_Vehicle_Sample_2" "mRNA extraction" "NZ_4hrs_Vehicle_Sample_2_Extract" "biotin labeling" "NZ_4hrs_Vehicle_Sample_2_Labelled" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "NZ_4hrs_Vehicle_Sample_2_Labelled_Hyb14" "E-MEXP-115" "E-MEXP-115" "E-MEXP-115" "A-AFFY-27" "NZ_4hrs_Vehicle_Sample_2_Labelled_Hyb14_Scan14" "E-MAXD-4-raw-data-426648783.txt" "" "" "data processing" "E-MAXD-4-processed-data-1342566476.txt" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "4" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" diff --git a/isatab files/BII-I-1/a_proteome.txt b/isatab files/BII-I-1/a_proteome.txt index 189f61d1..a6894d46 100644 --- a/isatab files/BII-I-1/a_proteome.txt +++ b/isatab files/BII-I-1/a_proteome.txt @@ -1,19 +1,19 @@ -"Sample Name" "Protocol REF" "Extract Name" "Protocol REF" "Labeled Extract Name" "Label" "Term Source REF" "Term Accession Number" "MS Assay Name" "Comment[PRIDE Accession]" "Comment[PRIDE Processed Data Accession]" "Raw Spectral Data File" "Normalization Name" "Protein Assignment File" "Peptide Assignment File" "Post Translational Modification Assignment File" "Data Transformation Name" "Derived Spectral Data File" "Factor Value[limiting nutrient]" "Term Source REF" "Term Accession Number" "Factor Value[rate]" "Unit" "Term Source REF" "Term Accession Number" -"S-0.1-aliquot11" "protein extraction" "S-0.1" "ITRAQ labeling" "JC_S-0.1" "iTRAQ reagent 117" "" "" "8761" "8761" "8761" "spectrum.mzdata" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "sulphur" "" "" "0.1" "l/hr" "" "" -"C-0.1-aliquot11" "protein extraction" "C-0.1" "ITRAQ labeling" "JC_C-0.1" "iTRAQ reagent 116" "" "" "8761" "8761" "8761" "spectrum.mzdata" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "carbon" "" "" "0.1" "l/hr" "" "" -"N-0.1-aliquot11" "protein extraction" "N-0.1" "ITRAQ labeling" "JC_N-0.1" "iTRAQ reagent 115" "" "" "8761" "8761" "8761" "spectrum.mzdata" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "nitrogen" "" "" "0.1" "l/hr" "" "" -"S-0.1-aliquot11" "protein extraction" "S-0.1" "ITRAQ labeling" "Pool1" "iTRAQ reagent 114" "" "" "8761" "8761" "8761" "spectrum.mzdata" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "" "" "" "" "l/hr" "" "" -"C-0.1-aliquot11" "protein extraction" "C-0.1" "ITRAQ labeling" "Pool1" "iTRAQ reagent 114" "" "" "8761" "8761" "8761" "spectrum.mzdata" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "" "" "" "" "l/hr" "" "" -"N-0.1-aliquot11" "protein extraction" "N-0.1" "ITRAQ labeling" "Pool1" "iTRAQ reagent 114" "" "" "8761" "8761" "8761" "spectrum.mzdata" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "" "" "" "" "l/hr" "" "" -"C-0.2-aliquot11" "protein extraction" "C-0.2" "ITRAQ labeling" "JC_C-0.2" "iTRAQ reagent 117" "" "" "8762" "8762" "8762" "spectrum.mzdata" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "carbon" "" "" "0.2" "l/hr" "" "" -"N-0.2-aliquot11" "protein extraction" "N-0.2" "ITRAQ labeling" "JC_N-0.2" "iTRAQ reagent 116" "" "" "8762" "8762" "8762" "spectrum.mzdata" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "nitrogen" "" "" "0.2" "l/hr" "" "" -"P-0.1-aliquot11" "protein extraction" "P-0.1" "ITRAQ labeling" "JC_P-0.1" "iTRAQ reagent 115" "" "" "8762" "8762" "8762" "spectrum.mzdata" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "phosphorus" "" "" "0.1" "l/hr" "" "" -"C-0.2-aliquot11" "protein extraction" "C-0.2" "ITRAQ labeling" "Pool2" "iTRAQ reagent 114" "" "" "8762" "8762" "8762" "spectrum.mzdata" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "" "" "" "" "l/hr" "" "" -"N-0.2-aliquot11" "protein extraction" "N-0.2" "ITRAQ labeling" "Pool2" "iTRAQ reagent 114" "" "" "8762" "8762" "8762" "spectrum.mzdata" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "" "" "" "" "l/hr" "" "" -"P-0.1-aliquot11" "protein extraction" "P-0.1" "ITRAQ labeling" "Pool2" "iTRAQ reagent 114" "" "" "8762" "8762" "8762" "spectrum.mzdata" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "" "" "" "" "l/hr" "" "" -"P-0.2-aliquot11" "protein extraction" "P-0.2" "ITRAQ labeling" "JC_P-0.2" "iTRAQ reagent 116" "" "" "8763" "8763" "8763" "spectrum.mzdata" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "phosphorus" "" "" "0.2" "l/hr" "" "" -"S-0.2-aliquot11" "protein extraction" "S-0.2" "ITRAQ labeling" "JC_S-0.2" "iTRAQ reagent 115" "" "" "8763" "8763" "8763" "spectrum.mzdata" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "sulphur" "" "" "0.2" "l/hr" "" "" -"P-0.2-aliquot11" "protein extraction" "P-0.2" "ITRAQ labeling" "Pool3" "iTRAQ reagent 117" "" "" "8763" "8763" "8763" "spectrum.mzdata" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "" "" "" "" "l/hr" "" "" -"S-0.2-aliquot11" "protein extraction" "S-0.2" "ITRAQ labeling" "Pool3" "iTRAQ reagent 117" "" "" "8763" "8763" "8763" "spectrum.mzdata" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "" "" "" "" "l/hr" "" "" -"P-0.2-aliquot11" "protein extraction" "P-0.2" "ITRAQ labeling" "Pool3" "iTRAQ reagent 114" "" "" "8763" "8763" "8763" "spectrum.mzdata" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "" "" "" "" "l/hr" "" "" -"S-0.2-aliquot11" "protein extraction" "S-0.2" "ITRAQ labeling" "Pool3" "iTRAQ reagent 114" "" "" "8763" "8763" "8763" "spectrum.mzdata" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "" "" "" "" "l/hr" "" "" +"Sample Name" "Protocol REF" "Extract Name" "Protocol REF" "Labeled Extract Name" "Label" "Term Source REF" "Term Accession Number" "MS Assay Name" "Comment[PRIDE Accession]" "Comment[PRIDE Processed Data Accession]" "Raw Spectral Data File" "Comment[Data Record Accession]" "Comment[Data Repository]" "Normalization Name" "Protein Assignment File" "Peptide Assignment File" "Post Translational Modification Assignment File" "Data Transformation Name" "Derived Spectral Data File" "Factor Value[limiting nutrient]" "Term Source REF" "Term Accession Number" "Factor Value[rate]" "Unit" "Term Source REF" "Term Accession Number" +"S-0.1-aliquot11" "protein extraction" "S-0.1" "ITRAQ labeling" "JC_S-0.1" "iTRAQ reagent 117" "" "" "8761" "8761" "8761" "spectrum.mzdata" "" "" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hr" "" "" +"C-0.1-aliquot11" "protein extraction" "C-0.1" "ITRAQ labeling" "JC_C-0.1" "iTRAQ reagent 116" "" "" "8761" "8761" "8761" "spectrum.mzdata" "" "" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"N-0.1-aliquot11" "protein extraction" "N-0.1" "ITRAQ labeling" "JC_N-0.1" "iTRAQ reagent 115" "" "" "8761" "8761" "8761" "spectrum.mzdata" "" "" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"S-0.1-aliquot11" "protein extraction" "S-0.1" "ITRAQ labeling" "Pool1" "iTRAQ reagent 114" "" "" "8761" "8761" "8761" "spectrum.mzdata" "" "" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "" "" "" "" "l/hr" "" "" +"C-0.1-aliquot11" "protein extraction" "C-0.1" "ITRAQ labeling" "Pool1" "iTRAQ reagent 114" "" "" "8761" "8761" "8761" "spectrum.mzdata" "" "" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "" "" "" "" "l/hr" "" "" +"N-0.1-aliquot11" "protein extraction" "N-0.1" "ITRAQ labeling" "Pool1" "iTRAQ reagent 114" "" "" "8761" "8761" "8761" "spectrum.mzdata" "" "" "norm1" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation1" "PRIDE_Exp_Complete_Ac_8761.xml" "" "" "" "" "l/hr" "" "" +"C-0.2-aliquot11" "protein extraction" "C-0.2" "ITRAQ labeling" "JC_C-0.2" "iTRAQ reagent 117" "" "" "8762" "8762" "8762" "spectrum.mzdata" "" "" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"N-0.2-aliquot11" "protein extraction" "N-0.2" "ITRAQ labeling" "JC_N-0.2" "iTRAQ reagent 116" "" "" "8762" "8762" "8762" "spectrum.mzdata" "" "" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"P-0.1-aliquot11" "protein extraction" "P-0.1" "ITRAQ labeling" "JC_P-0.1" "iTRAQ reagent 115" "" "" "8762" "8762" "8762" "spectrum.mzdata" "" "" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"C-0.2-aliquot11" "protein extraction" "C-0.2" "ITRAQ labeling" "Pool2" "iTRAQ reagent 114" "" "" "8762" "8762" "8762" "spectrum.mzdata" "" "" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "" "" "" "" "l/hr" "" "" +"N-0.2-aliquot11" "protein extraction" "N-0.2" "ITRAQ labeling" "Pool2" "iTRAQ reagent 114" "" "" "8762" "8762" "8762" "spectrum.mzdata" "" "" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "" "" "" "" "l/hr" "" "" +"P-0.1-aliquot11" "protein extraction" "P-0.1" "ITRAQ labeling" "Pool2" "iTRAQ reagent 114" "" "" "8762" "8762" "8762" "spectrum.mzdata" "" "" "norm2" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation2" "PRIDE_Exp_Complete_Ac_8762.xml" "" "" "" "" "l/hr" "" "" +"P-0.2-aliquot11" "protein extraction" "P-0.2" "ITRAQ labeling" "JC_P-0.2" "iTRAQ reagent 116" "" "" "8763" "8763" "8763" "spectrum.mzdata" "" "" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"S-0.2-aliquot11" "protein extraction" "S-0.2" "ITRAQ labeling" "JC_S-0.2" "iTRAQ reagent 115" "" "" "8763" "8763" "8763" "spectrum.mzdata" "" "" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hr" "" "" +"P-0.2-aliquot11" "protein extraction" "P-0.2" "ITRAQ labeling" "Pool3" "iTRAQ reagent 117" "" "" "8763" "8763" "8763" "spectrum.mzdata" "" "" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "" "" "" "" "l/hr" "" "" +"S-0.2-aliquot11" "protein extraction" "S-0.2" "ITRAQ labeling" "Pool3" "iTRAQ reagent 117" "" "" "8763" "8763" "8763" "spectrum.mzdata" "" "" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "" "" "" "" "l/hr" "" "" +"P-0.2-aliquot11" "protein extraction" "P-0.2" "ITRAQ labeling" "Pool3" "iTRAQ reagent 114" "" "" "8763" "8763" "8763" "spectrum.mzdata" "" "" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "" "" "" "" "l/hr" "" "" +"S-0.2-aliquot11" "protein extraction" "S-0.2" "ITRAQ labeling" "Pool3" "iTRAQ reagent 114" "" "" "8763" "8763" "8763" "spectrum.mzdata" "" "" "norm3" "proteins.csv" "peptides.csv" "ptms.csv" "datatransformation3" "PRIDE_Exp_Complete_Ac_8763.xml" "" "" "" "" "l/hr" "" "" diff --git a/isatab files/BII-I-1/a_transcriptome.txt b/isatab files/BII-I-1/a_transcriptome.txt index cb799147..4602ae12 100644 --- a/isatab files/BII-I-1/a_transcriptome.txt +++ b/isatab files/BII-I-1/a_transcriptome.txt @@ -1,49 +1,49 @@ -"Sample Name" "Protocol REF" "Extract Name" "Protocol REF" "Labeled Extract Name" "Label" "Term Source REF" "Term Accession Number" "Protocol REF" "Hybridization Assay Name" "Array Design REF" "Scan Name" "Array Data File" "Normalization Name" "Derived Array Data File" "Factor Value[limiting nutrient]" "Term Source REF" "Term Accession Number" "Factor Value[rate]" "Unit" "Term Source REF" "Term Accession Number" -"C-0.07-aliquot1" "mRNA extraction" "C-0.07-aliquot1" "biotin labeling" "C-0.07-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3908" "A-AFFY-27" "SCAN:MEXP:3908" "E-MEXP-115-raw-data-331217737.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot2" "mRNA extraction" "C-0.07-aliquot2" "biotin labeling" "C-0.07-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3909" "A-AFFY-27" "SCAN:MEXP:3909" "E-MEXP-115-raw-data-331217860.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot3" "mRNA extraction" "C-0.07-aliquot3" "biotin labeling" "C-0.07-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3910" "A-AFFY-27" "SCAN:MEXP:3910" "E-MEXP-115-raw-data-331217979.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.07-aliquot4" "mRNA extraction" "C-0.07-aliquot4" "biotin labeling" "C-0.07-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3907" "A-AFFY-27" "SCAN:MEXP:3907" "E-MEXP-115-raw-data-331217580.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.07" "l/hr" "" "" -"C-0.1-aliquot1" "mRNA extraction" "C-0.1-aliquot1" "biotin labeling" "C-0.1-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3912" "A-AFFY-27" "SCAN:MEXP:3912" "E-MEXP-115-raw-data-331218271.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.1" "l/hr" "" "" -"C-0.1-aliquot2" "mRNA extraction" "C-0.1-aliquot2" "biotin labeling" "C-0.1-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3913" "A-AFFY-27" "SCAN:MEXP:3913" "E-MEXP-115-raw-data-331218449.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.1" "l/hr" "" "" -"C-0.1-aliquot3" "mRNA extraction" "C-0.1-aliquot3" "biotin labeling" "C-0.1-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3914" "A-AFFY-27" "SCAN:MEXP:3914" "E-MEXP-115-raw-data-331218681.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.1" "l/hr" "" "" -"C-0.1-aliquot4" "mRNA extraction" "C-0.1-aliquot4" "biotin labeling" "C-0.1-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3911" "A-AFFY-27" "SCAN:MEXP:3911" "E-MEXP-115-raw-data-331218116.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.1" "l/hr" "" "" -"C-0.2-aliquot1" "mRNA extraction" "C-0.2-aliquot1" "biotin labeling" "C-0.2-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3916" "A-AFFY-27" "SCAN:MEXP:3916" "E-MEXP-115-raw-data-331219013.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.2" "l/hr" "" "" -"C-0.2-aliquot2" "mRNA extraction" "C-0.2-aliquot2" "biotin labeling" "C-0.2-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3915" "A-AFFY-27" "SCAN:MEXP:3915" "E-MEXP-115-raw-data-331218842.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.2" "l/hr" "" "" -"C-0.2-aliquot3" "mRNA extraction" "C-0.2-aliquot3" "biotin labeling" "C-0.2-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3918" "A-AFFY-27" "SCAN:MEXP:3918" "E-MEXP-115-raw-data-331219245.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.2" "l/hr" "" "" -"C-0.2-aliquot4" "mRNA extraction" "C-0.2-aliquot4" "biotin labeling" "C-0.2-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3917" "A-AFFY-27" "SCAN:MEXP:3917" "E-MEXP-115-raw-data-331219131.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "carbon" "" "" "0.2" "l/hr" "" "" -"N-0.07-aliquot1" "mRNA extraction" "N-0.07-aliquot1" "biotin labeling" "N-0.07-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3919" "A-AFFY-27" "SCAN:MEXP:3919" "E-MEXP-115-raw-data-331219361.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot2" "mRNA extraction" "N-0.07-aliquot2" "biotin labeling" "N-0.07-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3921" "A-AFFY-27" "SCAN:MEXP:3921" "E-MEXP-115-raw-data-331219634.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot3" "mRNA extraction" "N-0.07-aliquot3" "biotin labeling" "N-0.07-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3922" "A-AFFY-27" "SCAN:MEXP:3922" "E-MEXP-115-raw-data-331219767.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.07-aliquot4" "mRNA extraction" "N-0.07-aliquot4" "biotin labeling" "N-0.07-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3920" "A-AFFY-27" "SCAN:MEXP:3920" "E-MEXP-115-raw-data-331219490.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.07" "l/hr" "" "" -"N-0.1-aliquot1" "mRNA extraction" "N-0.1-aliquot1" "biotin labeling" "N-0.1-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3926" "A-AFFY-27" "SCAN:MEXP:3926" "E-MEXP-115-raw-data-331220431.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.1" "l/hr" "" "" -"N-0.1-aliquot2" "mRNA extraction" "N-0.1-aliquot2" "biotin labeling" "N-0.1-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3923" "A-AFFY-27" "SCAN:MEXP:3923" "E-MEXP-115-raw-data-331219914.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.1" "l/hr" "" "" -"N-0.1-aliquot3" "mRNA extraction" "N-0.1-aliquot3" "biotin labeling" "N-0.1-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3925" "A-AFFY-27" "SCAN:MEXP:3925" "E-MEXP-115-raw-data-331220272.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.1" "l/hr" "" "" -"N-0.1-aliquot4" "mRNA extraction" "N-0.1-aliquot4" "biotin labeling" "N-0.1-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3924" "A-AFFY-27" "SCAN:MEXP:3924" "E-MEXP-115-raw-data-331220090.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.1" "l/hr" "" "" -"N-0.2-aliquot1" "mRNA extraction" "N-0.2-aliquot1" "biotin labeling" "N-0.2-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3930" "A-AFFY-27" "SCAN:MEXP:3930" "E-MEXP-115-raw-data-331221148.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.2" "l/hr" "" "" -"N-0.2-aliquot2" "mRNA extraction" "N-0.2-aliquot2" "biotin labeling" "N-0.2-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3929" "A-AFFY-27" "SCAN:MEXP:3929" "E-MEXP-115-raw-data-331220982.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.2" "l/hr" "" "" -"N-0.2-aliquot3" "mRNA extraction" "N-0.2-aliquot3" "biotin labeling" "N-0.2-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3928" "A-AFFY-27" "SCAN:MEXP:3928" "E-MEXP-115-raw-data-331220784.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.2" "l/hr" "" "" -"N-0.2-aliquot4" "mRNA extraction" "N-0.2-aliquot4" "biotin labeling" "N-0.2-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3927" "A-AFFY-27" "SCAN:MEXP:3927" "E-MEXP-115-raw-data-331220607.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "nitrogen" "" "" "0.2" "l/hr" "" "" -"P-0.07-aliquot1" "mRNA extraction" "P-0.07-aliquot1" "biotin labeling" "P-0.07-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3932" "A-AFFY-27" "SCAN:MEXP:3932" "E-MEXP-115-raw-data-331221518.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.07-aliquot2" "mRNA extraction" "P-0.07-aliquot2" "biotin labeling" "P-0.07-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3934" "A-AFFY-27" "SCAN:MEXP:3934" "E-MEXP-115-raw-data-331221873.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.07-aliquot3" "mRNA extraction" "P-0.07-aliquot3" "biotin labeling" "P-0.07-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3931" "A-AFFY-27" "SCAN:MEXP:3931" "E-MEXP-115-raw-data-331221345.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.07-aliquot4" "mRNA extraction" "P-0.07-aliquot4" "biotin labeling" "P-0.07-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3933" "A-AFFY-27" "SCAN:MEXP:3933" "E-MEXP-115-raw-data-331221668.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.07" "l/hr" "" "" -"P-0.1-aliquot1" "mRNA extraction" "P-0.1-aliquot1" "biotin labeling" "P-0.1-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3938" "A-AFFY-27" "SCAN:MEXP:3938" "E-MEXP-115-raw-data-331222534.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.1" "l/hr" "" "" -"P-0.1-aliquot2" "mRNA extraction" "P-0.1-aliquot2" "biotin labeling" "P-0.1-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3935" "A-AFFY-27" "SCAN:MEXP:3935" "E-MEXP-115-raw-data-331222054.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.1" "l/hr" "" "" -"P-0.1-aliquot3" "mRNA extraction" "P-0.1-aliquot3" "biotin labeling" "P-0.1-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3937" "A-AFFY-27" "SCAN:MEXP:3937" "E-MEXP-115-raw-data-331222380.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.1" "l/hr" "" "" -"P-0.1-aliquot4" "mRNA extraction" "P-0.1-aliquot4" "biotin labeling" "P-0.1-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3936" "A-AFFY-27" "SCAN:MEXP:3936" "E-MEXP-115-raw-data-331222215.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.1" "l/hr" "" "" -"P-0.2-aliquot1" "mRNA extraction" "P-0.2-aliquot1" "biotin labeling" "P-0.2-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3940" "A-AFFY-27" "SCAN:MEXP:3940" "E-MEXP-115-raw-data-331222917.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.2" "l/hr" "" "" -"P-0.2-aliquot2" "mRNA extraction" "P-0.2-aliquot2" "biotin labeling" "P-0.2-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3941" "A-AFFY-27" "SCAN:MEXP:3941" "E-MEXP-115-raw-data-331223115.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.2" "l/hr" "" "" -"P-0.2-aliquot3" "mRNA extraction" "P-0.2-aliquot3" "biotin labeling" "P-0.2-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3942" "A-AFFY-27" "SCAN:MEXP:3942" "E-MEXP-115-raw-data-331223321.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.2" "l/hr" "" "" -"P-0.2-aliquot4" "mRNA extraction" "P-0.2-aliquot4" "biotin labeling" "P-0.2-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3939" "A-AFFY-27" "SCAN:MEXP:3939" "E-MEXP-115-raw-data-331222701.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "phosphorus" "" "" "0.2" "l/hr" "" "" -"S-0.07-aliquot1" "mRNA extraction" "S-0.07-aliquot1" "biotin labeling" "S-0.07-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3944" "A-AFFY-27" "SCAN:MEXP:3944" "E-MEXP-115-raw-data-331223667.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.07" "l/hr" "" "" -"S-0.07-aliquot2" "mRNA extraction" "S-0.07-aliquot2" "biotin labeling" "S-0.07-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3945" "A-AFFY-27" "SCAN:MEXP:3945" "E-MEXP-115-raw-data-331223835.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.07" "l/hr" "" "" -"S-0.07-aliquot3" "mRNA extraction" "S-0.07-aliquot3" "biotin labeling" "S-0.07-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3946" "A-AFFY-27" "SCAN:MEXP:3946" "E-MEXP-115-raw-data-331223977.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.07" "l/hr" "" "" -"S-0.07-aliquot4" "mRNA extraction" "S-0.07-aliquot4" "biotin labeling" "S-0.07-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3943" "A-AFFY-27" "SCAN:MEXP:3943" "E-MEXP-115-raw-data-331223501.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.07" "l/hr" "" "" -"S-0.1-aliquot1" "mRNA extraction" "S-0.1-aliquot1" "biotin labeling" "S-0.1-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3948" "A-AFFY-27" "SCAN:MEXP:3948" "E-MEXP-115-raw-data-331224301.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.1" "l/hr" "" "" -"S-0.1-aliquot2" "mRNA extraction" "S-0.1-aliquot2" "biotin labeling" "S-0.1-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3947" "A-AFFY-27" "SCAN:MEXP:3947" "E-MEXP-115-raw-data-331224145.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.1" "l/hr" "" "" -"S-0.1-aliquot3" "mRNA extraction" "S-0.1-aliquot3" "biotin labeling" "S-0.1-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3950" "A-AFFY-27" "SCAN:MEXP:3950" "E-MEXP-115-raw-data-331224703.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.1" "l/hr" "" "" -"S-0.1-aliquot4" "mRNA extraction" "S-0.1-aliquot4" "biotin labeling" "S-0.1-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3949" "A-AFFY-27" "SCAN:MEXP:3949" "E-MEXP-115-raw-data-331224480.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.1" "l/hr" "" "" -"S-0.2-aliquot1" "mRNA extraction" "S-0.2-aliquot1" "biotin labeling" "S-0.2-aliquot1" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3951" "A-AFFY-27" "SCAN:MEXP:3951" "E-MEXP-115-raw-data-331224884.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.2" "l/hr" "" "" -"S-0.2-aliquot2" "mRNA extraction" "S-0.2-aliquot2" "biotin labeling" "S-0.2-aliquot2" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3954" "A-AFFY-27" "SCAN:MEXP:3954" "E-MEXP-115-raw-data-331225401.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.2" "l/hr" "" "" -"S-0.2-aliquot3" "mRNA extraction" "S-0.2-aliquot3" "biotin labeling" "S-0.2-aliquot3" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3952" "A-AFFY-27" "SCAN:MEXP:3952" "E-MEXP-115-raw-data-331225097.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.2" "l/hr" "" "" -"S-0.2-aliquot4" "mRNA extraction" "S-0.2-aliquot4" "biotin labeling" "S-0.2-aliquot4" "biotin" "CHEBI" "15956" "EukGE-WS4" "HYB:MEXP:3953" "A-AFFY-27" "SCAN:MEXP:3953" "E-MEXP-115-raw-data-331225235.txt" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "sulphur" "" "" "0.2" "l/hr" "" "" +"Sample Name" "Protocol REF" "Extract Name" "Protocol REF" "Labeled Extract Name" "Label" "Term Source REF" "Term Accession Number" "Protocol REF" "Hybridization Assay Name" "Array Design REF" "Scan Name" "Array Data File" "Comment[Data Repository]" "Comment[Data Record Accession]" "Normalization Name" "Derived Array Data File" "Comment[Data Record Accession]" "Comment[Data Repository]" "Factor Value[limiting nutrient]" "Term Source REF" "Term Accession Number" "Factor Value[rate]" "Unit" "Term Source REF" "Term Accession Number" +"C-0.07-aliquot1" "mRNA extraction" "C-0.07-aliquot1" "biotin labeling" "C-0.07-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3908" "A-AFFY-27" "SCAN:MEXP:3908" "E-MEXP-115-raw-data-331217737.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot2" "mRNA extraction" "C-0.07-aliquot2" "biotin labeling" "C-0.07-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3909" "A-AFFY-27" "SCAN:MEXP:3909" "E-MEXP-115-raw-data-331217860.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot3" "mRNA extraction" "C-0.07-aliquot3" "biotin labeling" "C-0.07-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3910" "A-AFFY-27" "SCAN:MEXP:3910" "E-MEXP-115-raw-data-331217979.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.07-aliquot4" "mRNA extraction" "C-0.07-aliquot4" "biotin labeling" "C-0.07-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3907" "A-AFFY-27" "SCAN:MEXP:3907" "E-MEXP-115-raw-data-331217580.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hr" "" "" +"C-0.1-aliquot1" "mRNA extraction" "C-0.1-aliquot1" "biotin labeling" "C-0.1-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3912" "A-AFFY-27" "SCAN:MEXP:3912" "E-MEXP-115-raw-data-331218271.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"C-0.1-aliquot2" "mRNA extraction" "C-0.1-aliquot2" "biotin labeling" "C-0.1-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3913" "A-AFFY-27" "SCAN:MEXP:3913" "E-MEXP-115-raw-data-331218449.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"C-0.1-aliquot3" "mRNA extraction" "C-0.1-aliquot3" "biotin labeling" "C-0.1-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3914" "A-AFFY-27" "SCAN:MEXP:3914" "E-MEXP-115-raw-data-331218681.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"C-0.1-aliquot4" "mRNA extraction" "C-0.1-aliquot4" "biotin labeling" "C-0.1-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3911" "A-AFFY-27" "SCAN:MEXP:3911" "E-MEXP-115-raw-data-331218116.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hr" "" "" +"C-0.2-aliquot1" "mRNA extraction" "C-0.2-aliquot1" "biotin labeling" "C-0.2-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3916" "A-AFFY-27" "SCAN:MEXP:3916" "E-MEXP-115-raw-data-331219013.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"C-0.2-aliquot2" "mRNA extraction" "C-0.2-aliquot2" "biotin labeling" "C-0.2-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3915" "A-AFFY-27" "SCAN:MEXP:3915" "E-MEXP-115-raw-data-331218842.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"C-0.2-aliquot3" "mRNA extraction" "C-0.2-aliquot3" "biotin labeling" "C-0.2-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3918" "A-AFFY-27" "SCAN:MEXP:3918" "E-MEXP-115-raw-data-331219245.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"C-0.2-aliquot4" "mRNA extraction" "C-0.2-aliquot4" "biotin labeling" "C-0.2-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3917" "A-AFFY-27" "SCAN:MEXP:3917" "E-MEXP-115-raw-data-331219131.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hr" "" "" +"N-0.07-aliquot1" "mRNA extraction" "N-0.07-aliquot1" "biotin labeling" "N-0.07-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3919" "A-AFFY-27" "SCAN:MEXP:3919" "E-MEXP-115-raw-data-331219361.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot2" "mRNA extraction" "N-0.07-aliquot2" "biotin labeling" "N-0.07-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3921" "A-AFFY-27" "SCAN:MEXP:3921" "E-MEXP-115-raw-data-331219634.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot3" "mRNA extraction" "N-0.07-aliquot3" "biotin labeling" "N-0.07-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3922" "A-AFFY-27" "SCAN:MEXP:3922" "E-MEXP-115-raw-data-331219767.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.07-aliquot4" "mRNA extraction" "N-0.07-aliquot4" "biotin labeling" "N-0.07-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3920" "A-AFFY-27" "SCAN:MEXP:3920" "E-MEXP-115-raw-data-331219490.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hr" "" "" +"N-0.1-aliquot1" "mRNA extraction" "N-0.1-aliquot1" "biotin labeling" "N-0.1-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3926" "A-AFFY-27" "SCAN:MEXP:3926" "E-MEXP-115-raw-data-331220431.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"N-0.1-aliquot2" "mRNA extraction" "N-0.1-aliquot2" "biotin labeling" "N-0.1-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3923" "A-AFFY-27" "SCAN:MEXP:3923" "E-MEXP-115-raw-data-331219914.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"N-0.1-aliquot3" "mRNA extraction" "N-0.1-aliquot3" "biotin labeling" "N-0.1-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3925" "A-AFFY-27" "SCAN:MEXP:3925" "E-MEXP-115-raw-data-331220272.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"N-0.1-aliquot4" "mRNA extraction" "N-0.1-aliquot4" "biotin labeling" "N-0.1-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3924" "A-AFFY-27" "SCAN:MEXP:3924" "E-MEXP-115-raw-data-331220090.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hr" "" "" +"N-0.2-aliquot1" "mRNA extraction" "N-0.2-aliquot1" "biotin labeling" "N-0.2-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3930" "A-AFFY-27" "SCAN:MEXP:3930" "E-MEXP-115-raw-data-331221148.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"N-0.2-aliquot2" "mRNA extraction" "N-0.2-aliquot2" "biotin labeling" "N-0.2-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3929" "A-AFFY-27" "SCAN:MEXP:3929" "E-MEXP-115-raw-data-331220982.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"N-0.2-aliquot3" "mRNA extraction" "N-0.2-aliquot3" "biotin labeling" "N-0.2-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3928" "A-AFFY-27" "SCAN:MEXP:3928" "E-MEXP-115-raw-data-331220784.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"N-0.2-aliquot4" "mRNA extraction" "N-0.2-aliquot4" "biotin labeling" "N-0.2-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3927" "A-AFFY-27" "SCAN:MEXP:3927" "E-MEXP-115-raw-data-331220607.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hr" "" "" +"P-0.07-aliquot1" "mRNA extraction" "P-0.07-aliquot1" "biotin labeling" "P-0.07-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3932" "A-AFFY-27" "SCAN:MEXP:3932" "E-MEXP-115-raw-data-331221518.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.07-aliquot2" "mRNA extraction" "P-0.07-aliquot2" "biotin labeling" "P-0.07-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3934" "A-AFFY-27" "SCAN:MEXP:3934" "E-MEXP-115-raw-data-331221873.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.07-aliquot3" "mRNA extraction" "P-0.07-aliquot3" "biotin labeling" "P-0.07-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3931" "A-AFFY-27" "SCAN:MEXP:3931" "E-MEXP-115-raw-data-331221345.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.07-aliquot4" "mRNA extraction" "P-0.07-aliquot4" "biotin labeling" "P-0.07-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3933" "A-AFFY-27" "SCAN:MEXP:3933" "E-MEXP-115-raw-data-331221668.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hr" "" "" +"P-0.1-aliquot1" "mRNA extraction" "P-0.1-aliquot1" "biotin labeling" "P-0.1-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3938" "A-AFFY-27" "SCAN:MEXP:3938" "E-MEXP-115-raw-data-331222534.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"P-0.1-aliquot2" "mRNA extraction" "P-0.1-aliquot2" "biotin labeling" "P-0.1-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3935" "A-AFFY-27" "SCAN:MEXP:3935" "E-MEXP-115-raw-data-331222054.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"P-0.1-aliquot3" "mRNA extraction" "P-0.1-aliquot3" "biotin labeling" "P-0.1-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3937" "A-AFFY-27" "SCAN:MEXP:3937" "E-MEXP-115-raw-data-331222380.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"P-0.1-aliquot4" "mRNA extraction" "P-0.1-aliquot4" "biotin labeling" "P-0.1-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3936" "A-AFFY-27" "SCAN:MEXP:3936" "E-MEXP-115-raw-data-331222215.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hr" "" "" +"P-0.2-aliquot1" "mRNA extraction" "P-0.2-aliquot1" "biotin labeling" "P-0.2-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3940" "A-AFFY-27" "SCAN:MEXP:3940" "E-MEXP-115-raw-data-331222917.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"P-0.2-aliquot2" "mRNA extraction" "P-0.2-aliquot2" "biotin labeling" "P-0.2-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3941" "A-AFFY-27" "SCAN:MEXP:3941" "E-MEXP-115-raw-data-331223115.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"P-0.2-aliquot3" "mRNA extraction" "P-0.2-aliquot3" "biotin labeling" "P-0.2-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3942" "A-AFFY-27" "SCAN:MEXP:3942" "E-MEXP-115-raw-data-331223321.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"P-0.2-aliquot4" "mRNA extraction" "P-0.2-aliquot4" "biotin labeling" "P-0.2-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3939" "A-AFFY-27" "SCAN:MEXP:3939" "E-MEXP-115-raw-data-331222701.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hr" "" "" +"S-0.07-aliquot1" "mRNA extraction" "S-0.07-aliquot1" "biotin labeling" "S-0.07-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3944" "A-AFFY-27" "SCAN:MEXP:3944" "E-MEXP-115-raw-data-331223667.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hr" "" "" +"S-0.07-aliquot2" "mRNA extraction" "S-0.07-aliquot2" "biotin labeling" "S-0.07-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3945" "A-AFFY-27" "SCAN:MEXP:3945" "E-MEXP-115-raw-data-331223835.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hr" "" "" +"S-0.07-aliquot3" "mRNA extraction" "S-0.07-aliquot3" "biotin labeling" "S-0.07-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3946" "A-AFFY-27" "SCAN:MEXP:3946" "E-MEXP-115-raw-data-331223977.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hr" "" "" +"S-0.07-aliquot4" "mRNA extraction" "S-0.07-aliquot4" "biotin labeling" "S-0.07-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3943" "A-AFFY-27" "SCAN:MEXP:3943" "E-MEXP-115-raw-data-331223501.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hr" "" "" +"S-0.1-aliquot1" "mRNA extraction" "S-0.1-aliquot1" "biotin labeling" "S-0.1-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3948" "A-AFFY-27" "SCAN:MEXP:3948" "E-MEXP-115-raw-data-331224301.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hr" "" "" +"S-0.1-aliquot2" "mRNA extraction" "S-0.1-aliquot2" "biotin labeling" "S-0.1-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3947" "A-AFFY-27" "SCAN:MEXP:3947" "E-MEXP-115-raw-data-331224145.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hr" "" "" +"S-0.1-aliquot3" "mRNA extraction" "S-0.1-aliquot3" "biotin labeling" "S-0.1-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3950" "A-AFFY-27" "SCAN:MEXP:3950" "E-MEXP-115-raw-data-331224703.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hr" "" "" +"S-0.1-aliquot4" "mRNA extraction" "S-0.1-aliquot4" "biotin labeling" "S-0.1-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3949" "A-AFFY-27" "SCAN:MEXP:3949" "E-MEXP-115-raw-data-331224480.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hr" "" "" +"S-0.2-aliquot1" "mRNA extraction" "S-0.2-aliquot1" "biotin labeling" "S-0.2-aliquot1" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3951" "A-AFFY-27" "SCAN:MEXP:3951" "E-MEXP-115-raw-data-331224884.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hr" "" "" +"S-0.2-aliquot2" "mRNA extraction" "S-0.2-aliquot2" "biotin labeling" "S-0.2-aliquot2" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3954" "A-AFFY-27" "SCAN:MEXP:3954" "E-MEXP-115-raw-data-331225401.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hr" "" "" +"S-0.2-aliquot3" "mRNA extraction" "S-0.2-aliquot3" "biotin labeling" "S-0.2-aliquot3" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3952" "A-AFFY-27" "SCAN:MEXP:3952" "E-MEXP-115-raw-data-331225097.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hr" "" "" +"S-0.2-aliquot4" "mRNA extraction" "S-0.2-aliquot4" "biotin labeling" "S-0.2-aliquot4" "biotin" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_15956" "EukGE-WS4" "HYB:MEXP:3953" "A-AFFY-27" "SCAN:MEXP:3953" "E-MEXP-115-raw-data-331225235.txt" "" "" "GCRMA normalization" "E-MEXP-115-processed-data-1341986893.txt" "" "" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hr" "" "" diff --git a/isatab files/BII-I-1/i_Investigation.txt b/isatab files/BII-I-1/i_Investigation.txt index edf0f9b5..463faf37 100644 --- a/isatab files/BII-I-1/i_Investigation.txt +++ b/isatab files/BII-I-1/i_Investigation.txt @@ -1,23 +1,29 @@ ONTOLOGY SOURCE REFERENCE -Term Source Name "OBI" "BTO" "NEWT" "UO" "CHEBI" "PATO" "EFO" -Term Source File "" "ArrayExpress Experimental Factor Ontology" "" "" "" "" "" -Term Source Version "" "v 1.26" "v 1.26" "v 1.26" "v 1.26" "v 1.26" "v 1.26" -Term Source Description "Ontology for Biomedical Investigations" "BRENDA tissue / enzyme source" "NEWT UniProt Taxonomy Database" "Unit Ontology" "Chemical Entities of Biological Interest" "Phenotypic qualities (properties)" "ArrayExpress Experimental Factor Ontology" +Term Source Name "CHEBI" "CL" "OBI" "NCBITAXON" "OBI_BCGO" "PATO" "UO" +Term Source File "http://data.bioontology.org/ontologies/CHEBI" "http://data.bioontology.org/ontologies/CL" "http://data.bioontology.org/ontologies/OBI" "http://data.bioontology.org/ontologies/NCBITAXON" "http://data.bioontology.org/ontologies/OBI_BCGO" "http://data.bioontology.org/ontologies/PATO" "http://data.bioontology.org/ontologies/UO" +Term Source Version "78" "43" "21" "2" "8" "160" "42" +Term Source Description "Chemical Entities of Biological Interest Ontology" "Cell Ontology" "Ontology for Biomedical Investigations" "National Center for Biotechnology Information (NCBI) Organismal Classification" "Beta Cell Genomics Ontology" "Phenotypic Quality Ontology" "Units of Measurement Ontology" INVESTIGATION Investigation Identifier "BII-I-1" Investigation Title "Growth control of the eukaryote cell: a systems biology study in yeast" Investigation Description "Background Cell growth underlies many key cellular and developmental processes, yet a limited number of studies have been carried out on cell-growth regulation. Comprehensive studies at the transcriptional, proteomic and metabolic levels under defined controlled conditions are currently lacking. Results Metabolic control analysis is being exploited in a systems biology study of the eukaryotic cell. Using chemostat culture, we have measured the impact of changes in flux (growth rate) on the transcriptome, proteome, endometabolome and exometabolome of the yeast Saccharomyces cerevisiae. Each functional genomic level shows clear growth-rate-associated trends and discriminates between carbon-sufficient and carbon-limited conditions. Genes consistently and significantly upregulated with increasing growth rate are frequently essential and encode evolutionarily conserved proteins of known function that participate in many protein-protein interactions. In contrast, more unknown, and fewer essential, genes are downregulated with increasing growth rate; their protein products rarely interact with one another. A large proportion of yeast genes under positive growth-rate control share orthologs with other eukaryotes, including humans. Significantly, transcription of genes encoding components of the TOR complex (a major controller of eukaryotic cell growth) is not subject to growth-rate regulation. Moreover, integrative studies reveal the extent and importance of post-transcriptional control, patterns of control of metabolic fluxes at the level of enzyme synthesis, and the relevance of specific enzymatic reactions in the control of metabolic fluxes during cell growth. Conclusion This work constitutes a first comprehensive systems biology study on growth-rate control in the eukaryotic cell. The results have direct implications for advanced studies on cell growth, in vivo regulation of metabolic fluxes for comprehensive metabolic engineering, and for the design of genome-scale systems biology models of the eukaryotic cell." Investigation Submission Date "2007-04-30" Investigation Public Release Date "2009-03-10" -Comment [Last Opened With Configuration] "isaconfig-default_v2011-02-18" +Comment[Created with configuration] "" +Comment[Last Opened With Configuration] "" +Comment[Created With Configuration] "" +Comment[Owning Organisation URI] "" +Comment[Consortium URI] "" +Comment[Principal Investigator URI] "" +Comment[Investigation Keywords] "" INVESTIGATION PUBLICATIONS -Investigation PubMed ID "17439666" -Investigation Publication DOI "doi:10.1186/jbiol54" -Investigation Publication Author List "Castrillo JI, Zeef LA, Hoyle DC, Zhang N, Hayes A, Gardner DC, Cornell MJ, Petty J, Hakes L, Wardleworth L, Rash B, Brown M, Dunn WB, Broadhurst D, O'Donoghue K, Hester SS, Dunkley TP, Hart SR, Swainston N, Li P, Gaskell SJ, Paton NW, Lilley KS, Kell DB, Oliver SG." -Investigation Publication Title "Growth control of the eukaryote cell: a systems biology study in yeast." -Investigation Publication Status "indexed in Pubmed" -Investigation Publication Status Term Accession Number "" -Investigation Publication Status Term Source REF "" +Investigation PubMed ID "17439666" "1231222" "1234121" +Investigation Publication DOI "doi:10.1186/jbiol54" "" "" +Investigation Publication Author List "Castrillo JI, Zeef LA, Hoyle DC, Zhang N, Hayes A, Gardner DC, Cornell MJ, Petty J, Hakes L, Wardleworth L, Rash B, Brown M, Dunn WB, Broadhurst D, O'Donoghue K, Hester SS, Dunkley TP, Hart SR, Swainston N, Li P, Gaskell SJ, Paton NW, Lilley KS, Kell DB, Oliver SG." "Piatnochka IT." "Monticelli G, Santori S." +Investigation Publication Title "Growth control of the eukaryote cell: a systems biology study in yeast." "Effect of prednisolone on the cardiovascular system in complex treatment of newly detected pulmonary tuberculosis" "Indications for the use of prostheses in the treatment of pathological fractures due to primary malignant and metastatic tumours of bone." +Investigation Publication Status "indexed in Pubmed" "Published" "Published" +Investigation Publication Status Term Accession Number "" "" "" +Investigation Publication Status Term Source REF "" "" "" INVESTIGATION CONTACTS Investigation Person Last Name "Oliver" "Juan" "Leo" Investigation Person First Name "Stephen" "Castrillo" "Zeef" @@ -30,17 +36,28 @@ Investigation Person Affiliation "Faculty of Life Sciences, Michael Smith Buildi Investigation Person Roles "corresponding author" "author" "author" Investigation Person Roles Term Accession Number "" "" "" Investigation Person Roles Term Source REF "" "" "" - +Comment[Investigation Person REF] "" "" "" +Comment[Investigation Person ORCID] "" "" "" STUDY Study Identifier "BII-S-1" +Study File Name "s_BII-S-1.txt" Study Title "Study of the impact of changes in flux on the transcriptome, proteome, endometabolome and exometabolome of the yeast Saccharomyces cerevisiae under different nutrient limitations" +Study Description "We wished to study the impact of growth rate on the total complement of mRNA molecules, proteins, and metabolites in S. cerevisiae, independent of any nutritional or other physiological effects. To achieve this, we carried out our analyses on yeast grown in steady-state chemostat culture under four different nutrient limitations (glucose, ammonium, phosphate, and sulfate) at three different dilution (that is, growth) rates (D = u = 0.07, 0.1, and 0.2/hour, equivalent to population doubling times (Td) of 10 hours, 7 hours, and 3.5 hours, respectively; u = specific growth rate defined as grams of biomass generated per gram of biomass present per unit time)." Study Submission Date "2007-04-30" Study Public Release Date "2009-03-10" -Study Description "We wished to study the impact of growth rate on the total complement of mRNA molecules, proteins, and metabolites in S. cerevisiae, independent of any nutritional or other physiological effects. To achieve this, we carried out our analyses on yeast grown in steady-state chemostat culture under four different nutrient limitations (glucose, ammonium, phosphate, and sulfate) at three different dilution (that is, growth) rates (D = u = 0.07, 0.1, and 0.2/hour, equivalent to population doubling times (Td) of 10 hours, 7 hours, and 3.5 hours, respectively; u = specific growth rate defined as grams of biomass generated per gram of biomass present per unit time)." -Study File Name "s_BII-S-1.txt" +Comment[Manuscript Licence] "CC BY 3.0" +Comment[Experimental Metadata Licence] "CC0" +Comment[Data Repository] "" +Comment[Data Record Accession] "" +Comment[Data Record URI] "" +Comment[Supplementary Information File Name] "" +Comment[Supplementary Information File Type] "" +Comment[Supplementary File URI] "" +Comment[Study Grant Number] "" +Comment[Study Funding Agency] "" STUDY DESIGN DESCRIPTORS Study Design Type "intervention design" -Study Design Type Term Accession Number "0000115" +Study Design Type Term Accession Number "http://purl.obolibrary.org/obo/OBI_0000115" Study Design Type Term Source REF "OBI" STUDY PUBLICATIONS Study PubMed ID "17439666" @@ -52,29 +69,29 @@ Study Publication Status Term Accession Number "" Study Publication Status Term Source REF "" STUDY FACTORS Study Factor Name "limiting nutrient" "rate" -Study Factor Type "chemical compound" "rate" -Study Factor Type Term Accession Number "37577" "0000161" +Study Factor Type "chemical entity" "rate" +Study Factor Type Term Accession Number "http://purl.obolibrary.org/obo/CHEBI_24431" "http://purl.obolibrary.org/obo/PATO_0000161" Study Factor Type Term Source REF "CHEBI" "PATO" STUDY ASSAYS -Study Assay Measurement Type "metabolite profiling" "protein expression profiling" "transcription profiling" +Study Assay File Name "a_proteome.txt" "a_metabolome.txt" "a_transcriptome.txt" +Study Assay Measurement Type "protein expression profiling" "metabolite profiling" "transcription profiling" +Study Assay Measurement Type Term Accession Number "http://purl.obolibrary.org/obo/OBI_0000615" "http://purl.obolibrary.org/obo/OBI_0000366" "http://purl.obolibrary.org/obo/OBI_0000424" Study Assay Measurement Type Term Source REF "OBI" "OBI" "OBI" -Study Assay Measurement Type Term Accession Number "0000366" "" "0000424" Study Assay Technology Type "mass spectrometry" "mass spectrometry" "DNA microarray" +Study Assay Technology Type Term Accession Number "http://purl.obolibrary.org/obo/OBI_0000470" "http://purl.obolibrary.org/obo/OBI_0000470" "http://purl.obolibrary.org/obo/OBI_0400148" Study Assay Technology Type Term Source REF "OBI" "OBI" "OBI" -Study Assay Technology Type Term Accession Number "" "" "0400148" -Study Assay Technology Platform "LC-MS/MS" "iTRAQ" "Affymetrix" -Study Assay File Name "a_metabolome.txt" "a_proteome.txt" "a_transcriptome.txt" +Study Assay Technology Platform "iTRAQ" "LC-MS/MS" "Affymetrix" STUDY PROTOCOLS Study Protocol Name "growth protocol" "mRNA extraction" "protein extraction" "biotin labeling" "ITRAQ labeling" "EukGE-WS4" "metabolite extraction" -Study Protocol Type "growth" "mRNA extraction" "protein extraction" "labeling" "labeling" "hybridization" "extraction" -Study Protocol Type Term Accession Number "growth" "mRNA extraction" "protein extraction" "labeling" "labeling" "hybridization" "extraction" -Study Protocol Type Term Source REF "OBI" "OBI" "OBI" "OBI" "OBI" "OBI" "OBI" -Study Protocol Description "1. Biomass samples (45 ml) were taken via the sample port of the Applikon fermenters. The cells were pelleted by centrifugation for 5 min at 5000 rpm. The supernatant was removed and the RNA pellet resuspended in the residual medium to form a slurry. This was added in a dropwise manner directly into a 5 ml Teflon flask (B. Braun Biotech, Germany) containing liquid nitrogen and a 7 mm-diameter tungsten carbide ball. After allowing evaporation of the liquid nitrogen the flask was reassembled and the cells disrupted by agitation at 1500 rpm for 2 min in a Microdismembranator U (B. Braun Biotech, Germany) 2. The frozen powder was then dissolved in 1 ml of TriZol reagent (Sigma-Aldrich, UK), vortexed for 1 min, and then kept at room temperature for a further 5min. 3. Chloroform extraction was performed by addition of 0.2 ml chloroform, shaking vigorously or 15 s, then 5min incubation at room temperature. 4. Following centrifugation at 12,000 rpm for 5 min, the RNA (contained in the aqueous phase) was precipitated with 0.5 vol of 2-propanol at room temperature for 15 min. 5. After further centrifugation (12,000 rpm for 10 min at 4 C) the RNA pellet was washed twice with 70 % (v/v) ethanol, briefly air-dried, and redissolved in 0.5 ml diethyl pyrocarbonate (DEPC)-treated water. 6. The single-stranded RNA was precipitated once more by addition of 0.5 ml of LiCl buffer (4 M LiCl, 20 mM Tris-HCl, pH 7.5, 10 mM EDTA), thus removing tRNA and DNA from the sample. 7. After precipitation (20 C for 1h) and centrifugation (12,000 rpm, 30 min, 4 C), the RNA was washed twice in 70 % (v/v) ethanol prior to being dissolved in a minimal volume of DEPC-treated water. 8. Total RNA quality was checked using the RNA 6000 Nano Assay, and analysed on an Agilent 2100 Bioanalyser (Agilent Technologies). RNA was quantified using the Nanodrop ultra low volume spectrophotometer (Nanodrop Technologies)." "1. Biomass samples (45 ml) were taken via the sample port of the Applikon fermenters. The cells were pelleted by centrifugation for 5 min at 5000 rpm. The supernatant was removed and the RNA pellet resuspended in the residual medium to form a slurry. This was added in a dropwise manner directly into a 5 ml Teflon flask (B. Braun Biotech, Germany) containing liquid nitrogen and a 7 mm-diameter tungsten carbide ball. After allowing evaporation of the liquid nitrogen the flask was reassembled and the cells disrupted by agitation at 1500 rpm for 2 min in a Microdismembranator U (B. Braun Biotech, Germany) 2. The frozen powder was then dissolved in 1 ml of TriZol reagent (Sigma-Aldrich, UK), vortexed for 1 min, and then kept at room temperature for a further 5min. 3. Chloroform extraction was performed by addition of 0.2 ml chloroform, shaking vigorouslyor 15 s, then 5min incubation at room temperature. 4. Following centrifugation at 12,000 rpm for 5 min, the RNA (contained in the aqueous phase) was precipitated with 0.5 vol of 2-propanol at room temperature for 15 min. 5. After further centrifugation (12,000 rpm for 10 min at 4 C) the RNA pellet was washed twice with 70 % (v/v) ethanol, briefly air-dried, and redissolved in 0.5 ml diethyl pyrocarbonate (DEPC)-treated water. 6. The single-stranded RNA was precipitated once more by addition of 0.5 ml of LiCl bffer (4 M LiCl, 20 mM Tris-HCl, pH 7.5, 10 mM EDTA), thus removing tRNA and DNA from the sample. 7. After precipitation (20 C for 1 h) and centrifugation (12,000 rpm, 30 min, 4 C), the RNA was washed twice in 70 % (v/v) ethanol prior to being dissolved in a minimal volume of DEPC-treated water. 8. Total RNA quality was checked using the RNA 6000 Nano Assay, and analysed on an Agilent 2100 Bioanalyser (Agilent Technologies). RNA was quantified using the Nanodrop ultra low volume spectrophotometer (Nanodrop Technologies)." "" "This was done using Enzo BioArrayTM HighYieldTM RNA transcript labelling kit (T7) with 5 ul cDNA. The resultant cRNA was again purified using the GeneChip ¨ Sample Clean Up Module. The column was eluted in the first instance using 10 µl RNase-free water, and for a second time using 11 ul RNase-free water. cRNA was quantified using the Nanodrop spectrophotometer. A total of 15 ug of cRNA (required for hybridisation) was fragmented. Fragmentation was carried out by using 2 ul of fragmentation buffer for every 8 ul cRNA." "" "For each target, a hybridisation cocktail was made using the standard array recipe as described in the GeneChip ¨ Expression Analysis technical manual. GeneChip ¨ control oligonucleotide and 20x eukaryotic hybridisation controls were used. Hybridisation buffer was made as detailed in the GeneChip ¨ manual and the BSA and herring sperm DNA was purchased from Invitrogen. The cocktail was heated to 99 C for 5 min, transferred to 45 C for 5 min and then spun for 5 min to remove any insoluble material. Affymetrix Yeast Yg_s98 S. cerevisiae arrays were pre-hybridised with 200 ul 1x hybridisation buffer and incubated at 45 C for 10 min. 200 ul of the hybridisation cocktail was loaded onto the arrays. The probe array was incubated in a rotisserie at 45 C, rotating at 60 rpm. Following hybridisation, for 16 hr, chips were loaded onto a Fluidics station for washing and staining using the EukGe WS2v4 programme controlled using Microarray Suite 5 software." "" +Study Protocol Type "growth" "RNA extraction" "extraction" "addition of molecular label" "addition of molecular label" "nucleic acid hybridization" "extraction" +Study Protocol Type Term Accession Number "" "http://purl.obolibrary.org/obo/OBI_0666666" "http://purl.obolibrary.org/obo/OBI_0302884" "http://purl.obolibrary.org/obo/OBI_0600038" "http://purl.obolibrary.org/obo/OBI_0600038" "http://purl.obolibrary.org/obo/OBI_0302903" "http://purl.obolibrary.org/obo/OBI_0302884" +Study Protocol Type Term Source REF "" "OBI" "OBI" "OBI" "OBI" "OBI" "OBI" +Study Protocol Description "1. Biomass samples (45 ml) were taken via the sample port of the Applikon fermenters. The cells were pelleted by centrifugation for 5 min at 5000 rpm. The supernatant was removed and the RNA pellet resuspended in the residual medium to form a slurry. This was added in a dropwise manner directly into a 5 ml Teflon flask (B. Braun Biotech, Germany) containing liquid nitrogen and a 7 mm-diameter tungsten carbide ball. After allowing evaporation of the liquid nitrogen the flask was reassembled and the cells disrupted by agitation at 1500 rpm for 2 min in a Microdismembranator U (B. Braun Biotech, Germany) 2. The frozen powder was then dissolved in 1 ml of TriZol reagent (Sigma-Aldrich, UK), vortexed for 1 min, and then kept at room temperature for a further 5min. 3. Chloroform extraction was performed by addition of 0.2 ml chloroform, shaking vigorously or 15 s, then 5min incubation at room temperature. 4. Following centrifugation at 12,000 rpm for 5 min, the RNA (contained in the aqueous phase) was precipitated with 0.5 vol of 2-propanol at room temperature for 15 min. 5. After further centrifugation (12,000 rpm for 10 min at 4 C) the RNA pellet was washed twice with 70 % (v/v) ethanol, briefly air-dried, and redissolved in 0.5 ml diethyl pyrocarbonate (DEPC)-treated water. 6. The single-stranded RNA was precipitated once more by addition of 0.5 ml of LiCl buffer (4 M LiCl, 20 mM Tris-HCl, pH 7.5, 10 mM EDTA), thus removing tRNA and DNA from the sample. 7. After precipitation (20 C for 1h) and centrifugation (12,000 rpm, 30 min, 4 C), the RNA was washed twice in 70 % (v/v) ethanol prior to being dissolved in a minimal volume of DEPC-treated water. 8. Total RNA quality was checked using the RNA 6000 Nano Assay, and analysed on an Agilent 2100 Bioanalyser (Agilent Technologies). RNA was quantified using the Nanodrop ultra low volume spectrophotometer (Nanodrop Technologies)." "1. Biomass samples (45 ml) were taken via the sample port of the Applikon fermenters. The cells were pelleted by centrifugation for 5 min at 5000 rpm. The supernatant was removed and the RNA pellet resuspended in the residual medium to form a slurry. This was added in a dropwise manner directly into a 5 ml Teflon flask (B. Braun Biotech, Germany) containing liquid nitrogen and a 7 mm-diameter tungsten carbide ball. After allowing evaporation of the liquid nitrogen the flask was reassembled and the cells disrupted by agitation at 1500 rpm for 2 min in a Microdismembranator U (B. Braun Biotech, Germany) 2. The frozen powder was then dissolved in 1 ml of TriZol reagent (Sigma-Aldrich, UK), vortexed for 1 min, and then kept at room temperature for a further 5min. 3. Chloroform extraction was performed by addition of 0.2 ml chloroform, shaking vigorouslyor 15 s, then 5min incubation at room temperature. 4. Following centrifugation at 12,000 rpm for 5 min, the RNA (contained in the aqueous phase) was precipitated with 0.5 vol of 2-propanol at room temperature for 15 min. 5. After further centrifugation (12,000 rpm for 10 min at 4 C) the RNA pellet was washed twice with 70 % (v/v) ethanol, briefly air-dried, and redissolved in 0.5 ml diethyl pyrocarbonate (DEPC)-treated water. 6. The single-stranded RNA was precipitated once more by addition of 0.5 ml of LiCl bffer (4 M LiCl, 20 mM Tris-HCl, pH 7.5, 10 mM EDTA), thus removing tRNA and DNA from the sample. 7. After precipitation (20 C for 1 h) and centrifugation (12,000 rpm, 30 min, 4 C), the RNA was washed twice in 70 % (v/v) ethanol prior to being dissolved in a minimal volume of DEPC-treated water. 8. Total RNA quality was checked using the RNA 6000 Nano Assay, and analysed on an Agilent 2100 Bioanalyser (Agilent Technologies). RNA was quantified using the Nanodrop ultra low volume spectrophotometer (Nanodrop Technologies)." "" "This was done using Enzo BioArrayTM HighYieldTM RNA transcript labelling kit (T7) with 5 ul cDNA. The resultant cRNA was again purified using the GeneChip ??? Sample Clean Up Module. The column was eluted in the first instance using 10 ???l RNase-free water, and for a second time using 11 ul RNase-free water. cRNA was quantified using the Nanodrop spectrophotometer. A total of 15 ug of cRNA (required for hybridisation) was fragmented. Fragmentation was carried out by using 2 ul of fragmentation buffer for every 8 ul cRNA." "" "For each target, a hybridisation cocktail was made using the standard array recipe as described in the GeneChip ??? Expression Analysis technical manual. GeneChip ??? control oligonucleotide and 20x eukaryotic hybridisation controls were used. Hybridisation buffer was made as detailed in the GeneChip ??? manual and the BSA and herring sperm DNA was purchased from Invitrogen. The cocktail was heated to 99 C for 5 min, transferred to 45 C for 5 min and then spun for 5 min to remove any insoluble material. Affymetrix Yeast Yg_s98 S. cerevisiae arrays were pre-hybridised with 200 ul 1x hybridisation buffer and incubated at 45 C for 10 min. 200 ul of the hybridisation cocktail was loaded onto the arrays. The probe array was incubated in a rotisserie at 45 C, rotating at 60 rpm. Following hybridisation, for 16 hr, chips were loaded onto a Fluidics station for washing and staining using the EukGe WS2v4 programme controlled using Microarray Suite 5 software." "" Study Protocol URI "" "" "" "" "" "" "" Study Protocol Version "" "" "" "" "" "" "" -Study Protocol Parameters Name "" "" "" "" "" "" "sample volume;standard volume;" -Study Protocol Parameters Name Term Accession Number "" "" "" "" "" "" ";" -Study Protocol Parameters Name Term Source REF "" "" "" "" "" "" ";" +Study Protocol Parameters Name "" "" "" "" "" "" "sampling" +Study Protocol Parameters Name Term Accession Number "" "" "" "" "" "" "" +Study Protocol Parameters Name Term Source REF "" "" "" "" "" "" "" Study Protocol Components Name "" "" "" "" "" "" "" Study Protocol Components Type "" "" "" "" "" "" "" Study Protocol Components Type Term Accession Number "" "" "" "" "" "" "" @@ -91,17 +108,30 @@ Study Person Affiliation "Faculty of Life Sciences, Michael Smith Building, Univ Study Person Roles "corresponding author" "author" "author" Study Person Roles Term Accession Number "" "" "" Study Person Roles Term Source REF "" "" "" - +Comment[Study Person ORCID] "" "" "" +Comment[Funder] "" "" "" +Comment[FundRef ID] "" "" "" +Comment[Grant Identifier] "" "" "" STUDY Study Identifier "BII-S-2" +Study File Name "s_BII-S-2.txt" Study Title "A time course analysis of transcription response in yeast treated with rapamycin, a specific inhibitor of the TORC1 complex: impact on yeast growth" +Study Description "Comprehensive high-throughput analyses at the levels of mRNAs, proteins, and metabolites, and studies on gene expression patterns are required for systems biology studies of cell growth [4,26-29]. Although such comprehensive data sets are lacking, many studies have pointed to a central role for the target-of-rapamycin (TOR) signal transduction pathway in growth control. TOR is a serine/threonine kinase that has been conserved from yeasts to mammals; it integrates signals from nutrients or growth factors to regulate cell growth and cell-cycle progression coordinately. Although such comprehensive data sets are lacking, many studies have pointed to a central role for the target-of-rapamycin (TOR) signal transduction pathway in growth control. TOR is a serine/threonine kinase that has been conserved from yeasts to mammals; it integrates signals from nutrients or growth factors to regulate cell growth and cell-cycle progression coordinately. The effect of rapamycin were studied as follows: a culture growing at mid-exponential phase was divided into two. Rapamycin (200 ng/ml) was added to one half, and the drug's solvent to the other, as the control. Samples were taken at 0, 1, 2 and 4 h after treatment. Gene expression at the mRNA level was investigated by transcriptome analysis using Affymetrix hybridization arrays." Study Submission Date "2007-04-30" Study Public Release Date "2009-03-10" -Study Description "Comprehensive high-throughput analyses at the levels of mRNAs, proteins, and metabolites, and studies on gene expression patterns are required for systems biology studies of cell growth [4,26-29]. Although such comprehensive data sets are lacking, many studies have pointed to a central role for the target-of-rapamycin (TOR) signal transduction pathway in growth control. TOR is a serine/threonine kinase that has been conserved from yeasts to mammals; it integrates signals from nutrients or growth factors to regulate cell growth and cell-cycle progression coordinately. Although such comprehensive data sets are lacking, many studies have pointed to a central role for the target-of-rapamycin (TOR) signal transduction pathway in growth control. TOR is a serine/threonine kinase that has been conserved from yeasts to mammals; it integrates signals from nutrients or growth factors to regulate cell growth and cell-cycle progression coordinately. The effect of rapamycin were studied as follows: a culture growing at mid-exponential phase was divided into two. Rapamycin (200 ng/ml) was added to one half, and the drug's solvent to the other, as the control. Samples were taken at 0, 1, 2 and 4 h after treatment. Gene expression at the mRNA level was investigated by transcriptome analysis using Affymetrix hybridization arrays." -Study File Name "s_BII-S-2.txt" +Comment[Manuscript Licence] "CC BY 3.0" +Comment[Experimental Metadata Licence] "CC0" +Comment[Data Repository] "" +Comment[Data Record Accession] "" +Comment[Data Record URI] "" +Comment[Supplementary Information File Name] "" +Comment[Supplementary Information File Type] "" +Comment[Supplementary File URI] "" +Comment[Study Grant Number] "" +Comment[Study Funding Agency] "" STUDY DESIGN DESCRIPTORS Study Design Type "time series design" -Study Design Type Term Accession Number "0500020" +Study Design Type Term Accession Number "http://purl.obolibrary.org/obo/OBI_0500020" Study Design Type Term Source REF "OBI" STUDY PUBLICATIONS Study PubMed ID "17439666" @@ -113,33 +143,33 @@ Study Publication Status Term Accession Number "" Study Publication Status Term Source REF "" STUDY FACTORS Study Factor Name "compound" "exposure time" "dose" -Study Factor Type "compound" "time" "dose" -Study Factor Type Term Accession Number "0000368" "0000721" "0000428" -Study Factor Type Term Source REF "EFO" "EFO" "EFO" +Study Factor Type "chemical entity" "time" "dose" +Study Factor Type Term Accession Number "http://purl.obolibrary.org/obo/CHEBI_24431" "http://purl.obolibrary.org/obo/PATO_0000165" "http://purl.obolibrary.org/obo/OBI_0000984" +Study Factor Type Term Source REF "CHEBI" "OBI_BCGO" "OBI" STUDY ASSAYS +Study Assay File Name "a_microarray.txt" Study Assay Measurement Type "transcription profiling" +Study Assay Measurement Type Term Accession Number "http://purl.obolibrary.org/obo/OBI_0000424" Study Assay Measurement Type Term Source REF "OBI" -Study Assay Measurement Type Term Accession Number "0000424" Study Assay Technology Type "DNA microarray" +Study Assay Technology Type Term Accession Number "http://purl.obolibrary.org/obo/OBI_0400148" Study Assay Technology Type Term Source REF "OBI" -Study Assay Technology Type Term Accession Number "0400148" Study Assay Technology Platform "Affymetrix" -Study Assay File Name "a_microarray.txt" STUDY PROTOCOLS -Study Protocol Name "EukGE-WS4" "growth" "mRNA extraction" "biotin labeling" -Study Protocol Type "hybridization" "growth" "mRNA extraction" "labeling" -Study Protocol Type Term Accession Number "hybridization" "" "" "" -Study Protocol Type Term Source REF "OBI" "" "" "" -Study Protocol Description "For each target, a hybridisation cocktail was made using the standard array recipe as described in the GeneChip ¨ Expression Analysis technical manual. GeneChip ¨ control oligonucleotide and 20x eukaryotic hybridisation controls were used. Hybridisation buffer was made as detailed in the GeneChip ¨ manual and the BSA and herring sperm DNA was purchased from Invitrogen. The cocktail was heated to 99 C for 5mins, transferred to 45 C for 5 min and then spun for 5 min to remove any insoluble material. Affymetrix Yeast Yg_s98 S. cerevisiae arrays were pre-hybridised with 200 µl 1x hybridisation buffer and incubated at 45 C for 10 min. 200 µl of the hybridisation cocktail was loaded onto the arrays. The probe array was incubated in a rotisserie at 45 C, rotating at 60 rpm. Following hybridisation, for 16hr, chips were loaded onto a Fluidics station for washing and staining using the EukGe WS2v4 programme controlled using Microarray Suite 5 software." "The culture was grown in YMB minimum media + 2% glucose + supplement to early exponential growth (OD ~0.32)" "1. Biomass samples (45ml) were taken via the sample port of the Applikon fermenters. The cells were pelleted by centrifugation for 5min at 5000 rpm. The supernatant was removed and the RNA pellet resuspended in the residual medium to form a slurry. This was added in a dropwise manner directly into a 5ml Teflon flask (B. Braun Biotech, Germany) containing liquid nitrogen and a 7 mm-diameter tungsten carbide ball. After allowing evaporation of the liquid nitrogen the flask was reassembled and the cells disrupted by agitation at 1500 rpm for 2 min in a Microdismembranator U (B. Braun Biotech, Germany) 2. The frozen powder was then dissolved in 1 ml of TriZol reagent (Sigma-Aldrich, UK), vortexed for 1 min, and then kept at room temperature for a further 5 min. 3. Chloroform extraction was performed by addition of 0.2 ml chloroform, shaking vigorouslyor 15 s, then 5 min incubation at room temperature. 4. Following centrifugation at 12,000 rpm for 5 min, the RNA (contained in the aqueous phase) was precipitated with 0.5 vol of 2-propanol at room temperature for 15 min. 5. After further centrifugation (12,000 rpm for 10 min at 4 C) the RNA pellet was washed twice with 70 % (v/v) ethanol, briefly air-dried, and redissolved in 0.5 ml diethyl pyrocarbonate (DEPC)-treated water. 6. The single-stranded RNA was precipitated once more by addition of 0.5 ml of LiCl bffer (4 M LiCl, 20 mM Tris-HCl, pH 7.5, 10 mM EDTA), thus removing tRNA and DNA from the sample. 7. After precipitation (20 C for 1h) and centrifugation (12,000 rpm, 30 min, 4 C), the RNA was washed twice in 70 % (v/v) ethanol prior to being dissolved in a minimal volume of DEPC-treated water. 8. Total RNA quality was checked using the RNA 6000 Nano Assay, and analysed on an Agilent 2100 Bioanalyser (Agilent Technologies). RNA was quantified using the Nanodrop ultra low volume spectrophotometer (Nanodrop Technologies)." "This was done using Enzo BioArrayTM HighYieldTM RNA transcript labelling kit (T7) with 5 ul cDNA. The resultant cRNA was again purified using the GeneChip ¨ Sample Clean Up Module. The column was eluted in the first instance using 10 µl RNase-free water, and for a second time using 11 µl RNase-free water. cRNA was quantified using the Nanodrop spectrophotometer. A total of 15 ug of cRNA (required for hybridisation) was fragmented. Fragmentation was carried out by using 2 ul of fragmentation buffer for every 8 ul cRNA." -Study Protocol URI "" "" "" "" -Study Protocol Version "" "" "" "" -Study Protocol Parameters Name "" "" "" "" -Study Protocol Parameters Name Term Accession Number "" "" "" "" -Study Protocol Parameters Name Term Source REF "" "" "" "" -Study Protocol Components Name "" "" "" "" -Study Protocol Components Type "" "" "" "" -Study Protocol Components Type Term Accession Number "" "" "" "" -Study Protocol Components Type Term Source REF "" "" "" "" +Study Protocol Name "EukGE-WS4" "mRNA extraction" "biotin labeling" "extraction" "labeling" "NMR spectroscopy" "nmr assay" "data normalization" "data transformation" +Study Protocol Type "nucleic acid hybridization" "RNA extraction" "addition of molecular label" "extraction" "addition of molecular label" "NMR spectroscopy" "nmr assay" "normalization data transformation" "data transformation" +Study Protocol Type Term Accession Number "http://purl.obolibrary.org/obo/OBI_0302903" "http://purl.obolibrary.org/obo/OBI_0666666" "http://purl.obolibrary.org/obo/OBI_0600038" "http://purl.obolibrary.org/obo/OBI_0302884" "http://purl.obolibrary.org/obo/OBI_0600038" "http://purl.obolibrary.org/obo/OBI_0000623" "" "http://purl.obolibrary.org/obo/OBI_0200169" "http://purl.obolibrary.org/obo/OBI_0200000" +Study Protocol Type Term Source REF "OBI" "OBI" "OBI" "OBI" "OBI" "OBI" "" "OBI" "OBI" +Study Protocol Description "For each target, a hybridisation cocktail was made using the standard array recipe as described in the GeneChip ??? Expression Analysis technical manual. GeneChip ??? control oligonucleotide and 20x eukaryotic hybridisation controls were used. Hybridisation buffer was made as detailed in the GeneChip ??? manual and the BSA and herring sperm DNA was purchased from Invitrogen. The cocktail was heated to 99 C for 5mins, transferred to 45 C for 5 min and then spun for 5 min to remove any insoluble material. Affymetrix Yeast Yg_s98 S. cerevisiae arrays were pre-hybridised with 200 ???l 1x hybridisation buffer and incubated at 45 C for 10 min. 200 ???l of the hybridisation cocktail was loaded onto the arrays. The probe array was incubated in a rotisserie at 45 C, rotating at 60 rpm. Following hybridisation, for 16hr, chips were loaded onto a Fluidics station for washing and staining using the EukGe WS2v4 programme controlled using Microarray Suite 5 software." "1. Biomass samples (45ml) were taken via the sample port of the Applikon fermenters. The cells were pelleted by centrifugation for 5min at 5000 rpm. The supernatant was removed and the RNA pellet resuspended in the residual medium to form a slurry. This was added in a dropwise manner directly into a 5ml Teflon flask (B. Braun Biotech, Germany) containing liquid nitrogen and a 7 mm-diameter tungsten carbide ball. After allowing evaporation of the liquid nitrogen the flask was reassembled and the cells disrupted by agitation at 1500 rpm for 2 min in a Microdismembranator U (B. Braun Biotech, Germany) 2. The frozen powder was then dissolved in 1 ml of TriZol reagent (Sigma-Aldrich, UK), vortexed for 1 min, and then kept at room temperature for a further 5 min. 3. Chloroform extraction was performed by addition of 0.2 ml chloroform, shaking vigorouslyor 15 s, then 5 min incubation at room temperature. 4. Following centrifugation at 12,000 rpm for 5 min, the RNA (contained in the aqueous phase) was precipitated with 0.5 vol of 2-propanol at room temperature for 15 min. 5. After further centrifugation (12,000 rpm for 10 min at 4 C) the RNA pellet was washed twice with 70 % (v/v) ethanol, briefly air-dried, and redissolved in 0.5 ml diethyl pyrocarbonate (DEPC)-treated water. 6. The single-stranded RNA was precipitated once more by addition of 0.5 ml of LiCl bffer (4 M LiCl, 20 mM Tris-HCl, pH 7.5, 10 mM EDTA), thus removing tRNA and DNA from the sample. 7. After precipitation (20 C for 1h) and centrifugation (12,000 rpm, 30 min, 4 C), the RNA was washed twice in 70 % (v/v) ethanol prior to being dissolved in a minimal volume of DEPC-treated water. 8. Total RNA quality was checked using the RNA 6000 Nano Assay, and analysed on an Agilent 2100 Bioanalyser (Agilent Technologies). RNA was quantified using the Nanodrop ultra low volume spectrophotometer (Nanodrop Technologies)." "This was done using Enzo BioArrayTM HighYieldTM RNA transcript labelling kit (T7) with 5 ul cDNA. The resultant cRNA was again purified using the GeneChip ??? Sample Clean Up Module. The column was eluted in the first instance using 10 ???l RNase-free water, and for a second time using 11 ???l RNase-free water. cRNA was quantified using the Nanodrop spectrophotometer. A total of 15 ug of cRNA (required for hybridisation) was fragmented. Fragmentation was carried out by using 2 ul of fragmentation buffer for every 8 ul cRNA." "" "" "" "" "" "" +Study Protocol URI "" "" "" "" "" "" "" "" "" +Study Protocol Version "" "" "" "" "" "" "" "" "" +Study Protocol Parameters Name "" "" "" "" "" ";;;" "" "" "" +Study Protocol Parameters Name Term Accession Number "" "" "" "" "" "" "" "" "" +Study Protocol Parameters Name Term Source REF "" "" "" "" "" "" "" "" "" +Study Protocol Components Name "" "" "" "" "" "" "" "" "" +Study Protocol Components Type "" "" "" "" "" "" "" "" "" +Study Protocol Components Type Term Accession Number "" "" "" "" "" "" "" "" "" +Study Protocol Components Type Term Source REF "" "" "" "" "" "" "" "" "" STUDY CONTACTS Study Person Last Name "Oliver" "Juan" "Leo" Study Person First Name "Stephen" "Castrillo" "Zeef" @@ -152,4 +182,7 @@ Study Person Affiliation "Faculty of Life Sciences, Michael Smith Building, Univ Study Person Roles "corresponding author" "author" "author" Study Person Roles Term Accession Number "" "" "" Study Person Roles Term Source REF "" "" "" - +Comment[Study Person ORCID] "" "" "" +Comment[Funder] "" "" "" +Comment[FundRef ID] "" "" "" +Comment[Grant Identifier] "" "" "" diff --git a/isatab files/BII-I-1/s_BII-S-1.txt b/isatab files/BII-I-1/s_BII-S-1.txt index a6267a3c..f0b691c1 100644 --- a/isatab files/BII-I-1/s_BII-S-1.txt +++ b/isatab files/BII-I-1/s_BII-S-1.txt @@ -1,165 +1,165 @@ "Source Name" "Characteristics[organism]" "Term Source REF" "Term Accession Number" "Characteristics[strain]" "Term Source REF" "Term Accession Number" "Characteristics[genotype]" "Term Source REF" "Term Accession Number" "Protocol REF" "Sample Name" "Factor Value[limiting nutrient]" "Term Source REF" "Term Accession Number" "Factor Value[rate]" "Unit" "Term Source REF" "Term Accession Number" -"culture1" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot1" "carbon" "" "" "0.07" "l/hour" "" "" -"culture1" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot2" "carbon" "" "" "0.07" "l/hour" "" "" -"culture1" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot3" "carbon" "" "" "0.07" "l/hour" "" "" -"culture1" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot4" "carbon" "" "" "0.07" "l/hour" "" "" -"culture1" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot5" "carbon" "" "" "0.07" "l/hour" "" "" -"culture1" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot6" "carbon" "" "" "0.07" "l/hour" "" "" -"culture1" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot7" "carbon" "" "" "0.07" "l/hour" "" "" -"culture1" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot8" "carbon" "" "" "0.07" "l/hour" "" "" -"culture1" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot9" "carbon" "" "" "0.07" "l/hour" "" "" -"culture1" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot10" "carbon" "" "" "0.07" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot1" "carbon" "" "" "0.1" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot2" "carbon" "" "" "0.1" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot3" "carbon" "" "" "0.1" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot4" "carbon" "" "" "0.1" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot5" "carbon" "" "" "0.1" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot6" "carbon" "" "" "0.1" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot7" "carbon" "" "" "0.1" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot8" "carbon" "" "" "0.1" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot9" "carbon" "" "" "0.1" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot10" "carbon" "" "" "0.1" "l/hour" "" "" -"culture2" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot11" "carbon" "" "" "0.1" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot1" "carbon" "" "" "0.2" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot2" "carbon" "" "" "0.2" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot3" "carbon" "" "" "0.2" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot4" "carbon" "" "" "0.2" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot5" "carbon" "" "" "0.2" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot6" "carbon" "" "" "0.2" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot7" "carbon" "" "" "0.2" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot8" "carbon" "" "" "0.2" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot9" "carbon" "" "" "0.2" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot10" "carbon" "" "" "0.2" "l/hour" "" "" -"culture3" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot11" "carbon" "" "" "0.2" "l/hour" "" "" -"culture4" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot1" "nitrogen" "" "" "0.07" "l/hour" "" "" -"culture4" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot2" "nitrogen" "" "" "0.07" "l/hour" "" "" -"culture4" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot3" "nitrogen" "" "" "0.07" "l/hour" "" "" -"culture4" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot4" "nitrogen" "" "" "0.07" "l/hour" "" "" -"culture4" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot5" "nitrogen" "" "" "0.07" "l/hour" "" "" -"culture4" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot6" "nitrogen" "" "" "0.07" "l/hour" "" "" -"culture4" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot7" "nitrogen" "" "" "0.07" "l/hour" "" "" -"culture4" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot8" "nitrogen" "" "" "0.07" "l/hour" "" "" -"culture4" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot9" "nitrogen" "" "" "0.07" "l/hour" "" "" -"culture4" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot10" "nitrogen" "" "" "0.07" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot1" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot2" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot3" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot4" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot5" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot6" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot7" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot8" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot9" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot10" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture5" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot11" "nitrogen" "" "" "0.1" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot1" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot2" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot3" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot4" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot5" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot6" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot7" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot8" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot9" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot10" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture6" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot10" "nitrogen" "" "" "0.2" "l/hour" "" "" -"culture7" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot1" "phosphorus" "" "" "0.07" "l/hour" "" "" -"culture7" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot2" "phosphorus" "" "" "0.07" "l/hour" "" "" -"culture7" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot3" "phosphorus" "" "" "0.07" "l/hour" "" "" -"culture7" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot4" "phosphorus" "" "" "0.07" "l/hour" "" "" -"culture7" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot5" "phosphorus" "" "" "0.07" "l/hour" "" "" -"culture7" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot6" "phosphorus" "" "" "0.07" "l/hour" "" "" -"culture7" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot7" "phosphorus" "" "" "0.07" "l/hour" "" "" -"culture7" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot8" "phosphorus" "" "" "0.07" "l/hour" "" "" -"culture7" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot9" "phosphorus" "" "" "0.07" "l/hour" "" "" -"culture7" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot10" "phosphorus" "" "" "0.07" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot1" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot2" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot3" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot4" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot5" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot6" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot7" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot8" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot9" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot10" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture8" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot11" "phosphorus" "" "" "0.1" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot1" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot2" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot3" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot4" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot5" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot6" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot7" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot8" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot9" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot10" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture9" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot11" "phosphorus" "" "" "0.2" "l/hour" "" "" -"culture10" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot1" "sulfur" "" "" "0.07" "l/hour" "" "" -"culture10" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot2" "sulfur" "" "" "0.07" "l/hour" "" "" -"culture10" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot3" "sulfur" "" "" "0.07" "l/hour" "" "" -"culture10" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot4" "sulfur" "" "" "0.07" "l/hour" "" "" -"culture10" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot5" "sulfur" "" "" "0.07" "l/hour" "" "" -"culture10" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot6" "sulfur" "" "" "0.07" "l/hour" "" "" -"culture10" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot7" "sulfur" "" "" "0.07" "l/hour" "" "" -"culture10" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot8" "sulfur" "" "" "0.07" "l/hour" "" "" -"culture10" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot9" "sulfur" "" "" "0.07" "l/hour" "" "" -"culture10" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot10" "sulfur" "" "" "0.07" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot1" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot2" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot3" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot4" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot5" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot6" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot7" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot8" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot9" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot10" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture11" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot11" "sulfur" "" "" "0.1" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot1" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot2" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot3" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot4" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot5" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot6" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot7" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot8" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot9" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot10" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture12" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot11" "sulfur" "" "" "0.2" "l/hour" "" "" -"culture13" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot1" "ethanol" "" "" "0.07" "l/hour" "" "" -"culture13" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot2" "ethanol" "" "" "0.07" "l/hour" "" "" -"culture13" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot3" "ethanol" "" "" "0.07" "l/hour" "" "" -"culture13" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot4" "ethanol" "" "" "0.07" "l/hour" "" "" -"culture13" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot5" "ethanol" "" "" "0.07" "l/hour" "" "" -"culture13" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot6" "ethanol" "" "" "0.07" "l/hour" "" "" -"culture14" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot1" "ethanol" "" "" "0.1" "l/hour" "" "" -"culture14" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot2" "ethanol" "" "" "0.1" "l/hour" "" "" -"culture14" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot3" "ethanol" "" "" "0.1" "l/hour" "" "" -"culture14" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot4" "ethanol" "" "" "0.1" "l/hour" "" "" -"culture14" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot5" "ethanol" "" "" "0.1" "l/hour" "" "" -"culture14" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot6" "ethanol" "" "" "0.1" "l/hour" "" "" -"culture15" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot1" "ethanol" "" "" "0.2" "l/hour" "" "" -"culture15" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot2" "ethanol" "" "" "0.2" "l/hour" "" "" -"culture15" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot3" "ethanol" "" "" "0.2" "l/hour" "" "" -"culture15" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot4" "ethanol" "" "" "0.2" "l/hour" "" "" -"culture15" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot5" "ethanol" "" "" "0.2" "l/hour" "" "" -"culture15" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot6" "ethanol" "" "" "0.2" "l/hour" "" "" -"culture16" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot1" "glucose" "" "" "0.07" "l/hour" "" "" -"culture16" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot2" "glucose" "" "" "0.07" "l/hour" "" "" -"culture16" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot3" "glucose" "" "" "0.07" "l/hour" "" "" -"culture16" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot4" "glucose" "" "" "0.07" "l/hour" "" "" -"culture16" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot5" "glucose" "" "" "0.07" "l/hour" "" "" -"culture16" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot6" "glucose" "" "" "0.07" "l/hour" "" "" -"culture17" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot1" "glucose" "" "" "0.1" "l/hour" "" "" -"culture17" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot2" "glucose" "" "" "0.1" "l/hour" "" "" -"culture17" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot3" "glucose" "" "" "0.1" "l/hour" "" "" -"culture17" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot4" "glucose" "" "" "0.1" "l/hour" "" "" -"culture17" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot5" "glucose" "" "" "0.1" "l/hour" "" "" -"culture17" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot6" "glucose" "" "" "0.1" "l/hour" "" "" -"culture18" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot1" "glucose" "" "" "0.2" "l/hour" "" "" -"culture18" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot2" "glucose" "" "" "0.2" "l/hour" "" "" -"culture18" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot3" "glucose" "" "" "0.2" "l/hour" "" "" -"culture18" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot4" "glucose" "" "" "0.2" "l/hour" "" "" -"culture18" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot5" "glucose" "" "" "0.2" "l/hour" "" "" -"culture18" "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot6" "glucose" "" "" "0.2" "l/hour" "" "" +"culture1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot1" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hour" "" "" +"culture1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot2" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hour" "" "" +"culture1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot3" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hour" "" "" +"culture1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot4" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hour" "" "" +"culture1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot5" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hour" "" "" +"culture1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot6" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hour" "" "" +"culture1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot7" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hour" "" "" +"culture1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot8" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hour" "" "" +"culture1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot9" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hour" "" "" +"culture1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.07-aliquot10" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.07" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot1" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot2" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot3" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot4" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot5" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot6" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot7" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot8" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot9" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot10" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.1-aliquot11" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.1" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot1" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot2" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot3" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot4" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot5" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot6" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot7" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot8" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot9" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot10" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture3" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "C-0.2-aliquot11" "elemental carbon" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33415" "0.2" "l/hour" "" "" +"culture4" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot1" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hour" "" "" +"culture4" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot2" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hour" "" "" +"culture4" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot3" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hour" "" "" +"culture4" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot4" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hour" "" "" +"culture4" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot5" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hour" "" "" +"culture4" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot6" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hour" "" "" +"culture4" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot7" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hour" "" "" +"culture4" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot8" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hour" "" "" +"culture4" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot9" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hour" "" "" +"culture4" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.07-aliquot10" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.07" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot1" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot2" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot3" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot4" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot5" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot6" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot7" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot8" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot9" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot10" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture5" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.1-aliquot11" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.1" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot1" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot2" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot3" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot4" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot5" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot6" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot7" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot8" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot9" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot10" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture6" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "N-0.2-aliquot11" "elemental nitrogen" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33267" "0.2" "l/hour" "" "" +"culture7" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot1" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hour" "" "" +"culture7" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot2" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hour" "" "" +"culture7" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot3" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hour" "" "" +"culture7" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot4" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hour" "" "" +"culture7" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot5" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hour" "" "" +"culture7" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot6" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hour" "" "" +"culture7" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot7" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hour" "" "" +"culture7" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot8" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hour" "" "" +"culture7" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot9" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hour" "" "" +"culture7" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.07-aliquot10" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.07" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot1" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot2" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot3" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot4" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot5" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot6" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot7" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot8" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot9" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot10" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture8" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.1-aliquot11" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.1" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot1" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot2" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot3" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot4" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot5" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot6" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot7" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot8" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot9" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot10" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture9" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "P-0.2-aliquot11" "elemental phosphorus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33464" "0.2" "l/hour" "" "" +"culture10" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot1" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hour" "" "" +"culture10" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot2" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hour" "" "" +"culture10" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot3" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hour" "" "" +"culture10" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot4" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hour" "" "" +"culture10" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot5" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hour" "" "" +"culture10" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot6" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hour" "" "" +"culture10" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot7" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hour" "" "" +"culture10" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot8" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hour" "" "" +"culture10" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot9" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hour" "" "" +"culture10" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.07-aliquot10" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.07" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot1" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot2" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot3" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot4" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot5" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot6" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot7" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot8" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot9" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot10" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture11" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.1-aliquot11" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.1" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot1" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot2" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot3" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot4" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot5" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot6" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot7" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot8" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot9" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot10" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture12" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "S-0.2-aliquot11" "elemental sulfur" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_33403" "0.2" "l/hour" "" "" +"culture13" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot1" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hour" "" "" +"culture13" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot2" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hour" "" "" +"culture13" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot3" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hour" "" "" +"culture13" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot4" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hour" "" "" +"culture13" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot5" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hour" "" "" +"culture13" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.07-aliquot6" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.07" "l/hour" "" "" +"culture14" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot1" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hour" "" "" +"culture14" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot2" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hour" "" "" +"culture14" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot3" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hour" "" "" +"culture14" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot4" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hour" "" "" +"culture14" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot5" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hour" "" "" +"culture14" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.1-aliquot6" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.1" "l/hour" "" "" +"culture15" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot1" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.2" "l/hour" "" "" +"culture15" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot2" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.2" "l/hour" "" "" +"culture15" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot3" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.2" "l/hour" "" "" +"culture15" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot4" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.2" "l/hour" "" "" +"culture15" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot5" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.2" "l/hour" "" "" +"culture15" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "E-0.2-aliquot6" "ethanol" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_16236" "0.2" "l/hour" "" "" +"culture16" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot1" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hour" "" "" +"culture16" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot2" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hour" "" "" +"culture16" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot3" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hour" "" "" +"culture16" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot4" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hour" "" "" +"culture16" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot5" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hour" "" "" +"culture16" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.07-aliquot6" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.07" "l/hour" "" "" +"culture17" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot1" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hour" "" "" +"culture17" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot2" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hour" "" "" +"culture17" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot3" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hour" "" "" +"culture17" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot4" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hour" "" "" +"culture17" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot5" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hour" "" "" +"culture17" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.1-aliquot6" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.1" "l/hour" "" "" +"culture18" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot1" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hour" "" "" +"culture18" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot2" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hour" "" "" +"culture18" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot3" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hour" "" "" +"culture18" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot4" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hour" "" "" +"culture18" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot5" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hour" "" "" +"culture18" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "growth protocol" "G-0.2-aliquot6" "glucose" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_17234" "0.2" "l/hour" "" "" diff --git a/isatab files/BII-I-1/s_BII-S-2.txt b/isatab files/BII-I-1/s_BII-S-2.txt index 29e708e8..9c366671 100644 --- a/isatab files/BII-I-1/s_BII-S-2.txt +++ b/isatab files/BII-I-1/s_BII-S-2.txt @@ -1,3 +1,15 @@ -"Source Name" "Characteristics[organism]" "Term Source REF" "Term Accession Number" "Characteristics[strain]" "Term Source REF" "Term Accession Number" "Characteristics[genotype]" "Term Source REF" "Term Accession Number" "Characteristics[mating type]" "Term Source REF" "Term Accession Number" "Protocol REF" "Sample Name" -"Saccharomyces cerevisiae FY1679 " "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "mating_type_alpha" "" "" "growth" "NZ_0hrs_Grow_1" -"Saccharomyces cerevisiae FY1679 " "Saccharomyces cerevisiae (Baker's yeast)" "NEWT" "4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "mating_type_alpha" "" "" "growth" "NZ_0hrs_Grow_2" +"Source Name" "Characteristics[organism]" "Term Source REF" "Term Accession Number" "Characteristics[strain]" "Term Source REF" "Term Accession Number" "Characteristics[genotype]" "Term Source REF" "Term Accession Number" "Characteristics[mating type]" "Term Source REF" "Term Accession Number" "Protocol REF" "Sample Name" "Factor Value[dose]" "Unit" "Term Source REF" "Term Accession Number" "Factor Value[exposure time]" "Unit" "Term Source REF" "Term Accession Number" "Factor Value[compound]" "Term Source REF" "Term Accession Number" +"NZ_0hrs_Grow_1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_0hrs_Grow1_Sample_1" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "0" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "" "" "" +"NZ_0hrs_Grow_1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_1hrs_Grow1_Drug_Sample_1" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "1" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_0hrs_Grow_1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_2hrs_Grow1_Drug_Sample_1" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "2" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_0hrs_Grow_1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_4hrs_Grow1_Drug_Sample_1" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "4" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_0hrs_Grow_1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_2hrs_Grow1_Vehicle_Sample_1" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "2" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"NZ_0hrs_Grow_1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_4hrs_Grow1_Vehicle_Sample_1" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "4" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"NZ_0hrs_Grow_1" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_1hrs_Grow1_Vehicle_Sample_1" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "1" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"NZ_0hrs_Grow_2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_0hrs_Grow2_Sample_2" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "0" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "" "" "" +"NZ_0hrs_Grow_2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_1hrs_Grow2_Drug_Sample_2" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "1" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_0hrs_Grow_2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_4hrs_Grow2_Drug_Sample_2" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "4" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_0hrs_Grow_2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_2hrs_Grow2_Drug_Sample_2" "200" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "2" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "sirolimus" "CHEBI" "http://purl.obolibrary.org/obo/CHEBI_9168" +"NZ_0hrs_Grow_2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_1hrs_Grow2_Vehicle_Sample_2" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "1" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"NZ_0hrs_Grow_2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_2hrs_Grow2_Vehicle_Sample_2" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "2" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" +"NZ_0hrs_Grow_2" "Saccharomyces cerevisiae" "NCBITAXON" "http://purl.obolibrary.org/obo/NCBITaxon_4932" "FY1679" "" "" "KanMx4 MATa/MATalpha ura3-52/ura3-52 leu2-1/+trp1-63/+his3-D200/+ hoD KanMx4/hoD" "" "" "alpha mating type (yeast)" "OBI" "http://purl.obolibrary.org/obo/PATO_0001344" "" "NZ_4hrs_Grow2_Vehicle_Sample_2" "0" "nanogram per milliliter" "UO" "http://purl.obolibrary.org/obo/UO_0000275" "4" "hour" "UO" "http://purl.obolibrary.org/obo/UO_0000032" "drug vehicle (90% ethanol/10% tween-20)" "" "" diff --git a/package.sh b/package.sh index 1902e0d5..ff0f99ad 100755 --- a/package.sh +++ b/package.sh @@ -30,19 +30,21 @@ fi rm -rf Configurations rm -rf src/main/resources/Configurations +CONFIGURATION=isaconfig-default_v2014-01-16.zip + mkdir Configurations mkdir src/main/resources/Configurations cd Configurations -wget https://bitbucket.org/eamonnmag/isatools-downloads/downloads/isaconfig-default_v2013-02-13.zip --no-check-certificate -cp isaconfig-default_v2013-02-13.zip ../src/main/resources/Configurations/ -unzip isaconfig-default_v2013-02-13.zip -rm isaconfig-default_v2013-02-13.zip +wget https://bitbucket.org/eamonnmag/isatools-downloads/downloads/"$CONFIGURATION" --no-check-certificate +cp $CONFIGURATION ../src/main/resources/Configurations/ +unzip $CONFIGURATION +rm $CONFIGURATION cd ../ ## keeping configurations in resources so that they are included in the jar cd src/main/resources/Configurations -unzip isaconfig-default_v2013-02-13.zip -rm isaconfig-default_v2013-02-13.zip +unzip $CONFIGURATION +rm $CONFIGURATION cd ../../../.. mvn $MVNOPTS -Dmaven.test.skip=true clean assembly:assembly diff --git a/pom.xml b/pom.xml index 9359e4dd..a9f05a9b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.isatools ISAcreator bundle - 1.7.2 + 1.7.4 ISAcreator http://www.isa-tools.org @@ -40,6 +40,10 @@ + + oerc + http://frog.oerc.ox.ac.uk:8080/nexus-2.1.2/content/groups/oerc + mvnrepository @@ -56,15 +60,6 @@ http://download.java.net/maven/2/ - - oerc - http://frog.oerc.ox.ac.uk:8080/nexus-2.1.2/content/repositories/releases/ - - - - mvnsearch - http://www.mvnsearch.org/maven2/ - @@ -232,6 +227,12 @@ shade + + + + + + false beta-20080629 - - uk.ac.ebi - ols - 1.18 - - - - commons-lang - commons-lang - - - log4j - log4j - - - junit - junit - - - - commons-lang commons-lang @@ -383,7 +363,7 @@ org.isatools ISAtabErrorReporter - 0.4 + 0.6 @@ -396,12 +376,14 @@ uk.ac.ebi jutils 1.4 + slf4j-api org.slf4j + @@ -414,7 +396,7 @@ org.isatools import_layer - 1.6 + 1.6.5 uk.ac.ebi @@ -425,6 +407,17 @@ uk.ac.ebi jutils + + + cpdetector + cpdetector + + + + org.isatools + ISAtabErrorReporter + + @@ -462,11 +455,6 @@ 1.0 - - com.sun.jersey - jersey-bundle - 1.11 - com.google.zxing @@ -503,6 +491,11 @@ runtime + + com.sun.jersey + jersey-bundle + 1.11 + com.sun.jersey @@ -523,6 +516,12 @@ + + org.glassfish + javax.json + 1.0 + + diff --git a/src/main/java/org/isatools/isacreator/api/AuthenticationManager.java b/src/main/java/org/isatools/isacreator/api/AuthenticationManager.java index f4746d55..28e5496f 100644 --- a/src/main/java/org/isatools/isacreator/api/AuthenticationManager.java +++ b/src/main/java/org/isatools/isacreator/api/AuthenticationManager.java @@ -95,7 +95,7 @@ public boolean login(String username) { */ private void setCurrentUser(UserProfile up) { UserProfileManager.setCurrentUser(up); - OntologyManager.setOntologySelectionHistory(up.getUserHistory()); + OntologyManager.setOntologyTermHistory(up.getUserHistory()); Spreadsheet.fileSelectEditor.setFtpManager(up.getFtpManager()); } diff --git a/src/main/java/org/isatools/isacreator/api/CreateProfile.java b/src/main/java/org/isatools/isacreator/api/CreateProfile.java index 56301642..c490fd01 100644 --- a/src/main/java/org/isatools/isacreator/api/CreateProfile.java +++ b/src/main/java/org/isatools/isacreator/api/CreateProfile.java @@ -67,7 +67,7 @@ public static UserProfile createProfile(String username, char[] password, String UserProfileManager.getUserProfiles().add(newUser); UserProfileManager.setCurrentUser(newUser); - OntologyManager.setOntologySelectionHistory(newUser.getUserHistory()); + OntologyManager.setOntologyTermHistory(newUser.getUserHistory()); UserProfileManager.saveUserProfiles(); return newUser; diff --git a/src/main/java/org/isatools/isacreator/api/ImportConfiguration.java b/src/main/java/org/isatools/isacreator/api/ImportConfiguration.java index e1cd63d6..d1a06989 100644 --- a/src/main/java/org/isatools/isacreator/api/ImportConfiguration.java +++ b/src/main/java/org/isatools/isacreator/api/ImportConfiguration.java @@ -1,5 +1,6 @@ package org.isatools.isacreator.api; +import org.apache.log4j.Logger; import org.isatools.isacreator.configuration.io.ConfigXMLParser; import org.isatools.isacreator.managers.ApplicationManager; import org.isatools.isacreator.managers.ConfigurationManager; @@ -22,6 +23,8 @@ public class ImportConfiguration { private ConfigXMLParser configParser = null; private String configDir = null; + private static Logger log = Logger.getLogger(ImportConfiguration.class.getName()); + public ImportConfiguration(String cDir){ configDir = cDir; configParser = new ConfigXMLParser(configDir); @@ -38,18 +41,19 @@ public boolean loadConfiguration(){ if (!configParser.isProblemsEncountered()){ + log.info("Setting Assay definitions with " + configParser.getTables().size() + " tables."); ConfigurationManager.setAssayDefinitions(configParser.getTables()); + log.info("Setting Assay definitions with " + configParser.getMappings().size() + " mappings."); ConfigurationManager.setMappings(configParser.getMappings()); - ConfigurationManager.loadConfigurations(configDir); + log.info("Setting config dir with " + configDir); + ConfigurationManager.loadConfigurations(configDir); ApplicationManager.setCurrentDataReferenceObject(); - ISAcreatorProperties.setProperty(ISAcreatorProperties.CURRENT_CONFIGURATION, new File(configDir).getAbsolutePath()); }else{ System.out.println(configParser.getProblemLog()); } - return !configParser.isProblemsEncountered(); } diff --git a/src/main/java/org/isatools/isacreator/api/utils/SpreadsheetUtils.java b/src/main/java/org/isatools/isacreator/api/utils/SpreadsheetUtils.java index c02b4437..82d82135 100644 --- a/src/main/java/org/isatools/isacreator/api/utils/SpreadsheetUtils.java +++ b/src/main/java/org/isatools/isacreator/api/utils/SpreadsheetUtils.java @@ -262,7 +262,7 @@ public static void replaceFreeTextWithOntologyTerms(Spreadsheet spreadsheet, Map colIndex).toString(); if (annotations.containsKey(columnValue)) { - spreadsheet.getTable().setValueAt(annotations.get(columnValue).getUniqueId(), row, colIndex); + spreadsheet.getTable().setValueAt(annotations.get(columnValue).getShortForm(), row, colIndex); } } } @@ -311,10 +311,16 @@ public static void stopCellEditingInTable(JTable table) { } } + public static boolean isCommentParameterOrCharacteristic(String columnName) { + return (columnName.contains("Characteristics") || + columnName.contains("Comment") || + columnName.contains("Parameter Value")); + } + public static boolean isFactorParameterOrCharacteristic(String columnName) { return (columnName.contains("Characteristics") || columnName.contains("Factor") || - columnName.equals("Parameter Value")); + columnName.contains("Parameter Value")); } /** diff --git a/src/main/java/org/isatools/isacreator/api/utils/StudyUtils.java b/src/main/java/org/isatools/isacreator/api/utils/StudyUtils.java index 9b995ed2..6c91a7a7 100644 --- a/src/main/java/org/isatools/isacreator/api/utils/StudyUtils.java +++ b/src/main/java/org/isatools/isacreator/api/utils/StudyUtils.java @@ -149,6 +149,7 @@ private static String generateUniqueAssayReference(Study study, String assayRefe return generateUniqueAssayReference(study, assayReference, cycleCount + 1); } + candidateRef = candidateRef.replaceAll("\\s+","_"); return candidateRef; } diff --git a/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionDialog.java b/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionDialog.java index 0fb65dc5..491956a1 100644 --- a/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionDialog.java +++ b/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionDialog.java @@ -37,16 +37,24 @@ ISAcreator is a component of the ISA software suite (http://www.isa-tools.org) The ISA Team and the ISA software suite have been funded by the EU Carcinogenomics project (http://www.carcinogenomics.eu), the UK BBSRC (http://www.bbsrc.ac.uk), the UK NERC-NEBC (http://nebc.nerc.ac.uk) and in part by the EU NuGO consortium (http://www.nugo.org/everyone). */ +import org.isatools.isacreator.common.CommonMouseAdapter; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.common.dialog.ConfirmationDialog; import org.isatools.isacreator.gui.ISAcreator; import org.isatools.isacreator.managers.ApplicationManager; +import org.isatools.isacreator.managers.ConfigurationManager; import org.jdesktop.fuse.InjectedResource; import org.jdesktop.fuse.ResourceInjector; import javax.swing.*; +import javax.swing.border.EmptyBorder; import javax.swing.border.EtchedBorder; +import javax.swing.border.LineBorder; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; @@ -60,12 +68,21 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi */ public class AssaySelectionDialog extends JDialog { - @InjectedResource - private ImageIcon closeWindowIcon, closeWindowIconOver, doneIcon, doneIconOver, buttonPanelFiller; + private static final int PREDEFINED = 0; + private static final int CUSTOM = 1; private AssaySelectionUI assaySelectionUI; + private CustomAssaySelectionUI customAssaySelectionUI; + private Map> measurementsToTechnologies; + // this will hold either the predefined assay selection panel or the custom assay panel. + private Container swappableContainer; + private JLabel predefinedAssayTab; + private JLabel customAssayTab; + + private int pageInView = PREDEFINED; + public AssaySelectionDialog(Map> measurementsToTechnologies) { ResourceInjector.get("assayselection-package.style").inject(this); @@ -78,14 +95,53 @@ public AssaySelectionDialog(Map> measurementsToTechnologies public void createGUI() { ((JComponent) getContentPane()).setBorder(new EtchedBorder(UIHelper.LIGHT_GREEN_COLOR, UIHelper.LIGHT_GREEN_COLOR)); + swappableContainer = new JPanel(); assaySelectionUI = new AssaySelectionUI(measurementsToTechnologies); - assaySelectionUI.createGUI(); - add(Box.createVerticalStrut(10), BorderLayout.NORTH); + customAssaySelectionUI = new CustomAssaySelectionUI(); + customAssaySelectionUI.createGUI(); + + JPanel tabPanel = new JPanel(new GridLayout(1, 3)); + tabPanel.setOpaque(false); +// int top, int left, int bottom, int right + tabPanel.setBorder(new EmptyBorder(15, 5, 20, 0)); - add(assaySelectionUI); + predefinedAssayTab = UIHelper.createLabel("Select from predefined assays", UIHelper.VER_14_BOLD); + customAssayTab = UIHelper.createLabel("Create a custom assay", UIHelper.VER_14_PLAIN); + + predefinedAssayTab.addMouseListener(new CommonMouseAdapter() { + @Override + public void mouseClicked(MouseEvent mouseEvent) { + super.mouseClicked(mouseEvent); + swapContainers(assaySelectionUI); + customAssayTab.setFont(UIHelper.VER_12_PLAIN); + predefinedAssayTab.setFont(UIHelper.VER_12_BOLD); + } + }); + + customAssayTab.addMouseListener(new CommonMouseAdapter() { + @Override + public void mouseClicked(MouseEvent mouseEvent) { + super.mouseClicked(mouseEvent); + swapContainers(customAssaySelectionUI); + customAssayTab.setFont(UIHelper.VER_12_BOLD); + predefinedAssayTab.setFont(UIHelper.VER_12_PLAIN); + } + }); + + // check if there is a generic configuration available first. + if (ConfigurationManager.searchMappingsForMatch("*", "*") != null) { + tabPanel.add(predefinedAssayTab); + tabPanel.add(customAssayTab); + } + + add(tabPanel, BorderLayout.NORTH); + + swapContainers(assaySelectionUI); + + add(swappableContainer); add(createSouthPanel(), BorderLayout.SOUTH); @@ -97,49 +153,29 @@ public void clearSelectedAssays() { } private Container createSouthPanel() { - Box southPanel = Box.createHorizontalBox(); + JPanel southPanel = new JPanel(new BorderLayout()); + southPanel.setBorder(UIHelper.EMPTY_BORDER); + southPanel.setPreferredSize(new Dimension(750, 40)); - final JLabel closeButton = new JLabel(closeWindowIcon); - closeButton.addMouseListener(new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent mouseEvent) { - closeButton.setIcon(closeWindowIconOver); - } - - @Override - public void mouseExited(MouseEvent mouseEvent) { - closeButton.setIcon(closeWindowIcon); - } - - @Override - public void mousePressed(MouseEvent mouseEvent) { - closeButton.setIcon(closeWindowIcon); + JButton closeButton = new FlatButton(ButtonType.RED, "Cancel"); + closeButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { closeWindow(); } }); - final JLabel addAssay = new JLabel(doneIcon); - addAssay.addMouseListener(new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent mouseEvent) { - addAssay.setIcon(doneIconOver); - } - - @Override - public void mouseExited(MouseEvent mouseEvent) { - addAssay.setIcon(doneIcon); - } - - @Override - public void mousePressed(MouseEvent mouseEvent) { - firePropertyChange("assaysChosen", false, true); - closeWindow(); + JButton addAssay = new FlatButton(ButtonType.GREEN, "Confirm"); + addAssay.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + if ((pageInView == CUSTOM && customAssaySelectionUI.valid()) || pageInView == PREDEFINED) { + firePropertyChange("assaysChosen", false, true); + closeWindow(); + } } }); - southPanel.add(closeButton); - southPanel.add(new JLabel(buttonPanelFiller)); - southPanel.add(addAssay); + southPanel.add(closeButton, BorderLayout.WEST); + southPanel.add(addAssay, BorderLayout.EAST); return southPanel; } @@ -153,7 +189,25 @@ public void run() { } public List getSelectedAssays() { - return assaySelectionUI.getAssaysToDefine(); + return pageInView == PREDEFINED ? assaySelectionUI.getAssaysToDefine() : customAssaySelectionUI.getAssaysToDefine(); } + private void swapContainers(final JPanel newContainer) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + if (newContainer != null) { + swappableContainer.removeAll(); + swappableContainer.add(newContainer); + swappableContainer.repaint(); + swappableContainer.validate(); + + if (newContainer instanceof CustomAssaySelectionUI) { + pageInView = CUSTOM; + } else { + pageInView = PREDEFINED; + } + } + } + }); + } } diff --git a/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionInterface.java b/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionInterface.java new file mode 100644 index 00000000..8ad05aa8 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionInterface.java @@ -0,0 +1,9 @@ +package org.isatools.isacreator.assayselection; + +import java.util.List; + +public interface AssaySelectionInterface{ + + public List getAssaysToDefine(); + +} diff --git a/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionUI.java b/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionUI.java index af949161..a1da2da1 100644 --- a/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionUI.java +++ b/src/main/java/org/isatools/isacreator/assayselection/AssaySelectionUI.java @@ -63,7 +63,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import java.util.List; import java.util.Map; -public class AssaySelectionUI extends JPanel { +public class AssaySelectionUI extends JPanel implements AssaySelectionInterface { public final static String NO_TECHNOLOGY_TEXT = "no technology required"; @@ -97,7 +97,7 @@ public AssaySelectionUI(Map> measToAllowedTechnol public void createGUI() { setLayout(new BorderLayout()); - setSize(new Dimension(400, 500)); + setPreferredSize(new Dimension(750, 510)); // need to create a gui with two panels on the left hand side for selection of the // measurement and technology and one panel on the right hand side showing which ontologies @@ -288,7 +288,8 @@ public void mousePressed(MouseEvent mouseEvent) { private void populateMeasurements() { for (String s : measToAllowedTechnologies.keySet()) { - if (!s.equalsIgnoreCase("[sample]") && !s.equalsIgnoreCase("[investigation]")) { + s = s.trim(); + if (!s.equalsIgnoreCase("[sample]") && !s.equalsIgnoreCase("[investigation]") && !s.equals("*")) { assayMeasurementList.addItem(s); } } @@ -303,7 +304,7 @@ private void updateTechnologies(String measurement) { for (String technology : measToAllowedTechnologies.get(measurement)) { if (technology.trim().equals("")) { assayTechnologyList.addItem(NO_TECHNOLOGY_TEXT); - } else { + } else if(!technology.trim().equals("*")) { assayTechnologyList.addItem(technology); } } diff --git a/src/main/java/org/isatools/isacreator/assayselection/CustomAssaySelectionUI.java b/src/main/java/org/isatools/isacreator/assayselection/CustomAssaySelectionUI.java new file mode 100644 index 00000000..60b15bcd --- /dev/null +++ b/src/main/java/org/isatools/isacreator/assayselection/CustomAssaySelectionUI.java @@ -0,0 +1,98 @@ +package org.isatools.isacreator.assayselection; + +import org.isatools.isacreator.common.DropDownComponent; +import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.configuration.RecommendedOntology; +import org.isatools.isacreator.effects.components.RoundedJTextField; +import org.isatools.isacreator.gui.listeners.propertychange.OntologySelectedEvent; +import org.isatools.isacreator.gui.listeners.propertychange.OntologySelectionCancelledEvent; +import org.isatools.isacreator.ontologyselectiontool.OntologySelectionTool; + + +import javax.swing.*; +import javax.swing.border.EmptyBorder; +import javax.swing.text.JTextComponent; +import java.awt.*; +import java.util.*; +import java.util.List; + + +public class CustomAssaySelectionUI extends JPanel implements AssaySelectionInterface { + + private JTextField measurementField, technologyField, platformField; + private JLabel status; + + public void createGUI() { + setLayout(new BorderLayout()); + setPreferredSize(new Dimension(750, 510)); + + JPanel fieldPanel = new JPanel(); + fieldPanel.setBorder(new EmptyBorder(90, 90, 90, 90)); + fieldPanel.setPreferredSize(new Dimension(300, 250)); + fieldPanel.setLayout(new BoxLayout(fieldPanel, BoxLayout.PAGE_AXIS)); + + JPanel measurementFieldContainer = new JPanel(new GridLayout(1, 2)); + measurementField = new RoundedJTextField(8); + JComponent measurementOntologyComponent = createField(measurementField); + measurementFieldContainer.add(UIHelper.createLabel("Measurement Type")); + measurementFieldContainer.add(measurementOntologyComponent); + fieldPanel.add(measurementFieldContainer); + + fieldPanel.add(Box.createVerticalStrut(10)); + + JPanel technologyFieldContainer = new JPanel(new GridLayout(1, 2)); + technologyField= new RoundedJTextField(8); + JComponent technologyOntologyComponent = createField(technologyField); + technologyFieldContainer.add(UIHelper.createLabel("Technology (optional)")); + technologyFieldContainer.add(technologyOntologyComponent); + fieldPanel.add(technologyFieldContainer); + + fieldPanel.add(Box.createVerticalStrut(10)); + + JPanel platformFieldContainer = new JPanel(new GridLayout(1, 2)); + platformFieldContainer.add(UIHelper.createLabel("Platform (optional)")); + platformField = new RoundedJTextField(10); + UIHelper.renderComponent(platformField, UIHelper.VER_11_BOLD, UIHelper.DARK_GREEN_COLOR, false); + platformFieldContainer.add(platformField); + fieldPanel.add(platformFieldContainer); + + status = UIHelper.createLabel("", UIHelper.VER_12_BOLD, UIHelper.RED_COLOR); + fieldPanel.add(Box.createVerticalStrut(30)); + fieldPanel.add(status); + + add(fieldPanel, BorderLayout.NORTH); + } + + + private JComponent createField(JTextField field) { + + UIHelper.renderComponent(field, UIHelper.VER_11_BOLD, UIHelper.DARK_GREEN_COLOR, false); + return createOntologyDropDown(field, false, false, null); + } + + private JComponent createOntologyDropDown(JTextComponent field, + boolean allowsMultiple, boolean forceOntology, Map recommendedOntologySource) { + OntologySelectionTool ontologySelectionTool = new OntologySelectionTool(allowsMultiple, forceOntology, recommendedOntologySource); + ontologySelectionTool.createGUI(); + + DropDownComponent dropdown = new DropDownComponent(field, ontologySelectionTool, DropDownComponent.ONTOLOGY); + + ontologySelectionTool.addPropertyChangeListener("selectedOntology", new OntologySelectedEvent(ontologySelectionTool, dropdown, field)); + ontologySelectionTool.addPropertyChangeListener("noSelectedOntology", new OntologySelectionCancelledEvent(ontologySelectionTool, dropdown)); + + return dropdown; + } + + public boolean valid() { + if (measurementField.getText().isEmpty()) { + status.setText("A Measurement Type must be provided..."); + return false; + } + status.setText(""); + return true; + } + + public List getAssaysToDefine() { + return Collections.singletonList(new AssaySelection(measurementField.getText(), technologyField.getText(), platformField.getText())); + } +} diff --git a/src/main/java/org/isatools/isacreator/calendar/CalendarGUI.java b/src/main/java/org/isatools/isacreator/calendar/CalendarGUI.java index 9f26262e..9b06b105 100755 --- a/src/main/java/org/isatools/isacreator/calendar/CalendarGUI.java +++ b/src/main/java/org/isatools/isacreator/calendar/CalendarGUI.java @@ -38,6 +38,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.calendar; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.jdesktop.fuse.InjectedResource; import org.jdesktop.fuse.ResourceInjector; @@ -60,9 +62,6 @@ public class CalendarGUI extends JFrame implements ActionListener { static final int WIDTH = 200; static final int HEIGHT = 230; - @InjectedResource - private ImageIcon closeIcon, closeIconOver, okIcon, okIconOver; - private static Calendar calendar; private JComboBox months; private JComboBox years; @@ -76,10 +75,6 @@ public class CalendarGUI extends JFrame implements ActionListener { private int selectedYear; - public CalendarGUI() { - ResourceInjector.get("calendar-package.style").inject(this); - } - /** * CreateGUI method is called by any class wishing to properly instantiate the calendar. Until * this method is called, no painting is done. @@ -133,42 +128,23 @@ private void instantiateCalendar() { JPanel buttonsCont = new JPanel(new BorderLayout()); buttonsCont.setBackground(UIHelper.BG_COLOR); - final JLabel confirm = new JLabel(okIcon, JLabel.RIGHT); - confirm.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton confirm = new FlatButton(ButtonType.GREEN, "Confirm"); + confirm.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { firePropertyChange("selectedDate", "OLD_VALUE", getSelectedDay()); setVisible(false); } - - public void mouseEntered(MouseEvent event) { - confirm.setIcon(okIconOver); - } - - public void mouseExited(MouseEvent event) { - confirm.setIcon(okIcon); - } }); - final JLabel discard = new JLabel(closeIcon, JLabel.LEFT); - discard.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton cancel = new FlatButton(ButtonType.RED, "Cancel"); + cancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { firePropertyChange("noneSelected", "", getSelectedDay()); setVisible(false); } - - public void mouseEntered(MouseEvent event) { - discard.setIcon(closeIconOver); - } - - public void mouseExited(MouseEvent event) { - discard.setIcon(closeIcon); - } }); - - buttonsCont.add(discard, BorderLayout.WEST); + buttonsCont.add(cancel, BorderLayout.WEST); buttonsCont.add(confirm, BorderLayout.EAST); add(buttonsCont, BorderLayout.SOUTH); diff --git a/src/main/java/org/isatools/isacreator/common/ColumnFilterRenderer.java b/src/main/java/org/isatools/isacreator/common/ColumnFilterRenderer.java index 70b0d833..faaff042 100644 --- a/src/main/java/org/isatools/isacreator/common/ColumnFilterRenderer.java +++ b/src/main/java/org/isatools/isacreator/common/ColumnFilterRenderer.java @@ -65,9 +65,6 @@ public ColumnFilterRenderer(Font selectedFont, Font unselectedFont) { this.unselectedFont = unselectedFont; setLayout(new BorderLayout()); listCellRenderer = new DefaultListCellRenderer(); - JLabel image = new JLabel(new ImageIcon(getClass() - .getResource("/images/effects/list_image.png"))); - add(image, BorderLayout.WEST); add(listCellRenderer, BorderLayout.CENTER); setBorder(null); } diff --git a/src/main/java/org/isatools/isacreator/common/Globals.java b/src/main/java/org/isatools/isacreator/common/Globals.java deleted file mode 100644 index 0b6aedd5..00000000 --- a/src/main/java/org/isatools/isacreator/common/Globals.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - ISAcreator is a component of the ISA software suite (http://www.isa-tools.org) - - License: - ISAcreator is licensed under the Common Public Attribution License version 1.0 (CPAL) - - EXHIBIT A. CPAL version 1.0 - The contents of this file are subject to the CPAL version 1.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://isa-tools.org/licenses/ISAcreator-license.html. - The License is based on the Mozilla Public License version 1.1 but Sections - 14 and 15 have been added to cover use of software over a computer network and - provide for limited attribution for the Original Developer. In addition, Exhibit - A has been modified to be consistent with Exhibit B. - - Software distributed under the License is distributed on an AS IS basis, - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for - the specific language governing rights and limitations under the License. - - The Original Code is ISAcreator. - The Original Developer is the Initial Developer. The Initial Developer of the - Original Code is the ISA Team (Eamonn Maguire, eamonnmag@gmail.com; - Philippe Rocca-Serra, proccaserra@gmail.com; Susanna-Assunta Sansone, sa.sanson@gmail.com; - http://www.isa-tools.org). All portions of the code written by the ISA Team are - Copyright (c) 2007-2011 ISA Team. All Rights Reserved. - - EXHIBIT B. Attribution Information - Attribution Copyright Notice: Copyright (c) 2008-2011 ISA Team - Attribution Phrase: Developed by the ISA Team - Attribution URL: http://www.isa-tools.org - Graphic Image provided in the Covered Code as file: http://isa-tools.org/licenses/icons/poweredByISAtools.png - Display of Attribution Information is required in Larger Works which are defined in the CPAL as a work which combines Covered Code or portions thereof with code not governed by the terms of the CPAL. - - Sponsors: - The ISA Team and the ISA software suite have been funded by the EU Carcinogenomics project (http://www.carcinogenomics.eu), the UK BBSRC (http://www.bbsrc.ac.uk), the UK NERC-NEBC (http://nebc.nerc.ac.uk) and in part by the EU NuGO consortium (http://www.nugo.org/everyone). - */ - - -package org.isatools.isacreator.common; - -import javax.swing.*; - -/** - * Globals - * - * @author Eamonn Maguire - * @date Dec 8, 2009 - */ - - -public class Globals { - public static final ImageIcon CLOSE_ICON = new ImageIcon(Globals.class.getResource("/images/common/close.png")); - public static final ImageIcon CLOSE_OVER_ICON = new ImageIcon(Globals.class.getResource("/images/common/close_over.png")); - public static final ImageIcon OK_ICON = new ImageIcon(Globals.class.getResource("/images/common/ok.png")); - public static final ImageIcon OK_OVER_ICON = new ImageIcon(Globals.class.getResource("/images/common/ok_over.png")); -} diff --git a/src/main/java/org/isatools/isacreator/common/UIHelper.java b/src/main/java/org/isatools/isacreator/common/UIHelper.java index 9a30451d..6b202687 100644 --- a/src/main/java/org/isatools/isacreator/common/UIHelper.java +++ b/src/main/java/org/isatools/isacreator/common/UIHelper.java @@ -65,6 +65,19 @@ public class UIHelper { public static final Color LIGHT_GREY_COLOR = new Color(153, 153, 153); public static final Color LIGHT_GREEN_COLOR = new Color(140, 198, 63); public static final Color TRANSPARENT_LIGHT_GREEN_COLOR = new Color(140, 198, 63, 60); + + public static final Color EMERALD = new Color(79,186,111); + public static final Color NEPHRITIS = new Color(36,174,95); + public static final Color PETER_RIVER = new Color(52,152,219); + public static final Color BELIZE_HOLE = new Color(41,128,185); + public static final Color ASPHALT = new Color(52,73,94); + public static final Color MIDNIGHT = new Color(44,62,80); + public static final Color CARROT = new Color(230,126,34); + public static final Color PUMPKIN = new Color(211,84,0); + public static final Color ALIZARIN = new Color(240,76,60); + public static final Color POMEGRANATE = new Color(192,58,43); + + public static final Font VER_8_PLAIN = new Font("Verdana", Font.PLAIN, 8); public static final Font VER_8_BOLD = new Font("Verdana", Font.BOLD, 8); public static final Font VER_9_PLAIN = new Font("Verdana", Font.PLAIN, 9); @@ -79,15 +92,11 @@ public class UIHelper { public static final Font VER_14_BOLD = new Font("Verdana", Font.BOLD, 14); public static final Border STD_ETCHED_BORDER = new LineBorder(UIHelper.DARK_GREEN_COLOR, 1, true); - public static final Border EMPTY_BORDER = new EmptyBorder(0, 0, 0, 0); - public static final RoundedBorder GREEN_ROUNDED_BORDER = new RoundedBorder(UIHelper.LIGHT_GREEN_COLOR, 6); - public static final RoundedBorder GREY_ROUNDED_BORDER = new RoundedBorder(UIHelper.GREY_COLOR, 6); - public static final RoundedBorder DARK_GREEN_ROUNDED_BORDER = new RoundedBorder(UIHelper.DARK_GREEN_COLOR, 6); + public static final Border EMPTY_BORDER = new EmptyBorder(3, 3, 3, 3); + public static final RoundedBorder GREEN_ROUNDED_BORDER = new RoundedBorder(UIHelper.LIGHT_GREEN_COLOR, 2); + public static final RoundedBorder GREY_ROUNDED_BORDER = new RoundedBorder(UIHelper.GREY_COLOR, 2); + public static final RoundedBorder DARK_GREEN_ROUNDED_BORDER = new RoundedBorder(UIHelper.DARK_GREEN_COLOR, 2); - public static final ImageIcon OK_BUTTON = new ImageIcon(UIHelper.class.getResource("/images/common/ok.png")); - public static final ImageIcon OK_BUTTON_OVER = new ImageIcon(UIHelper.class.getResource("/images/common/ok_over.png")); - public static final ImageIcon CLOSE_BUTTON = new ImageIcon(UIHelper.class.getResource("/images/common/close.png")); - public static final ImageIcon CLOSE_BUTTON_OVER = new ImageIcon(UIHelper.class.getResource("/images/common/close_over.png")); public static final Color VERY_LIGHT_GREY_COLOR = new Color(250, 252, 250); // diff --git a/src/main/java/org/isatools/isacreator/common/button/ButtonType.java b/src/main/java/org/isatools/isacreator/common/button/ButtonType.java new file mode 100644 index 00000000..3aa123bf --- /dev/null +++ b/src/main/java/org/isatools/isacreator/common/button/ButtonType.java @@ -0,0 +1,32 @@ +package org.isatools.isacreator.common.button; + +import org.isatools.isacreator.common.UIHelper; + +import java.awt.*; + + +public enum ButtonType { + + + BLUE(UIHelper.PETER_RIVER, UIHelper.BELIZE_HOLE), + GREEN(UIHelper.LIGHT_GREEN_COLOR, UIHelper.DARK_GREEN_COLOR), + RED(UIHelper.POMEGRANATE, UIHelper.ALIZARIN), + GREY(new Color(236,240,241), new Color(230,230,230)), + ORANGE(UIHelper.CARROT, UIHelper.PUMPKIN); + + private Color defaultColor; + private Color hoverColor; + + ButtonType(Color defaultColor, Color hoverColor) { + this.defaultColor = defaultColor; + this.hoverColor = hoverColor; + } + + public Color getDefaultColor() { + return defaultColor; + } + + public Color getHoverColor() { + return hoverColor; + } +} diff --git a/src/main/java/org/isatools/isacreator/common/button/FlatButton.java b/src/main/java/org/isatools/isacreator/common/button/FlatButton.java new file mode 100644 index 00000000..69f9970f --- /dev/null +++ b/src/main/java/org/isatools/isacreator/common/button/FlatButton.java @@ -0,0 +1,123 @@ +package org.isatools.isacreator.common.button; + +import org.isatools.isacreator.common.UIHelper; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +/** + * Created with IntelliJ IDEA. + * User: eamonnmaguire + * Date: 07/09/2013 + * Time: 14:00 + * To change this template use File | Settings | File Templates. + */ +public class FlatButton extends JButton implements MouseListener { + + private ButtonType type; + private Color fontColor; + private Font font; + + public FlatButton(ButtonType type, String text) { + this(type, text, Color.white); + + } + + public FlatButton(ButtonType type, String text, Color fontColor) { + this(type, text, fontColor, UIHelper.VER_12_BOLD); + } + + public FlatButton(ButtonType type, String text, Color fontColor, Font font) { + super(text); + this.type = type; + this.fontColor = fontColor; + if(type == ButtonType.GREY && fontColor == Color.white) { + this.fontColor = UIHelper.DARK_GREEN_COLOR; + } + this.font = font; + setForeground(Color.WHITE); + addMouseListener(this); + } + + @Override + public int getHeight() { + return super.getHeight()-4; //To change body of overridden methods use File | Settings | File Templates. + } + + public void paintComponent(Graphics graphics) { + + Graphics2D g = (Graphics2D) graphics.create(); + if (!isEnabled()) { + g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .25f)); + } + if (getModel().isPressed() || getModel().isRollover()) { + g.setColor(type.getHoverColor()); + } else { + g.setColor(type.getDefaultColor()); + } + + + g.fillRect(0, 0, getWidth(), getHeight()); + + g.setColor(fontColor); + g.setFont(font); + FontMetrics fontMetrics = g.getFontMetrics(font); + + int width = fontMetrics.stringWidth(getText()); + int adjustment = (getWidth() - width) / 2; + g.drawString(getText(), adjustment, getHeight() - 9); + } + + @Override + protected void paintBorder(Graphics graphics) { + // do nothing. No border thank you. + } + + public static void main(String[] args) { + + JFrame testFrame = new JFrame("Test FlatButton"); + + testFrame.setSize(new Dimension(400, 400)); + + testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + testFrame.setLayout(new BorderLayout()); + + JPanel container = new JPanel(); + + container.add(new FlatButton(ButtonType.RED, "Hi Lauren!")); + container.add(new FlatButton(ButtonType.BLUE, "Hi Annapaola!")); + container.add(new FlatButton(ButtonType.ORANGE, "Hi Paul!")); + container.add(new FlatButton(ButtonType.GREY, "Hi Eamonn!")); + container.add(new FlatButton(ButtonType.GREEN, "+")); + + + testFrame.add(container); + testFrame.setLocationRelativeTo(null); + testFrame.pack(); + testFrame.setVisible(true); + } + + public void mouseClicked(MouseEvent mouseEvent) { + // + } + + public void mousePressed(MouseEvent mouseEvent) { + // To change body of implemented methods use File | Settings | File Templates. + } + + public void mouseReleased(MouseEvent mouseEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void mouseEntered(MouseEvent mouseEvent) { + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + + public void mouseExited(MouseEvent mouseEvent) { + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } +} + + diff --git a/src/main/java/org/isatools/isacreator/configuration/FieldObject.java b/src/main/java/org/isatools/isacreator/configuration/FieldObject.java index 84b366a7..8e70b497 100644 --- a/src/main/java/org/isatools/isacreator/configuration/FieldObject.java +++ b/src/main/java/org/isatools/isacreator/configuration/FieldObject.java @@ -181,7 +181,7 @@ public String getDescription() { } public String[] getFieldList() { - return fieldList; + return fieldList == null ? new String[]{"No units available"} : fieldList; } public String getFieldName() { diff --git a/src/main/java/org/isatools/isacreator/configuration/Ontology.java b/src/main/java/org/isatools/isacreator/configuration/Ontology.java index 0e952444..9196d48e 100644 --- a/src/main/java/org/isatools/isacreator/configuration/Ontology.java +++ b/src/main/java/org/isatools/isacreator/configuration/Ontology.java @@ -50,16 +50,13 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi public class Ontology implements Serializable { - private String ontologyID; - private String ontologyVersion; - private String ontologyDisplayLabel; - private String ontologyAbbreviation; + private String ontologyID, ontologyVersion, ontologyDisplayLabel, ontologyAbbreviation, submissionId; + private String contactName, contactEmail, homepage; + private boolean isFoundry; + private OntologyFormats format; private OntologyBranch subsectionToQuery; - private String contactName; - private String contactEmail; - private String homepage; private Set categories; private boolean isView; @@ -176,6 +173,14 @@ public String getHomepage() { return homepage; } + public String getSubmissionId() { + return submissionId; + } + + public void setSubmissionId(String submissionId) { + this.submissionId = submissionId; + } + public Set getCategories() { return categories; } diff --git a/src/main/java/org/isatools/isacreator/configuration/io/ConfigXMLParser.java b/src/main/java/org/isatools/isacreator/configuration/io/ConfigXMLParser.java index 4c4ace2a..2533c368 100644 --- a/src/main/java/org/isatools/isacreator/configuration/io/ConfigXMLParser.java +++ b/src/main/java/org/isatools/isacreator/configuration/io/ConfigXMLParser.java @@ -40,6 +40,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.apache.log4j.Logger; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; + import org.isatools.isacreator.configuration.*; import org.isatools.isacreator.ontologymanager.OntologyManager; import org.isatools.isacreator.ontologymanager.OntologySourceRefObject; @@ -88,9 +89,11 @@ public ConfigXMLParser(ConfigurationLoadingSource loadingSource, String configDi public void loadConfiguration() { List definitions; try { + definitions = getTableDefinitions(); - // do check for presence of the Investigation file, if it is not there, this method will load in a default file as well + // do check for presence of the Investigation file, if it is not there, + // this method will load in a default file as well checkInvestigationFileDefinitionFound(definitions); for (IsaTabConfigFileType isa : definitions) { @@ -127,6 +130,7 @@ public void loadConfiguration() { private void checkInvestigationFileDefinitionFound(List definitions) { boolean found = false; + for (IsaTabConfigFileType isaConfigFile : definitions) { for (IsaTabConfigurationType doc : isaConfigFile.getIsatabConfigurationArray()) { @@ -164,11 +168,11 @@ public List getMappings() { private List getTableDefinitions() throws XmlException, IOException { File dir = new File(configDir); - if (dir==null) + if (!dir.exists()) return null; File[] configFiles = dir.listFiles(); - if (configFiles == null){ + if (configFiles == null) { log.error("The specified directory " + configDir + " is wrong!"); problemLog += "

There is a problem with the directory " + configDir + " as no files where found.

"; problemsEncountered = true; @@ -182,8 +186,9 @@ private List getTableDefinitions() throws XmlException, IO List configurations = new ArrayList(); for (File tableConfig : configFiles) { - if (!tableConfig.getName().startsWith(".")) { + if (!tableConfig.getName().startsWith(".")) { + log.info(tableConfig.getAbsolutePath() + " is being read."); IsaTabConfigFileType isa = parseFile(tableConfig); configurations.add(isa); } @@ -203,11 +208,10 @@ public void processTable(IsaTabConfigurationType isaConf) { OntologyEntryType measurementInfo = isaConf.getMeasurement(); OntologyEntryType technologyInfo = isaConf.getTechnology(); - addOntologySourceForAssay(measurementInfo); - addOntologySourceForAssay(technologyInfo); - String tableType = measurementInfo.getTermLabel().equalsIgnoreCase("[sample]") ? MappingObject.STUDY_SAMPLE : measurementInfo.getTermLabel().equalsIgnoreCase("[investigation]") ? MappingObject.INVESTIGATION : MappingObject.ASSAY_TYPE; + log.info("Processing " + isaConf.getTableName()); + MappingObject mo = new MappingObject(tableType, measurementInfo.getTermLabel(), measurementInfo.getSourceAbbreviation(), measurementInfo.getTermAccession(), @@ -236,6 +240,7 @@ public void processTable(IsaTabConfigurationType isaConf) { stdField.getIsRequired(), stdField.getIsMultipleValue(), stdField.getIsFileField(), stdField.getIsHidden(), stdField.getIsForcedOntology()); + log.info("Adding " + newField.getFieldName() + " to configuration."); newField.setWizardTemplate(StringProcessing.cleanUpString(stdField.getGeneratedValueTemplate())); if (stdField.getRecommendedOntologies() != null) { @@ -286,6 +291,8 @@ public void processTable(IsaTabConfigurationType isaConf) { protocolField.getIsRequired(), false, false); } + log.info("Adding protocol to configuration " + newField.getFieldName()); + newField.setWizardTemplate(newField.getWizardTemplate()); fields.add(newField); @@ -295,13 +302,29 @@ public void processTable(IsaTabConfigurationType isaConf) { } else if (obj instanceof UnitFieldType) { UnitFieldType unitField = (UnitFieldType) obj; - FieldObject newField = new FieldObject(colNo, "Unit", StringProcessing.cleanUpString(unitField.getDescription()), DataTypes.ONTOLOGY_TERM, "", "", + log.info("Adding unit to configuration."); + + FieldObject newField = new FieldObject(colNo, "Unit", StringProcessing.cleanUpString(unitField.getDescription()), + DataTypes.resolveDataType(unitField.getDataType()), unitField.getDefaultValue(), "", unitField.getIsRequired(), false, false, false, unitField.getIsForcedOntology()); if (unitField.getRecommendedOntologies() != null) { processRecommendedOntologies(unitField, newField); } + if (unitField.getListValues() != null) { + String values = StringProcessing.cleanUpString(unitField.getListValues()); + + if (values.contains(",")) { + String[] valueList = values.split(","); + newField.setFieldList(valueList); + } else { + if (!values.isEmpty()) { + newField.setFieldList(new String[]{values}); + } + } + } + fields.add(newField); tableStructure.put(colNo, new String[]{newField.getFieldName(), ""}); @@ -319,10 +342,6 @@ public void processTable(IsaTabConfigurationType isaConf) { tables.add(new TableReferenceObject(tc)); } - private void addOntologySourceForAssay(OntologyEntryType ontologyEntryType) { - OntologyManager.addToUsedOntologies(new OntologySourceRefObject(ontologyEntryType.getSourceAbbreviation(), ontologyEntryType.getSourceUri(), ontologyEntryType.getSourceVersion(), ontologyEntryType.getSourceTitle())); - } - /** * Appends the structural fields to the end of the file by default */ diff --git a/src/main/java/org/isatools/isacreator/effects/AnimatableJFrame.java b/src/main/java/org/isatools/isacreator/effects/AnimatableJFrame.java index ca95243f..f4894e05 100755 --- a/src/main/java/org/isatools/isacreator/effects/AnimatableJFrame.java +++ b/src/main/java/org/isatools/isacreator/effects/AnimatableJFrame.java @@ -139,6 +139,7 @@ public void run() { } public void hideSheet() { + if (sheetInView) { glass.removeMouseListener(this); glass.setOpaque(false); @@ -192,7 +193,7 @@ public void maskOutMouseEvents() { */ public void showJDialogAsSheet(JDialog dialog) { sheet = (JComponent) dialog.getContentPane(); - sheet.setBorder(new LineBorder(UIHelper.LIGHT_GREEN_COLOR, 2)); + sheet.setBorder(new LineBorder(UIHelper.LIGHT_GREEN_COLOR, 1)); setupAnimation(); } diff --git a/src/main/java/org/isatools/isacreator/factorlevelentry/FactorLevelEntryGUI.java b/src/main/java/org/isatools/isacreator/factorlevelentry/FactorLevelEntryGUI.java index 7830d6ca..ca879530 100644 --- a/src/main/java/org/isatools/isacreator/factorlevelentry/FactorLevelEntryGUI.java +++ b/src/main/java/org/isatools/isacreator/factorlevelentry/FactorLevelEntryGUI.java @@ -43,6 +43,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.common.CustomTableHeaderRenderer; import org.isatools.isacreator.common.ExcelAdaptor; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.ontologyselectiontool.OntologyCellEditor; import org.isatools.isacreator.spreadsheet.SpreadsheetCellPoint; import org.isatools.isacreator.spreadsheet.SpreadsheetModel; @@ -447,15 +449,12 @@ private void updateCellEditors() { } private JPanel createButtonPanel() { - JPanel buttonPanel = new JPanel(new GridLayout(1, 2)); + JPanel buttonPanel = new JPanel(new BorderLayout()); + buttonPanel.setBorder(UIHelper.EMPTY_BORDER); - final JLabel ok = new JLabel(UIHelper.OK_BUTTON, JLabel.RIGHT); - ok.setOpaque(false); - ok.addMouseListener(new MouseListener() { - public void mouseClicked(MouseEvent event) { - } - - public void mousePressed(MouseEvent event) { + JButton ok = new FlatButton(ButtonType.GREEN, "Confirm"); + ok.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { if (checkLevelsAndUnits()) { firePropertyChange("changedFactorLevels", "OLD_VALUE", new LevelsAndUnits(getLevels(), getUnits())); rows.clear(); @@ -466,42 +465,16 @@ public void mousePressed(MouseEvent event) { status.setVisible(true); } } - - public void mouseReleased(MouseEvent event) { - } - - public void mouseEntered(MouseEvent event) { - ok.setIcon(UIHelper.OK_BUTTON_OVER); - } - - public void mouseExited(MouseEvent event) { - ok.setIcon(UIHelper.OK_BUTTON); - } }); - final JLabel cancel = new JLabel(UIHelper.CLOSE_BUTTON, JLabel.LEFT); - cancel.setOpaque(false); - cancel.addMouseListener(new MouseListener() { - public void mouseClicked(MouseEvent event) { - } - - public void mousePressed(MouseEvent event) { + JButton cancel = new FlatButton(ButtonType.RED, "Cancel"); + cancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { firePropertyChange("noChange", "canceled", ""); status.setVisible(false); rows.clear(); setVisible(false); } - - public void mouseReleased(MouseEvent event) { - } - - public void mouseEntered(MouseEvent event) { - cancel.setIcon(UIHelper.CLOSE_BUTTON_OVER); - } - - public void mouseExited(MouseEvent event) { - cancel.setIcon(UIHelper.CLOSE_BUTTON); - } }); buttonPanel.add(cancel); diff --git a/src/main/java/org/isatools/isacreator/filechooser/FileChooserUI.java b/src/main/java/org/isatools/isacreator/filechooser/FileChooserUI.java index bdf36a80..051453b1 100755 --- a/src/main/java/org/isatools/isacreator/filechooser/FileChooserUI.java +++ b/src/main/java/org/isatools/isacreator/filechooser/FileChooserUI.java @@ -39,12 +39,16 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import com.explodingpixels.macwidgets.IAppWidgetFactory; import org.apache.commons.net.ftp.FTPFile; -import org.isatools.isacreator.common.Globals; +import org.isatools.isacreator.common.CommonMouseAdapter; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.effects.AnimatableJFrame; import org.isatools.isacreator.effects.FooterPanel; import org.isatools.isacreator.effects.HUDTitleBar; import org.isatools.isacreator.effects.InfiniteProgressPanel; +import org.isatools.isacreator.effects.components.RoundedJPasswordField; +import org.isatools.isacreator.effects.components.RoundedJTextField; import org.isatools.isacreator.launch.ISAcreatorGUIProperties; import org.jdesktop.fuse.InjectedResource; import org.jdesktop.fuse.ResourceInjector; @@ -142,9 +146,9 @@ private void createGUI() { private JPanel createTopPanel() { - final JTextField uri = new JTextField(20); - final JTextField username = new JTextField(20); - final JPasswordField password = new JPasswordField(20); + final JTextField uri = new RoundedJTextField(20); + final JTextField username = new RoundedJTextField(20); + final JPasswordField password = new RoundedJPasswordField(20); final JPanel topContainer = new JPanel(); topContainer.setLayout(new BoxLayout(topContainer, BoxLayout.PAGE_AXIS)); @@ -255,6 +259,7 @@ public void run() { JLabel uriLab = UIHelper.createLabel("FTP URI: ", UIHelper.VER_10_BOLD, UIHelper.DARK_GREEN_COLOR); UIHelper.renderComponent(uri, UIHelper.VER_10_PLAIN, UIHelper.DARK_GREEN_COLOR, false); + uriPanel.add(uriLab); uriPanel.add(uri); @@ -290,10 +295,9 @@ public void run() { connectLab.setOpaque(false); connectLab.setToolTipText("Connect

Connect to the FTP source defined!

"); - connectLab.addMouseListener(new MouseAdapter() { - - + connectLab.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); if (uri.getText() != null && !uri.getText().trim().equals("")) { String user = (username.getText() != null) ? username.getText() : ""; String pass = (password.getPassword() != null) ? new String(password.getPassword()) : ""; @@ -316,9 +320,10 @@ public void run() { JLabel historyLab = new JLabel(viewHistoryIcon); historyLab.setOpaque(false); historyLab.setToolTipText("Search previously connected to FTP locations

Connect to a previously defined FTP location

"); - historyLab.addMouseListener(new MouseAdapter() { + historyLab.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); SelectFromFTPHistory selectFTP = new SelectFromFTPHistory(); selectFTP.addPropertyChangeListener("locationSelected", new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { @@ -529,26 +534,16 @@ public void mouseExited(MouseEvent event) { */ private JPanel createBottomPanel() { JPanel southPanel = new JPanel(new BorderLayout()); + southPanel.setBorder(UIHelper.EMPTY_BORDER); southPanel.setBackground(UIHelper.BG_COLOR); - final JLabel ok = new JLabel(Globals.OK_ICON); - ok.setHorizontalAlignment(JLabel.RIGHT); - ok.setOpaque(false); - ok.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton ok = new FlatButton(ButtonType.GREEN, "Select Files"); + ok.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { firePropertyChange("selectedFiles", "", selectedFiles.getSelectedValues()); setVisible(false); listModel.removeAllElements(); } - - public void mouseEntered(MouseEvent event) { - ok.setIcon(Globals.OK_OVER_ICON); - } - - public void mouseExited(MouseEvent event) { - ok.setIcon(Globals.OK_ICON); - } }); southPanel.add(ok, BorderLayout.EAST); @@ -634,7 +629,7 @@ private JPanel createNavTree() { treeContainer.setBackground(UIHelper.BG_COLOR); treeContainer.setBorder(new TitledBorder( UIHelper.GREEN_ROUNDED_BORDER, - "navigation", TitledBorder.DEFAULT_JUSTIFICATION, + "", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, UIHelper.VER_12_BOLD, UIHelper.DARK_GREEN_COLOR)); @@ -645,9 +640,10 @@ private JPanel createNavTree() { final JLabel navToParentDir = new JLabel(upIcon); navToParentDir.setOpaque(false); - navToParentDir.addMouseListener(new MouseAdapter() { + navToParentDir.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); navToParentDir.setIcon(upIcon); try { updateTree(fileBrowser.getParentDirectory()); @@ -657,10 +653,12 @@ public void mousePressed(MouseEvent event) { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); navToParentDir.setIcon(upIconOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); navToParentDir.setIcon(upIcon); } }); @@ -670,9 +668,10 @@ public void mouseExited(MouseEvent event) { final JLabel navToHomeDir = new JLabel(homeIcon); navToHomeDir.setOpaque(false); - navToHomeDir.addMouseListener(new MouseAdapter() { + navToHomeDir.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); navToHomeDir.setIcon(homeIcon); try { updateTree(fileBrowser.getHomeDirectory()); @@ -687,10 +686,12 @@ public void mousePressed(MouseEvent event) { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); navToHomeDir.setIcon(homeIconOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); navToHomeDir.setIcon(homeIcon); } }); @@ -711,10 +712,10 @@ public void mouseExited(MouseEvent event) { } - directoryTree.addMouseListener(new MouseAdapter() { - + directoryTree.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); int selRow = directoryTree.getRowForLocation(event.getX(), event.getY()); @@ -1004,52 +1005,28 @@ public void createGUI() { // create button panel JPanel buttonPanel = new JPanel(new BorderLayout()); + buttonPanel.setBorder(UIHelper.EMPTY_BORDER); buttonPanel.setBackground(UIHelper.BG_COLOR); - final JLabel close = new JLabel(Globals.CLOSE_ICON); - close.setOpaque(false); - close.setHorizontalAlignment(JLabel.LEFT); - - close.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton close = new FlatButton(ButtonType.RED, "Cancel"); + close.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { closeAndDisposeWindow(); } - - public void mouseEntered(MouseEvent event) { - close.setIcon(Globals.CLOSE_OVER_ICON); - } - - public void mouseExited(MouseEvent event) { - close.setIcon(Globals.CLOSE_ICON); - } }); buttonPanel.add(close, BorderLayout.WEST); - final JLabel ok = new JLabel(Globals.OK_ICON); - ok.setHorizontalAlignment(JLabel.RIGHT); - ok.setOpaque(false); - ok.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton ok = new FlatButton(ButtonType.GREEN, "Ok"); + ok.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { firePropertyChange("locationSelected", "", locationList.getSelectedValue()); closeAndDisposeWindow(); } - - public void mouseEntered(MouseEvent event) { - ok.setIcon(Globals.OK_OVER_ICON); - } - - public void mouseExited(MouseEvent event) { - ok.setIcon(Globals.OK_ICON); - } }); buttonPanel.add(ok, BorderLayout.EAST); - container.add(buttonPanel); - add(container); pack(); diff --git a/src/main/java/org/isatools/isacreator/filechooser/FileSystemTreeCellRenderer.java b/src/main/java/org/isatools/isacreator/filechooser/FileSystemTreeCellRenderer.java index 563a4acd..7c53e921 100755 --- a/src/main/java/org/isatools/isacreator/filechooser/FileSystemTreeCellRenderer.java +++ b/src/main/java/org/isatools/isacreator/filechooser/FileSystemTreeCellRenderer.java @@ -93,31 +93,7 @@ public Component getTreeCellRendererComponent(JTree jTree, Object o, break; case FileBrowserTreeNode.FILE_TYPE: - if (o.toString().contains(".")) { - String extension = o.toString() - .substring(o.toString().lastIndexOf(".") + - 1); - File f = new File(FileImage.FILE_IMG_DIR + File.separator + extension + - "icon.png"); - - if (!f.exists()) { - try { - new FileImage(extension).createImage(); - icon.setIcon(new ImageIcon(FileImage.FILE_IMG_DIR + File.separator + extension + - "icon.png")); - } catch (IOException e) { - icon.setIcon(unknownFileType); - } - } else { - icon.setIcon(new ImageIcon(FileImage.FILE_IMG_DIR + File.separator + extension + - "icon.png")); - } - - - } else { - icon.setIcon(unknownFileType); - } - + icon.setIcon(unknownFileType); break; case FileBrowserTreeNode.DIRECTORY: diff --git a/src/main/java/org/isatools/isacreator/formatmappingutility/logic/MappingLogic.java b/src/main/java/org/isatools/isacreator/formatmappingutility/logic/MappingLogic.java index 0b84f3ae..6ed9dd3f 100644 --- a/src/main/java/org/isatools/isacreator/formatmappingutility/logic/MappingLogic.java +++ b/src/main/java/org/isatools/isacreator/formatmappingutility/logic/MappingLogic.java @@ -87,15 +87,17 @@ public class MappingLogic { private String fileName; private int readerToUse; + private boolean mapToBlankFields; private Map> visMapping; private Set fieldsUsingUnits; // should take in a List of ISATAB columns to be mapped to and a list of JLayeredPanes to get the mappings from. - public MappingLogic(List mappings, TableReferenceObject referenceTRO, int readerToUse) { + public MappingLogic(List mappings, TableReferenceObject referenceTRO, int readerToUse, boolean mapToBlankFields) { this.mappings = mappings; this.referenceTRO = referenceTRO; this.readerToUse = readerToUse; + this.mapToBlankFields = mapToBlankFields; isatabFields = new ArrayList(); mappingInformation = new ArrayList(); uniqueRowHashes = new HashSet(); @@ -107,7 +109,8 @@ public MappingLogic(List mappings, TableReferenceObject reference private void processMappings() { for (MappedElement mn : mappings) { MappingInformation mi = mn.getDisplay(); - if (mi.isMappedTo()) { + System.out.println("Map to blank fields - " + mapToBlankFields); + if (mi.isMappedTo() || mapToBlankFields) { isatabFields.add(new MappingField(mn.getFieldName())); mappingInformation.add(mi); } @@ -142,15 +145,23 @@ public TableReferenceObject doMapping(String fileName, int readerToUse) { if (mi instanceof NormalFieldEntry) { NormalFieldEntry normalFieldEntry = (NormalFieldEntry) mi; - substitutions.add(normalFieldEntry.getFormatBuider().toString()); - visMapping.get(mappingField).addAll(normalFieldEntry.getFormatBuider().getVisualizationText()); + if (normalFieldEntry.isMappedTo()) { + substitutions.add(normalFieldEntry.getFormatBuider().toString()); + visMapping.get(mappingField).addAll(normalFieldEntry.getFormatBuider().getVisualizationText()); + } else { + substitutions.add(""); + } } else if (mi instanceof GeneralAttributeEntry) { GeneralAttributeEntry generalFieldEntry = (GeneralAttributeEntry) mi; - substitutions.add(generalFieldEntry.getNormalFieldEntry().getFormatBuider().toString()); - visMapping.get(mappingField).addAll(generalFieldEntry.getNormalFieldEntry().getFormatBuider().getVisualizationText()); + if (generalFieldEntry.isMappedTo()) { + substitutions.add(generalFieldEntry.getNormalFieldEntry().getFormatBuider().toString()); + visMapping.get(mappingField).addAll(generalFieldEntry.getNormalFieldEntry().getFormatBuider().getVisualizationText()); + } else { + substitutions.add(""); + } if (generalFieldEntry.getUnitPanel().useField()) { fieldsUsingUnits.add(generalFieldEntry.getFieldName()); @@ -161,8 +172,12 @@ public TableReferenceObject doMapping(String fileName, int readerToUse) { } else if (mi instanceof ProtocolFieldEntry) { ProtocolFieldEntry protocolFieldFieldEntry = (ProtocolFieldEntry) mi; - substitutions.add(protocolFieldFieldEntry.getNormalFieldEntry().getFormatBuider().toString()); - visMapping.get(mappingField).addAll(protocolFieldFieldEntry.getNormalFieldEntry().getFormatBuider().getVisualizationText()); + if (protocolFieldFieldEntry.isMappedTo()) { + substitutions.add(protocolFieldFieldEntry.getNormalFieldEntry().getFormatBuider().toString()); + visMapping.get(mappingField).addAll(protocolFieldFieldEntry.getNormalFieldEntry().getFormatBuider().getVisualizationText()); + } else { + substitutions.add(""); + } if (protocolFieldFieldEntry.getPerformerPanel().useField()) { fullTable.add(new MappingField("Performer")); diff --git a/src/main/java/org/isatools/isacreator/formatmappingutility/ui/MappingUtilView.java b/src/main/java/org/isatools/isacreator/formatmappingutility/ui/MappingUtilView.java index aad8e96c..74699da6 100644 --- a/src/main/java/org/isatools/isacreator/formatmappingutility/ui/MappingUtilView.java +++ b/src/main/java/org/isatools/isacreator/formatmappingutility/ui/MappingUtilView.java @@ -108,6 +108,8 @@ public class MappingUtilView extends AbstractDataEntryEnvironment { private WorkingScreen workingProgressScreen; private Component lastPage; + private boolean mapToBlankFields = false; + private String[] fileColumns; private int reader; @@ -266,6 +268,21 @@ public void actionPerformed(ActionEvent actionEvent) { selectFilesContainer.add(selectMappingPanel); + final JCheckBox mapToBlankFieldsCheckbox = new JCheckBox("Do not remove blank fields?", false); + UIHelper.renderComponent(mapToBlankFieldsCheckbox, UIHelper.VER_11_BOLD, UIHelper.GREY_COLOR, false); + mapToBlankFieldsCheckbox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + mapToBlankFields = mapToBlankFieldsCheckbox.isSelected(); + } + }); + + JPanel removeBlanksContainer = new JPanel(new BorderLayout()); + removeBlanksContainer.setOpaque(false); + + removeBlanksContainer.add(mapToBlankFieldsCheckbox, BorderLayout.WEST); + + selectFilesContainer.add(removeBlanksContainer); + JPanel statusPanel = new JPanel(new GridLayout(1, 1)); statusPanel.setPreferredSize(new Dimension(400, 30)); final JLabel statusLab = UIHelper.createLabel("", UIHelper.VER_11_BOLD, UIHelper.RED_COLOR); @@ -599,7 +616,7 @@ public void mousePressed(MouseEvent mouseEvent) { Thread mappingThread = new Thread(new Runnable() { public void run() { - final MappingLogic mu = new MappingLogic(mappingTableGUI.getTreeInfo(), tableReference, readerToUse); + final MappingLogic mu = new MappingLogic(mappingTableGUI.getTreeInfo(), tableReference, readerToUse, mapToBlankFields); TableReferenceObject populatedTRO = mu.doMapping(fileName, readerToUse); diff --git a/src/main/java/org/isatools/isacreator/gs/gui/GSImportFilesMenu.java b/src/main/java/org/isatools/isacreator/gs/gui/GSImportFilesMenu.java index 3aa7eaf2..b0429bfc 100644 --- a/src/main/java/org/isatools/isacreator/gs/gui/GSImportFilesMenu.java +++ b/src/main/java/org/isatools/isacreator/gs/gui/GSImportFilesMenu.java @@ -6,6 +6,8 @@ import org.isatools.isacreator.autofilteringlist.ExtendedJList; import org.isatools.isacreator.common.ClearFieldUtility; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.gs.GSDataManager; import org.isatools.isacreator.gs.GSIdentityManager; import org.isatools.isacreator.gui.ISAcreator; @@ -20,6 +22,8 @@ import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; @@ -40,12 +44,12 @@ public class GSImportFilesMenu extends ImportFilesMenu { private static Logger log = Logger.getLogger(GSImportFilesMenu.class); @InjectedResource - private ImageIcon panelHeader, listImage, searchButton, searchButtonOver, - backButton, backButtonOver, loadButton, loadButtonOver, filterLeft, filterRight, searchButtonGS, searchButtonGSOver,gslistImage; + private ImageIcon panelHeader, listImage, + backButton, backButtonOver, filterLeft, filterRight, gslistImage; private JLabel back; private Container loadingImagePanel; - private JLabel chooseFromGS; + private JButton chooseFromGS; GSFileChooser gsFileChooser = null; GSDataManager gsDataManager = null; @@ -246,34 +250,6 @@ public void mouseExited(MouseEvent event) { return previousButtonPanel; } - @Override - public ImageIcon getSearchButton() { - return searchButton; - } - - @Override - public ImageIcon getSearchButtonOver() { - return searchButtonOver; - } - - public ImageIcon getSearchButtonGS() { - return searchButtonGS; - } - - public ImageIcon getSearchButtonGSOver() { - return searchButtonGSOver; - } - - @Override - public ImageIcon getLoadButton() { - return loadButton; - } - - @Override - public ImageIcon getLoadButtonOver() { - return loadButtonOver; - } - @Override public ImageIcon getLeftFilterImage() { return filterLeft; @@ -291,18 +267,11 @@ private Container createButtonPanel() { Box selectionPanel = Box.createHorizontalBox(); selectionPanel.setOpaque(false); - chooseFromElsewhere = new JLabel(getSearchButton(), - JLabel.LEFT); - chooseFromElsewhere.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { - - // precautionary measure to stop double execution of action... - + chooseFromElsewhere = new FlatButton(ButtonType.GREEN, "Open Another..."); + chooseFromElsewhere.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { if (timeButtonLastClicked != System.currentTimeMillis()) { - chooseFromElsewhere.setIcon(getSearchButton()); - if (jfc.showOpenDialog(ApplicationManager.getCurrentApplicationInstance()) == JFileChooser.APPROVE_OPTION) { String directory = jfc.getSelectedFile().toString(); File dirFile = new File(directory + File.separator); @@ -317,27 +286,13 @@ public void mousePressed(MouseEvent event) { timeButtonLastClicked = System.currentTimeMillis(); } } - - - public void mouseEntered(MouseEvent event) { - chooseFromElsewhere.setIcon(getSearchButtonOver()); - } - - public void mouseExited(MouseEvent event) { - chooseFromElsewhere.setIcon(getSearchButton()); - } }); - - chooseFromGS = new JLabel(getSearchButtonGS(), - JLabel.CENTER); - chooseFromGS.addMouseListener(new MouseAdapter() { - public void mousePressed(MouseEvent event) { - // precautionary measure to stop double execution of action... + chooseFromGS = new FlatButton(ButtonType.BLUE, "Load from GenomeSpace"); + chooseFromGS.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { if (timeButtonLastClicked != System.currentTimeMillis()) { - chooseFromGS.setIcon(getSearchButtonGS()); - gsFileChooser = new GSFileChooser(menu, GSFileChooser.GSFileChooserMode.OPEN); gsFileChooser.addPropertyChangeListener("selectedFileMetadata", new PropertyChangeListener() { @@ -351,33 +306,13 @@ public void propertyChange(PropertyChangeEvent event) { timeButtonLastClicked = System.currentTimeMillis(); } } - - - public void mouseEntered(MouseEvent event) { - chooseFromGS.setIcon(getSearchButtonGSOver()); - } - - public void mouseExited(MouseEvent event) { - chooseFromGS.setIcon(getSearchButtonGS()); - } }); - loadSelected = new JLabel(getLoadButton(), - JLabel.CENTER); - loadSelected.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { - loadSelected.setIcon(getLoadButton()); + loadSelected = new FlatButton(ButtonType.GREEN, "Load File"); + loadSelected.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { getSelectedFileAndLoad(); } - - public void mouseEntered(MouseEvent event) { - loadSelected.setIcon(getLoadButtonOver()); - } - - public void mouseExited(MouseEvent event) { - loadSelected.setIcon(getLoadButton()); - } }); selectionPanel.add(chooseFromElsewhere); diff --git a/src/main/java/org/isatools/isacreator/gui/AddStudyDialog.java b/src/main/java/org/isatools/isacreator/gui/AddStudyDialog.java index 7393096a..774fde6d 100755 --- a/src/main/java/org/isatools/isacreator/gui/AddStudyDialog.java +++ b/src/main/java/org/isatools/isacreator/gui/AddStudyDialog.java @@ -39,6 +39,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.common.CommonMouseAdapter; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.effects.components.RoundedJTextField; import org.isatools.isacreator.managers.ApplicationManager; import org.jdesktop.fuse.InjectedResource; @@ -46,11 +48,9 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import javax.swing.*; import javax.swing.border.EmptyBorder; +import javax.swing.border.LineBorder; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.awt.event.MouseEvent; +import java.awt.event.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -60,12 +60,10 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi public class AddStudyDialog extends JDialog { @InjectedResource - private ImageIcon addStudyHeader, addStudyButton, addStudyButtonOver, - closeButton, closeButtonOver; + private ImageIcon addStudyHeader; private DataEntryEnvironment dataEntryEnvironment; - private JLabel add; - private JLabel close; + private JButton add, close; private JLabel status; private JTextField name; private String type; @@ -151,48 +149,23 @@ public void actionPerformed(ActionEvent e) { private JPanel createButtonPanel() { JPanel buttonCont = new JPanel(new BorderLayout()); buttonCont.setBackground(UIHelper.BG_COLOR); + buttonCont.setBorder(new EmptyBorder(4,4,4,4)); - - add = new JLabel(addStudyButton, - JLabel.RIGHT); - add.addMouseListener(new CommonMouseAdapter() { - - public void mousePressed(MouseEvent event) { - super.mousePressed(event); - add.setIcon(addStudyButton); + add = new FlatButton(ButtonType.GREEN, "Add Study"); + add.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { addStudy(); } - - public void mouseEntered(MouseEvent event) { - super.mouseEntered(event); - add.setIcon(addStudyButtonOver); - } - - public void mouseExited(MouseEvent event) { - super.mouseExited(event); - add.setIcon(addStudyButton); - } }); - close = new JLabel(closeButton, - JLabel.LEFT); - close.addMouseListener(new CommonMouseAdapter() { - public void mousePressed(MouseEvent event) { - super.mousePressed(event); + + close = new FlatButton(ButtonType.RED, "Cancel"); + close.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { status.setText(""); hideMe(); } - - public void mouseEntered(MouseEvent event) { - super.mouseEntered(event); - close.setIcon(closeButtonOver); - } - - public void mouseExited(MouseEvent event) { - super.mouseExited(event); - close.setIcon(closeButton); - } }); buttonCont.add(close, BorderLayout.WEST); diff --git a/src/main/java/org/isatools/isacreator/gui/DataEntryEnvironment.java b/src/main/java/org/isatools/isacreator/gui/DataEntryEnvironment.java index f4e3677a..1835bf03 100755 --- a/src/main/java/org/isatools/isacreator/gui/DataEntryEnvironment.java +++ b/src/main/java/org/isatools/isacreator/gui/DataEntryEnvironment.java @@ -38,8 +38,10 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.gui; import com.explodingpixels.macwidgets.IAppWidgetFactory; +import org.apache.log4j.Logger; import org.isatools.isacreator.api.utils.SpreadsheetUtils; import org.isatools.isacreator.api.utils.StudyUtils; +import org.isatools.isacreator.common.CommonMouseAdapter; import org.isatools.isacreator.common.UIHelper; import org.isatools.isacreator.configuration.MappingObject; import org.isatools.isacreator.gui.help.Controller; @@ -71,13 +73,15 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Collection; import java.util.Enumeration; -import java.util.List; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** @@ -89,15 +93,16 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi public class DataEntryEnvironment extends AbstractDataEntryEnvironment implements TreeSelectionListener { + private Logger log = Logger.getLogger(DataEntryEnvironment.class.getName()); @InjectedResource private ImageIcon loading, visualizationIcon, visualizationIconOver, addStudyIcon, addStudyIconOver, removeStudyIcon, removeStudyIconOver, removeStudyIconInactive, navigationPanelHeader, informationPanelHeader, - warning_reducedFunctionality, removeStudyDialogImage, investigationHelp, studyHelp; + warning_reducedFunctionality, removeStudyDialogImage, investigationHelp, studyHelp, assayHelp, studySampleHelp, generalHelp; private DefaultMutableTreeNode overviewTreeRoot; private DefaultTreeModel overviewTreeModel; private Investigation investigation; - private JLabel statusInfo, visualization, removeStudyButton, addStudyButton; + private JLabel statusInfo, link, visualization, removeStudyButton, addStudyButton; private JTree overviewTree; private JPanel navigationPanel; @@ -133,8 +138,8 @@ public Assay addAssay(String measurementEndpoint, String techType, String assayPlatform, String assayName) { // get node DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) overviewTree.getLastSelectedPathComponent(); - TableReferenceObject tro = ConfigurationManager.selectTROForUserSelection(measurementEndpoint, - techType); + System.out.println("Getting assay for measurement " + measurementEndpoint + " and technology " + techType); + TableReferenceObject tro = ConfigurationManager.selectTROForUserSelection(measurementEndpoint, techType); if (tro != null) { if ((selectedNode != null) && selectedNode.getAllowsChildren() && @@ -167,7 +172,7 @@ public Assay addAssay(String measurementEndpoint, String techType, JOptionPane optionPane = new JOptionPane( "Problem occurred when attempting to add an Assay... " + "\n Please ensure assay names for a study are unique, \n and that you have entered text in the assay name field!", - JOptionPane.OK_OPTION); + JOptionPane.ERROR_MESSAGE); optionPane.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent propertyChangeEvent) { getParentFrame().hideSheet(); @@ -180,7 +185,7 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { JOptionPane optionPane = new JOptionPane( "An assay definition with the features you have selected doesn't exist... " + "\n Please ensure that the assay definition you have entered is correct!", - JOptionPane.OK_OPTION); + JOptionPane.ERROR_MESSAGE); optionPane.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent propertyChangeEvent) { getParentFrame().hideSheet(); @@ -265,8 +270,7 @@ public boolean addStudy(String studyName) { ApplicationManager.assignDataEntryToISASection(newStudy, ui); - Assay studySampleRec = new Assay("s_" + studyName + ".txt", - tro); + Assay studySampleRec = new Assay("s_" + studyName + ".txt", tro); ApplicationManager.assignDataEntryToISASection(studySampleRec, new AssaySpreadsheet(ui, tro)); @@ -563,6 +567,14 @@ public void mouseExited(MouseEvent event) { return navigationPanel; } + /** + * This is used by plugins, so do not delete. + * @return + */ + public DefaultMutableTreeNode getSelectedNodeInOverviewTree() { + return selectedNode; + } + private DefaultMutableTreeNode createStudyNode(Investigation inv, Study study) { if (ApplicationManager.getUserInterfaceForISASection(study) == null) { ApplicationManager.assignDataEntryToISASection(study, new StudyDataEntry(DataEntryEnvironment.this, study)); @@ -586,8 +598,8 @@ public Investigation getInvestigation() { return investigation; } - public List getOntologySources() { - return OntologyManager.getOntologiesUsed(); + public Collection getOntologySources() { + return OntologyManager.getOntologySources(); } public ISAcreator getParentFrame() { @@ -674,20 +686,57 @@ private void removeStudyFromTree() { } + /** + * Sets the status pane info pane. + * Also hides the link. + * + * @param info + */ public void setStatusPaneInfo(String info) { if (info != null && statusInfo != null) { statusInfo.setIcon(null); statusInfo.setText(info); statusInfo.setHorizontalAlignment(JLabel.LEFT); } + link.setVisible(false); } + /** + * Sets the status pane info pane. + * Also hides the link. + * + * @param icon + */ public void setStatusPaneInfo(Icon icon) { if (icon != null && statusInfo != null) { statusInfo.setIcon(icon); statusInfo.setHorizontalAlignment(JLabel.CENTER); statusInfo.setText(""); } + link.setVisible(false); + } + + public void setLink(final String uri) { + + // remove the old mouse listeners, otherwise you'll add a new one ever time, + // meaning that the browser will open up all links where this method was called. + for (MouseListener ml : link.getMouseListeners()) { + link.removeMouseListener(ml); + } + + // now we can add the new one :) + link.addMouseListener(new CommonMouseAdapter() { + @Override + public void mousePressed(MouseEvent mouseEvent) { + super.mousePressed(mouseEvent); + try { + Desktop.getDesktop().browse(new URI(uri)); + } catch (Exception e) { + log.error("Unable to open URL " + uri); + } + } + }); + link.setVisible(true); } /** @@ -702,7 +751,7 @@ private void setupWestPanel(Investigation investigation) { // setup status pane JPanel statusPane = new JPanel(new BorderLayout()); - statusPane.setPreferredSize(new Dimension(200, 200)); + statusPane.setPreferredSize(new Dimension(200, 220)); statusPane.setBackground(UIHelper.DARK_GREEN_COLOR); statusPane.setBorder(BorderFactory.createEmptyBorder()); @@ -717,13 +766,16 @@ private void setupWestPanel(Investigation investigation) { UIHelper.renderComponent(statusInfo, UIHelper.VER_12_PLAIN, UIHelper.DARK_GREEN_COLOR, UIHelper.BG_COLOR); statusInfo.setPreferredSize(new Dimension(175, 160)); + link = UIHelper.createLabel("View Resource", UIHelper.VER_10_BOLD, new Color(28, 117, 188)); + link.setVisible(false); + // setup tree westPanel.add(createNavPanel(investigation), BorderLayout.CENTER); JScrollPane scroller = new JScrollPane(statusInfo, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - scroller.setPreferredSize(new Dimension(180, 170)); + scroller.setPreferredSize(new Dimension(180, 180)); scroller.setBackground(UIHelper.BG_COLOR); scroller.getViewport().setBackground(UIHelper.BG_COLOR); scroller.setBorder(new EmptyBorder(1, 1, 1, 1)); @@ -732,15 +784,18 @@ private void setupWestPanel(Investigation investigation) { statusPane.add(scroller); + + JPanel linkContainer = new JPanel(new GridLayout(1, 1)); + linkContainer.setBackground(UIHelper.BG_COLOR); + linkContainer.add(link); + + statusPane.add(linkContainer, BorderLayout.SOUTH); + westPanel.add(statusPane, BorderLayout.SOUTH); add(westPanel, BorderLayout.WEST); } - public DefaultMutableTreeNode getSelectedNodeInOverviewTree() { - return selectedNode; - } - public void valueChanged(TreeSelectionEvent event) { if (overviewTree != null) { selectedNode = (DefaultMutableTreeNode) overviewTree.getLastSelectedPathComponent(); @@ -776,6 +831,7 @@ public void valueChanged(TreeSelectionEvent event) { overviewTree.expandPath(new TreePath(selectedNode.getNextNode().getPath())); } else if (nodeInfo instanceof Assay) { Assay assay = (Assay) nodeInfo; + setStatusPaneInfo(assayHelp); if (currentPage instanceof AssaySpreadsheet) { Spreadsheet spreadsheet = ((AssaySpreadsheet) currentPage).getSpreadsheet(); @@ -785,7 +841,10 @@ public void valueChanged(TreeSelectionEvent event) { } setCurrentPage(ApplicationManager.getUserInterfaceForISASection(assay)); - setStatusPaneInfo(""); + Spreadsheet spreadsheet = ((AssaySpreadsheet) ApplicationManager.getUserInterfaceForISASection(assay)).getSpreadsheet(); + if (spreadsheet.getSpreadsheetTitle().contains("Sample Definition")) { + setStatusPaneInfo(studySampleHelp); + } } else { setStatusPaneInfo(""); setCurrentPage(newSubmission); diff --git a/src/main/java/org/isatools/isacreator/gui/DataEntryForm.java b/src/main/java/org/isatools/isacreator/gui/DataEntryForm.java index 023cce15..291bbb7c 100755 --- a/src/main/java/org/isatools/isacreator/gui/DataEntryForm.java +++ b/src/main/java/org/isatools/isacreator/gui/DataEntryForm.java @@ -48,9 +48,9 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.configuration.FieldObject; import org.isatools.isacreator.configuration.RecommendedOntology; import org.isatools.isacreator.effects.components.RoundedJTextField; -import org.isatools.isacreator.filechooser.DirectoryFileList; -import org.isatools.isacreator.filechooser.FileChooserFile; import org.isatools.isacreator.filechooser.FileChooserUI; +import org.isatools.isacreator.gui.formelements.FieldTypes; +import org.isatools.isacreator.gui.formelements.SubForm; import org.isatools.isacreator.gui.formelements.SubFormField; import org.isatools.isacreator.gui.listeners.propertychange.DateChangedCancelledEvent; import org.isatools.isacreator.gui.listeners.propertychange.DateChangedEvent; @@ -71,10 +71,6 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Serializable; -import java.lang.reflect.Field; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -86,7 +82,12 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi */ public class DataEntryForm extends JLayeredPane implements Serializable { + public static final int SUBFORM_WIDTH = 300; + private DataEntryEnvironment dataEntryEnvironment; + protected Map fieldTypeToFieldContainer; + protected Map fieldTypeToSubform; + // this will house the translation between Comment aliases e.g. Publication Journal [c] to Comment[Publication Journal] protected Map aliasesToRealNames; @@ -95,11 +96,14 @@ public class DataEntryForm extends JLayeredPane implements Serializable { protected OrderedMap fieldDefinitions; - public DataEntryForm(DataEntryEnvironment dataEntryEnvironment) { - this.dataEntryEnvironment = dataEntryEnvironment; + public DataEntryForm() { + this(null); } - public DataEntryForm() { + public DataEntryForm(DataEntryEnvironment dataEntryEnvironment) { + this.dataEntryEnvironment = dataEntryEnvironment; + fieldTypeToFieldContainer = new HashMap(); + fieldTypeToSubform = new HashMap(); } public void update() { @@ -139,6 +143,19 @@ public void setDataEntryEnvironment(DataEntryEnvironment dataEntryEnvironment) { this.dataEntryEnvironment = dataEntryEnvironment; } + public JPanel getContainerForFieldType(FieldTypes type) { + return fieldTypeToFieldContainer.get(type); + } + + public SubForm getSubFormForFieldType(FieldTypes type) { + return fieldTypeToSubform.get(type); + } + + public void setSubFormForFieldType(FieldTypes type, SubForm subform) { + fieldTypeToSubform.put(type, subform); + } + + /** * Method to be overridden by subclasses for creating all fields */ @@ -299,7 +316,7 @@ public int translateDataTypeToSubFormFieldType(DataTypes dataType, boolean accep } - protected void generateAliases(Set fieldValues) { + public void generateAliases(Set fieldValues) { if (aliasesToRealNames == null) { aliasesToRealNames = new HashMap(); @@ -311,8 +328,6 @@ protected void generateAliases(Set fieldValues) { if (fieldName.toLowerCase().startsWith("comment")) { String alias = StringProcessing.extractQualifierFromField(fieldName) + " [c]"; - - System.out.println("Alias for " + fieldName + " is " + alias); aliasesToRealNames.put(alias, fieldName); realNamesToAliases.put(fieldName, alias); } @@ -329,6 +344,7 @@ protected void generateAliases(Set fieldValues) { */ public void addFieldsToPanel(Container containerToAddTo, InvestigationFileSection sectionToAddTo, OrderedMap fieldValues, DataEntryReferenceObject referenceObject) { + if (fieldDefinitions == null) { fieldDefinitions = new ListOrderedMap(); } @@ -439,7 +455,12 @@ private SubFormField createField(Set fieldsToIgnore, Set ontolog int fieldType = SubFormField.STRING; - if (ontologyFields.contains(fieldName)) { + boolean matchingOntologyDataType = true; + if(fieldDescriptor != null) { + matchingOntologyDataType = fieldDescriptor.getDatatype() == DataTypes.ONTOLOGY_TERM; + } + + if (ontologyFields.contains(fieldName) && matchingOntologyDataType) { fieldType = SubFormField.SINGLE_ONTOLOGY_SELECT; if (fieldDescriptor != null) { @@ -486,20 +507,16 @@ private SubFormField createField(Set fieldsToIgnore, Set ontolog * @return a string with the serialization of the ISASection */ protected String getISASectionAsString(String sectionTitle, List sectionToOutput) { - StringBuilder representation = new StringBuilder(); - representation.append(sectionTitle.toUpperCase().trim()).append("\n"); - if (sectionToOutput.size() > 0) { + if (sectionToOutput.size() > 0) { for (String fieldName : sectionToOutput.get(0).getFieldValues().keySet()) { representation.append(fieldName); - if (sectionToOutput.size() > 0) { representation.append("\t"); } - // now add the field values in int count = 0; for (ISASection section : sectionToOutput) { @@ -534,4 +551,11 @@ public void changedUpdate(DocumentEvent documentEvent) { } } + public int estimateSubformHeight(int numberOfFields) { + // assuming that the option height, table header height and field height are all similar. + int sectionHeight = 18; + return (sectionHeight * 2) + (numberOfFields * sectionHeight); + } + + } diff --git a/src/main/java/org/isatools/isacreator/gui/HistoricalSelectionGUI.java b/src/main/java/org/isatools/isacreator/gui/HistoricalSelectionGUI.java index 62a58ee0..2c630e9e 100644 --- a/src/main/java/org/isatools/isacreator/gui/HistoricalSelectionGUI.java +++ b/src/main/java/org/isatools/isacreator/gui/HistoricalSelectionGUI.java @@ -41,8 +41,9 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.autofilteringlist.ExtendedJList; import org.isatools.isacreator.autofilteringlist.FilterableListCellRenderer; import org.isatools.isacreator.common.ClearFieldUtility; -import org.isatools.isacreator.common.Globals; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.effects.FooterPanel; import org.isatools.isacreator.effects.HUDTitleBar; import org.isatools.isacreator.gui.formelements.FieldTypes; @@ -311,25 +312,16 @@ public void instantiatePanel() { // need button panel to allow for selection of terms, or to cancel/close JPanel buttonPanel = new JPanel(new BorderLayout()); + buttonPanel.setBorder(UIHelper.EMPTY_BORDER); buttonPanel.setBackground(UIHelper.BG_COLOR); - final JLabel okButton = new JLabel(Globals.OK_ICON, - JLabel.RIGHT); - okButton.setOpaque(false); - okButton.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton okButton = new FlatButton(ButtonType.GREEN, "Select"); + okButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { firePropertyChange("selectedTerms", "", "values selected"); } - - public void mouseEntered(MouseEvent event) { - okButton.setIcon(Globals.OK_OVER_ICON); - } - - public void mouseExited(MouseEvent event) { - okButton.setIcon(Globals.OK_ICON); - } }); + buttonPanel.add(okButton, BorderLayout.EAST); southPanel.add(buttonPanel); diff --git a/src/main/java/org/isatools/isacreator/gui/ISAcreator.java b/src/main/java/org/isatools/isacreator/gui/ISAcreator.java index dea23d34..ccdef14b 100755 --- a/src/main/java/org/isatools/isacreator/gui/ISAcreator.java +++ b/src/main/java/org/isatools/isacreator/gui/ISAcreator.java @@ -39,17 +39,17 @@ ISAcreator is a component of the ISA software suite (http://www.isa-tools.org) package org.isatools.isacreator.gui; import org.apache.log4j.Logger; - +import org.isatools.errorreporter.model.ErrorMessage; import org.isatools.isacreator.api.Authentication; import org.isatools.isacreator.archiveoutput.ArchiveOutputWindow; import org.isatools.isacreator.common.UIHelper; import org.isatools.isacreator.effects.AnimatableJFrame; import org.isatools.isacreator.effects.FooterPanel; import org.isatools.isacreator.effects.TitlePanel; +import org.isatools.isacreator.gs.GSSaveAction; +import org.isatools.isacreator.gui.io.exportisa.OutputISAFilesFromGUI; import org.isatools.isacreator.gui.menu.ISAcreatorMenu; import org.isatools.isacreator.gui.modeselection.Mode; -import org.isatools.isacreator.gui.io.exportisa.OutputISAFilesFromGUI; -import org.isatools.isacreator.io.UserProfile; import org.isatools.isacreator.io.UserProfileManager; import org.isatools.isacreator.managers.ApplicationManager; import org.isatools.isacreator.managers.ConfigurationManager; @@ -57,7 +57,6 @@ ISAcreator is a component of the ISA software suite (http://www.isa-tools.org) import org.isatools.isacreator.ontologiser.adaptors.InvestigationAdaptor; import org.isatools.isacreator.ontologiser.ui.OntologiserUI; import org.isatools.isacreator.ontologymanager.OntologyManager; -import org.isatools.isacreator.ontologymanager.common.OntologyTerm; import org.isatools.isacreator.plugins.MenuPluginTracker; import org.isatools.isacreator.plugins.OntologyPluginTracker; import org.isatools.isacreator.plugins.SpreadsheetPluginTracker; @@ -73,8 +72,6 @@ ISAcreator is a component of the ISA software suite (http://www.isa-tools.org) import org.jdesktop.fuse.InjectedResource; import org.jdesktop.fuse.ResourceInjector; import org.osgi.framework.BundleContext; -import org.isatools.errorreporter.model.ErrorMessage; -import org.isatools.isacreator.gs.GSSaveAction; import javax.swing.*; import javax.swing.Timer; @@ -598,7 +595,7 @@ public void mousePressed(MouseEvent mouseEvent) { options.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent mouseEvent) { - clearOntologySearchCache.setEnabled(OntologyManager.searchResultCache.size() > 0); + clearOntologySearchCache.setEnabled(OntologyManager.searchResultCacheSize() > 0); } }); @@ -782,8 +779,7 @@ private void saveProfilesAndGoToMain() { checkMenuRequired(); ISAcreatorProperties.setProperty(ISAcreatorProperties.CURRENT_ISATAB, ""); - - OntologyManager.clearReferencedOntologySources(); + OntologyManager.clearOntologyTerms(); } catch (Exception e) { @@ -1022,7 +1018,7 @@ public void actionPerformed(ActionEvent ae) { closeWindowTimer.start(); if (type != SAVE_ONLY) { - OntologyManager.clearReferencedOntologySources(); + OntologyManager.clearOntologyTerms(); } } else { // need to get a new reference from the user! diff --git a/src/main/java/org/isatools/isacreator/gui/InvestigationDataEntry.java b/src/main/java/org/isatools/isacreator/gui/InvestigationDataEntry.java index 16bd3242..90f44d01 100755 --- a/src/main/java/org/isatools/isacreator/gui/InvestigationDataEntry.java +++ b/src/main/java/org/isatools/isacreator/gui/InvestigationDataEntry.java @@ -39,12 +39,15 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import com.explodingpixels.macwidgets.IAppWidgetFactory; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.configuration.MappingObject; +import org.isatools.isacreator.gui.commentui.ContainerAddCommentGUI; +import org.isatools.isacreator.gui.commentui.SubFormAddCommentGUI; import org.isatools.isacreator.gui.formelements.*; import org.isatools.isacreator.gui.reference.DataEntryReferenceObject; import org.isatools.isacreator.io.exportisa.exportadaptors.ISASectionExportAdaptor; import org.isatools.isacreator.io.importisa.investigationproperties.InvestigationFileSection; -import org.isatools.isacreator.managers.ApplicationManager; import org.isatools.isacreator.managers.ConfigurationManager; import org.isatools.isacreator.model.*; import org.isatools.isacreator.spreadsheet.model.TableReferenceObject; @@ -55,6 +58,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import javax.swing.border.TitledBorder; import javax.swing.text.JTextComponent; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -71,8 +76,8 @@ public class InvestigationDataEntry extends DataEntryForm { private Investigation investigation; - private SubForm publicationsSubForm; - private SubForm contactsSubform; + + private JPanel investigationDetailsPanel; public InvestigationDataEntry(Investigation investigation, DataEntryEnvironment dep) { @@ -88,24 +93,23 @@ public InvestigationDataEntry(Investigation investigation, DataEntryEnvironment } - private void createInvestigationSectionFields() { JPanel container = new JPanel(new BorderLayout()); container.setBackground(UIHelper.BG_COLOR); - JPanel invDescPanel = new JPanel(); - invDescPanel.setLayout(new BoxLayout(invDescPanel, BoxLayout.PAGE_AXIS)); - UIHelper.renderComponent(invDescPanel, UIHelper.VER_12_PLAIN, UIHelper.DARK_GREEN_COLOR, UIHelper.BG_COLOR); - invDescPanel.setBorder(new TitledBorder( + investigationDetailsPanel = new JPanel(); + investigationDetailsPanel.setLayout(new BoxLayout(investigationDetailsPanel, BoxLayout.PAGE_AXIS)); + UIHelper.renderComponent(investigationDetailsPanel, UIHelper.VER_12_PLAIN, UIHelper.DARK_GREEN_COLOR, UIHelper.BG_COLOR); + investigationDetailsPanel.setBorder(new TitledBorder( UIHelper.GREEN_ROUNDED_BORDER, "investigation description", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.CENTER, UIHelper.VER_12_BOLD, UIHelper.DARK_GREEN_COLOR)); // create box to contain all the fields - Box fields = Box.createVerticalBox(); + Box investigationFields = Box.createVerticalBox(); // add a spacer to the layout - fields.add(Box.createVerticalStrut(5)); + investigationFields.add(Box.createVerticalStrut(5)); if (investigation.getReferenceObject() == null) { TableReferenceObject tro = @@ -116,19 +120,35 @@ private void createInvestigationSectionFields() { investigation.setReferenceObject(referenceObject); } - addFieldsToPanel(invDescPanel, InvestigationFileSection.INVESTIGATION_SECTION, investigation.getFieldValues(), investigation.getReferenceObject()); + addFieldsToPanel(investigationDetailsPanel, InvestigationFileSection.INVESTIGATION_SECTION, investigation.getFieldValues(), investigation.getReferenceObject()); - fields.add(invDescPanel); - fields.add(Box.createVerticalStrut(20)); - fields.add(createInvestigationPublicationSubForm()); - fields.add(Box.createVerticalStrut(20)); - fields.add(createInvestigationContactsSubForm()); - fields.add(Box.createVerticalStrut(20)); - fields.add(Box.createGlue()); + FlatButton addMoreFieldsButton = new FlatButton(ButtonType.GREEN, "+ Add more fields"); + addMoreFieldsButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + new ContainerAddCommentGUI(InvestigationDataEntry.this); + } + }); + + JPanel moreFieldsButtonContainer = new JPanel(new BorderLayout()); + moreFieldsButtonContainer.setBorder(UIHelper.EMPTY_BORDER); + moreFieldsButtonContainer.setOpaque(false); + moreFieldsButtonContainer.add(addMoreFieldsButton, BorderLayout.EAST); + + investigationFields.add(investigationDetailsPanel); + investigationFields.add(Box.createVerticalStrut(5)); + investigationFields.add(moreFieldsButtonContainer); + investigationFields.add(Box.createVerticalStrut(20)); + investigationFields.add(createInvestigationPublicationSubForm()); + investigationFields.add(getButtonForFieldAddition(FieldTypes.PUBLICATION)); + investigationFields.add(Box.createVerticalStrut(20)); + investigationFields.add(createInvestigationContactsSubForm()); + investigationFields.add(getButtonForFieldAddition(FieldTypes.CONTACT)); + investigationFields.add(Box.createVerticalStrut(20)); + investigationFields.add(Box.createGlue()); JPanel northPanel = new JPanel(new BorderLayout()); northPanel.setBackground(UIHelper.BG_COLOR); - northPanel.add(fields, BorderLayout.CENTER); + northPanel.add(investigationFields, BorderLayout.CENTER); JLabel header = new JLabel(panelHeader, JLabel.RIGHT); @@ -141,22 +161,47 @@ private void createInvestigationSectionFields() { containerScroller.setBorder(null); IAppWidgetFactory.makeIAppScrollPane(containerScroller); + containerScroller.getVerticalScrollBar().setUnitIncrement(16); add(containerScroller); } + private JPanel getButtonForFieldAddition(final FieldTypes type) { + FlatButton addFieldButton = new FlatButton(ButtonType.GREEN, String.format("+ New field to %s descriptors", type.toString())); + addFieldButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + new SubFormAddCommentGUI(InvestigationDataEntry.this, type); + } + }); + } + }); + + JPanel addFieldButtonContainer = new JPanel(new BorderLayout()); + addFieldButtonContainer.add(addFieldButton, BorderLayout.EAST); + + return addFieldButtonContainer; + } + /** * Create the Contacts subform for the definition of contacts in the Study form. * * @return - a JPanel containing the Contacts subform. */ private JPanel createInvestigationContactsSubForm() { + + JPanel contactContainer = new JPanel(new BorderLayout()); + contactContainer.setBackground(UIHelper.BG_COLOR); + List contactFields = new ArrayList(); - Set ontologyFields = investigation.getReferenceObject().getOntologyTerms(InvestigationFileSection.INVESTIGATION_CONTACTS_SECTION); + Set fieldList = investigation.getContacts().size() > 0 ? investigation.getContacts().iterator().next().getFieldValues().keySet() : investigation.getReferenceObject().getFieldsForSection(InvestigationFileSection.INVESTIGATION_CONTACTS_SECTION); + + Set ontologyFields = investigation.getReferenceObject().getOntologyTerms(fieldList); Set fieldsToIgnore = investigation.getReferenceObject().getFieldsToIgnore(); - for (String contactField : investigation.getReferenceObject().getFieldsForSection(InvestigationFileSection.INVESTIGATION_CONTACTS_SECTION)) { + for (String contactField : fieldList) { if (!investigation.getReferenceObject().getFieldDefinition(contactField).isHidden()) { SubFormField generatedField = generateSubFormField(fieldsToIgnore, ontologyFields, investigation, contactField); @@ -168,24 +213,33 @@ private JPanel createInvestigationContactsSubForm() { int numColsToAdd = (investigation.getContacts().size() == 0) ? 4 : investigation.getContacts().size(); - contactsSubform = new ContactSubForm(InvestigationFileSection.INVESTIGATION_CONTACTS_SECTION.toString(), FieldTypes.CONTACT, + SubForm contactsSubform = new ContactSubForm(InvestigationFileSection.INVESTIGATION_CONTACTS_SECTION.toString(), FieldTypes.CONTACT, contactFields, numColsToAdd, 300, 195, this); contactsSubform.createGUI(); - return contactsSubform; + contactContainer.add(contactsSubform); + + fieldTypeToFieldContainer.put(FieldTypes.CONTACT, contactContainer); + fieldTypeToSubform.put(FieldTypes.CONTACT, contactsSubform); + + return contactContainer; } private JPanel createInvestigationPublicationSubForm() { + JPanel publicationContainer = new JPanel(new BorderLayout()); + publicationContainer.setBackground(UIHelper.BG_COLOR); + List publicationFields = new ArrayList(); - Set ontologyFields = investigation.getReferenceObject().getOntologyTerms(InvestigationFileSection.INVESTIGATION_PUBLICATIONS_SECTION); - Set fieldsToIgnore = investigation.getReferenceObject().getFieldsToIgnore(); - for (String publicationField : investigation.getReferenceObject().getFieldsForSection(InvestigationFileSection.INVESTIGATION_PUBLICATIONS_SECTION)) { + Set fieldList = investigation.getPublications().size() > 0 ? investigation.getPublications().iterator().next().getFieldValues().keySet() : investigation.getReferenceObject().getFieldsForSection(InvestigationFileSection.INVESTIGATION_PUBLICATIONS_SECTION); + + Set ontologyFields = investigation.getReferenceObject().getOntologyTerms(fieldList); + Set fieldsToIgnore = investigation.getReferenceObject().getFieldsToIgnore(); + for (String publicationField : fieldList) { if (!investigation.getReferenceObject().getFieldDefinition(publicationField).isHidden()) { SubFormField generatedField = generateSubFormField(fieldsToIgnore, ontologyFields, investigation, publicationField); - if (generatedField != null) { publicationFields.add(generatedField); } @@ -196,11 +250,16 @@ private JPanel createInvestigationPublicationSubForm() { : investigation.getPublications() .size(); - publicationsSubForm = new PublicationSubForm(InvestigationFileSection.INVESTIGATION_PUBLICATIONS_SECTION.toString(), + SubForm publicationsSubForm = new PublicationSubForm(InvestigationFileSection.INVESTIGATION_PUBLICATIONS_SECTION.toString(), FieldTypes.PUBLICATION, publicationFields, numColsToAdd, 300, 125, this); publicationsSubForm.createGUI(); - return publicationsSubForm; + publicationContainer.add(publicationsSubForm); + + fieldTypeToFieldContainer.put(FieldTypes.PUBLICATION, publicationContainer); + fieldTypeToSubform.put(FieldTypes.PUBLICATION, publicationsSubForm); + + return publicationContainer; } public String toString() { @@ -216,11 +275,11 @@ public String toString() { } private void populateEmptySections() { - if(getInvestigation().getPublications().size() == 0) { + if (getInvestigation().getPublications().size() == 0) { getInvestigation().addPublication(new InvestigationPublication()); } - if(getInvestigation().getContacts().size() == 0) { + if (getInvestigation().getContacts().size() == 0) { getInvestigation().addContact(new InvestigationContact()); } } @@ -252,27 +311,14 @@ public void update() { investigation.getFieldValues().put(tmpFieldName, ((JComboBox) fieldDefinitions.get(fieldName)).getSelectedItem().toString()); } } - publicationsSubForm.update(); - contactsSubform.update(); - } - public void removeReferences() { - - publicationsSubForm.cleanupReferences(); - publicationsSubForm = null; - - contactsSubform.cleanupReferences(); - contactsSubform = null; - - getDataEntryEnvironment().removeAll(); - setDataEntryEnvironment(null); - - for (String s : investigation.getStudies().keySet()) { - Study tmpStudy = investigation.getStudies().get(s); - ApplicationManager.getUserInterfaceForISASection(tmpStudy).removeAll(); + for (SubForm form : fieldTypeToSubform.values()) { + form.update(); } - ApplicationManager.getUserInterfaceForISASection(investigation).removeAll(); - investigation = null; + } + + public JPanel getInvestigationDetailsPanel() { + return investigationDetailsPanel; } } diff --git a/src/main/java/org/isatools/isacreator/gui/SaveAsDialog.java b/src/main/java/org/isatools/isacreator/gui/SaveAsDialog.java index 49114ff6..b4cb9a3c 100644 --- a/src/main/java/org/isatools/isacreator/gui/SaveAsDialog.java +++ b/src/main/java/org/isatools/isacreator/gui/SaveAsDialog.java @@ -46,6 +46,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.gui; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.effects.components.RoundedJTextField; import org.jdesktop.fuse.InjectedResource; import org.jdesktop.fuse.ResourceInjector; @@ -69,8 +71,7 @@ public class SaveAsDialog extends JDialog { private RoundedJTextField fileName; @InjectedResource - private ImageIcon dialogHeader, closeButton, closeButtonOver, - saveSubmission, saveSubmissionOver; + private ImageIcon dialogHeader; public SaveAsDialog() { ResourceInjector.get("gui-package.style").inject(this); @@ -155,43 +156,22 @@ public void actionPerformed(ActionEvent e) { private void createAndAddSouthPanel() { // setup south panel with buttons and so forth :o) JPanel southPanel = new JPanel(new BorderLayout()); + southPanel.setBorder(UIHelper.EMPTY_BORDER); southPanel.setBackground(UIHelper.BG_COLOR); - final JLabel close = new JLabel(closeButton, - JLabel.LEFT); - close.setOpaque(false); - close.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton close = new FlatButton(ButtonType.RED, "Cancel"); + close.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { firePropertyChange("windowClosed", "", "none"); } - - public void mouseEntered(MouseEvent event) { - close.setIcon(closeButtonOver); - } - - public void mouseExited(MouseEvent event) { - close.setIcon(closeButton); - } }); - final JLabel save = new JLabel(saveSubmission, - JLabel.RIGHT); - save.setOpaque(false); - save.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton save = new FlatButton(ButtonType.GREEN, "Save"); + save.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { save(fileName.getText().trim()); } - - public void mouseEntered(MouseEvent event) { - save.setIcon(saveSubmissionOver); - } - - public void mouseExited(MouseEvent event) { - save.setIcon(saveSubmission); - } }); southPanel.add(close, BorderLayout.WEST); diff --git a/src/main/java/org/isatools/isacreator/gui/StudyDataEntry.java b/src/main/java/org/isatools/isacreator/gui/StudyDataEntry.java index 3189ffbd..90096722 100755 --- a/src/main/java/org/isatools/isacreator/gui/StudyDataEntry.java +++ b/src/main/java/org/isatools/isacreator/gui/StudyDataEntry.java @@ -44,7 +44,11 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.assayselection.AssaySelectionDialog; import org.isatools.isacreator.common.UIHelper; import org.isatools.isacreator.common.WeakPropertyChangeListener; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.configuration.MappingObject; +import org.isatools.isacreator.gui.commentui.ContainerAddCommentGUI; +import org.isatools.isacreator.gui.commentui.SubFormAddCommentGUI; import org.isatools.isacreator.gui.formelements.*; import org.isatools.isacreator.gui.formelements.assay.AssayInformationPanel; import org.isatools.isacreator.gui.formelements.assay.AssayInformationWriter; @@ -63,6 +67,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import javax.swing.border.TitledBorder; import javax.swing.text.JTextComponent; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; @@ -70,7 +76,6 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import java.util.*; import java.util.List; - /** * StudyDataEntry class * @@ -78,6 +83,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi */ public class StudyDataEntry extends DataEntryForm { + @InjectedResource private ImageIcon panelHeader, addRecordIcon, addRecordIconOver; @@ -88,16 +94,13 @@ public class StudyDataEntry extends DataEntryForm { private JPanel assayContainer; private AssaySelectionDialog assaySelectionUI; - private SubForm studyDesignSubform; - private SubForm studyPublicationsSubForm; - private SubForm contactSubForm; - private SubForm factorSubForm; - private SubForm protocolSubForm; + private RemoveAssayListener removeAssayListener = new RemoveAssayListener(); private ViewAssayListener viewAssayListener = new ViewAssayListener(); private AddAssayListener addAssayListener = new AddAssayListener(); private JPanel fieldContainer; + private Box studyDetailsFieldContainer; /** @@ -110,14 +113,18 @@ public StudyDataEntry(DataEntryEnvironment dataEntryEnvironment, Study study) { super(dataEntryEnvironment); ResourceInjector.get("gui-package.style").inject(this); this.study = study; + createGUI(); } public void createGUI() { + + Map> measToAllowedTechnologies = ConfigurationManager.getAllowedTechnologiesPerEndpoint(); assaySelectionUI = new AssaySelectionDialog(measToAllowedTechnologies); + generateAliases(study.getFieldValues().keySet()); instantiatePane(); createFields(); @@ -152,22 +159,48 @@ public void createFields() { Box subPanel = Box.createVerticalBox(); subPanel.add(Box.createVerticalStrut(20)); + FlatButton addMoreFieldsButton = new FlatButton(ButtonType.GREEN, "+ Add more fields"); + addMoreFieldsButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + new ContainerAddCommentGUI(StudyDataEntry.this); + } + }); + + JPanel moreFieldsButtonContainer = new JPanel(new BorderLayout()); + moreFieldsButtonContainer.setBorder(UIHelper.EMPTY_BORDER); + moreFieldsButtonContainer.setOpaque(false); + moreFieldsButtonContainer.add(addMoreFieldsButton, BorderLayout.EAST); + + subPanel.add(Box.createVerticalStrut(5)); + subPanel.add(moreFieldsButtonContainer); + subPanel.add(Box.createVerticalStrut(20)); subPanel.add(createStudyAssaySection()); subPanel.add(Box.createVerticalStrut(20)); subPanel.add(createStudyDesignSubForm()); + subPanel.add(Box.createVerticalStrut(5)); + + subPanel.add(getButtonForFieldAddition(FieldTypes.DESIGN)); subPanel.add(Box.createVerticalStrut(20)); subPanel.add(createStudyPublicationSubForm()); + subPanel.add(Box.createVerticalStrut(5)); + subPanel.add(getButtonForFieldAddition(FieldTypes.PUBLICATION)); subPanel.add(Box.createVerticalStrut(20)); subPanel.add(createStudyFactorsSubForm()); + subPanel.add(Box.createVerticalStrut(5)); + subPanel.add(getButtonForFieldAddition(FieldTypes.FACTOR)); subPanel.add(Box.createVerticalStrut(20)); subPanel.add(createStudyProtocolsSubForm()); + subPanel.add(Box.createVerticalStrut(5)); + subPanel.add(getButtonForFieldAddition(FieldTypes.PROTOCOL)); subPanel.add(Box.createVerticalStrut(20)); subPanel.add(createStudyContactsSubForm()); + subPanel.add(Box.createVerticalStrut(5)); + subPanel.add(getButtonForFieldAddition(FieldTypes.CONTACT)); subPanel.add(Box.createVerticalStrut(20)); fieldContainer.add(subPanel, BorderLayout.SOUTH); @@ -178,10 +211,30 @@ public void createFields() { containerScroller.setBorder(null); IAppWidgetFactory.makeIAppScrollPane(containerScroller); + containerScroller.getVerticalScrollBar().setUnitIncrement(16); add(containerScroller); } + private JPanel getButtonForFieldAddition(final FieldTypes type) { + FlatButton addStudyDesignFieldButton = new FlatButton(ButtonType.GREEN, String.format("+ New field to %s descriptors", type.toString())); + addStudyDesignFieldButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + new SubFormAddCommentGUI(StudyDataEntry.this, type); + } + }); + } + }); + + JPanel addStudyDesignFieldButtonContainer = new JPanel(new BorderLayout()); + addStudyDesignFieldButtonContainer.add(addStudyDesignFieldButton, BorderLayout.EAST); + + return addStudyDesignFieldButtonContainer; + } + + /** * Create the Assay definition section. * @@ -200,7 +253,7 @@ private Container createStudyAssaySection() { IAppWidgetFactory.makeIAppScrollPane(assayScroller); JPanel container = new JPanel(new BorderLayout()); - container.setPreferredSize(new Dimension(300, 180)); + container.setPreferredSize(new Dimension(SUBFORM_WIDTH, 180)); container.setBorder(new TitledBorder( UIHelper.GREEN_ROUNDED_BORDER, InvestigationFileSection.STUDY_ASSAYS.toString(), TitledBorder.DEFAULT_JUSTIFICATION, @@ -268,6 +321,10 @@ public List getDesigns() { * @return - a JPanel containing the Contacts subform. */ private JPanel createStudyContactsSubForm() { + JPanel studyContactContainer = new JPanel(new BorderLayout()); + studyContactContainer.setBackground(UIHelper.BG_COLOR); + + List contactFields = new ArrayList(); Set ontologyFields = study.getReferenceObject().getOntologyTerms(InvestigationFileSection.STUDY_CONTACTS); @@ -285,11 +342,17 @@ private JPanel createStudyContactsSubForm() { : study.getContacts() .size(); - contactSubForm = new ContactSubForm(InvestigationFileSection.STUDY_CONTACTS.toString(), FieldTypes.CONTACT, - contactFields, numColsToAdd, 300, 195, this); + SubForm contactSubForm = new ContactSubForm(InvestigationFileSection.STUDY_CONTACTS.toString(), FieldTypes.CONTACT, + contactFields, numColsToAdd, SUBFORM_WIDTH, estimateSubformHeight(contactFields.size()), this); contactSubForm.createGUI(); - return contactSubForm; + fieldTypeToFieldContainer.put(FieldTypes.CONTACT, studyContactContainer); + fieldTypeToSubform.put(FieldTypes.CONTACT, contactSubForm); + + studyContactContainer.add(contactSubForm); + + + return studyContactContainer; } @@ -310,12 +373,13 @@ private JPanel createStudyDesc() { TitledBorder.CENTER, UIHelper.VER_12_BOLD, UIHelper.DARK_GREEN_COLOR)); - Box verticalContainer = Box.createVerticalBox(); + studyDetailsFieldContainer = Box.createVerticalBox(); - addFieldsToPanel(verticalContainer, InvestigationFileSection.STUDY_SECTION, + addFieldsToPanel(studyDetailsFieldContainer, InvestigationFileSection.STUDY_SECTION, study.getFieldValues(), study.getReferenceObject()); - studyDesc.add(verticalContainer, BorderLayout.NORTH); + + studyDesc.add(studyDetailsFieldContainer, BorderLayout.NORTH); return studyDesc; } @@ -326,12 +390,17 @@ private JPanel createStudyDesc() { * @return - JPanel containing the Factor definition subform. */ private JPanel createStudyFactorsSubForm() { + JPanel studyFactorContainer = new JPanel(new BorderLayout()); + studyFactorContainer.setBackground(UIHelper.BG_COLOR); + List factorFields = new ArrayList(); - Set ontologyFields = study.getReferenceObject().getOntologyTerms(InvestigationFileSection.STUDY_FACTORS); + Set fieldList = study.getFactors().size() > 0 ? study.getFactors().iterator().next().getFieldValues().keySet() : study.getReferenceObject().getFieldsForSection(InvestigationFileSection.STUDY_FACTORS); + + Set ontologyFields = study.getReferenceObject().getOntologyTerms(fieldList); Set fieldsToIgnore = study.getReferenceObject().getFieldsToIgnore(); - for (String factorField : study.getReferenceObject().getFieldsForSection(InvestigationFileSection.STUDY_FACTORS)) { + for (String factorField : fieldList) { SubFormField generatedField = generateSubFormField(fieldsToIgnore, ontologyFields, study, factorField); @@ -344,12 +413,17 @@ private JPanel createStudyFactorsSubForm() { : study.getFactors() .size(); - factorSubForm = new FactorSubForm(InvestigationFileSection.STUDY_FACTORS.toString(), FieldTypes.FACTOR, factorFields, - numColsToAdd, 300, 80, this); + SubForm factorSubForm = new FactorSubForm(InvestigationFileSection.STUDY_FACTORS.toString(), FieldTypes.FACTOR, factorFields, + numColsToAdd, SUBFORM_WIDTH, estimateSubformHeight(factorFields.size()), this); factorSubForm.createGUI(); - return factorSubForm; + studyFactorContainer.add(factorSubForm); + + fieldTypeToFieldContainer.put(FieldTypes.FACTOR, studyFactorContainer); + fieldTypeToSubform.put(FieldTypes.FACTOR, factorSubForm); + + return studyFactorContainer; } /** @@ -358,15 +432,18 @@ private JPanel createStudyFactorsSubForm() { * @return JPanel containing the Protocol definition subform. */ private JPanel createStudyProtocolsSubForm() { + JPanel studyProtocolContainer = new JPanel(new BorderLayout()); + studyProtocolContainer.setBackground(UIHelper.BG_COLOR); + List protocolFields = new ArrayList(); - Set ontologyFields = study.getReferenceObject().getOntologyTerms(InvestigationFileSection.STUDY_PROTOCOLS); - Set fieldsToIgnore = study.getReferenceObject().getFieldsToIgnore(); + Set fieldList = study.getProtocols().size() > 0 ? study.getProtocols().iterator().next().getFieldValues().keySet() : study.getReferenceObject().getFieldsForSection(InvestigationFileSection.STUDY_PROTOCOLS); - for (String protocolField : study.getReferenceObject().getFieldsForSection(InvestigationFileSection.STUDY_PROTOCOLS)) { + Set ontologyFields = study.getReferenceObject().getOntologyTerms(fieldList); + Set fieldsToIgnore = study.getReferenceObject().getFieldsToIgnore(); + for (String protocolField : fieldList) { SubFormField generatedField = generateSubFormField(fieldsToIgnore, ontologyFields, study, protocolField); - if (generatedField != null) { protocolFields.add(generatedField); } @@ -374,11 +451,16 @@ private JPanel createStudyProtocolsSubForm() { int numColsToAdd = study.getProtocols().size() == 0 ? 1 : study.getProtocols().size(); - protocolSubForm = new ProtocolSubForm(InvestigationFileSection.STUDY_PROTOCOLS.toString(), FieldTypes.PROTOCOL, - protocolFields, numColsToAdd, 300, 180, this); + SubForm protocolSubForm = new ProtocolSubForm(InvestigationFileSection.STUDY_PROTOCOLS.toString(), FieldTypes.PROTOCOL, + protocolFields, numColsToAdd, SUBFORM_WIDTH, estimateSubformHeight(protocolFields.size()), this); protocolSubForm.createGUI(); - return protocolSubForm; + studyProtocolContainer.add(protocolSubForm); + + fieldTypeToFieldContainer.put(FieldTypes.PROTOCOL, studyProtocolContainer); + fieldTypeToSubform.put(FieldTypes.PROTOCOL, protocolSubForm); + + return studyProtocolContainer; } /** @@ -387,11 +469,19 @@ private JPanel createStudyProtocolsSubForm() { * @return JPanel containing the Publication definition subform */ private JPanel createStudyPublicationSubForm() { + + JPanel studyPublicationContainer = new JPanel(new BorderLayout()); + studyPublicationContainer.setBackground(UIHelper.BG_COLOR); + List publicationFields = new ArrayList(); - Set ontologyFields = study.getReferenceObject().getOntologyTerms(InvestigationFileSection.STUDY_PUBLICATIONS); + Set fieldList = study.getPublications().size() > 0 ? study.getPublications().iterator().next().getFieldValues().keySet() : study.getReferenceObject().getFieldsForSection(InvestigationFileSection.STUDY_PUBLICATIONS); + + Set ontologyFields = study.getReferenceObject().getOntologyTerms(fieldList); Set fieldsToIgnore = study.getReferenceObject().getFieldsToIgnore(); - for (String publicationField : study.getReferenceObject().getFieldsForSection(InvestigationFileSection.STUDY_PUBLICATIONS)) { + + + for (String publicationField : fieldList) { SubFormField generatedField = generateSubFormField(fieldsToIgnore, ontologyFields, study, publicationField); @@ -404,11 +494,17 @@ private JPanel createStudyPublicationSubForm() { : study.getPublications() .size(); - studyPublicationsSubForm = new PublicationSubForm(InvestigationFileSection.STUDY_PUBLICATIONS.toString(), FieldTypes.PUBLICATION, - publicationFields, numColsToAdd, 300, 120, this); + SubForm studyPublicationsSubForm = new PublicationSubForm(InvestigationFileSection.STUDY_PUBLICATIONS.toString(), FieldTypes.PUBLICATION, + publicationFields, numColsToAdd, SUBFORM_WIDTH, estimateSubformHeight(publicationFields.size()), this); studyPublicationsSubForm.createGUI(); - return studyPublicationsSubForm; + studyPublicationContainer.add(studyPublicationsSubForm); + + fieldTypeToFieldContainer.put(FieldTypes.PUBLICATION, studyPublicationContainer); + fieldTypeToSubform.put(FieldTypes.PUBLICATION, studyPublicationsSubForm); + + + return studyPublicationContainer; } /** @@ -418,13 +514,17 @@ private JPanel createStudyPublicationSubForm() { */ private JPanel createStudyDesignSubForm() { + JPanel studyDesignContainer = new JPanel(new BorderLayout()); + studyDesignContainer.setBackground(UIHelper.BG_COLOR); + List studyDesignFields = new ArrayList(); - Set ontologyFields = study.getReferenceObject().getOntologyTerms(InvestigationFileSection.STUDY_DESIGN_SECTION); - Set fieldsToIgnore = study.getReferenceObject().getFieldsToIgnore(); + Set fieldList = study.getStudyDesigns().size() > 0 ? study.getStudyDesigns().iterator().next().getFieldValues().keySet() : study.getReferenceObject().getFieldsForSection(InvestigationFileSection.STUDY_DESIGN_SECTION); - for (String studyDesignField : study.getReferenceObject().getFieldsForSection(InvestigationFileSection.STUDY_DESIGN_SECTION)) { + Set ontologyFields = study.getReferenceObject().getOntologyTerms(fieldList); + Set fieldsToIgnore = study.getReferenceObject().getFieldsToIgnore(); + for (String studyDesignField : fieldList) { SubFormField generatedField = generateSubFormField(fieldsToIgnore, ontologyFields, study, studyDesignField); if (generatedField != null) { @@ -435,10 +535,17 @@ private JPanel createStudyDesignSubForm() { int numColsToAdd = (study.getStudyDesigns().size() == 0) ? 2 : study.getStudyDesigns().size(); - studyDesignSubform = new StudyDesignSubForm(InvestigationFileSection.STUDY_DESIGN_SECTION.toString(), FieldTypes.DESIGN, - studyDesignFields, numColsToAdd, 300, 60, this); + SubForm studyDesignSubform = new StudyDesignSubForm(InvestigationFileSection.STUDY_DESIGN_SECTION.toString(), FieldTypes.DESIGN, + studyDesignFields, numColsToAdd, SUBFORM_WIDTH, estimateSubformHeight(studyDesignFields.size()), this); studyDesignSubform.createGUI(); - return studyDesignSubform; + + studyDesignContainer.add(studyDesignSubform); + + fieldTypeToFieldContainer.put(FieldTypes.DESIGN, studyDesignContainer); + fieldTypeToSubform.put(FieldTypes.DESIGN, studyDesignSubform); + + + return studyDesignContainer; } public synchronized Map getAssays() { @@ -514,9 +621,9 @@ private void removeUnusedProtocols(String assayRef) { for (String protocolRef : protocolRefsInAssay) { if (!protocolsPresentInOtherAssays.contains(protocolRef)) { // remove this protocol - int index = protocolSubForm.getColumnIndexForValue(0, protocolRef); + int index = fieldTypeToSubform.get(FieldTypes.PROTOCOL).getColumnIndexForValue(0, protocolRef); if (index != -1) { - protocolSubForm.removeItem(index); + fieldTypeToSubform.get(FieldTypes.PROTOCOL).removeItem(index); } } } @@ -562,23 +669,23 @@ public String toString() { } private void populateEmptySections() { - if(getStudy().getStudyDesigns().size() == 0) { + if (getStudy().getStudyDesigns().size() == 0) { getStudy().getStudyDesigns().add(new StudyDesign()); } - if(getStudy().getFactors().size() == 0) { + if (getStudy().getFactors().size() == 0) { getStudy().addFactor(new Factor()); } - if(getStudy().getProtocols().size() == 0) { + if (getStudy().getProtocols().size() == 0) { getStudy().addProtocol(new Protocol()); } - if(getStudy().getPublications().size() == 0) { + if (getStudy().getPublications().size() == 0) { getStudy().addPublication(new StudyPublication()); } - if(getStudy().getContacts().size() == 0) { + if (getStudy().getContacts().size() == 0) { getStudy().addContact(new StudyContact()); } } @@ -601,81 +708,22 @@ public void update() { } - studyDesignSubform.update(); - studyPublicationsSubForm.update(); - factorSubForm.update(); - protocolSubForm.update(); - contactSubForm.update(); + for (SubForm subform : fieldTypeToSubform.values()) { + subform.update(); + } } public void updateFactorsAndProtocols() { - factorSubForm.update(); - protocolSubForm.update(); + fieldTypeToSubform.get(FieldTypes.FACTOR).update(); + fieldTypeToSubform.get(FieldTypes.PROTOCOL).update(); } public void reformProtocols() { - protocolSubForm.reformPreviousContent(); + fieldTypeToSubform.get(FieldTypes.PROTOCOL).reformPreviousContent(); } public void reformFactors() { - factorSubForm.reformItems(); - } - - public void removeReferences() { - setDataEntryEnvironment(null); - - studyDesignSubform.cleanupReferences(); - studyDesignSubform = null; - - studyPublicationsSubForm.cleanupReferences(); - studyPublicationsSubForm = null; - - factorSubForm.cleanupReferences(); - factorSubForm = null; - - contactSubForm.cleanupReferences(); - contactSubForm = null; - - protocolSubForm.cleanupReferences(); - protocolSubForm = null; - - addRecord.getParent().removeAll(); - addRecord.removeMouseListener(addRecord.getMouseListeners()[0]); - addRecord = null; - - assayContainer.getParent().removeAll(); - assayContainer.removeAll(); - assayContainer = null; - - assaySelectionUI.removePropertyChangeListener("assaysChosen", new WeakPropertyChangeListener(addAssayListener)); - assaySelectionUI.removeAll(); - assaySelectionUI = null; - - addAssayListener = null; - viewAssayListener = null; - removeAssayListener = null; - - - ApplicationManager.getIsaSectionToDataEntryForm().get(study.getStudySample()).setDataEntryEnvironment(null); - - for (String assayReference : study.getAssays().keySet()) { - Assay assay = study.getAssays().get(assayReference); - ApplicationManager.removeISASectionAndDataEntryForm(assay); - } - - study.getAssays().clear(); - - - setDataEntryEnvironment(null); - study.setAssays(null); - // todo add in previous removals for cleanup. - study.setStudySamples(null); - study = null; - - fieldContainer.removeAll(); - ApplicationManager.clearUserInterfaceAssignments(); - - removeAll(); + fieldTypeToSubform.get(FieldTypes.FACTOR).reformItems(); } class RemoveAssayListener implements PropertyChangeListener { @@ -746,4 +794,9 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { } } + public Box getStudyDetailsFieldContainer() { + return studyDetailsFieldContainer; + } + + } diff --git a/src/main/java/org/isatools/isacreator/gui/TermSubstitutionGUI.java b/src/main/java/org/isatools/isacreator/gui/TermSubstitutionGUI.java index 866231b8..27bfd019 100644 --- a/src/main/java/org/isatools/isacreator/gui/TermSubstitutionGUI.java +++ b/src/main/java/org/isatools/isacreator/gui/TermSubstitutionGUI.java @@ -39,6 +39,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import com.explodingpixels.macwidgets.IAppWidgetFactory; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import javax.swing.*; import javax.swing.border.LineBorder; @@ -162,16 +164,9 @@ private void instantiatePanel() { JPanel buttonPanel = new JPanel(new GridLayout(1, 1)); buttonPanel.setBackground(UIHelper.BG_COLOR); - final JLabel okButton = new JLabel(new ImageIcon(getClass().getResource("/images/common/ok.png")), JLabel.RIGHT); - okButton.setOpaque(false); - - okButton.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { - // check to ensure that all terms have been replaced uniquely. - - // Hashmap containing the category for replacement and the terms selected. as soon as we come across a term added twice, it will be - // reported to the user... + JButton okButton = new FlatButton(ButtonType.GREY, "Ok"); + okButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { Map> uniquenessCheck = new HashMap>(); for (String category : categorySubstitutionPanels.keySet()) { @@ -192,14 +187,6 @@ public void mousePressed(MouseEvent event) { status.setText(""); firePropertyChange("substitutionComplete", "", getDefinedSubstitutions()); } - - public void mouseEntered(MouseEvent event) { - okButton.setIcon(new ImageIcon(getClass().getResource("/images/common/ok_over.png"))); - } - - public void mouseExited(MouseEvent event) { - okButton.setIcon(new ImageIcon(getClass().getResource("/images/common/ok.png"))); - } }); buttonPanel.add(okButton); diff --git a/src/main/java/org/isatools/isacreator/gui/commentui/AbstractAddCommentGUI.java b/src/main/java/org/isatools/isacreator/gui/commentui/AbstractAddCommentGUI.java new file mode 100644 index 00000000..f47a8056 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/gui/commentui/AbstractAddCommentGUI.java @@ -0,0 +1,384 @@ +package org.isatools.isacreator.gui.commentui; + +import com.explodingpixels.macwidgets.IAppWidgetFactory; +import org.apache.commons.collections15.OrderedMap; +import org.apache.log4j.Logger; +import org.isatools.isacreator.common.CommonMouseAdapter; +import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; +import org.isatools.isacreator.configuration.DataTypes; +import org.isatools.isacreator.configuration.FieldObject; +import org.isatools.isacreator.configuration.io.ConfigXMLParser; +import org.isatools.isacreator.effects.HUDTitleBar; +import org.isatools.isacreator.effects.components.RoundedJTextField; +import org.isatools.isacreator.managers.ApplicationManager; +import org.isatools.isacreator.spreadsheet.model.TableReferenceObject; + +import javax.swing.*; +import javax.swing.border.EmptyBorder; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.List; + + +public abstract class AbstractAddCommentGUI extends JFrame { + + public static final String CUSTOM = "custom"; + public static final int WINDOW_WIDTH = 600; + public static final int WINDOW_HEIGHT = 500; + private JPanel swappableContainer; + + protected static Map templateToFields; + private List labels; + private List selectedFieldComponents; + private Timer timer; + + private static Logger log = Logger.getLogger(AbstractAddCommentGUI.class.getName()); + + static { + templateToFields = new HashMap(); + + + File fieldTemplateDirectory = new File("ProgramData/field_templates/"); + if (fieldTemplateDirectory.exists()) { + ConfigXMLParser parser = new ConfigXMLParser(fieldTemplateDirectory.getAbsolutePath()); + parser.loadConfiguration(); + + for (TableReferenceObject tro : parser.getTables()) { + templateToFields.put(tro.getTableName(), tro); + } + } else { + log.info("No field_templates directory in Program data directory, so ISAcreator hasn't loaded any field templates."); + } + } + + public AbstractAddCommentGUI() { + labels = new ArrayList(); + createGUI(); + } + + private void createGUI() { + setUndecorated(true); + setLayout(new BorderLayout()); + setAlwaysOnTop(true); + setBackground(new Color(248, 248, 249)); + setPreferredSize(new Dimension(WINDOW_WIDTH, WINDOW_HEIGHT)); + ((JComponent) getContentPane()).setBorder(UIHelper.EMPTY_BORDER); + addTitlePanel(); + addSidePanel(); + addCentralPanel(); + swapContainers(getPredefinedCommentsInterface(CUSTOM)); + pack(); + setLocationRelativeTo(ApplicationManager.getCurrentApplicationInstance()); + setVisible(true); + } + + private void addTitlePanel() { + HUDTitleBar titleBar = new HUDTitleBar(null, null); + add(titleBar, BorderLayout.NORTH); + titleBar.installListeners(); + } + + private void addSidePanel() { + JPanel sidePanel = new JPanel(new BorderLayout()); + + sidePanel.setPreferredSize(new Dimension(175, 200)); + sidePanel.setBackground(UIHelper.BG_COLOR); + sidePanel.setBorder(UIHelper.EMPTY_BORDER); + + Container sidePanelOptions = new JPanel(); + sidePanelOptions.setLayout(new BoxLayout(sidePanelOptions, BoxLayout.PAGE_AXIS)); + sidePanelOptions.setBackground(UIHelper.BG_COLOR); + + sidePanelOptions.add(UIHelper.createLabel("Add Field(s)", UIHelper.VER_12_BOLD, UIHelper.DARK_GREEN_COLOR)); + sidePanelOptions.add(Box.createVerticalStrut(5)); + sidePanelOptions.add(new JSeparator()); + sidePanelOptions.add(Box.createVerticalStrut(15)); + + sidePanelOptions.add(UIHelper.createLabel("Custom Field", UIHelper.VER_11_BOLD, UIHelper.LIGHT_GREY_COLOR)); + sidePanelOptions.add(Box.createVerticalStrut(5)); + + JLabel addCustomCommentOption = UIHelper.createLabel("\t\t Add Custom Field", UIHelper.VER_10_BOLD, UIHelper.LIGHT_GREEN_COLOR); + labels.add(addCustomCommentOption); + addCustomCommentOption.addMouseListener(new CommonMouseAdapter() { + @Override + public void mousePressed(MouseEvent mouseEvent) { + super.mousePressed(mouseEvent); + resetLabelStyle(); + ((JComponent) mouseEvent.getSource()).setForeground(UIHelper.LIGHT_GREEN_COLOR); + swapContainers(getPredefinedCommentsInterface(CUSTOM)); + } + + @Override + public void mouseEntered(MouseEvent mouseEvent) { + super.mouseEntered(mouseEvent); + } + + @Override + public void mouseExited(MouseEvent mouseEvent) { + super.mouseExited(mouseEvent); + } + }); + + sidePanelOptions.add(addCustomCommentOption); + + sidePanelOptions.add(Box.createVerticalStrut(15)); + + sidePanelOptions.add(UIHelper.createLabel("Predefined Fields", UIHelper.VER_11_BOLD, UIHelper.LIGHT_GREY_COLOR)); + sidePanelOptions.add(Box.createVerticalStrut(5)); + + for (final String commentListTemplateName : templateToFields.keySet()) { + JLabel addTemplateComments = UIHelper.createLabel(String.format("\t\t %s Fields", commentListTemplateName), UIHelper.VER_10_BOLD, UIHelper.DARK_GREEN_COLOR); + labels.add(addTemplateComments); + addTemplateComments.addMouseListener(new CommonMouseAdapter() { + @Override + public void mousePressed(MouseEvent mouseEvent) { + super.mousePressed(mouseEvent); + resetLabelStyle(); + ((JComponent) mouseEvent.getSource()).setForeground(UIHelper.LIGHT_GREEN_COLOR); + swapContainers(getPredefinedCommentsInterface(commentListTemplateName)); + } + + @Override + public void mouseEntered(MouseEvent mouseEvent) { + super.mouseEntered(mouseEvent); + } + + @Override + public void mouseExited(MouseEvent mouseEvent) { + super.mouseExited(mouseEvent); + } + }); + sidePanelOptions.add(addTemplateComments); + } + + sidePanel.add(sidePanelOptions, BorderLayout.NORTH); + + add(sidePanel, BorderLayout.WEST); + + } + + private void resetLabelStyle() { + for (JLabel label : labels) { + label.setForeground(UIHelper.DARK_GREEN_COLOR); + } + } + + private void addCentralPanel() { + swappableContainer = new JPanel(); + swappableContainer.setBorder(UIHelper.EMPTY_BORDER); + swappableContainer.setBackground(UIHelper.BG_COLOR); + + add(swappableContainer, BorderLayout.CENTER); + } + + private void swapContainers(Container newContainer) { + if (newContainer != null) { + swappableContainer.removeAll(); + swappableContainer.add(newContainer); + swappableContainer.repaint(); + swappableContainer.validate(); + } + } + + + private JPanel getPredefinedCommentsInterface(final String templateName) { + + if (templateName.equals(CUSTOM)) { + return getAddCustomPanel(); + } + + selectedFieldComponents = new ArrayList(); + + JPanel panel = new JPanel(new BorderLayout()); + panel.setBackground(UIHelper.BG_COLOR); + panel.add(UIHelper.createLabel(String.format("Add %s fields to Interface", templateName)), BorderLayout.NORTH); + + Box fields = Box.createVerticalBox(); + int addedFieldsCount = 0; + for (String fieldName : templateToFields.get(templateName).getFieldLookup().keySet()) { + if (isFieldAllowedInSection(templateName, fieldName)) { + final JPanel field = new JPanel(new GridLayout(1, 1)); + field.setBackground(UIHelper.BG_COLOR); + + final JCheckBox checkBox = new JCheckBox(fieldName, false); + UIHelper.renderComponent(checkBox, UIHelper.VER_10_PLAIN, UIHelper.GREY_COLOR, false); + + checkBox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + JCheckBox source = (JCheckBox) actionEvent.getSource(); + + if (source.isSelected()) { + selectedFieldComponents.add(source); + } else { + if (selectedFieldComponents.contains(source)) { + selectedFieldComponents.remove(source); + } + } + } + }); + if (!okToAddField(fieldName)) checkBox.setEnabled(false); + field.add(checkBox); + + fields.add(field); + + addedFieldsCount++; + } + } + + if (addedFieldsCount == 0) { + fields.add(UIHelper.createLabel("No available predefined fields for the selected section.", UIHelper.VER_10_BOLD, UIHelper.LIGHT_GREY_COLOR)); + } + + JPanel fieldContainer = new JPanel(new BorderLayout()); + fieldContainer.setBackground(UIHelper.BG_COLOR); + fieldContainer.add(fields, BorderLayout.NORTH); + + JScrollPane scrollPane = new JScrollPane(fieldContainer, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + IAppWidgetFactory.makeIAppScrollPane(scrollPane); + panel.setPreferredSize(new Dimension(300, 400)); + scrollPane.setBorder(new EmptyBorder(30, 0, 0, 0)); + + panel.add(scrollPane, BorderLayout.CENTER); + + // only add a button if we have fields to add to it. + if (addedFieldsCount > 0) { + final JPanel buttonContainer = new JPanel(new BorderLayout()); + buttonContainer.setOpaque(false); + + final JLabel fieldAddStatus = UIHelper.createLabel("", UIHelper.VER_10_BOLD, UIHelper.GREY_COLOR); + buttonContainer.add(fieldAddStatus, BorderLayout.WEST); + + FlatButton button = new FlatButton(ButtonType.GREEN, "Add Field(s)"); + button.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + + boolean errors = false; + int error_count = 0; + + if (selectedFieldComponents.size() > 0) { + + for (JCheckBox fieldToAdd : selectedFieldComponents) { + if (fieldToAdd.isEnabled() && okToAddField(fieldToAdd.getText())) { + addFieldsToDisplay(templateToFields.get(templateName).getFieldByName(fieldToAdd.getText())); + fieldToAdd.setSelected(false); + fieldToAdd.setEnabled(false); + + } else { + errors = true; + error_count++; + } + } + + selectedFieldComponents.clear(); + + fieldAddStatus.setText(errors ? String.format("%d fields already exist...", error_count) : "Field added successfully!"); + fieldAddStatus.setForeground(errors ? UIHelper.RED_COLOR : UIHelper.GREY_COLOR); + } else { + fieldAddStatus.setText("No fields have been selected!"); + } + + timer = new Timer(3000, new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + fieldAddStatus.setText(""); + fieldAddStatus.setForeground(UIHelper.GREY_COLOR); + timer.stop(); + + } + }); + timer.start(); + } + }); + buttonContainer.add(button, BorderLayout.EAST); + panel.add(buttonContainer, BorderLayout.SOUTH); + } + + return panel; + } + + private JPanel getAddCustomPanel() { + JPanel panel = new JPanel(new BorderLayout()); + panel.setPreferredSize(new Dimension(300, 400)); + panel.setBackground(UIHelper.BG_COLOR); + panel.add(UIHelper.createLabel("Add Custom Field to Interface"), BorderLayout.NORTH); + + JPanel fieldPanel = new JPanel(new BorderLayout()); + fieldPanel.setBorder(new EmptyBorder(30, 0, 0, 0)); + fieldPanel.setBackground(UIHelper.BG_COLOR); + + final JPanel field = new JPanel(new GridLayout(1, 3)); + field.setBackground(UIHelper.BG_COLOR); + + field.add(UIHelper.createLabel("Field name")); + + final RoundedJTextField fieldName = new RoundedJTextField(20); + field.add(fieldName); + + final JComboBox fieldType = new JComboBox(new String[]{"String", "Ontology term"}); + field.add(fieldType); + + fieldPanel.add(field, BorderLayout.NORTH); + + panel.add(fieldPanel, BorderLayout.CENTER); + + final JPanel buttonContainer = new JPanel(new BorderLayout()); + buttonContainer.setOpaque(false); + + final JLabel fieldAddStatus = UIHelper.createLabel("", UIHelper.VER_10_BOLD, UIHelper.GREY_COLOR); + buttonContainer.add(fieldAddStatus, BorderLayout.WEST); + + FlatButton button = new FlatButton(ButtonType.GREEN, "Add Field"); + button.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + if (!fieldName.getText().isEmpty()) { + String fieldNameAsComment = transformFieldNameToComment(fieldName.getText()); + if (okToAddField(fieldNameAsComment)) { + addFieldsToDisplay(new FieldObject(fieldNameAsComment, "", + DataTypes.resolveDataType(fieldType.getSelectedItem().toString()), "", false, false, false)); + fieldAddStatus.setText("Field added successfully!"); + } else { + fieldAddStatus.setForeground(UIHelper.RED_COLOR); + fieldAddStatus.setText("Field not added. Already exists!"); + } + } else { + fieldAddStatus.setForeground(UIHelper.RED_COLOR); + fieldAddStatus.setText("Please enter a value!"); + } + timer = new Timer(3000, new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + fieldAddStatus.setText(""); + fieldAddStatus.setForeground(UIHelper.GREY_COLOR); + timer.stop(); + + } + }); + timer.start(); + } + }); + + + buttonContainer.add(button, BorderLayout.EAST); + panel.add(buttonContainer, BorderLayout.SOUTH); + + return panel; + } + + private String transformFieldNameToComment(String fieldName) { + return "Comment [" + fieldName + "]"; + } + + public abstract void addFieldsToDisplay(FieldObject fieldObject); + + public abstract boolean okToAddField(String fieldName); + + public abstract boolean isFieldAllowedInSection(String template, String fieldName); + +} diff --git a/src/main/java/org/isatools/isacreator/gui/commentui/ContainerAddCommentGUI.java b/src/main/java/org/isatools/isacreator/gui/commentui/ContainerAddCommentGUI.java new file mode 100644 index 00000000..1c5264e9 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/gui/commentui/ContainerAddCommentGUI.java @@ -0,0 +1,77 @@ +package org.isatools.isacreator.gui.commentui; + +import org.apache.commons.collections15.OrderedMap; +import org.apache.commons.collections15.map.SingletonMap; +import org.isatools.isacreator.configuration.FieldObject; +import org.isatools.isacreator.gui.DataEntryForm; +import org.isatools.isacreator.gui.InvestigationDataEntry; +import org.isatools.isacreator.gui.StudyDataEntry; +import org.isatools.isacreator.io.importisa.investigationproperties.InvestigationFileSection; + +import javax.swing.*; + +public class ContainerAddCommentGUI extends AbstractAddCommentGUI { + + private T entryEnvironment; + + public ContainerAddCommentGUI(T entryEnvironment) { + super(); + this.entryEnvironment = entryEnvironment; + } + + @Override + public void addFieldsToDisplay(final FieldObject field) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + OrderedMap fieldValues = new SingletonMap(field.getFieldName(), ""); + entryEnvironment.generateAliases(fieldValues.keySet()); + + if (entryEnvironment instanceof InvestigationDataEntry) { + entryEnvironment.getInvestigation().getReferenceObject().addFieldObject(field); + entryEnvironment.getInvestigation().getFieldValues().putAll(fieldValues); + + entryEnvironment.addFieldsToPanel( + ((InvestigationDataEntry) entryEnvironment).getInvestigationDetailsPanel(), + InvestigationFileSection.INVESTIGATION_SECTION, + fieldValues, + entryEnvironment.getInvestigation().getReferenceObject() + ); + } else { + entryEnvironment.getStudy().getReferenceObject().addFieldObject(field); + entryEnvironment.getStudy().getFieldValues().putAll(fieldValues); + + entryEnvironment.addFieldsToPanel( + ((StudyDataEntry) entryEnvironment).getStudyDetailsFieldContainer(), + InvestigationFileSection.STUDY_SECTION, + fieldValues, + entryEnvironment.getStudy().getReferenceObject() + ); + } + + + entryEnvironment.repaint(); + entryEnvironment.validate(); + } + }); + + } + + @Override + public boolean okToAddField(String fieldName) { + if (entryEnvironment instanceof InvestigationDataEntry) { + return !entryEnvironment.getInvestigation().getFieldValues().containsKey(fieldName); + } else { + return !entryEnvironment.getStudy().getFieldValues().containsKey(fieldName); + } + } + + @Override + public boolean isFieldAllowedInSection(String template, String fieldName) { + if (entryEnvironment instanceof InvestigationDataEntry) { + return templateToFields.get(template).getFieldByName(fieldName).getSection().equals(InvestigationFileSection.INVESTIGATION_SECTION.toString()); + } else { + return templateToFields.get(template).getFieldByName(fieldName).getSection().equals(InvestigationFileSection.STUDY_SECTION.toString()); + } + } + +} diff --git a/src/main/java/org/isatools/isacreator/gui/commentui/SubFormAddCommentGUI.java b/src/main/java/org/isatools/isacreator/gui/commentui/SubFormAddCommentGUI.java new file mode 100644 index 00000000..47319324 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/gui/commentui/SubFormAddCommentGUI.java @@ -0,0 +1,126 @@ +package org.isatools.isacreator.gui.commentui; + +import org.isatools.isacreator.configuration.DataTypes; +import org.isatools.isacreator.configuration.FieldObject; +import org.isatools.isacreator.gui.DataEntryForm; +import org.isatools.isacreator.gui.InvestigationDataEntry; +import org.isatools.isacreator.gui.StudyDataEntry; +import org.isatools.isacreator.gui.formelements.*; +import org.isatools.isacreator.io.importisa.investigationproperties.InvestigationFileSection; + +import javax.swing.*; +import java.util.List; + +public class SubFormAddCommentGUI extends AbstractAddCommentGUI { + + private T parent; + private FieldTypes fieldType; + + public SubFormAddCommentGUI(T parent, FieldTypes fieldType) { + super(); + this.parent = parent; + this.fieldType = fieldType; + } + + @Override + public void addFieldsToDisplay(final FieldObject fieldObject) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + + List updatedFields = parent.getSubFormForFieldType(fieldType).getSubFormFields(); + updatedFields.add(new SubFormField(fieldObject.getFieldName(), fieldObject.getDatatype() == DataTypes.STRING ? SubFormField.STRING : SubFormField.SINGLE_ONTOLOGY_SELECT)); + parent.getContainerForFieldType(fieldType).removeAll(); + parent.getContainerForFieldType(fieldType).revalidate(); + + int existingRecordSize; + String title = parent.getSubFormForFieldType(fieldType).getTitle(); + + SubForm subform; + + switch (fieldType) { + case DESIGN: + existingRecordSize = parent.getStudy().getStudyDesigns().size(); + subform = new StudyDesignSubForm(title, fieldType, + updatedFields, (existingRecordSize == 0) ? 2 : existingRecordSize, + DataEntryForm.SUBFORM_WIDTH, parent.estimateSubformHeight(updatedFields.size()), parent); + break; + case FACTOR: + existingRecordSize = parent.getStudy().getFactors().size(); + subform = new FactorSubForm(title, fieldType, + updatedFields, (existingRecordSize == 0) ? 2 : existingRecordSize, + DataEntryForm.SUBFORM_WIDTH, parent.estimateSubformHeight(updatedFields.size()), parent); + break; + case PROTOCOL: + existingRecordSize = parent.getStudy().getProtocols().size(); + subform = new ProtocolSubForm(title, fieldType, + updatedFields, (existingRecordSize == 0) ? 2 : existingRecordSize, + DataEntryForm.SUBFORM_WIDTH, parent.estimateSubformHeight(updatedFields.size()), parent); + break; + case CONTACT: + + existingRecordSize = parent instanceof StudyDataEntry ? parent.getStudy().getContacts().size() : parent.getInvestigation().getContacts().size(); + subform = new ContactSubForm(title, fieldType, + updatedFields, (existingRecordSize == 0) ? 2 : existingRecordSize, + DataEntryForm.SUBFORM_WIDTH, parent.estimateSubformHeight(updatedFields.size()), parent); + + break; + case PUBLICATION: + + existingRecordSize = parent instanceof StudyDataEntry ? parent.getStudy().getPublications().size() : parent.getInvestigation().getPublications().size(); + subform = new PublicationSubForm(title, fieldType, + updatedFields, (existingRecordSize == 0) ? 2 : existingRecordSize, + DataEntryForm.SUBFORM_WIDTH, parent.estimateSubformHeight(updatedFields.size()), parent); + break; + default: + subform = null; + break; + } + + + if (subform != null) subform.createGUI(); + + parent.setSubFormForFieldType(fieldType, subform); + + parent.getContainerForFieldType(fieldType).add(subform); + parent.getContainerForFieldType(fieldType).repaint(); + parent.getContainerForFieldType(fieldType).revalidate(); + + } + }); + } + + @Override + public boolean okToAddField(String fieldName) { + for (SubFormField field : parent.getSubFormForFieldType(fieldType).getSubFormFields()) { + if (field.getFieldName().equals(fieldName)) { + return false; + } + } + return true; + } + + @Override + public boolean isFieldAllowedInSection(String template, String fieldName) { + return templateToFields.get(template).getFieldByName(fieldName).getSection().equals(getInvestigationFileSectionFromFieldType(fieldType).toString()); + } + + private InvestigationFileSection getInvestigationFileSectionFromFieldType(FieldTypes type) { + switch (type) { + case DESIGN: + return InvestigationFileSection.STUDY_DESIGN_SECTION; + case FACTOR: + return InvestigationFileSection.STUDY_FACTORS; + case PROTOCOL: + return InvestigationFileSection.STUDY_PROTOCOLS; + case CONTACT: + return parent instanceof StudyDataEntry ? InvestigationFileSection.STUDY_CONTACTS : InvestigationFileSection.INVESTIGATION_CONTACTS_SECTION; + case PUBLICATION: + return parent instanceof StudyDataEntry ? InvestigationFileSection.STUDY_PUBLICATIONS : InvestigationFileSection.INVESTIGATION_PUBLICATIONS_SECTION; + default: + return InvestigationFileSection.INVESTIGATION_SECTION; + + } + } + + +} diff --git a/src/main/java/org/isatools/isacreator/gui/formelements/AssaySubForm.java b/src/main/java/org/isatools/isacreator/gui/formelements/AssaySubForm.java index b60005bc..7a3c8866 100644 --- a/src/main/java/org/isatools/isacreator/gui/formelements/AssaySubForm.java +++ b/src/main/java/org/isatools/isacreator/gui/formelements/AssaySubForm.java @@ -109,6 +109,7 @@ public boolean doAddColumn(DefaultTableModel model, TableColumn col) { assayName += ".txt"; } + assayName = assayName.replaceAll("\\s+","_"); tmpAssay.setAssayReference(assayName); if (dataEntryForm.getDataEntryEnvironment() @@ -132,7 +133,7 @@ public boolean doAddColumn(DefaultTableModel model, TableColumn col) { JOptionPane optionPane = new JOptionPane( "Problem occurred when attempting to add an Assay... " + "\n All fields for the assay definition are not complete!", - JOptionPane.OK_OPTION); + JOptionPane.ERROR_MESSAGE); UIHelper.applyOptionPaneBackground(optionPane, UIHelper.BG_COLOR); optionPane.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { diff --git a/src/main/java/org/isatools/isacreator/gui/formelements/ContactSubForm.java b/src/main/java/org/isatools/isacreator/gui/formelements/ContactSubForm.java index 2434373d..d76fc34b 100644 --- a/src/main/java/org/isatools/isacreator/gui/formelements/ContactSubForm.java +++ b/src/main/java/org/isatools/isacreator/gui/formelements/ContactSubForm.java @@ -37,6 +37,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.gui.formelements; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.gui.DataEntryForm; import org.isatools.isacreator.gui.InvestigationDataEntry; import org.isatools.isacreator.gui.StudyDataEntry; @@ -44,7 +46,10 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.model.InvestigationContact; import org.isatools.isacreator.model.StudyContact; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; diff --git a/src/main/java/org/isatools/isacreator/gui/formelements/FactorSubForm.java b/src/main/java/org/isatools/isacreator/gui/formelements/FactorSubForm.java index 963200c9..a17df702 100644 --- a/src/main/java/org/isatools/isacreator/gui/formelements/FactorSubForm.java +++ b/src/main/java/org/isatools/isacreator/gui/formelements/FactorSubForm.java @@ -120,8 +120,6 @@ public void updateItems() { Map record = getRecord(recordNumber); -// record.put(Factor.FACTOR_TYPE, record.get(Factor.FACTOR_NAME)); - Factor factor = new Factor(); factor.addToFields(record); @@ -155,61 +153,4 @@ public void valueChanged(ListSelectionEvent event) { } } } - -// @Override -// public String toString() { -// update(); -// -// System.out.println("Outputting using new factor output code..."); -// -// StringBuilder output = new StringBuilder(); -// output.append(InvestigationFileSection.STUDY_FACTORS).append("\n"); -// -// Map> valuesToOutput = new HashMap>(); -// -// int cols = dtm.getColumnCount(); -// -// for (int recordNumber = 1; recordNumber < cols; recordNumber++) { -// -// Map record = getRecord(recordNumber); -// -// Map> ontologyTerms = IOUtils.getOntologyTerms(record.keySet()); -// -// // now, do ontology processing -// for (int fieldHashCode : ontologyTerms.keySet()) { -// -// Map ontologyField = ontologyTerms.get(fieldHashCode); -// -// Map processedOntologyField = IOUtils.processOntologyField(ontologyField, record); -// record.put(ontologyField.get(IOUtils.TERM), processedOntologyField.get(ontologyField.get(IOUtils.TERM))); -// record.put(ontologyField.get(IOUtils.ACCESSION), processedOntologyField.get(ontologyField.get(IOUtils.ACCESSION))); -// record.put(ontologyField.get(IOUtils.SOURCE_REF), processedOntologyField.get(ontologyField.get(IOUtils.SOURCE_REF))); -// } -// -// for (String fieldName : record.keySet()) { -// if (!valuesToOutput.containsKey(fieldName)) { -// valuesToOutput.put(fieldName, new ArrayList()); -// } -// -// valuesToOutput.get(fieldName).add(StringProcessing.cleanUpString(record.get(fieldName))); -// } -// } -// -// // now output the values. -// for (String fieldName : valuesToOutput.keySet()) { -// output.append(fieldName).append("\t"); -// -// for (int outputCount = 0; outputCount < valuesToOutput.get(fieldName).size(); outputCount++) { -// -// output.append(valuesToOutput.get(fieldName).get(outputCount)); -// if (outputCount != valuesToOutput.get(fieldName).size() - 1) { -// output.append("\t"); -// } -// -// } -// output.append("\n"); -// } -// -// return output.toString(); -// } } diff --git a/src/main/java/org/isatools/isacreator/gui/formelements/SubForm.java b/src/main/java/org/isatools/isacreator/gui/formelements/SubForm.java index c08b9ca2..5d5f0b9e 100644 --- a/src/main/java/org/isatools/isacreator/gui/formelements/SubForm.java +++ b/src/main/java/org/isatools/isacreator/gui/formelements/SubForm.java @@ -47,12 +47,15 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.calendar.DateCellEditor; import org.isatools.isacreator.common.ExcelAdaptor; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.factorlevelentry.FactorLevelEntryCellEditor; import org.isatools.isacreator.filechooser.FileSelectCellEditor; import org.isatools.isacreator.gui.*; import org.isatools.isacreator.io.UserProfileManager; import org.isatools.isacreator.longtexteditor.TextCellEditor; import org.isatools.isacreator.managers.ApplicationManager; +import org.isatools.isacreator.model.Contact; import org.isatools.isacreator.ontologymanager.OntologyManager; import org.isatools.isacreator.ontologymanager.OntologySourceRefObject; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; @@ -113,7 +116,6 @@ public abstract class SubForm extends JPanel implements ListSelectionListener, F private boolean createBorder = true; - protected Map userHistory; protected Set uneditableRecords = new HashSet(); // this will house the translation between Comment aliases e.g. Publication Journal [c] to Comment[Publication Journal] @@ -137,6 +139,7 @@ public SubForm(String title, FieldTypes fieldType, List fields, Da this(title, fieldType, fields, dataEntryEnvironment, true); } + public SubForm(String title, FieldTypes fieldType, List fields, DataEntryEnvironment dataEntryEnvironment, boolean createBorder) { this.title = title; this.fieldType = fieldType; @@ -167,7 +170,7 @@ public SubForm(String title, FieldTypes fieldType, if (dataEntryForm instanceof DataEntryEnvironment) { this.dataEntryEnvironment = (DataEntryEnvironment) dataEntryForm; - } else if (dataEntryForm instanceof DataEntryForm) { + } else if (dataEntryForm != null) { this.dataEntryEnvironment = dataEntryForm.getDataEntryEnvironment(); } else { dataEntryEnvironment = null; @@ -175,7 +178,7 @@ public SubForm(String title, FieldTypes fieldType, } public void createGUI() { - ResourceInjector.get("gui-package.style").inject(true, new Object[] {this}); + ResourceInjector.get("gui-package.style").inject(true, new Object[]{this}); initialisePanel(); setupTableModel(initialNoFields); @@ -185,6 +188,14 @@ public void createGUI() { reformPreviousContent(); } + public FieldTypes getFieldType() { + return fieldType; + } + + public String getTitle() { + return title; + } + private void generateAliases() { if (aliasesToRealNames == null) { @@ -198,8 +209,6 @@ private void generateAliases() { if (fieldName.toLowerCase().startsWith("comment")) { String alias = StringProcessing.extractQualifierFromField(fieldName) + " [c]"; - - System.out.println("Alias for " + fieldName + " is " + alias); aliasesToRealNames.put(alias, fieldName); realNamesToAliases.put(fieldName, alias); } @@ -557,7 +566,7 @@ public void valueChanged(ListSelectionEvent event) { String s = scrollTable.getValueAt(rowSelected, columnSelected) .toString(); - OntologyTerm ooForSelectedTerm = searchUserHistory(s); + OntologyTerm ooForSelectedTerm = OntologyManager.getOntologyTerm(s); if (ooForSelectedTerm != null) { dataEntryForm.getDataEntryEnvironment().setStatusPaneInfo("" + @@ -596,21 +605,6 @@ public void valueChanged(ListSelectionEvent event) { } - private OntologyTerm searchUserHistory(String uniqueId) { - if (userHistory == null) { - return null; - } - - for (OntologyTerm oo : userHistory.values()) { - - if (oo.getUniqueId().equals(uniqueId)) { - return oo; - } - } - return null; - } - - public void focusGained(FocusEvent event) { removeRecord.setVisible(true); } @@ -632,7 +626,6 @@ public boolean addColumn() { public abstract boolean doAddColumn(DefaultTableModel model, TableColumn col); - public abstract void reformPreviousContent(); private void removalConfirmation(final FieldTypes whatIsBeingRemoved) { @@ -757,27 +750,28 @@ protected void removeColumn(int curColDelete) { } protected void checkForSourcePresence(String source) { - List definedSources = dataEntryForm.getDataEntryEnvironment() - .getOntologySources(); - boolean isPresent = false; - - for (OntologySourceRefObject osro : definedSources) { - if (osro.getSourceName().equals(source)) { - isPresent = true; + if (dataEntryForm != null && dataEntryForm.getDataEntryEnvironment() != null) { + Collection definedSources = dataEntryForm.getDataEntryEnvironment() + .getOntologySources(); + boolean isPresent = false; + + for (OntologySourceRefObject osro : definedSources) { + if (osro.getSourceName().equals(source)) { + isPresent = true; + } } - } - // if it doesn't exist, then add the ontology information to the defined sources - if (!isPresent) { + // if it doesn't exist, then add the ontology information to the defined sources + if (!isPresent) { - OntologySourceRefObject osro = UserProfileManager.getCurrentUser() - .getOntologySource(source); + OntologySourceRefObject osro = UserProfileManager.getCurrentUser().getOntologySource(source); - if (osro == null) { - osro = new OntologySourceRefObject(source, "", OntologyManager.getOntologyVersion(source), OntologyManager.getOntologyDescription(source)); - } + if (osro == null) { + osro = OntologyManager.getOntologySourceReferenceObjectByAbbreviation(source); + } - dataEntryForm.getDataEntryEnvironment().getOntologySources().add(osro); + dataEntryForm.getDataEntryEnvironment().getOntologySources().add(osro); + } } } @@ -793,6 +787,7 @@ public Map getRecord(int recordNumber) { int index = 0; for (SubFormField field : fields) { + Object value = defaultTableModel.getValueAt(index, recordNumber); String fieldName = field.getFieldName(); @@ -991,4 +986,9 @@ public void cleanupReferences() { removeAll(); } + public List getSubFormFields() { + return fields; + } + + } diff --git a/src/main/java/org/isatools/isacreator/gui/io/importisa/ISAtabFilesImporterFromGUI.java b/src/main/java/org/isatools/isacreator/gui/io/importisa/ISAtabFilesImporterFromGUI.java index 21cfb325..f012f329 100644 --- a/src/main/java/org/isatools/isacreator/gui/io/importisa/ISAtabFilesImporterFromGUI.java +++ b/src/main/java/org/isatools/isacreator/gui/io/importisa/ISAtabFilesImporterFromGUI.java @@ -101,9 +101,4 @@ private void attachGUIsToInvestigation() { } } } - - - - - } diff --git a/src/main/java/org/isatools/isacreator/gui/menu/AbstractImportFilesMenu.java b/src/main/java/org/isatools/isacreator/gui/menu/AbstractImportFilesMenu.java index 1bcdf079..f73e2104 100644 --- a/src/main/java/org/isatools/isacreator/gui/menu/AbstractImportFilesMenu.java +++ b/src/main/java/org/isatools/isacreator/gui/menu/AbstractImportFilesMenu.java @@ -41,12 +41,16 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.autofilteringlist.ExtendedJList; import org.isatools.isacreator.common.ClearFieldUtility; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.managers.ApplicationManager; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; @@ -71,7 +75,7 @@ public abstract class AbstractImportFilesMenu extends MenuUIComponent { protected long timeButtonLastClicked = System.currentTimeMillis(); - protected JLabel chooseFromElsewhere, loadSelected; + protected JButton chooseFromElsewhere, loadSelected; protected boolean showProblemArea; public AbstractImportFilesMenu(ISAcreatorMenu menu) { @@ -179,18 +183,11 @@ private JPanel createButtonPanel() { JPanel selectionPanel = new JPanel(new BorderLayout()); selectionPanel.setOpaque(false); - chooseFromElsewhere = new JLabel(getSearchButton(), - JLabel.LEFT); - chooseFromElsewhere.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { - - // precautionary meaaure to stop double execution of action... - + chooseFromElsewhere = new FlatButton(ButtonType.GREEN, "Open Another..."); + chooseFromElsewhere.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { if (timeButtonLastClicked != System.currentTimeMillis()) { - chooseFromElsewhere.setIcon(getSearchButton()); - if (jfc.showOpenDialog(ApplicationManager.getCurrentApplicationInstance()) == JFileChooser.APPROVE_OPTION) { String directory = jfc.getSelectedFile().toString(); @@ -207,34 +204,16 @@ public void mousePressed(MouseEvent event) { timeButtonLastClicked = System.currentTimeMillis(); } - } - - public void mouseEntered(MouseEvent event) { - chooseFromElsewhere.setIcon(getSearchButtonOver()); - } - - public void mouseExited(MouseEvent event) { - chooseFromElsewhere.setIcon(getSearchButton()); } }); - loadSelected = new JLabel(getLoadButton(), - JLabel.RIGHT); - loadSelected.addMouseListener(new MouseAdapter() { - public void mousePressed(MouseEvent event) { - loadSelected.setIcon(getLoadButton()); + loadSelected = new FlatButton(ButtonType.GREEN, "Load File"); + loadSelected.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { getSelectedFileAndLoad(); } - - public void mouseEntered(MouseEvent event) { - loadSelected.setIcon(getLoadButtonOver()); - } - - public void mouseExited(MouseEvent event) { - loadSelected.setIcon(getLoadButton()); - } }); selectionPanel.add(chooseFromElsewhere, BorderLayout.WEST); @@ -244,7 +223,7 @@ public void mouseExited(MouseEvent event) { } protected JPanel createProblemDisplay() { - // todo change with table view from validator etc. + JPanel problemCont = new JPanel(new GridLayout(1, 1)); problemCont.setOpaque(false); @@ -282,14 +261,6 @@ protected JPanel createProblemDisplay() { public abstract JPanel createAlternativeExitDisplay(); - public abstract ImageIcon getSearchButton(); - - public abstract ImageIcon getSearchButtonOver(); - - public abstract ImageIcon getLoadButton(); - - public abstract ImageIcon getLoadButtonOver(); - public abstract ImageIcon getLeftFilterImage(); public abstract ImageIcon getRightFilterImage(); diff --git a/src/main/java/org/isatools/isacreator/gui/menu/AuthenticationMenu.java b/src/main/java/org/isatools/isacreator/gui/menu/AuthenticationMenu.java index 9fc1d5ca..2d640b41 100644 --- a/src/main/java/org/isatools/isacreator/gui/menu/AuthenticationMenu.java +++ b/src/main/java/org/isatools/isacreator/gui/menu/AuthenticationMenu.java @@ -41,6 +41,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.api.Authentication; import org.isatools.isacreator.api.ImportConfiguration; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.effects.components.RoundedJPasswordField; import org.isatools.isacreator.effects.components.RoundedJTextField; import org.isatools.isacreator.launch.ISAcreatorCLArgs; @@ -49,6 +51,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -63,19 +66,14 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi */ public class AuthenticationMenu extends MenuUIComponent { - private static final Logger log = Logger.getLogger(AuthenticationMenu.class); - private JLabel status; private JPasswordField password; private JTextField username; - private JLabel createProfile, login, exit; - private Authentication authentication = null; @InjectedResource - public ImageIcon pleaseLogin, loginButton, loginButtonOver, createProfileButton, - createProfileButtonOver, exitButtonSml, exitButtonSmlOver; + public ImageIcon pleaseLogin; /** * Constructor @@ -152,56 +150,28 @@ public void createGUI() { JLabel.RIGHT), BorderLayout.NORTH); northPanel.add(fields, BorderLayout.CENTER); - JPanel southPanel = new JPanel(new GridLayout(4, 1)); - southPanel.setOpaque(false); - - JPanel buttonContainer = new JPanel(new GridLayout(1, 2)); + JPanel buttonContainer = new JPanel(new BorderLayout()); buttonContainer.setOpaque(false); - createProfile = new JLabel(createProfileButton, - JLabel.LEFT); - createProfile.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { - createProfile.setIcon(createProfileButton); - + JButton createProfile = new FlatButton(ButtonType.GREEN, "Create a new profile"); + createProfile.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { clearFields(); - confirmExitPanel.setVisible(false); - menu.changeView(menu.getCreateProfileGUI()); } - - public void mouseEntered(MouseEvent event) { - createProfile.setIcon(createProfileButtonOver); - } - - public void mouseExited(MouseEvent event) { - createProfile.setIcon(createProfileButton); - } }); - buttonContainer.add(createProfile); - - login = new JLabel(loginButton, - JLabel.RIGHT); - login.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { - login.setIcon(AuthenticationMenu.this.loginButton); + buttonContainer.add(createProfile, BorderLayout.WEST); + JButton login = new FlatButton(ButtonType.GREEN, "Log in"); + login.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { confirmExitPanel.setVisible(false); login(); } - - public void mouseEntered(MouseEvent event) { - login.setIcon(loginButtonOver); - } - - public void mouseExited(MouseEvent event) { - login.setIcon(AuthenticationMenu.this.loginButton); - } }); + Action loginAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { login(); @@ -213,40 +183,14 @@ public void actionPerformed(ActionEvent e) { username.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "LOGIN"); username.getActionMap().put("LOGIN", loginAction); - buttonContainer.add(login); - - southPanel.add(status); - southPanel.add(buttonContainer); - - exit = new JLabel(exitButtonSml, - JLabel.CENTER); - exit.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { - exit.setIcon(exitButtonSml); - confirmExitPanel.setVisible(true); - confirmExitPanel.getParent().validate(); - } - - public void mouseEntered(MouseEvent event) { - exit.setIcon(exitButtonSmlOver); - } + buttonContainer.add(login, BorderLayout.EAST); - public void mouseExited(MouseEvent event) { - exit.setIcon(exitButtonSml); - } - }); - - JPanel exitContainer = new JPanel(new GridLayout(1, 1)); - exitContainer.setOpaque(false); - - exitContainer.add(exit); - - southPanel.add(exitContainer); + fields.add(UIHelper.wrapComponentInPanel(status)); + fields.add(Box.createVerticalStrut(10)); + fields.add(buttonContainer); + fields.add(Box.createVerticalStrut(10)); - southPanel.add(confirmExitPanel); - northPanel.add(southPanel, BorderLayout.SOUTH); northPanel.setOpaque(false); add(northPanel, BorderLayout.CENTER); diff --git a/src/main/java/org/isatools/isacreator/gui/menu/CreateISATABMenu.java b/src/main/java/org/isatools/isacreator/gui/menu/CreateISATABMenu.java index e0035a3b..a13e8a8e 100644 --- a/src/main/java/org/isatools/isacreator/gui/menu/CreateISATABMenu.java +++ b/src/main/java/org/isatools/isacreator/gui/menu/CreateISATABMenu.java @@ -37,6 +37,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.gui.menu; +import org.isatools.isacreator.common.CommonMouseAdapter; import org.isatools.isacreator.formatmappingutility.ui.MappingUtilView; import org.isatools.isacreator.gui.DataEntryEnvironment; import org.isatools.isacreator.gui.modeselection.Mode; @@ -91,10 +92,10 @@ public void createGUI() { createUsingWizard = new JLabel(useWizardButton, JLabel.LEFT); - createUsingWizard.addMouseListener(new MouseAdapter() { + createUsingWizard.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { - + super.mousePressed(event); SwingUtilities.invokeLater(new Runnable() { public void run() { Wizard wizard = new Wizard(menu); @@ -107,20 +108,22 @@ public void run() { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); createUsingWizard.setIcon(useWizardButtonOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); createUsingWizard.setIcon(useWizardButton); } }); createUsingMapper = new JLabel(useMapperButton, JLabel.LEFT); - createUsingMapper.addMouseListener(new MouseAdapter() { + createUsingMapper.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { - + super.mousePressed(event); SwingUtilities.invokeLater(new Runnable() { public void run() { @@ -134,10 +137,12 @@ public void run() { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); createUsingMapper.setIcon(useMapperButtonOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); createUsingMapper.setIcon(useMapperButton); } }); @@ -145,18 +150,20 @@ public void mouseExited(MouseEvent event) { createManual = new JLabel(createManuallyButton, JLabel.LEFT); - createManual.addMouseListener(new MouseAdapter() { + createManual.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { - + super.mousePressed(event); createNewISAtabEditView(); } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); createManual.setIcon(createManuallyButtonOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); createManual.setIcon(createManuallyButton); } }); @@ -164,18 +171,21 @@ public void mouseExited(MouseEvent event) { back = new JLabel(backButton, JLabel.LEFT); - back.addMouseListener(new MouseAdapter() { + back.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); back.setIcon(backButton); menu.changeView(menu.getMainMenuGUI()); } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); back.setIcon(backButtonOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); back.setIcon(backButton); } }); diff --git a/src/main/java/org/isatools/isacreator/gui/menu/CreateProfileMenu.java b/src/main/java/org/isatools/isacreator/gui/menu/CreateProfileMenu.java index 503d44ad..50610f12 100644 --- a/src/main/java/org/isatools/isacreator/gui/menu/CreateProfileMenu.java +++ b/src/main/java/org/isatools/isacreator/gui/menu/CreateProfileMenu.java @@ -38,15 +38,26 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.gui.menu; import org.isatools.isacreator.api.CreateProfile; -import org.isatools.isacreator.common.CommonMouseAdapter; import org.isatools.isacreator.common.UIHelper; -import org.isatools.isacreator.effects.components.RoundedJPasswordField; + +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; + +import org.isatools.isacreator.gui.HistoricalSelectionGUI; import org.isatools.isacreator.launch.ISAcreatorCLArgs; +import org.isatools.isacreator.managers.ApplicationManager; +import org.isatools.isacreator.orcid.OrcidClient; +import org.isatools.isacreator.orcid.gui.OrcidContactSelectedEvent; +import org.isatools.isacreator.orcid.gui.OrcidContactSelectionCancelledEvent; +import org.isatools.isacreator.orcid.gui.OrcidLookupUI; +import org.isatools.isacreator.orcid.impl.OrcidClientImpl; +import org.isatools.isacreator.orcid.model.OrcidAuthor; import org.jdesktop.fuse.InjectedResource; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -62,26 +73,26 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi public class CreateProfileMenu extends UserCreationMenu { @InjectedResource - private ImageIcon createProfileButton, createProfileButtonOver, backButtonSml, backButtonSmlOver; - - private JLabel createProfile, backButton; + private ImageIcon createProfileButton, createProfileButtonOver, backButtonSml, backButtonSmlOver, searchOrcid; private JTextField firstnameVal; private JTextField institutionVal; private JTextField surnameVal; + private JTextField orcid; + private OrcidLookupUI orcidLookupUI; public CreateProfileMenu(ISAcreatorMenu menu) { super(menu); status = new JLabel(""); status.setForeground(UIHelper.RED_COLOR); - setPreferredSize(new Dimension(350, 400)); + setPreferredSize(new Dimension(390, 400)); setLayout(new BorderLayout()); setOpaque(false); } public void createGUI() { Box fields = Box.createVerticalBox(); - fields.add(Box.createVerticalStrut(10)); + fields.add(Box.createVerticalStrut(11)); fields.setOpaque(false); Action createProfileAction = new AbstractAction() { @@ -89,27 +100,39 @@ public void actionPerformed(ActionEvent e) { createProfile(); } }; + + Action lookupUserInfoFromOrcidAction = new AbstractAction() { + public void actionPerformed(ActionEvent actionEvent) { + lookupUserInfoFromOrcid(); + } + }; + JPanel userNameCont = createUsernamePanel(createProfileAction); JPanel passwordCont = createPasswordPanel(createProfileAction); JPanel confirmPasswordCont = createConfirmPasswordPanel(createProfileAction); + + JPanel orcidIdCont = createOrcidPanel(lookupUserInfoFromOrcidAction); + JPanel firstNameCont = createForenamePanel(createProfileAction); JPanel surnameCont = createSurnamePanel(createProfileAction); JPanel institutionCont = createInstitutionPanel(createProfileAction); JPanel emailCont = createEmailPanel(createProfileAction); + fields.add(orcidIdCont); + fields.add(Box.createVerticalStrut(8)); fields.add(userNameCont); - fields.add(Box.createVerticalStrut(7)); + fields.add(Box.createVerticalStrut(8)); fields.add(passwordCont); - fields.add(Box.createVerticalStrut(7)); + fields.add(Box.createVerticalStrut(8)); fields.add(confirmPasswordCont); - fields.add(Box.createVerticalStrut(7)); + fields.add(Box.createVerticalStrut(8)); fields.add(firstNameCont); - fields.add(Box.createVerticalStrut(7)); + fields.add(Box.createVerticalStrut(8)); fields.add(surnameCont); - fields.add(Box.createVerticalStrut(7)); + fields.add(Box.createVerticalStrut(8)); fields.add(institutionCont); - fields.add(Box.createVerticalStrut(7)); + fields.add(Box.createVerticalStrut(8)); fields.add(emailCont); JLabel info = new JLabel( @@ -131,48 +154,22 @@ public void actionPerformed(ActionEvent e) { buttonContainer.add(back, BorderLayout.WEST); - createProfile = new JLabel(createProfileButton, - JLabel.RIGHT); - createProfile.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { - createProfile.setIcon(createProfileButton); + JButton createProfile = new FlatButton(ButtonType.GREEN, "Save"); + createProfile.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { createProfile(); } - - public void mouseEntered(MouseEvent event) { - createProfile.setIcon(createProfileButtonOver); - } - - public void mouseExited(MouseEvent event) { - createProfile.setIcon(createProfileButton); - } }); - backButton = new JLabel(backButtonSml, JLabel.LEFT); - backButton.addMouseListener(new CommonMouseAdapter() { - @Override - public void mouseEntered(MouseEvent mouseEvent) { - super.mouseEntered(mouseEvent); - backButton.setIcon(backButtonSmlOver); - } - - @Override - public void mouseExited(MouseEvent mouseEvent) { - super.mouseExited(mouseEvent); - backButton.setIcon(backButtonSml); - } - @Override - public void mousePressed(MouseEvent mouseEvent) { - super.mousePressed(mouseEvent); + JButton backButton = new FlatButton(ButtonType.GREY, "Back", UIHelper.GREY_COLOR); + backButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { menu.changeView(menu.getAuthenticationGUI()); - backButton.setIcon(backButtonSml); } }); - buttonContainer.add(backButton, BorderLayout.WEST); buttonContainer.add(createProfile, BorderLayout.EAST); @@ -181,7 +178,7 @@ public void mousePressed(MouseEvent mouseEvent) { JPanel statusContainer = new JPanel(new BorderLayout()); statusContainer.setOpaque(false); - statusContainer.setPreferredSize(new Dimension(300, 30)); + statusContainer.setPreferredSize(new Dimension(390, 30)); statusContainer.add(status, BorderLayout.CENTER); southPanel.add(UIHelper.wrapComponentInPanel(statusContainer)); @@ -194,7 +191,6 @@ public void mousePressed(MouseEvent mouseEvent) { } - private JPanel createInstitutionPanel(Action createProfileAction) { // institution JPanel institutionCont = createPanel(); @@ -231,6 +227,77 @@ private JPanel createForenamePanel(Action createProfileAction) { return firstNameCont; } + private JPanel createOrcidPanel(Action lookupOrcid) { + JPanel orcidCont = new JPanel(new GridLayout(1, 2)); + orcidCont.setOpaque(false); + + JLabel orcidLabel = createLabel("orcid"); + + orcidCont.add(orcidLabel); + + orcid = createTextField(); + assignKeyActionToComponent(lookupOrcid, orcid); + + JLabel searchOrcidLabel = UIHelper.createLabel("Look up", UIHelper.VER_11_BOLD, UIHelper.BELIZE_HOLE, JLabel.RIGHT); + + searchOrcidLabel.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent mouseEvent) { + super.mouseEntered(mouseEvent); + ((JComponent) mouseEvent.getSource()).setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + + } + + @Override + public void mouseExited(MouseEvent mouseEvent) { + super.mouseExited(mouseEvent); + ((JComponent) mouseEvent.getSource()).setCursor(Cursor.getDefaultCursor()); + } + + @Override + + + public void mouseClicked(MouseEvent mouseEvent) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + if (orcidLookupUI == null) { + orcidLookupUI = new OrcidLookupUI(); + orcidLookupUI.createGUI(); + orcidLookupUI.installListeners(); + } + + orcidLookupUI.setLocationRelativeTo(ApplicationManager.getCurrentApplicationInstance()); + orcidLookupUI.setVisible(true); + + orcidLookupUI.addPropertyChangeListener("selectedOrcid", new OrcidContactSelectedEvent(orcidLookupUI, orcid, firstnameVal, surnameVal, emailVal)); + orcidLookupUI.addPropertyChangeListener("noSelectedOrcid", new OrcidContactSelectionCancelledEvent(orcidLookupUI)); + + }//run + });//runnable + } + + }); + + JPanel orcidInfoContainer = new JPanel(); + orcidInfoContainer.setLayout(new BoxLayout(orcidInfoContainer, BoxLayout.LINE_AXIS)); + orcidInfoContainer.add(orcid); + orcidInfoContainer.add(searchOrcidLabel); + + orcidCont.add(orcidInfoContainer); + return orcidCont; + } + + private void lookupUserInfoFromOrcid() { + OrcidClient client = new OrcidClientImpl(); + OrcidAuthor author = client.getAuthorInfo(orcid.getText()); + + if (author == null) + return; + + firstnameVal.setText(author.getGivenNames()); + surnameVal.setText(author.getFamilyName()); + emailVal.setText(author.getEmail()); + } private void createProfile() { // check password is not empty and that the password and the confirmation match! @@ -239,7 +306,7 @@ private void createProfile() { "password is required!"); return; } - if (!CreateProfile.matchingPasswords(passwordVal.getPassword(),confirmPasswordVal.getPassword())){ + if (!CreateProfile.matchingPasswords(passwordVal.getPassword(), confirmPasswordVal.getPassword())) { status.setText( "passwords do not match! the password and confirmation must match!"); return; @@ -253,15 +320,15 @@ private void createProfile() { if (!CreateProfile.emptyField(institutionVal.getText())) { if (!CreateProfile.emptyField(emailVal.getText())) { if (CreateProfile.validEmail(emailVal.getText())) { - if (CreateProfile.duplicateUser(usernameVal.getText())){ - status.setText( - "user name taken! this username is already in use"); - }else{ - CreateProfile.createProfile(usernameVal.getText(), passwordVal.getPassword(),firstnameVal.getText(),surnameVal.getText(),institutionVal.getText(),emailVal.getText()); + if (CreateProfile.duplicateUser(usernameVal.getText())) { + status.setText( + "user name taken! this username is already in use"); + } else { + CreateProfile.createProfile(usernameVal.getText(), passwordVal.getPassword(), firstnameVal.getText(), surnameVal.getText(), institutionVal.getText(), emailVal.getText()); - if (ISAcreatorCLArgs.configDir() == null){ + if (ISAcreatorCLArgs.configDir() == null) { menu.changeView(menu.getImportConfigurationGUI()); - }else { + } else { menu.changeView(menu.getMainMenuGUI()); } } diff --git a/src/main/java/org/isatools/isacreator/gui/menu/ExitConfirmationPanel.java b/src/main/java/org/isatools/isacreator/gui/menu/ExitConfirmationPanel.java index 15dc4367..fb95ec74 100644 --- a/src/main/java/org/isatools/isacreator/gui/menu/ExitConfirmationPanel.java +++ b/src/main/java/org/isatools/isacreator/gui/menu/ExitConfirmationPanel.java @@ -38,8 +38,12 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.gui.menu; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -72,24 +76,20 @@ private void createGUI() { JLabel.LEFT); UIHelper.renderComponent(existLab, UIHelper.VER_12_BOLD, UIHelper.DARK_GREEN_COLOR, false); - JLabel yesOption = new JLabel("YES"); - yesOption.addMouseListener(new MouseAdapter() { - public void mousePressed(MouseEvent event) { + JButton yesOption = new FlatButton(ButtonType.GREEN, "Yes"); + yesOption.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { System.exit(0); } }); - yesOption.setForeground(UIHelper.DARK_GREEN_COLOR); - yesOption.setFont(UIHelper.VER_12_BOLD); - JLabel noOption = new JLabel("NO"); - noOption.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton noOption = new FlatButton(ButtonType.RED, "No"); + noOption.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { ExitConfirmationPanel.this.setVisible(false); ExitConfirmationPanel.this.revalidate(); } }); - UIHelper.renderComponent(noOption, UIHelper.VER_12_BOLD, UIHelper.RED_COLOR, false); confirmExitPanel.add(existLab); confirmExitPanel.add(Box.createVerticalStrut(10)); diff --git a/src/main/java/org/isatools/isacreator/gui/menu/ImportConfigurationMenu.java b/src/main/java/org/isatools/isacreator/gui/menu/ImportConfigurationMenu.java index 119110f5..d18149e4 100644 --- a/src/main/java/org/isatools/isacreator/gui/menu/ImportConfigurationMenu.java +++ b/src/main/java/org/isatools/isacreator/gui/menu/ImportConfigurationMenu.java @@ -42,6 +42,9 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.errorreporter.model.FileType; import org.isatools.errorreporter.model.ISAFileErrorReport; import org.isatools.isacreator.api.ImportConfiguration; +import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.gs.GSLocalFilesManager; import org.isatools.isacreator.gui.ISAcreator; import org.isatools.isacreator.gui.modeselection.Mode; @@ -53,6 +56,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; @@ -64,20 +69,18 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi /** * ImportFilesMenu provides the interface to allow users to import previously saved ISATAB * submissions into the software for editing/viewing. - * + *

* Date: Mar 3, 2010 * * @author eamonnmaguire * @author Alejandra Gonzalez-Beltran - * */ public class ImportConfigurationMenu extends AbstractImportFilesMenu { private static Logger log = Logger.getLogger(ImportConfigurationMenu.class); @InjectedResource - private ImageIcon panelHeader, listImage, searchButton, searchButtonOver, - loadButton, loadButtonOver, exitButtonSml, exitButtonSmlOver, filterLeft, filterRight; + private ImageIcon panelHeader, listImage, filterLeft, filterRight; //private boolean initialLoadingPassed = true; @@ -87,35 +90,7 @@ public ImportConfigurationMenu(ISAcreatorMenu menu) { } public JPanel createAlternativeExitDisplay() { - - final JLabel exit = new JLabel(exitButtonSml, JLabel.CENTER); - exit.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { - exit.setIcon(exitButtonSml); - confirmExitPanel.setVisible(true); - confirmExitPanel.getParent().validate(); - } - - public void mouseEntered(MouseEvent event) { - exit.setIcon(exitButtonSmlOver); - } - - public void mouseExited(MouseEvent event) { - exit.setIcon(exitButtonSml); - } - }); - - JPanel exitCont = new JPanel(new GridLayout(1, 1)); - exitCont.setOpaque(false); - exitCont.add(exit); - - JPanel exitPanelContainer = new JPanel(new GridLayout(1, 1)); - exitPanelContainer.add(confirmExitPanel); - - add(exitPanelContainer, BorderLayout.SOUTH); - - return exitCont; + return new JPanel(); } public void getSelectedFileAndLoad() { @@ -163,13 +138,13 @@ public void run() { menu.resetViewAfterProgress(); menu.hideGlassPane(); - if (ISAcreatorCLArgs.mode()== Mode.GS ){ + if (ISAcreatorCLArgs.mode() == Mode.GS) { - if (ISAcreatorCLArgs.isatabDir()!=null || ISAcreatorCLArgs.isatabFiles()!=null){ + if (ISAcreatorCLArgs.isatabDir() != null || ISAcreatorCLArgs.isatabFiles() != null) { - List errors = GSLocalFilesManager.downloadFiles(menu.getAuthentication()); + List errors = GSLocalFilesManager.downloadFiles(menu.getAuthentication()); - if (!errors.isEmpty()){ + if (!errors.isEmpty()) { ISAFileErrorReport error = new ISAFileErrorReport("", FileType.INVESTIGATION, errors); java.util.List list = new ArrayList(); @@ -182,16 +157,16 @@ public void run() { menu.loadFiles(ISAcreatorCLArgs.isatabDir(), true); } - } else { + } else { //the ISAtab files were not given as parameter, show main menu menu.changeView(menu.getMainMenuGUI()); - } + } - } else{ + } else { //mode is not GS - if (ISAcreatorCLArgs.isatabDir()!=null){ + if (ISAcreatorCLArgs.isatabDir() != null) { menu.loadFiles(ISAcreatorCLArgs.isatabDir(), true); - }else { + } else { menu.changeView(menu.getMainMenuGUI()); } } @@ -202,7 +177,7 @@ public void run() { } } - ); + ); } } ); @@ -221,22 +196,22 @@ public File[] getPreviousFiles() { previousFiles = f.listFiles(); - if (previousFiles.length==0){ + if (previousFiles.length == 0) { String configurationFilesLocation = PropertyFileIO.retrieveDefaultSettings().getProperty("configurationFilesLocation"); String tmpDirectory = GeneralUtils.createTmpDirectory("Configurations"); - String downloadedFile = tmpDirectory+"config.zip"; + String downloadedFile = tmpDirectory + "config.zip"; boolean downloaded = DownloadUtils.downloadFile(configurationFilesLocation, downloadedFile); - System.out.println("downloadedFile="+downloadedFile); - ISAcreator.DEFAULT_CONFIGURATIONS_DIRECTORY = tmpDirectory; - try{ + System.out.println("downloadedFile=" + downloadedFile); + ISAcreator.DEFAULT_CONFIGURATIONS_DIRECTORY = tmpDirectory; + try { String unzipped = GeneralUtils.unzip(downloadedFile); - System.out.println("Configurations downloaded and unzipped ="+unzipped); + System.out.println("Configurations downloaded and unzipped =" + unzipped); f = new File(ISAcreator.DEFAULT_CONFIGURATIONS_DIRECTORY); previousFiles = f.listFiles(); - }catch(IOException ex){ + } catch (IOException ex) { ex.printStackTrace(); } @@ -264,22 +239,6 @@ public void setListRenderer() { previousFileList.setCellRenderer(new ImportFilesListCellRenderer(listImage)); } - public ImageIcon getSearchButton() { - return searchButton; - } - - public ImageIcon getSearchButtonOver() { - return searchButtonOver; - } - - public ImageIcon getLoadButton() { - return loadButton; - } - - public ImageIcon getLoadButtonOver() { - return loadButtonOver; - } - @Override public ImageIcon getLeftFilterImage() { return filterLeft; @@ -291,6 +250,4 @@ public ImageIcon getRightFilterImage() { } - - } diff --git a/src/main/java/org/isatools/isacreator/gui/menu/ImportFilesMenu.java b/src/main/java/org/isatools/isacreator/gui/menu/ImportFilesMenu.java index 9897945c..332d1f2d 100644 --- a/src/main/java/org/isatools/isacreator/gui/menu/ImportFilesMenu.java +++ b/src/main/java/org/isatools/isacreator/gui/menu/ImportFilesMenu.java @@ -43,6 +43,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.errorreporter.model.FileType; import org.isatools.errorreporter.model.ISAFileErrorReport; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.gui.ISAcreator; import org.isatools.isacreator.gui.io.importisa.ISAtabFilesImporterFromGUI; import org.isatools.isacreator.io.importisa.ISAtabImporter; @@ -51,9 +53,10 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.jdesktop.fuse.InjectedResource; import javax.swing.*; +import javax.swing.border.EmptyBorder; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -70,16 +73,14 @@ public class ImportFilesMenu extends AbstractImportFilesMenu { private static Logger log = Logger.getLogger(ImportFilesMenu.class); @InjectedResource - private ImageIcon panelHeader, listImage, searchButton, searchButtonOver, - loadButton, loadButtonOver, backButton, backButtonOver, filterLeft, filterRight; + private ImageIcon panelHeader, listImage, backButton, backButtonOver, filterLeft, filterRight; - private JLabel back; - private Container loadingImagePanel; + private JButton back; + private JPanel loadingImagePanel; public ImportFilesMenu(ISAcreatorMenu menu) { super(menu, false); - setPreferredSize(new Dimension(400, 400)); } public JPanel createAlternativeExitDisplay() { @@ -87,28 +88,16 @@ public JPanel createAlternativeExitDisplay() { JPanel previousButtonPanel = new JPanel(new GridLayout(1, 1)); previousButtonPanel.setOpaque(false); - back = new JLabel(backButton, JLabel.LEFT); - back.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { - + back = new FlatButton(ButtonType.GREY, "Back", UIHelper.DARK_GREEN_COLOR); + back.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { if (problemScroll != null) problemScroll.setVisible(false); ApplicationManager.getCurrentApplicationInstance().setGlassPanelContents(menu.getMainMenuGUI()); } - - public void mouseEntered(MouseEvent event) { - back.setIcon(backButtonOver); - } - - public void mouseExited(MouseEvent event) { - back.setIcon(backButton); - } }); - back.setOpaque(false); - previousButtonPanel.add(back); return previousButtonPanel; @@ -122,7 +111,7 @@ public void getSelectedFileAndLoad() { if (candidate.getName() .equals(previousFileList.getSelectedValue() .toString())) { - getSelectedFileAndLoad(candidate,true); + getSelectedFileAndLoad(candidate, true); } } } @@ -130,7 +119,7 @@ public void getSelectedFileAndLoad() { public void getSelectedFileAndLoad(File candidate, boolean loadingImagePane) { - if (loadingImagePane){ + if (loadingImagePane) { showLoadingImagePane(); } ApplicationManager.setCurrentLocalISATABFolder(candidate.getAbsolutePath()); @@ -147,31 +136,27 @@ public void showLoadingImagePane() { } - private Container createLoadingImagePanel() { + private JPanel createLoadingImagePanel() { + if (loadingImagePanel == null) { - loadingImagePanel = UIHelper.wrapComponentInPanel(new JLabel(loadISAanimation)); + loadingImagePanel = new JPanel(); + loadingImagePanel.setLayout(new BoxLayout(loadingImagePanel, BoxLayout.PAGE_AXIS)); + loadingImagePanel.setPreferredSize(new Dimension(400, 400)); + loadingImagePanel.setOpaque(false); + JPanel loadingImageContainer = UIHelper.wrapComponentInPanel(new JLabel(loadISAanimation)); + loadingImageContainer.setSize(new Dimension(125, 256)); + loadingImagePanel.add(loadingImageContainer); + + JPanel infoContainer = UIHelper.wrapComponentInPanel( + UIHelper.createLabel("

In this version of the tool, we automatically upgrade elements annotated with ontology terms from using ontology accessions to using URIs. " + + "This is an artifact of the upgrades to BioPortal's new REST web services (version 4).

Loading might take a little bit longer than normal during this upgrade for some ISA-TAB datasets.

", UIHelper.VER_12_BOLD, UIHelper.ASPHALT)); + + infoContainer.setBorder(new EmptyBorder(0, 50, 50, 0)); + loadingImagePanel.add(infoContainer); } return loadingImagePanel; } - - public ImageIcon getSearchButton() { - return searchButton; - } - - public ImageIcon getSearchButtonOver() { - return searchButtonOver; - } - - public ImageIcon getLoadButton() { - return loadButton; - } - - public ImageIcon getLoadButtonOver() { - return loadButtonOver; - } - - public void loadFile(final String dir) { @@ -194,6 +179,7 @@ public void run() { ISAcreatorProperties.setProperty(ISAcreatorProperties.CURRENT_ISATAB, new File(dir).getAbsolutePath()); + } else if (successfulImport) { log.error("The following problems were encountered when importing the ISAtab files in " + dir); @@ -267,7 +253,7 @@ public void run() { createErrorView(reports, false); } finally { - if (loadingImagePanel != null){ + if (loadingImagePanel != null) { menu.remove(loadingImagePanel); } menu.hideGlassPane(); @@ -275,6 +261,8 @@ public void run() { } } }); + + performer.start(); } diff --git a/src/main/java/org/isatools/isacreator/gui/menu/MainMenu.java b/src/main/java/org/isatools/isacreator/gui/menu/MainMenu.java index b0a9d476..bccd7ea5 100644 --- a/src/main/java/org/isatools/isacreator/gui/menu/MainMenu.java +++ b/src/main/java/org/isatools/isacreator/gui/menu/MainMenu.java @@ -37,6 +37,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.gui.menu; +import org.isatools.isacreator.common.CommonMouseAdapter; import org.isatools.isacreator.gui.modeselection.Mode; import org.isatools.isacreator.io.UserProfileManager; import org.isatools.isacreator.managers.ApplicationManager; @@ -98,19 +99,22 @@ public void createGUI() { newISA = new JLabel(createNew, JLabel.LEFT); - newISA.addMouseListener(new MouseAdapter() { + newISA.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); newISA.setIcon(createNew); confirmExitPanel.setVisible(false); menu.changeView(menu.getCreateISAMenuGUI()); } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); newISA.setIcon(createNewOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); newISA.setIcon(createNew); } }); @@ -119,9 +123,10 @@ public void mouseExited(MouseEvent event) { loadPrev = new JLabel(loadExisting, JLabel.LEFT); - loadPrev.addMouseListener(new MouseAdapter() { + loadPrev.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); loadPrev.setIcon(loadExisting); confirmExitPanel.setVisible(false); menu.getImportISAGUI().getPreviousFiles(); @@ -129,10 +134,12 @@ public void mousePressed(MouseEvent event) { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); loadPrev.setIcon(loadExistingOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); loadPrev.setIcon(loadExisting); } }); @@ -141,9 +148,10 @@ public void mouseExited(MouseEvent event) { merge = new JLabel(mergeFiles, JLabel.LEFT); - merge.addMouseListener(new MouseAdapter() { + merge.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); merge.setIcon(mergeFiles); confirmExitPanel.setVisible(false); menu.getMergeStudiesGUI().createGUI(); @@ -152,10 +160,12 @@ public void mousePressed(MouseEvent event) { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); merge.setIcon(mergeFilesOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); merge.setIcon(mergeFiles); } }); @@ -165,9 +175,10 @@ public void mouseExited(MouseEvent event) { if (ApplicationManager.getCurrentApplicationInstance().getMode() == Mode.NORMAL_MODE) { settingsButton = new JLabel(settings, JLabel.LEFT); - settingsButton.addMouseListener(new MouseAdapter() { + settingsButton.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); settingsButton.setIcon(settings); confirmExitPanel.setVisible(false); menu.getSettings().createGUI(); @@ -176,10 +187,12 @@ public void mousePressed(MouseEvent event) { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); settingsButton.setIcon(settingsOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); settingsButton.setIcon(settings); } }); @@ -189,9 +202,10 @@ public void mouseExited(MouseEvent event) { loadAnotherConfiguration = new JLabel(loadConfiguration, JLabel.LEFT); - loadAnotherConfiguration.addMouseListener(new MouseAdapter() { + loadAnotherConfiguration.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); loadAnotherConfiguration.setIcon(loadConfiguration); confirmExitPanel.setVisible(false); menu.getImportConfigurationGUI().getPreviousFiles(); @@ -199,10 +213,12 @@ public void mousePressed(MouseEvent event) { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); loadAnotherConfiguration.setIcon(loadConfigurationOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); loadAnotherConfiguration.setIcon(loadConfiguration); } }); @@ -211,9 +227,10 @@ public void mouseExited(MouseEvent event) { logoutButton = new JLabel(logout, JLabel.LEFT); - logoutButton.addMouseListener(new MouseAdapter() { + logoutButton.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); logoutButton.setIcon(MainMenu.this.logout); confirmExitPanel.setVisible(false); UserProfileManager.setCurrentUser(null); @@ -221,10 +238,12 @@ public void mousePressed(MouseEvent event) { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); logoutButton.setIcon(logoutOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); logoutButton.setIcon(MainMenu.this.logout); } }); @@ -233,18 +252,21 @@ public void mouseExited(MouseEvent event) { final JLabel exitProgram = new JLabel(exit, JLabel.LEFT); - exitProgram.addMouseListener(new MouseAdapter() { + exitProgram.addMouseListener(new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); exitProgram.setIcon(exit); confirmExitPanel.setVisible(true); } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); exitProgram.setIcon(exitOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); exitProgram.setIcon(exit); } }); diff --git a/src/main/java/org/isatools/isacreator/gui/reference/DataEntryReferenceObject.java b/src/main/java/org/isatools/isacreator/gui/reference/DataEntryReferenceObject.java index 65580823..cbf2e329 100644 --- a/src/main/java/org/isatools/isacreator/gui/reference/DataEntryReferenceObject.java +++ b/src/main/java/org/isatools/isacreator/gui/reference/DataEntryReferenceObject.java @@ -74,7 +74,6 @@ private void createSectionDefinitionsFromField() { if (!sectionDefinition.containsKey(section)) { sectionDefinition.put(section, new ListOrderedSet()); } - sectionDefinition.get(section).add(fieldName); } } @@ -90,6 +89,10 @@ public Map getFieldDefinition() { return fieldDefinition; } + public void addFieldObject(FieldObject fieldObject) { + fieldDefinition.put(fieldObject.getFieldName(), fieldObject); + } + public Set getFieldsForSection(InvestigationFileSection section) { return getSectionDefinition().get(section); } @@ -113,24 +116,30 @@ public FieldObject getFieldDefinition(String fieldName) { public Set getOntologyTerms(InvestigationFileSection section) { Set ontologyFields = new HashSet(); - if (sectionDefinition != null) { if (sectionDefinition.get(section) != null) { + ontologyFields = getOntologyTerms(sectionDefinition.get(section)); + } + } - fieldsToIgnore = filterFields(sectionDefinition.get(section), "term accession", "term source"); + return ontologyFields; + } + + public Set getOntologyTerms(Set fields) { + Set ontologyFields = new HashSet(); - for (String ontologyTerm : fieldsToIgnore) { + fieldsToIgnore = filterFields(fields, "term accession", "term source"); - String toAdd = ontologyTerm.substring(0, ontologyTerm.toLowerCase().indexOf("term")).trim(); + for (String ontologyTerm : fieldsToIgnore) { - // if the field edited was a comment, it will include an unclosed square bracket after running the - // previous function. So, we should close it. - if (toAdd.contains("[")) { - toAdd += "]"; - } - ontologyFields.add(toAdd); - } + String toAdd = ontologyTerm.substring(0, ontologyTerm.toLowerCase().indexOf("term")).trim(); + + // if the field edited was a comment, it will include an unclosed square bracket after running the + // previous function. So, we should close it. + if (toAdd.contains("[")) { + toAdd += "]"; } + ontologyFields.add(toAdd); } return ontologyFields; diff --git a/src/main/java/org/isatools/isacreator/io/IOUtils.java b/src/main/java/org/isatools/isacreator/io/IOUtils.java index 170d36ae..c77a8bc9 100644 --- a/src/main/java/org/isatools/isacreator/io/IOUtils.java +++ b/src/main/java/org/isatools/isacreator/io/IOUtils.java @@ -2,6 +2,7 @@ import org.isatools.isacreator.ontologymanager.OntologyManager; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; +import org.isatools.isacreator.settings.ISAcreatorProperties; import java.util.HashMap; import java.util.HashSet; @@ -22,11 +23,31 @@ public class IOUtils { public static final String SOURCE_REF = "term source"; public static final String ACCESSION = "term accession"; + + /** + * + * Given the full header (e.g. Characteristics[OBI:organism]) returns the header value inside the square brackets (e.g. OBI:organism). + * + * @param header + * @return + */ + public static String getHeaderValue(String header){ + if (header.contains("[")) + return header.substring(header.indexOf('[') + 1, header.indexOf("]")); + return null; + } + + public static String getHeaderName(String header){ + if (header.contains("[")) + return header.substring(0, header.indexOf('[')); + return null; + } + /** * Ontology terms are detected when there is a presence of 3 values in the field set with the same base name and * the words "Term Accession Number" & "Term Source Ref" are found. * - * @param fieldNames - field names for the section @see Set + * @param fieldNames - field names for the ISA section @see Set * @return Map from hashcode for field to a Map indicating which fields are source refs, terms and term accessions. */ public static Map> getOntologyTerms(Set fieldNames) { @@ -92,7 +113,8 @@ public static Map processOntologyField(Map ontol int numberAdded = 0; for (String ontologyTerm : ontologies) { - OntologyTerm oo = OntologyManager.getOntologySelectionHistory().get(ontologyTerm); + + OntologyTerm oo = OntologyManager.getOntologyTerm(ontologyTerm); if (oo != null) { tmpTerm += oo.getOntologyTermName(); @@ -124,7 +146,8 @@ public static Map processOntologyField(Map ontol } else if (term != null && term.contains(":")) { System.out.println("Getting ontology object for " + term); - OntologyTerm oo = OntologyManager.getOntologySelectionHistory().get(term); + + OntologyTerm oo = OntologyManager.getOntologyTerm(term); System.out.println("oo = " + oo); tmpTerm = term; @@ -133,14 +156,18 @@ public static Map processOntologyField(Map ontol if (oo != null && oo.getOntologyTermName() != null) { tmpTerm = oo.getOntologyTermName(); - tmpAccession = oo.getOntologyTermAccession(); + tmpAccession = ISAcreatorProperties.getProperty("ontologyTermURI").equals("true") ? oo.getOntologyTermURI() : oo.getOntologyTermAccession(); tmpSourceRefs = oo.getOntologySource(); System.out.println("Got ontology term... good times. Term is now " + tmpTerm); } else { if (term.contains(":")) { String[] termAndSource = term.split(":"); - tmpSourceRefs = termAndSource[0]; + if (ISAcreatorProperties.getOntologyTermURIProperty()){ + tmpSourceRefs = ""; + } else { + tmpSourceRefs = termAndSource[0]; + } if (termAndSource.length == 2) { tmpTerm = termAndSource[1]; } else { diff --git a/src/main/java/org/isatools/isacreator/io/UserProfile.java b/src/main/java/org/isatools/isacreator/io/UserProfile.java index b7d02f0d..c2e76b9b 100755 --- a/src/main/java/org/isatools/isacreator/io/UserProfile.java +++ b/src/main/java/org/isatools/isacreator/io/UserProfile.java @@ -230,8 +230,8 @@ public void setUsedOntologySources( this.usedOntologySources = usedOntologySources; } - public void setUserHistory(Map userHistory) { - this.userHistory = userHistory; + public void addToUserHistory(String k, OntologyTerm v){ + userHistory.put(k, v); } public FTPManager getFtpManager() { diff --git a/src/main/java/org/isatools/isacreator/io/UserProfileManager.java b/src/main/java/org/isatools/isacreator/io/UserProfileManager.java index 4e8da182..c4867ddb 100644 --- a/src/main/java/org/isatools/isacreator/io/UserProfileManager.java +++ b/src/main/java/org/isatools/isacreator/io/UserProfileManager.java @@ -39,7 +39,6 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.apache.log4j.Logger; import org.isatools.isacreator.common.EncryptedObject; -import org.isatools.isacreator.gui.ISAcreator; import org.isatools.isacreator.managers.ApplicationManager; import org.isatools.isacreator.model.*; import org.isatools.isacreator.ontologymanager.OntologyManager; @@ -58,6 +57,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import java.security.spec.InvalidKeySpecException; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** @@ -247,7 +247,7 @@ public static void updateUserProfileInformation(UserProfile up) { up.setFtpManager(Spreadsheet.fileSelectEditor.getFTPManager()); // update used ontology sources - for (OntologySourceRefObject osro : OntologyManager.getOntologiesUsed()) { + for (OntologySourceRefObject osro : OntologyManager.getOntologySources()) { up.addOntologyReference(osro); } } @@ -258,7 +258,10 @@ public static void updateUserProfiles() { for (UserProfile up : UserProfileManager.getUserProfiles()) { if (up.getUsername()!=null && up.getUsername().equals(UserProfileManager.getCurrentUser().getUsername())) { - up.setUserHistory(OntologyManager.getOntologySelectionHistory()); + Set keySet = OntologyManager.getOntologyTermsKeySet(); + for(String key: keySet){ + up.addToUserHistory(key, OntologyManager.getOntologyTerm(key)); + } updateUserProfileInformation(up); break; } diff --git a/src/main/java/org/isatools/isacreator/io/exportisa/ISAFileOutput.java b/src/main/java/org/isatools/isacreator/io/exportisa/ISAFileOutput.java index 6ef47e81..50158649 100644 --- a/src/main/java/org/isatools/isacreator/io/exportisa/ISAFileOutput.java +++ b/src/main/java/org/isatools/isacreator/io/exportisa/ISAFileOutput.java @@ -37,13 +37,14 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.io.exportisa; -import org.apache.axis.utils.StringUtils; -import org.isatools.isacreator.api.utils.SpreadsheetUtils; +import org.apache.commons.lang.StringUtils; import org.isatools.isacreator.gui.DataEntryForm; import org.isatools.isacreator.io.exportisa.exportadaptors.ISASectionExportAdaptor; import org.isatools.isacreator.io.importisa.investigationproperties.InvestigationFileSection; import org.isatools.isacreator.managers.ApplicationManager; -import org.isatools.isacreator.model.*; +import org.isatools.isacreator.model.Assay; +import org.isatools.isacreator.model.Investigation; +import org.isatools.isacreator.model.Study; import org.isatools.isacreator.ontologymanager.OntologyManager; import org.isatools.isacreator.ontologymanager.OntologySourceRefObject; @@ -52,6 +53,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import java.io.PrintStream; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * Created by the ISA team @@ -72,19 +74,21 @@ public String getOntologiesUsedOutput() { }; String toReturn = "ONTOLOGY SOURCE REFERENCE\n"; + Set ontologiesUsed = OntologyManager.getOntologiesUsed(); + for (int i = 0; i < headerTerms.length; i++) { StringBuffer line = new StringBuffer(headerTerms[i] + "\t"); String val = ""; - for (OntologySourceRefObject anOntologiesUsed : OntologyManager.getOntologiesUsed()) { + for (OntologySourceRefObject anOntologyUsed : ontologiesUsed) { if (headerTerms[i].equals("Term Source Name")) { - val = anOntologiesUsed.getSourceName(); + val = anOntologyUsed.getSourceName(); } else if (headerTerms[i].equals("Term Source File")) { - val = anOntologiesUsed.getSourceFile(); + val = anOntologyUsed.getSourceFile(); } else if (headerTerms[i].equals("Term Source Version")) { - val = anOntologiesUsed.getSourceVersion(); + val = anOntologyUsed.getSourceVersion(); } else if (headerTerms[i].equals("Term Source Description")) { - val = anOntologiesUsed.getSourceDescription(); + val = anOntologyUsed.getSourceDescription(); } addToLine(line, StringUtils.isEmpty(val) ? " " : val); diff --git a/src/main/java/org/isatools/isacreator/io/exportisa/exportadaptors/ISASectionExportAdaptor.java b/src/main/java/org/isatools/isacreator/io/exportisa/exportadaptors/ISASectionExportAdaptor.java index c6b64b58..9a8b5203 100644 --- a/src/main/java/org/isatools/isacreator/io/exportisa/exportadaptors/ISASectionExportAdaptor.java +++ b/src/main/java/org/isatools/isacreator/io/exportisa/exportadaptors/ISASectionExportAdaptor.java @@ -89,8 +89,7 @@ private static void processSectionOntologyFields(ISASection isaSection) { Map processedOntologyField = IOUtils.processOntologyField(ontologyField, isaSection.getFieldValues()); for (String key : processedOntologyField.keySet()) { - - if (!processedOntologyField.get(key).isEmpty()) { + if (processedOntologyField.get(key)!=null && !processedOntologyField.get(key).isEmpty()) { isaSection.getFieldValues().put(key, processedOntologyField.get(key)); } } diff --git a/src/main/java/org/isatools/isacreator/io/importisa/ISAtabImporter.java b/src/main/java/org/isatools/isacreator/io/importisa/ISAtabImporter.java index a6ac1a16..bc4da980 100644 --- a/src/main/java/org/isatools/isacreator/io/importisa/ISAtabImporter.java +++ b/src/main/java/org/isatools/isacreator/io/importisa/ISAtabImporter.java @@ -66,16 +66,18 @@ public ISAtabImporter() { * @return list of ISAFileErrorReports */ public List getMessages() { + return errors; + } public String getMessagesAsString() { StringBuilder builder = new StringBuilder(); for (ISAFileErrorReport errorReport : errors) { - builder.append("Error filename: " + errorReport.getFileName()); + builder.append("Error filename: ").append(errorReport.getFileName()); builder.append("\n Error messages: "); for (ErrorMessage error : errorReport.getMessages()) { - builder.append("\n" + error.getMessage()); + builder.append("\n").append(error.getMessage()); } } return builder.toString(); @@ -114,11 +116,13 @@ protected boolean commonImportFile(String parentDir) { File[] isaDirectorFiles = investigationFile.listFiles(); - for (File isaFile : isaDirectorFiles) { - if (isaFile.getName().toLowerCase().startsWith("i_")) { - investigationFileFound = true; - investigationFile = isaFile; - break; + if (isaDirectorFiles != null) { + for (File isaFile : isaDirectorFiles) { + if (isaFile.getName().toLowerCase().startsWith("i_")) { + investigationFileFound = true; + investigationFile = isaFile; + break; + } } } @@ -137,6 +141,7 @@ protected boolean commonImportFile(String parentDir) { InvestigationImport investigationFileImporter = new InvestigationImport(); Pair>>>> investigationFileImport = investigationFileImporter.importInvestigationFile(investigationFile); + messages.addAll(investigationFileImporter.getMessages()); if (investigationFileImport.fst) { @@ -191,10 +196,6 @@ protected boolean commonImportFile(String parentDir) { ISAFileErrorReport investigationErrorReport = new ISAFileErrorReport(investigationFile.getName(), FileType.INVESTIGATION, messages); errors.add(investigationErrorReport); } - } else { - //if (isacreator!=null){ - // investigation.setLastConfigurationUsed(isacreator.getLoadedConfiguration()); - //} } } else { @@ -205,6 +206,13 @@ protected boolean commonImportFile(String parentDir) { return false; } + + System.out.println("********************\n"+OntologyManager.getURIMappingInfo()); + String mappingInfo = OntologyManager.getURIMappingInfoHTML(); + if (mappingInfo!=null && !mappingInfo.equals("")) + messages.add(new ErrorMessage(ErrorLevel.INFO, mappingInfo)); + + } catch (IOException e) { messages.add(new ErrorMessage(ErrorLevel.ERROR, e.getMessage())); @@ -248,13 +256,14 @@ protected boolean processInvestigation(String parentDirectoryPath) { if (builtReference != null) { study.setStudySamples(new Assay(study.getStudySampleFileIdentifier(), builtReference)); - OntologyManager.addToOntologySelectionHistory(builtReference.getReferencedOntologyTerms()); + OntologyManager.addToOntologyTerms(builtReference.getReferencedOntologyTerms()); } } catch (MalformedInvestigationException mie) { + mie.printStackTrace(); messages.add(new ErrorMessage(ErrorLevel.ERROR, mie.getMessage())); } catch (Exception e) { - + e.printStackTrace(); messages.add(new ErrorMessage(ErrorLevel.ERROR, e.getMessage())); } finally { @@ -286,7 +295,7 @@ protected boolean processInvestigation(String parentDirectoryPath) { assay.getAssayReference(), assayTableReferenceObject); if (builtReference != null) { assay.setTableReferenceObject(builtReference); - OntologyManager.getOntologySelectionHistory().putAll(builtReference.getReferencedOntologyTerms()); + OntologyManager.addToOntologyTerms(builtReference.getReferencedOntologyTerms()); } } catch (IOException e) { messages.add(new ErrorMessage(ErrorLevel.ERROR, e.getMessage())); @@ -354,7 +363,7 @@ protected FileType inferISAFileType(Assay assay) { private void assignOntologiesToSession(List ontologiesUsed) { for (OntologyTerm oo : ontologiesUsed) { if (!oo.getOntologyTermName().trim().equals("")) { - OntologyManager.addToUserHistory(oo); + OntologyManager.addToOntologyTerms(oo); } } } diff --git a/src/main/java/org/isatools/isacreator/io/importisa/InvestigationImport.java b/src/main/java/org/isatools/isacreator/io/importisa/InvestigationImport.java index 2d6abfc8..5592dbf6 100644 --- a/src/main/java/org/isatools/isacreator/io/importisa/InvestigationImport.java +++ b/src/main/java/org/isatools/isacreator/io/importisa/InvestigationImport.java @@ -127,9 +127,10 @@ public Pair()); } @@ -212,10 +213,20 @@ private boolean isValidInvestigationSections(OrderedMap loadFile(File investigationFile) throws IOException { - + List fileContents = new ArrayList(); if (investigationFile.exists()) { CSVReader csvReader = new CSVReader(new FileReader(investigationFile), TAB_DELIM); - return csvReader.readAll(); + + String[] line; + while((line = csvReader.readNext()) != null) { + if(line.length > 0) { + if(!line[0].startsWith("#")) { + fileContents.add(line); + } + } + } + + return fileContents; } else { throw new FileNotFoundException("The specified file " + investigationFile.getName() + "does not exist in " + investigationFile.getAbsolutePath()); } diff --git a/src/main/java/org/isatools/isacreator/io/importisa/SpreadsheetImport.java b/src/main/java/org/isatools/isacreator/io/importisa/SpreadsheetImport.java index 15d6c918..27d2f8ca 100644 --- a/src/main/java/org/isatools/isacreator/io/importisa/SpreadsheetImport.java +++ b/src/main/java/org/isatools/isacreator/io/importisa/SpreadsheetImport.java @@ -5,6 +5,7 @@ import org.isatools.isacreator.configuration.DataTypes; import org.isatools.isacreator.configuration.FieldObject; import org.isatools.isacreator.io.importisa.errorhandling.exceptions.MalformedInvestigationException; +import org.isatools.isacreator.managers.ConfigurationManager; import org.isatools.isacreator.spreadsheet.model.TableReferenceObject; import org.isatools.isacreator.utils.GeneralUtils; @@ -25,8 +26,6 @@ public class SpreadsheetImport { - private Set messages; - /** * Create tablemodel for item! * @@ -39,7 +38,6 @@ public class SpreadsheetImport { */ public TableReferenceObject loadInTables(String fileName, TableReferenceObject defaultTableRef) throws IOException, MalformedInvestigationException { - messages = new HashSet(); File f = new File(fileName); @@ -53,8 +51,20 @@ public TableReferenceObject loadInTables(String fileName, while ((nextLine = reader.readNext()) != null) { if (count == 0) { colHeaders = nextLine; - tro = reformTableDefinition(fileName, nextLine, - defaultTableRef); + try { + tro = reformTableDefinition(fileName, nextLine, + defaultTableRef); + } catch (MalformedInvestigationException mie) { + + System.err.println(mie.toString()); + TableReferenceObject generic_tro = ConfigurationManager.selectTROForUserSelection("*", "*"); + if (generic_tro != null && defaultTableRef != generic_tro) { + tro = reformTableDefinition(fileName, nextLine, generic_tro); + } else { + throw mie; + } + } + Vector preDefinedHeaders = new Vector(); preDefinedHeaders.add("Row No."); @@ -100,7 +110,6 @@ private TableReferenceObject reformTableDefinition(String tableName, // way of storing previously seen protocol to determine where the parameters are which associated with it. int previousProtocol = -1; - // way of storing previously read characteristic, factor, or parameter to determine what type it is String previousCharFactParam = null; int expectedNextUnitLocation = -1; @@ -112,12 +121,16 @@ private TableReferenceObject reformTableDefinition(String tableName, positionInheaders++; String fieldAsLowercase = columnHeader.toLowerCase(); - if (expectedNextUnitLocation == positionInheaders) { if (fieldAsLowercase.contains("unit")) { // add two fields...one accepting string values and the unit, also accepting string values :o) - FieldObject newFo = new FieldObject(count, - previousCharFactParam, "", DataTypes.STRING, "", false, false, false); + + FieldObject newFo = startReference.getFieldByName(previousCharFactParam); + if (newFo == null) { + newFo = new FieldObject(count, + previousCharFactParam, "", DataTypes.STRING, "", false, false, false); + } + tro.addField(newFo); if (tro.getColumnDependencies().get(count) == null) { @@ -129,7 +142,12 @@ private TableReferenceObject reformTableDefinition(String tableName, count++; - newFo = new FieldObject(count, columnHeader, "", DataTypes.ONTOLOGY_TERM, "", false, false, false); + // get the unit for this factor. + newFo = startReference.getNextUnitField(previousCharFactParam); + + if (newFo == null) { + newFo = new FieldObject(count, columnHeader, "", DataTypes.ONTOLOGY_TERM, "", false, false, false); + } tro.addField(newFo); tro.getColumnDependencies().get(parentColPos).add(count); @@ -140,9 +158,13 @@ private TableReferenceObject reformTableDefinition(String tableName, // AND ATTACH UNIT TO FIELD VIA THE MAPPING IN THE TABLE CLASS } else { // add a field accepting ontology terms - FieldObject newFo = new FieldObject(count, - previousCharFactParam, "", DataTypes.ONTOLOGY_TERM, "", - false, false, false); + FieldObject newFo = startReference.getFieldByName(previousCharFactParam); + + if (newFo == null) { + newFo = new FieldObject(count, + previousCharFactParam, "", DataTypes.ONTOLOGY_TERM, "", + false, false, false); + } tro.addField(newFo); parentColPos = count; @@ -167,10 +189,6 @@ private TableReferenceObject reformTableDefinition(String tableName, FieldObject field = startReference.getFieldByName(columnHeader); if (field != null) { - tro.addField(field); - count++; - } else { - // doesn't exist if ((fieldAsLowercase.contains("factor value") || @@ -179,8 +197,19 @@ private TableReferenceObject reformTableDefinition(String tableName, previousCharFactParam = columnHeader; expectedNextUnitLocation = positionInheaders + 1; + } else { + tro.addField(field); } + count++; + } else { + if ((fieldAsLowercase.contains("factor value") || + fieldAsLowercase.contains("characteristics") || + fieldAsLowercase.contains("parameter value")) && !fieldAsLowercase.contains("comment")) { + + previousCharFactParam = columnHeader; + expectedNextUnitLocation = positionInheaders + 1; + } if (fieldAsLowercase.equals("performer") || fieldAsLowercase.contains("comment") || fieldAsLowercase.equals("provider")) { @@ -221,8 +250,12 @@ private TableReferenceObject reformTableDefinition(String tableName, if (expectedNextUnitLocation != -1) { // add last factor/characteristic to the table - FieldObject newFo = new FieldObject(count, previousCharFactParam, - "", DataTypes.ONTOLOGY_TERM, "", false, false, false); + + FieldObject newFo = startReference.getFieldByName(previousCharFactParam); + if (newFo == null) { + newFo = new FieldObject(count, + previousCharFactParam, "", DataTypes.ONTOLOGY_TERM, "", false, false, false); + } tro.addField(newFo); } @@ -237,16 +270,17 @@ private TableReferenceObject reformTableDefinition(String tableName, int headerCount = invalidHeaders.size(); for (String s : invalidHeaders) { invalidHeaderNames += s; - if (headerCount < invalidHeaders.size() - 1) { + + if (headerCount != invalidHeaders.size() - 1) { invalidHeaderNames += ", "; } headerCount++; } - String colText = invalidHeaders.size() > 1 ? invalidHeaders.size() + "The columns" : "The column "; - String linkText = invalidHeaders.size() > 1 ? invalidHeaders.size() + " are " : " is "; + String colText = invalidHeaders.size() > 1 ? "The columns " : "The column "; + String linkText = invalidHeaders.size() > 1 ? " are " : " is "; - throw new MalformedInvestigationException(colText + invalidHeaderNames + linkText + " not supported in this assay"); + throw new MalformedInvestigationException(colText + invalidHeaderNames + linkText + "not supported in this assay"); } return tro; diff --git a/src/main/java/org/isatools/isacreator/io/importisa/StructureToInvestigationMapper.java b/src/main/java/org/isatools/isacreator/io/importisa/StructureToInvestigationMapper.java index 0f06b2be..cceb119c 100644 --- a/src/main/java/org/isatools/isacreator/io/importisa/StructureToInvestigationMapper.java +++ b/src/main/java/org/isatools/isacreator/io/importisa/StructureToInvestigationMapper.java @@ -49,6 +49,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.ontologymanager.OntologyManager; import org.isatools.isacreator.ontologymanager.OntologySourceRefObject; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; +import org.isatools.isacreator.settings.ISAcreatorProperties; import org.isatools.isacreator.utils.GeneralUtils; import uk.ac.ebi.utils.collections.Pair; @@ -106,7 +107,7 @@ public Pair createInvestigationFromDataStructure( } private Investigation processInvestigation(OrderedMap>> investigationSections) { - List ontologySources = new ArrayList(); + Set ontologySources = new HashSet(); List contacts = new ArrayList(); List publications = new ArrayList(); @@ -125,7 +126,7 @@ private Investigation processInvestigation(OrderedMap, List> processedFactorsSection = processOntologySourceReferences(investigationSections.get(investigationSection)); sectionFields.put(investigationSection, processedFactorsSection.fst); - ontologySources = processedFactorsSection.snd; + ontologySources = new HashSet(processedFactorsSection.snd); } else if (investigationSection == InvestigationFileSection.INVESTIGATION_PUBLICATIONS_SECTION) { @@ -143,7 +144,7 @@ private Investigation processInvestigation(OrderedMap, List> processedStudyDesignSection = processStudyDesigns(studySections.get(studySection)); sectionFields.put(studySection, processedStudyDesignSection.fst); + studyDesigns = processedStudyDesignSection.snd; } else if (studySection == InvestigationFileSection.STUDY_ASSAYS) { @@ -240,6 +242,7 @@ private Study processStudy(OrderedMap, List> processOntologySourceRe Map record = getRecord(ontologySection, recordIndex); if (!isNullRecord(record)) { ontologySource.addToFields(record); + ontologySource.completeFields(); ontologySources.add(ontologySource); } } @@ -361,6 +365,7 @@ private Pair, List> processStudyDesigns(OrderedMap, List> processFactors(OrderedMap record) { } /** - * * @param fieldBeingCombined * @param term * @param accession @@ -627,8 +636,17 @@ private String groupElements(String fieldBeingCombined, String term, if (!term.trim().equals("") && !sourceRef.trim().equals("")) { - ontologyTermsDefined.add(new OntologyTerm( - term, accession, null, getOntologySource(sourceRef))); + + if (accession.contains("http://")) + ontologyTermsDefined.add(new OntologyTerm( + term, accession, accession, getOntologySource(sourceRef))); + else { + OntologyTerm ot = new OntologyTerm(term, accession, null, getOntologySource(sourceRef)); + ontologyTermsDefined.add(ot); + if (!(ISAcreatorProperties.getOntologyTermURIProperty() && ot.getOntologyTermURI()!=null && !ot.getOntologyTermURI().equals(""))) + toReturn = term; + OntologyManager.addToOntologyTerms(ot); + } } } @@ -639,6 +657,7 @@ private String groupElements(String fieldBeingCombined, String term, /** * It returns an OntologySourceRefObject given an ontology abbreviation + * * @param source * @return */ @@ -647,7 +666,8 @@ private OntologySourceRefObject getOntologySource(String source) { } /** - * Checks for duplicate assay names across all studies. + * Checks for duplicate assay names across all studies. + * * @param investigation * @return */ @@ -683,7 +703,7 @@ private boolean validateInvestigationFile(Investigation investigation) { // build up set of ontology sources that have been defined Set definedOntologySources = new HashSet(); - for (OntologySourceRefObject osro : OntologyManager.getOntologiesUsed()) { + for (OntologySourceRefObject osro : OntologyManager.getOntologySources()) { definedOntologySources.add(osro.getSourceName()); } @@ -693,8 +713,8 @@ private boolean validateInvestigationFile(Investigation investigation) { for (OntologyTerm oo : ontologyTermsDefined) { if (!definedOntologySources.contains(oo.getOntologySource()) && !oo.getOntologySource().equals("")) { - System.out.println(oo.getUniqueId()); - if (!GeneralUtils.isValueURL(oo.getUniqueId())) { + System.out.println(oo.getShortForm()); + if (!GeneralUtils.isValueURL(oo.getShortForm())) { missingOntologyObjects.add(oo.getOntologySource()); } } diff --git a/src/main/java/org/isatools/isacreator/launch/ISAcreatorGUIProperties.java b/src/main/java/org/isatools/isacreator/launch/ISAcreatorGUIProperties.java index d74fa525..d1d3703e 100644 --- a/src/main/java/org/isatools/isacreator/launch/ISAcreatorGUIProperties.java +++ b/src/main/java/org/isatools/isacreator/launch/ISAcreatorGUIProperties.java @@ -48,69 +48,68 @@ public static void setProperties(){ ResourceInjector.addModule("org.jdesktop.fuse.swing.SwingModule"); ResourceInjector.get("archiveoutput-package.style").load( - ArchiveOutputWindow.class.getResource("/dependency-injections/archiveoutput-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/archiveoutput-package.properties")); ResourceInjector.get("gui-package.style").load( - ISAcreator.class.getResource("/dependency-injections/gui-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/gui-package.properties")); ResourceInjector.get("common-package.style").load( - ISAcreator.class.getResource("/dependency-injections/common-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/common-package.properties")); ResourceInjector.get("filechooser-package.style").load( - ISAcreator.class.getResource("/dependency-injections/filechooser-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/filechooser-package.properties")); ResourceInjector.get("longtexteditor-package.style").load( - ISAcreator.class.getResource("/dependency-injections/longtexteditor-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/longtexteditor-package.properties")); ResourceInjector.get("mergeutil-package.style").load( - ISAcreator.class.getResource("/dependency-injections/mergeutil-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/mergeutil-package.properties")); ResourceInjector.get("publicationlocator-package.style").load( - ISAcreator.class.getResource("/dependency-injections/publicationlocator-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/publicationlocator-package.properties")); ResourceInjector.get("wizard-package.style").load( - ISAcreator.class.getResource("/dependency-injections/wizard-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/wizard-package.properties")); ResourceInjector.get("formatmappingutility-package.style").load( - ISAcreator.class.getResource("/dependency-injections/formatmappingutility-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/formatmappingutility-package.properties")); ResourceInjector.get("arraydesignbrowser-package.style").load( - ISAcreator.class.getResource("/dependency-injections/arraydesignbrowser-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/arraydesignbrowser-package.properties")); ResourceInjector.get("effects-package.style").load( - ISAcreator.class.getResource("/dependency-injections/effects-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/effects-package.properties")); ResourceInjector.get("assayselection-package.style").load( - ISAcreator.class.getResource("/dependency-injections/assayselection-package.properties")); - ResourceInjector.get("calendar-package.style").load( - ISAcreator.class.getResource("/dependency-injections/calendar-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/assayselection-package.properties")); + ResourceInjector.get("validateconvert-package.style").load( - ISAcreator.class.getResource("/dependency-injections/validator-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/validator-package.properties")); ResourceInjector.get("autofilteringlist-package.style").load( - FilterableListCellRenderer.class.getResource("/dependency-injections/autofilteringlist-package.properties")); - - ResourceInjector.get("calendar-package.style").load( - CalendarGUI.class.getResource("/dependency-injections/calendar-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/autofilteringlist-package.properties")); ResourceInjector.get("common-package.style").load( - ArchiveOutputWindow.class.getResource("/dependency-injections/common-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/common-package.properties")); ResourceInjector.get("factorlevelentry-package.style").load( - FactorLevelEntryGUI.class.getResource("/dependency-injections/factorlevelentry-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/factorlevelentry-package.properties")); ResourceInjector.get("gui-package.style").load( - AssayInformationPanel.class.getResource("/dependency-injections/gui-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/gui-package.properties")); ResourceInjector.get("gui-package.style").load( - ModeSelector.class.getResource("/dependency-injections/gui-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/gui-package.properties")); ResourceInjector.get("ontologiser-generator-package.style").load( - OntologyHelpPane.class.getResource("/dependency-injections/ontologiser-generator-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/ontologiser-generator-package.properties")); ResourceInjector.get("formatmappingutility-package.style").load( - OntologyHelpPane.class.getResource("/dependency-injections/formatmappingutility-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/formatmappingutility-package.properties")); ResourceInjector.get("common-package.style").load( - OntologyHelpPane.class.getResource("/dependency-injections/common-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/common-package.properties")); ResourceInjector.get("ontologyselectiontool-package.style").load( - OntologyHelpPane.class.getResource("/dependency-injections/ontologyselectiontool-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/ontologyselectiontool-package.properties")); ResourceInjector.get("ontologyselectiontool-package.style").load( - OntologySelectionTool.class.getResource("/dependency-injections/ontologyselectiontool-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/ontologyselectiontool-package.properties")); ResourceInjector.get("common-package.style").load( - OntologySelectionTool.class.getResource("/dependency-injections/common-package.properties")); - ResourceInjector.get("effects-package.style").load(OntologySelectionTool.class.getResource - ("/dependency-injections/effects-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/common-package.properties")); + ResourceInjector.get("effects-package.style").load( + ISAcreatorApplication.class.getResource("/dependency-injections/effects-package.properties")); ResourceInjector.get("sample-selection-package.style").load( - ProtocolSelectorListCellRenderer.class.getResource("/dependency-injections/autofilterfield-package.properties")); + ISAcreatorApplication.class.getResource("/dependency-injections/autofilterfield-package.properties")); + + ResourceInjector.get("orcidlookup-package.style").load( + ISAcreatorApplication.class.getResource("/dependency-injections/orcidlookup-package.properties")); } diff --git a/src/main/java/org/isatools/isacreator/longtexteditor/TextEditor.java b/src/main/java/org/isatools/isacreator/longtexteditor/TextEditor.java index 3b10f620..359e05d7 100644 --- a/src/main/java/org/isatools/isacreator/longtexteditor/TextEditor.java +++ b/src/main/java/org/isatools/isacreator/longtexteditor/TextEditor.java @@ -37,8 +37,9 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.longtexteditor; -import org.isatools.isacreator.common.Globals; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.effects.FooterPanel; import org.isatools.isacreator.effects.HUDTitleBar; import org.jdesktop.fuse.InjectedResource; @@ -47,10 +48,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import javax.swing.*; import javax.swing.border.EtchedBorder; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; +import java.awt.event.*; /** * TextEditor widget to allow users to edit large bits of text in a light, convenient interface. @@ -113,21 +111,12 @@ public void createGUI() { JPanel buttonContainer = new JPanel(new BorderLayout()); buttonContainer.setBackground(UIHelper.BG_COLOR); - final JLabel ok = new JLabel(Globals.OK_ICON, JLabel.RIGHT); - ok.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton ok = new FlatButton(ButtonType.GREEN, "Confirm"); + ok.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { firePropertyChange("enteredText", "OLD_VALUE", textEditor.getEnteredText()); setVisible(false); } - - public void mouseEntered(MouseEvent event) { - ok.setIcon(Globals.OK_OVER_ICON); - } - - public void mouseExited(MouseEvent event) { - ok.setIcon(Globals.OK_ICON); - } }); buttonContainer.add(ok, BorderLayout.EAST); diff --git a/src/main/java/org/isatools/isacreator/managers/ConfigurationManager.java b/src/main/java/org/isatools/isacreator/managers/ConfigurationManager.java index 6cbd211b..ad26f226 100644 --- a/src/main/java/org/isatools/isacreator/managers/ConfigurationManager.java +++ b/src/main/java/org/isatools/isacreator/managers/ConfigurationManager.java @@ -28,10 +28,10 @@ public class ConfigurationManager { */ public static void loadConfigurations(String configDirectory) { if (configDirectory != null) { - ConfigXMLParser cp = new ConfigXMLParser(configDirectory); - cp.loadConfiguration(); - mappings = cp.getMappings(); - assayDefinitions = cp.getTables(); + ConfigXMLParser configXMLParser = new ConfigXMLParser(configDirectory); + configXMLParser.loadConfiguration(); + mappings = configXMLParser.getMappings(); + assayDefinitions = configXMLParser.getTables(); } } @@ -110,6 +110,21 @@ public static Map> getAllowedTechnologiesPerEndpoint() { return measToAllowedTechs; } + + public static TableReferenceObject searchMappingsForMatch(String measurementEndpoint, String technologyType) { + for (MappingObject mo : getMappings()) { + if (mo.getMeasurementEndpointType().equalsIgnoreCase(measurementEndpoint) && + mo.getTechnologyType().equalsIgnoreCase(technologyType)) { + for (TableReferenceObject tro : assayDefinitions) { + if (tro.getTableName().equalsIgnoreCase(mo.getAssayName())) { + return tro; + } + } + } + } + return null; + } + /** * Select the TableReferenceObject which is required for a given measurement endpoint * and technology type using the MappingObject. @@ -124,18 +139,16 @@ public static TableReferenceObject selectTROForUserSelection( measurementEndpoint = getTrimmedName(measurementEndpoint); techType = getTrimmedName(techType); - for (MappingObject mo : getMappings()) { - if (mo.getMeasurementEndpointType().equalsIgnoreCase(measurementEndpoint) && - mo.getTechnologyType().equalsIgnoreCase(techType)) { - for (TableReferenceObject tro : assayDefinitions) { - if (tro.getTableName().equalsIgnoreCase(mo.getAssayName())) { - return tro; - } - } - } + + TableReferenceObject matchedReferenceObject = searchMappingsForMatch(measurementEndpoint, techType); + + + // attempt use of wildcard configuration for loading. + if(matchedReferenceObject == null) { + matchedReferenceObject = searchMappingsForMatch("*", "*"); } - return null; + return matchedReferenceObject; } private static String getTrimmedName(String string) { diff --git a/src/main/java/org/isatools/isacreator/mergeutil/MergeFilesUI.java b/src/main/java/org/isatools/isacreator/mergeutil/MergeFilesUI.java index 2f3ff93e..dbdabdad 100644 --- a/src/main/java/org/isatools/isacreator/mergeutil/MergeFilesUI.java +++ b/src/main/java/org/isatools/isacreator/mergeutil/MergeFilesUI.java @@ -38,23 +38,21 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.mergeutil; import com.explodingpixels.macwidgets.IAppWidgetFactory; -import org.isatools.isacreator.common.DropDownComponent; -import org.isatools.isacreator.common.FileSelectionPanel; -import org.isatools.isacreator.common.HistoryComponent; -import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.*; import org.isatools.isacreator.effects.InfiniteProgressPanel; import org.isatools.isacreator.effects.borders.RoundedBorder; import org.isatools.isacreator.effects.components.RoundedJTextField; import org.isatools.isacreator.gui.AbstractDataEntryEnvironment; -import org.isatools.isacreator.io.importisa.ISAtabImporter; -import org.isatools.isacreator.gui.io.importisa.ISAtabFilesImporterFromGUI; -import org.isatools.isacreator.managers.ApplicationManager; import org.isatools.isacreator.gui.DataEntryEnvironment; import org.isatools.isacreator.gui.ISAcreator; +import org.isatools.isacreator.gui.io.importisa.ISAtabFilesImporterFromGUI; import org.isatools.isacreator.gui.menu.ISAcreatorMenu; +import org.isatools.isacreator.io.importisa.ISAtabImporter; +import org.isatools.isacreator.managers.ApplicationManager; import org.isatools.isacreator.model.Investigation; import org.isatools.isacreator.model.Study; import org.isatools.isacreator.ontologymanager.OntologyManager; +import org.isatools.isacreator.ontologymanager.common.OntologyTerm; import org.isatools.isacreator.visualization.ExperimentVisualization; import org.jdesktop.fuse.InjectedResource; import org.jdesktop.fuse.ResourceInjector; @@ -62,8 +60,13 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import javax.swing.*; import javax.swing.border.TitledBorder; import java.awt.*; -import java.awt.event.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.io.File; +import java.util.Collection; +import java.util.HashSet; import java.util.Stack; @@ -172,17 +175,20 @@ private JLayeredPane createSelectFilesPanel() { final MouseListener[] listeners = new MouseListener[2]; - listeners[0] = new MouseAdapter() { + listeners[0] = new CommonMouseAdapter() { public void mouseEntered(MouseEvent mouseEvent) { + super.mousePressed(mouseEvent); backButton.setIcon(backOver); } public void mouseExited(MouseEvent mouseEvent) { + super.mouseExited(mouseEvent); backButton.setIcon(back); } public void mousePressed(MouseEvent mouseEvent) { + super.mousePressed(mouseEvent); backButton.setIcon(back); SwingUtilities.invokeLater(new Runnable() { public void run() { @@ -197,18 +203,21 @@ public void run() { assignListenerToLabel(backButton, listeners[0]); - listeners[1] = new MouseAdapter() { + listeners[1] = new CommonMouseAdapter() { public void mouseEntered(MouseEvent mouseEvent) { + super.mouseEntered(mouseEvent); nextButton.setIcon(nextOver); } public void mouseExited(MouseEvent mouseEvent) { + super.mouseExited(mouseEvent); nextButton.setIcon(next); } public void mousePressed(MouseEvent mouseEvent) { + super.mousePressed(mouseEvent); nextButton.setIcon(next); String isatab1Path = isatab1.getSelectedFilePath().trim(); @@ -504,9 +513,10 @@ private JLayeredPane createInvestigationDefinitionPanel(final Investigation inv1 final MouseListener[] listeners = new MouseListener[2]; - listeners[0] = new MouseAdapter() { + listeners[0] = new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { + super.mousePressed(event); // go back to the create isatab menu SwingUtilities.invokeLater(new Runnable() { public void run() { @@ -519,10 +529,12 @@ public void run() { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); backButton.setIcon(backOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); backButton.setIcon(back); } }; @@ -535,10 +547,10 @@ public void mouseExited(MouseEvent event) { assignListenerToLabel(backButton, listeners[0]); - listeners[1] = new MouseAdapter() { + listeners[1] = new CommonMouseAdapter() { public void mousePressed(MouseEvent event) { - + super.mousePressed(event); if (!invTitle.getText().trim().equals("")) { invTitle.setBackground(UIHelper.BG_COLOR); if (!invDescription.getText().trim() @@ -574,10 +586,12 @@ public void run() { } public void mouseEntered(MouseEvent event) { + super.mouseEntered(event); nextButton.setIcon(nextOver); } public void mouseExited(MouseEvent event) { + super.mouseExited(event); nextButton.setIcon(next); } }; @@ -616,21 +630,24 @@ public void run() { final Investigation inv1 = importISA1.getInvestigation(); + //Keep the terms used in inv1 + Collection terms = new HashSet(OntologyManager.getOntologyTermsValues()); + + //clear the terms used + OntologyManager.clearOntologyTerms(); + ISAtabImporter importISA2 = new ISAtabFilesImporterFromGUI(ApplicationManager.getCurrentApplicationInstance()); - importISA2.importFile(ISA2 + File.separator); + boolean successfulImportISA2 = importISA2.importFile(ISA2 + File.separator); - if (!importISA2.importFile(ISA2 + File.separator)) { + if (!successfulImportISA2) { // status.setText(importISA2.getProblemLog()); return; } final Investigation inv2 = importISA2.getInvestigation(); - // add all ontologies used to inv 1 - OntologyManager.addToUsedOntologySources(inv1.getInvestigationId(), - OntologyManager.getOntologiesUsed(inv2.getInvestigationId())); - - OntologyManager.clearUsedOntologies(inv2.getInvestigationId()); + // add all terms used by inv2 to those used by inv 1 + OntologyManager.addToOntologyTerms(terms); // add all publications and contacts... inv1.addToPublications(inv2.getPublications()); @@ -697,17 +714,20 @@ private JLayeredPane visualizeCurrentStudy(final Investigation inv1) { final MouseListener[] listeners = new MouseListener[2]; - listeners[0] = new MouseAdapter() { + listeners[0] = new CommonMouseAdapter() { public void mouseEntered(MouseEvent mouseEvent) { + super.mouseEntered(mouseEvent); backButton.setIcon(backOver); } public void mouseExited(MouseEvent mouseEvent) { + super.mouseExited(mouseEvent); backButton.setIcon(back); } public void mousePressed(MouseEvent mouseEvent) { + super.mousePressed(mouseEvent); // go back to define assay page. // output files to default directory, and then in last page offer users ability to load the file straight away HistoryComponent hc = previousPage.pop(); @@ -720,17 +740,20 @@ public void mousePressed(MouseEvent mouseEvent) { assignListenerToLabel(backButton, listeners[0]); - listeners[1] = new MouseAdapter() { + listeners[1] = new CommonMouseAdapter() { public void mouseEntered(MouseEvent mouseEvent) { + super.mouseEntered(mouseEvent); nextButton.setIcon(nextOver); } public void mouseExited(MouseEvent mouseEvent) { + super.mouseExited(mouseEvent); nextButton.setIcon(next); } public void mousePressed(MouseEvent mouseEvent) { + super.mousePressed(mouseEvent); // go back to define assay page. previousPage.push(new HistoryComponent(finalPane, listeners)); setCurrentPage(showDonePage(inv1)); @@ -756,17 +779,20 @@ private JLayeredPane showDonePage(final Investigation inv1) { final MouseListener[] listeners = new MouseListener[2]; backButton.setIcon(back); - listeners[0] = new MouseAdapter() { + listeners[0] = new CommonMouseAdapter() { public void mouseEntered(MouseEvent mouseEvent) { + super.mouseEntered(mouseEvent); backButton.setIcon(backOver); } public void mouseExited(MouseEvent mouseEvent) { + super.mouseExited(mouseEvent); backButton.setIcon(back); } public void mousePressed(MouseEvent mouseEvent) { + super.mousePressed(mouseEvent); SwingUtilities.invokeLater(new Runnable() { public void run() { HistoryComponent hc = previousPage.pop(); @@ -781,17 +807,20 @@ public void run() { assignListenerToLabel(backButton, listeners[0]); - listeners[1] = new MouseAdapter() { + listeners[1] = new CommonMouseAdapter() { public void mouseEntered(MouseEvent mouseEvent) { + super.mouseEntered(mouseEvent); nextButton.setIcon(nextOver); } public void mouseExited(MouseEvent mouseEvent) { + super.mouseExited(mouseEvent); nextButton.setIcon(next); } public void mousePressed(MouseEvent mouseEvent) { + super.mousePressed(mouseEvent); // go back to define assay page. SwingUtilities.invokeLater(new Runnable() { public void run() { diff --git a/src/main/java/org/isatools/isacreator/model/Assay.java b/src/main/java/org/isatools/isacreator/model/Assay.java index cbc7272c..4058dba0 100755 --- a/src/main/java/org/isatools/isacreator/model/Assay.java +++ b/src/main/java/org/isatools/isacreator/model/Assay.java @@ -40,6 +40,9 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.configuration.MappingObject; import org.isatools.isacreator.gui.StudySubData; import org.isatools.isacreator.managers.ConfigurationManager; +import org.isatools.isacreator.ontologymanager.OntologyManager; +import org.isatools.isacreator.ontologymanager.OntologySourceRefObject; +import org.isatools.isacreator.ontologymanager.common.OntologyTerm; import org.isatools.isacreator.spreadsheet.model.TableReferenceObject; @@ -120,6 +123,25 @@ public Assay(String assayReference, String measurementEndpoint, fieldValues.put(TECHNOLOGY_TYPE_TERM_ACCESSION, mappingObject!=null? mappingObject.getTechnologyAccession(): ""); fieldValues.put(TECHNOLOGY_TYPE_TERM_SOURCE_REF, mappingObject!=null? mappingObject.getTechnologySource(): "" ); fieldValues.put(ASSAY_PLATFORM, assayPlatform); + + if (mappingObject!=null){ + OntologyTerm ot = null; + OntologySourceRefObject ontologySourceRefObject = null; + if (!mappingObject.getMeasurementAccession().equals("")){ + ontologySourceRefObject = OntologyManager.getOntologySourceReferenceObjectByAbbreviation(mappingObject.getMeasurementSource()); + if (ontologySourceRefObject==null) + ontologySourceRefObject = new OntologySourceRefObject(mappingObject.getMeasurementSource()); + ot = new OntologyTerm(mappingObject.getMeasurementEndpointType(), mappingObject.getMeasurementAccession(), mappingObject.getMeasurementAccession(), ontologySourceRefObject); + OntologyManager.addToOntologyTerms(ot); + } + if (!mappingObject.getTechnologyAccession().equals("")){ + ontologySourceRefObject = OntologyManager.getOntologySourceReferenceObjectByAbbreviation(mappingObject.getTechnologySource()); + if (ontologySourceRefObject==null) + ontologySourceRefObject = new OntologySourceRefObject(mappingObject.getTechnologySource()); + ot = new OntologyTerm(mappingObject.getTechnologyType(), mappingObject.getTechnologyAccession(), mappingObject.getTechnologyAccession(), ontologySourceRefObject); + OntologyManager.addToOntologyTerms(ot); + } + } } diff --git a/src/main/java/org/isatools/isacreator/model/Investigation.java b/src/main/java/org/isatools/isacreator/model/Investigation.java index 894babc0..1b1e923b 100755 --- a/src/main/java/org/isatools/isacreator/model/Investigation.java +++ b/src/main/java/org/isatools/isacreator/model/Investigation.java @@ -118,7 +118,6 @@ private void initialise() { assays = new HashMap(); contacts = new ArrayList(); publications = new ArrayList(); - OntologyManager.newInvestigation(getInvestigationId().equals("") ? "investigation-" + System.currentTimeMillis() : getInvestigationId()); } @Override diff --git a/src/main/java/org/isatools/isacreator/ontologiser/adaptors/InvestigationAdaptor.java b/src/main/java/org/isatools/isacreator/ontologiser/adaptors/InvestigationAdaptor.java index cf9128ad..9174c0be 100644 --- a/src/main/java/org/isatools/isacreator/ontologiser/adaptors/InvestigationAdaptor.java +++ b/src/main/java/org/isatools/isacreator/ontologiser/adaptors/InvestigationAdaptor.java @@ -3,8 +3,8 @@ import org.isatools.isacreator.api.utils.InvestigationUtils; import org.isatools.isacreator.api.utils.SpreadsheetUtils; import org.isatools.isacreator.configuration.Ontology; -import org.isatools.isacreator.managers.ApplicationManager; import org.isatools.isacreator.gui.AssaySpreadsheet; +import org.isatools.isacreator.managers.ApplicationManager; import org.isatools.isacreator.model.Assay; import org.isatools.isacreator.model.Investigation; import org.isatools.isacreator.model.Study; @@ -55,17 +55,14 @@ public void replaceTerms(Set annotations) { OntologySourceRefObject ontologySourceRefObject = OntologyUtils.convertOntologyToOntologySourceReferenceObject(sourceOntology); - // adding ontology source in case it has not already been added - OntologyManager.addToUsedOntologySources("annotator", ontologySourceRefObject); - OntologyTerm ontologyTerm = annotation.getAssignedOntology().getOntologyTerm(); // add the term to the ontology history. - OntologyTerm ontologyObject = new OntologyTerm(ontologyTerm.getOntologyTermName(), ontologyTerm.getOntologyTermAccession(), ontologyTerm.getOntologyPurl(), ontologySourceRefObject); + OntologyTerm ontologyObject = new OntologyTerm(ontologyTerm.getOntologyTermName(), ontologyTerm.getOntologyTermAccession(), ontologyTerm.getOntologyTermURI(), ontologySourceRefObject); mappingsForReplacement.put(annotation.getFreeTextTerm(), ontologyObject); - OntologyManager.addToUserHistory(ontologyObject); + OntologyManager.addToOntologyTerms(ontologyObject); } } diff --git a/src/main/java/org/isatools/isacreator/ontologiser/logic/impl/AnnotatorSearchClient.java b/src/main/java/org/isatools/isacreator/ontologiser/logic/impl/AnnotatorSearchClient.java index c10279c0..acb6a8f7 100644 --- a/src/main/java/org/isatools/isacreator/ontologiser/logic/impl/AnnotatorSearchClient.java +++ b/src/main/java/org/isatools/isacreator/ontologiser/logic/impl/AnnotatorSearchClient.java @@ -3,11 +3,10 @@ import org.apache.commons.httpclient.HostConfiguration; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod; +import org.isatools.isacreator.configuration.Ontology; import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies; -import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntology; +import org.isatools.isacreator.ontologymanager.bioportal.jsonresulthandlers.BioPortalAnnotatorResultHandler; import org.isatools.isacreator.ontologymanager.bioportal.model.AnnotatorResult; -import org.isatools.isacreator.ontologymanager.bioportal.utils.BioPortalXMLModifier; -import org.isatools.isacreator.ontologymanager.bioportal.xmlresulthandlers.BioPortalAnnotatorResultHandler; import uk.ac.ebi.utils.io.DownloadUtils; import java.io.File; @@ -27,29 +26,29 @@ */ public class AnnotatorSearchClient { - public static final String BASE_QUERY_URL = "http://rest.bioontology.org/obs/annotator"; + public static final String BASE_QUERY_URL = "http://data.bioontology.org/annotator"; public Map> searchForTerms(Set terms) { - return searchForTerms(terms, AcceptedOntologies.getAllowedOntologyIds(new HashSet()), true); + return searchForTerms(terms, AcceptedOntologies.getAllowedOntologyAcronyms(new HashSet()), true); } public Map> searchForTerms(Set terms, String ontologiesToSearchOn, boolean wholeWordOnly) { try { + String flattenedTerms = flattenSetToString(terms); + HttpClient client = new HttpClient(); PostMethod method = new PostMethod(BASE_QUERY_URL); // Configure the form parameters method.addParameter("wholeWordOnly", wholeWordOnly ? " true" : "false"); - method.addParameter("scored", "true"); - method.addParameter("ontologiesToKeepInResult", ontologiesToSearchOn); - method.addParameter("isVirtualOntologyId", "true"); - method.addParameter("withSynonyms", "true"); - method.addParameter("textToAnnotate", flattenSetToString(terms)); + + method.addParameter("ontologies", ontologiesToSearchOn); + method.addParameter("text", flattenedTerms); method.addParameter("apikey", "fd88ee35-6995-475d-b15a-85f1b9dd7a42"); try { HostConfiguration configuration = new HostConfiguration(); - configuration.setHost("http://rest.bioontology.org"); + configuration.setHost("http://data.bioontology.org"); configuration.setProxy(System.getProperty("http.proxyHost"), Integer.valueOf(System.getProperty("http.proxyPort"))); client.setHostConfiguration(configuration); } catch (Exception e) { @@ -61,7 +60,7 @@ public Map> searchForTerms(Set term String contents = method.getResponseBodyAsString(); method.releaseConnection(); - return processContent(contents, terms); + return processContent(contents, flattenedTerms, terms); } } catch (Exception e) { e.printStackTrace(); @@ -70,28 +69,11 @@ public Map> searchForTerms(Set term return null; } - private Map> processContent(String content, Set terms) throws FileNotFoundException { - - File fileWithNameSpace = BioPortalXMLModifier.addNameSpaceToFile( - createFileForContent(content), "http://bioontology.org/bioportal/annotator#", ""); - + private Map> processContent(String content, String originalText, Set terms) { BioPortalAnnotatorResultHandler handler = new BioPortalAnnotatorResultHandler(); - - System.out.println("File saved in " + fileWithNameSpace.getAbsolutePath()); - - return handler.getSearchResults(fileWithNameSpace.getAbsolutePath(), terms); + return handler.getSearchResults(content, originalText, terms); } - private File createFileForContent(String content) throws FileNotFoundException { - File toSaveAs = new File(DownloadUtils.DOWNLOAD_FILE_LOC + "annotator-result" + DownloadUtils.XML_EXT); - PrintStream ps = new PrintStream(toSaveAs); - ps.print(content); - ps.close(); - - return toSaveAs; - } - - private String flattenSetToString(Set terms) { StringBuilder buffer = new StringBuilder(); for (String term : terms) { diff --git a/src/main/java/org/isatools/isacreator/ontologiser/ui/OntologiserAnnotationPane.java b/src/main/java/org/isatools/isacreator/ontologiser/ui/OntologiserAnnotationPane.java index 58864a41..36274c09 100644 --- a/src/main/java/org/isatools/isacreator/ontologiser/ui/OntologiserAnnotationPane.java +++ b/src/main/java/org/isatools/isacreator/ontologiser/ui/OntologiserAnnotationPane.java @@ -48,7 +48,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.ontologiser.model.SuggestedAnnotation; import org.isatools.isacreator.ontologiser.ui.listrenderer.OntologyAssignedListRenderer; import org.isatools.isacreator.ontologiser.ui.listrenderer.ScoringConfidenceListRenderer; -import org.isatools.isacreator.ontologymanager.BioPortalClient; +import org.isatools.isacreator.ontologymanager.BioPortal4Client; import org.isatools.isacreator.ontologymanager.OntologyService; import org.isatools.isacreator.ontologymanager.bioportal.model.AnnotatorResult; import org.isatools.isacreator.ontologyselectiontool.ViewTermDefinitionUI; @@ -94,7 +94,7 @@ public class OntologiserAnnotationPane extends JPanel { private static OntologyService ontologyService; static { - ontologyService = new BioPortalClient(); + ontologyService = new BioPortal4Client(); } public OntologiserAnnotationPane(Map> searchMatches) { @@ -153,13 +153,13 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { setAnnotation(selectedItem, currentlySelectedOntologyTerm); - System.out.println("Term purl " + selectedItem.getAnnotatorResult().getOntologyTerm().getOntologyPurl() + + System.out.println("Term purl " + selectedItem.getAnnotatorResult().getOntologyTerm().getOntologyTermURI() + " Name = " + selectedItem.getAnnotatorResult().getOntologyTerm().getOntologyTermName()); definitionUI.setContent( new OntologyBranch(selectedItem.getAnnotatorResult().getOntologyTerm().getOntologyTermAccession(), selectedItem.getAnnotatorResult().getOntologyTerm().getOntologyTermName()), - selectedItem.getAnnotatorResult().getOntologySource().getOntologyVersion(), ontologyService); + selectedItem.getAnnotatorResult().getOntologySource().getOntologyID(), ontologyService); repaint(); // should clear other selections to ensure that other suggested terms are not mapping to the ontology result too @@ -173,7 +173,7 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { listPanel.add(suggestedTermListContainer); definitionUI.setBorder(new TitledBorder(new RoundedBorder(UIHelper.LIGHT_GREEN_COLOR, 6), "Definition", - TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_JUSTIFICATION, UIHelper.VER_11_BOLD, UIHelper.DARK_GREEN_COLOR)); + TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, UIHelper.VER_11_BOLD, UIHelper.DARK_GREEN_COLOR)); listPanel.add(definitionUI); diff --git a/src/main/java/org/isatools/isacreator/ontologiser/ui/OntologiserUI.java b/src/main/java/org/isatools/isacreator/ontologiser/ui/OntologiserUI.java index bebf849b..8891687e 100644 --- a/src/main/java/org/isatools/isacreator/ontologiser/ui/OntologiserUI.java +++ b/src/main/java/org/isatools/isacreator/ontologiser/ui/OntologiserUI.java @@ -37,6 +37,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.ontologiser.ui; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.common.dialog.ConfirmationDialog; import org.isatools.isacreator.gui.ISAcreator; import org.isatools.isacreator.ontologiser.adaptors.ContentAdaptor; @@ -48,7 +50,10 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.border.EtchedBorder; +import javax.swing.border.LineBorder; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; @@ -92,8 +97,7 @@ public class OntologiserUI extends JDialog { @InjectedResource private ImageIcon termTaggerLogo, termTaggerIcon, termTaggerIconOver, visualiseInactiveIcon, visualiseIcon, visualiseIconOver, - suggestInactiveIcon, suggestIcon, suggestIconOver, clearAllInactiveIcon, clearAllIcon, clearAllIconOver, helpIcon, helpIconOver, closeWindowIcon, - closeWindowIconOver, doneIcon, doneIconOver, buttonPanelFiller, working; + suggestInactiveIcon, suggestIcon, suggestIconOver, clearAllInactiveIcon, clearAllIcon, clearAllIconOver, helpIcon, helpIconOver, working; private OntologiserAnnotationPane annotationPane; private OntologyHelpPane helpPane; @@ -276,22 +280,12 @@ public void run() { } private Container createSouthPanel() { - Box southPanel = Box.createHorizontalBox(); + JPanel southPanel = new JPanel(new BorderLayout()); + southPanel.setBorder(new LineBorder(Color.white, 4)); - final JLabel closeButton = new JLabel(closeWindowIcon); - closeButton.addMouseListener(new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent mouseEvent) { - closeButton.setIcon(closeWindowIconOver); - } - - @Override - public void mouseExited(MouseEvent mouseEvent) { - closeButton.setIcon(closeWindowIcon); - } - - @Override - public void mousePressed(MouseEvent mouseEvent) { + JButton closeButton = new FlatButton(ButtonType.RED, "Close"); + closeButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { if (confirmChoice == null || !confirmChoice.isShowing()) { confirmChoice = new ConfirmationDialog(); @@ -321,21 +315,10 @@ public void run() { } }); - final JLabel export = new JLabel(doneIcon); - export.addMouseListener(new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent mouseEvent) { - export.setIcon(doneIconOver); - } - - @Override - public void mouseExited(MouseEvent mouseEvent) { - export.setIcon(doneIcon); - } - - @Override - public void mousePressed(MouseEvent mouseEvent) { + JButton export = new FlatButton(ButtonType.GREEN, "Apply Annotations"); + export.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { Thread performer = new Thread(new Runnable() { public void run() { if (annotationPane != null) { @@ -352,9 +335,10 @@ public void run() { } }); - southPanel.add(closeButton); - southPanel.add(new JLabel(buttonPanelFiller)); - southPanel.add(export); + + southPanel.add(closeButton, BorderLayout.WEST); + + southPanel.add(export, BorderLayout.EAST); return southPanel; } diff --git a/src/main/java/org/isatools/isacreator/ontologybrowsingutils/WSOntologyTreeCreator.java b/src/main/java/org/isatools/isacreator/ontologybrowsingutils/WSOntologyTreeCreator.java index a08406db..32b6ffa9 100644 --- a/src/main/java/org/isatools/isacreator/ontologybrowsingutils/WSOntologyTreeCreator.java +++ b/src/main/java/org/isatools/isacreator/ontologybrowsingutils/WSOntologyTreeCreator.java @@ -39,10 +39,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.configuration.Ontology; import org.isatools.isacreator.configuration.OntologyBranch; import org.isatools.isacreator.configuration.RecommendedOntology; -import org.isatools.isacreator.ontologymanager.BioPortalClient; -import org.isatools.isacreator.ontologymanager.OLSClient; +import org.isatools.isacreator.ontologymanager.BioPortal4Client; import org.isatools.isacreator.ontologymanager.OntologyService; -import org.isatools.isacreator.ontologymanager.bioportal.model.OntologyPortal; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; import org.isatools.isacreator.ontologymanager.utils.OntologyUtils; import org.isatools.isacreator.utils.StringProcessing; @@ -77,7 +75,7 @@ public class WSOntologyTreeCreator implements OntologyTreeCreator, TreeSelection private Container browser; private static OntologyService bioportalClient; - private static OntologyService olsClient; + private JTree tree; public WSOntologyTreeCreator(Container browser, JTree tree) { @@ -85,8 +83,7 @@ public WSOntologyTreeCreator(Container browser, JTree tree) { this.tree = tree; observers = new ArrayList(); - bioportalClient = new BioPortalClient(); - olsClient = new OLSClient(); + bioportalClient = new BioPortal4Client(); } public DefaultMutableTreeNode createTree(Map ontologies) throws FileNotFoundException { @@ -167,12 +164,8 @@ private void initiateOntologyVisualization() { } if (!addedTerms) { - if (service instanceof BioPortalClient) { addInformationToTree(ontologyNode, "Problem loading " + recommendedOntology.getOntology().getOntologyAbbreviation() + " (version " + recommendedOntology.getOntology().getOntologyVersion() + ") from BioPortal!"); - } else { - addInformationToTree(ontologyNode, "Problem loading " + recommendedOntology.getOntology().getOntologyAbbreviation() + " from OLS"); - } } } updateTree(); @@ -185,11 +178,11 @@ private void initiateOntologyVisualization() { } private OntologyService getCorrectOntologyService(Ontology ontology) { - return OntologyUtils.getSourceOntologyPortal(ontology) == OntologyPortal.OLS ? olsClient : bioportalClient; + return bioportalClient; } private String getCorrectQueryString(OntologyService service, Ontology ontology) { - return service instanceof BioPortalClient ? ontology.getOntologyVersion() : ontology.getOntologyAbbreviation(); + return ontology.getOntologyVersion(); } public void updateTree() { @@ -247,9 +240,7 @@ private void addTermToTree(DefaultMutableTreeNode parent, OntologyTerm ontologyT DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(new OntologyTreeItem( - new OntologyBranch((OntologyUtils.getSourceOntologyPortal(ontology) == OntologyPortal.OLS) - ? ontologyTerm.getOntologySource() + ":" + ontologyTerm.getOntologyTermAccession() - : ontologyTerm.getOntologyTermAccession(), ontologyTerm.getOntologyTermName()), ontology)); + new OntologyBranch(ontologyTerm.getOntologyTermAccession(), ontologyTerm.getOntologyTermName()), ontology)); if (parent == null) { parent = rootNode; @@ -288,9 +279,7 @@ public void expandTreeToReachTerm(OntologyTerm term) { OntologyService service = getCorrectOntologyService(ontology); - Map nodeParentsFromRoot = service.getAllTermParents((OntologyUtils.getSourceOntologyPortal(ontology) == OntologyPortal.OLS) - ? term.getOntologySource() + ":" + term.getOntologyTermAccession() - : term.getOntologyTermAccession(), service instanceof OLSClient ? term.getOntologySource() : term.getOntologySourceInformation().getSourceVersion()); + Map nodeParentsFromRoot = service.getAllTermParents(term.getOntologyTermAccession(), term.getOntologySourceInformation().getSourceVersion()); TreePath lastPath = null; for (OntologyTerm node : nodeParentsFromRoot.values()) { diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/BioPortal4Client.java b/src/main/java/org/isatools/isacreator/ontologymanager/BioPortal4Client.java new file mode 100644 index 00000000..08da64c4 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/ontologymanager/BioPortal4Client.java @@ -0,0 +1,160 @@ +package org.isatools.isacreator.ontologymanager; + +import org.apache.log4j.Logger; +import org.isatools.isacreator.configuration.Ontology; +import org.isatools.isacreator.configuration.RecommendedOntology; +import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies; +import org.isatools.isacreator.ontologymanager.bioportal.jsonresulthandlers.BioPortalSearchResultHandler; +import org.isatools.isacreator.ontologymanager.common.OntologyTerm; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.*; + +/** + * Created by eamonnmaguire on 17/12/2013. + */ +public class BioPortal4Client implements OntologyService { + + private static final Logger log = Logger.getLogger(BioPortal4Client.class); + + public static final String DIRECT_ONTOLOGY_URL = "http://bioportal.bioontology.org/ontologies/"; + public static final String REST_URL = "http://data.bioontology.org/"; + + private BioPortalSearchResultHandler handler; + + private Map> cachedNodeChildrenQueries; + + public BioPortal4Client() { + this.handler = new BioPortalSearchResultHandler(); + this.cachedNodeChildrenQueries = new HashMap>(); + } + + public Map getOntologyNames() { + return AcceptedOntologies.getOntologySourceToNames(); + } + + /** + * Retrieves an OntologyTerm given the URI of a term and the ontology bioPortal URI + * @param termId + * @param ontology + * @return + */ + public OntologyTerm getTerm(String termId, String ontology) { + return handler.getTermMetadata(termId, ontology); + } + + public Map> exactSearch(String term, String ontology) { + return handler.getSearchResults(term, ontology, null, true); + } + + public Map getTermMetadata(String termId, String ontology) { + return handler.getTermMetadata(termId, ontology).getComments(); + } + + public Map> getTermsByPartialNameFromSource(String term, String source, boolean reverseOrder) { + + term = correctTermForHTTPTransport(term); + + Map> searchResult = handler.getSearchResults(term, source, null); + + return convertStringKeyMapToOntologySourceRefKeyMap(searchResult); + } + + public Map> getTermsByPartialNameFromSource(String term, List recommendedOntology) { + term = correctTermForHTTPTransport(term); + + // need to accommodate more complicated search strings in the case where the recommended source contains the branch + // to search under as well! + Map> result = new HashMap>(); + + // need to do a loop over all branches and do a single query on those recommended ontologies only defined + // by the source, not the branch. + for (RecommendedOntology ro : recommendedOntology) { + + if (ro.getOntology() != null) { + + String subtree = null; + if (ro.getBranchToSearchUnder() != null && !ro.getBranchToSearchUnder().getBranchIdentifier().equals("")) { + subtree = ro.getBranchToSearchUnder().getBranchIdentifier(); + } + + Map> searchResult = handler.getSearchResults(term, ro.getOntology().getOntologyAbbreviation(), subtree); + + if (searchResult != null) { + result.putAll(convertStringKeyMapToOntologySourceRefKeyMap(searchResult)); + } + } + } + return result; + } + + public Map getOntologyVersions() { + + return AcceptedOntologies.getOntologySourceToVersion(); + } + + public Map getOntologyRoots(String ontologyAbbreviation) { +// http://data.bioontology.org/ontologies/EFO/classes/roots + if (!cachedNodeChildrenQueries.containsKey(ontologyAbbreviation)) { + cachedNodeChildrenQueries.put(ontologyAbbreviation, handler.getOntologyRoots(ontologyAbbreviation)); + } + return cachedNodeChildrenQueries.get(ontologyAbbreviation); + } + + public Map getTermParent(String termAccession, String ontology) { + + return null; + } + + public Map getTermChildren(String termAccession, String ontologyAbbreviation) { + String uniqueReferenceId = ontologyAbbreviation + "-" + termAccession + "-children"; + if (!cachedNodeChildrenQueries.containsKey(uniqueReferenceId)) { + cachedNodeChildrenQueries.put(uniqueReferenceId, handler.getTermChildren(termAccession, ontologyAbbreviation)); + } + return cachedNodeChildrenQueries.get(uniqueReferenceId); + } + + public Map getAllTermParents(String termAccession, String ontologyAbbreviation) { + + String uniqueReferenceId = ontologyAbbreviation + "-" + termAccession + "-parents"; + if (!cachedNodeChildrenQueries.containsKey(uniqueReferenceId)) { + cachedNodeChildrenQueries.put(uniqueReferenceId, handler.getTermParents(termAccession, ontologyAbbreviation)); + } + return cachedNodeChildrenQueries.get(uniqueReferenceId); + + } + + public Collection getAllOntologies() { + return handler.getAllOntologies().values(); + } + + private Map> convertStringKeyMapToOntologySourceRefKeyMap(Map> toConvert) { + + Map> convertedMap = new HashMap>(); + for (String ontologyId : toConvert.keySet()) { + Ontology ontology = AcceptedOntologies.getAcceptedOntologies().get(ontologyId); + if (ontology != null) { + OntologySourceRefObject osro = new OntologySourceRefObject(ontology.getOntologyAbbreviation(), + ontologyId, ontology.getOntologyVersion(), ontology.getOntologyDisplayLabel()); + + convertedMap.put(osro, new ArrayList()); + + for (OntologyTerm ontologyTerm : toConvert.get(ontologyId)) { + ontologyTerm.setOntologySourceInformation(osro); + convertedMap.get(osro).add(ontologyTerm); + } + + } + } + return convertedMap; + } + + private String correctTermForHTTPTransport(String term) { + try { + return URLEncoder.encode(term, "UTF-8"); + } catch (UnsupportedEncodingException e) { + return term; + } + } +} diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/BioPortalClient.java b/src/main/java/org/isatools/isacreator/ontologymanager/BioPortalClient.java index 70bfc69a..a64a2bbf 100644 --- a/src/main/java/org/isatools/isacreator/ontologymanager/BioPortalClient.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/BioPortalClient.java @@ -36,13 +36,10 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi */ package org.isatools.isacreator.ontologymanager; -import bioontology.bioportal.classBean.schema.SuccessDocument; import org.apache.commons.collections15.map.ListOrderedMap; import org.apache.log4j.Logger; import org.isatools.isacreator.configuration.Ontology; import org.isatools.isacreator.configuration.RecommendedOntology; -import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies; -import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntology; import org.isatools.isacreator.ontologymanager.bioportal.utils.BioPortalXMLModifier; import org.isatools.isacreator.ontologymanager.bioportal.xmlresulthandlers.BioPortalClassBeanResultHandler; import org.isatools.isacreator.ontologymanager.bioportal.xmlresulthandlers.BioPortalOntologyListResultHandler; @@ -69,10 +66,13 @@ public class BioPortalClient implements OntologyService { private Set noChildren; - private List ontologies; + private static List ontologies; + + // + private static Map ontologyNames = new HashMap(); + private static Map ontologyVersions = new HashMap(); + private static Map ontologyFiles = new HashMap(); - private Map ontologySources; - private Map ontologyVersions; private Map searchResults; private Map> cachedNodeChildrenQueries; @@ -83,18 +83,13 @@ public class BioPortalClient implements OntologyService { * Constructor */ public BioPortalClient() { - ontologySources = new HashMap(); - ontologyVersions = new HashMap(); searchResults = new HashMap(); cachedNodeChildrenQueries = new HashMap>(); noChildren = new HashSet(); } - public List getAllOntologies() { - return getAllOntologies(false); - } - public List getAllOntologies(boolean loadAll) { + public List getAllOntologies() { if (ontologies == null || ontologies.size() == 0) { @@ -110,8 +105,9 @@ public List getAllOntologies(boolean loadAll) { if (ontologies != null) { for (Ontology ontology : ontologies) { + ontologyNames.put(ontology.getOntologyAbbreviation(), ontology.getOntologyDisplayLabel()); ontologyVersions.put(ontology.getOntologyAbbreviation(), ontology.getOntologyVersion()); - ontologySources.put(ontology.getOntologyAbbreviation(), ontology.getOntologyDisplayLabel()); + ontologyFiles.put(ontology.getOntologyAbbreviation(), ontology.getOntologyID()); } } } @@ -154,11 +150,39 @@ public String getLatestOntologyVersion(String ontologyId) { } public Map getOntologyNames() { - if (ontologySources.size() == 0) { + if (ontologyNames.size() == 0) { + getAllOntologies(); + } + return ontologyNames; + } + + public OntologyTerm getTerm(String termId, String ontology) { + return null; + } + + public Map> exactSearch(String term, String ontology) { + return null; + } + + public String getOntologySourceFile(String sourceName) { + if (ontologyFiles.size() == 0) { + getAllOntologies(); + } + return "http://bioportal.bioontology.org/ontologies/"+ontologyFiles.get(sourceName); + } + + public String getOntologyDescription(String sourceName) { + if (ontologyFiles.size() == 0) { getAllOntologies(); } + return ontologyNames.get(sourceName); + } - return ontologySources; + public String getOntologyVersion(String sourceName) { + if (ontologyFiles.size() == 0) { + getAllOntologies(); + } + return ontologyVersions.get(sourceName); } public Map getOntologyVersions() { @@ -183,8 +207,8 @@ public OntologyTerm getTermInformation(String termAccession, String ontologyVers if (searchResults.containsKey(ontologyVersion + "-" + termAccession)) { bpo = searchResults.get(ontologyVersion + "-" + termAccession); if (bpo != null) { - if (bpo.getOntologyPurl() == null || - bpo.getOntologyPurl().trim().equals("")) { + if (bpo.getOntologyTermURI() == null || + bpo.getOntologyTermURI().trim().equals("")) { bpo = performMetadataQuery(termAccession, ontologyVersion); searchResults.put(ontologyVersion + "-" + termAccession, bpo); @@ -261,16 +285,12 @@ public Map> getTermsByPartialNameFro } } } - - return result; } private Map> downloadAndProcessBranch(String term, String searchString) { String downloadLocation = DownloadUtils.DOWNLOAD_FILE_LOC + term + DownloadUtils.XML_EXT; - - DownloadUtils.downloadFile(searchString, downloadLocation); BioPortalSearchBeanResultHandler handler = new BioPortalSearchBeanResultHandler(); @@ -278,12 +298,7 @@ private Map> downloadAndProcessBranc File fileWithNameSpace = BioPortalXMLModifier.addNameSpaceToFile(new File(downloadLocation), "http://bioontology.org/bioportal/resultBeanSchema#", ""); if (fileWithNameSpace != null) { - Map> result = handler.getSearchResults(fileWithNameSpace.getAbsolutePath()); - - //commeting this out for now to check performance improvement - //updateOntologyManagerWithOntologyInformation(); - - return result; + return handler.getSearchResults(fileWithNameSpace.getAbsolutePath()); } return new HashMap>(); @@ -302,6 +317,7 @@ public Map> getTermsByPartialNameFro ? "?" : "/?ontologyids=" +source + "&") + API_KEY; log.info("search string " + searchString); + System.out.println("search string " + searchString); Map> searchResult = downloadAndProcessBranch(term, searchString); @@ -310,38 +326,6 @@ public Map> getTermsByPartialNameFro return searchResult == null ? new HashMap>() : searchResult; } - /* - //commeting this out for now to check performance improvement - - private void updateOntologyManagerWithOntologyInformation() { - if (!doneOntologyCheck) { - for (AcceptedOntology ao : AcceptedOntologies.values()) { - Ontology o = getOntologyById(ao.getOntologyID()); - if (o != null) { - OntologyManager.addOLSOntologyDefinitions(Collections.singletonMap(o.getOntologyAbbreviation(), - o.getOntologyDisplayLabel()), Collections.singletonMap(o.getOntologyAbbreviation(), o.getOntologyVersion())); - } - } - doneOntologyCheck = true; - } - } - */ - - private String constructSourceStringFromAllowedOntologies() { - String allowedOntologies = ""; - - int count = 0; - for (AcceptedOntology ao : AcceptedOntologies.values()) { - allowedOntologies += ao.getOntologyID(); - if (count < AcceptedOntologies.values().size() - 1) { - allowedOntologies += ","; - } - count++; - } - - return allowedOntologies; - } - /** * Finds the root in an ontology * diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/OLSClient.java b/src/main/java/org/isatools/isacreator/ontologymanager/OLSClient.java deleted file mode 100755 index 61ca2d66..00000000 --- a/src/main/java/org/isatools/isacreator/ontologymanager/OLSClient.java +++ /dev/null @@ -1,451 +0,0 @@ -/** - ISAcreator is a component of the ISA software suite (http://www.isa-tools.org) - - License: - ISAcreator is licensed under the Common Public Attribution License version 1.0 (CPAL) - - EXHIBIT A. CPAL version 1.0 - The contents of this file are subject to the CPAL version 1.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://isa-tools.org/licenses/ISAcreator-license.html. - The License is based on the Mozilla Public License version 1.1 but Sections - 14 and 15 have been added to cover use of software over a computer network and - provide for limited attribution for the Original Developer. In addition, Exhibit - A has been modified to be consistent with Exhibit B. - - Software distributed under the License is distributed on an AS IS basis, - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for - the specific language governing rights and limitations under the License. - - The Original Code is ISAcreator. - The Original Developer is the Initial Developer. The Initial Developer of the - Original Code is the ISA Team (Eamonn Maguire, eamonnmag@gmail.com; - Philippe Rocca-Serra, proccaserra@gmail.com; Susanna-Assunta Sansone, sa.sanson@gmail.com; - http://www.isa-tools.org). All portions of the code written by the ISA Team are - Copyright (c) 2007-2011 ISA Team. All Rights Reserved. - - EXHIBIT B. Attribution Information - Attribution Copyright Notice: Copyright (c) 2008-2011 ISA Team - Attribution Phrase: Developed by the ISA Team - Attribution URL: http://www.isa-tools.org - Graphic Image provided in the Covered Code as file: http://isa-tools.org/licenses/icons/poweredByISAtools.png - Display of Attribution Information is required in Larger Works which are defined in the CPAL as a work which combines Covered Code or portions thereof with code not governed by the terms of the CPAL. - - Sponsors: - The ISA Team and the ISA software suite have been funded by the EU Carcinogenomics project (http://www.carcinogenomics.eu), the UK BBSRC (http://www.bbsrc.ac.uk), the UK NERC-NEBC (http://nebc.nerc.ac.uk) and in part by the EU NuGO consortium (http://www.nugo.org/everyone). - */ - -package org.isatools.isacreator.ontologymanager; - -import org.apache.commons.collections15.map.ListOrderedMap; -import org.apache.log4j.Logger; -import org.isatools.isacreator.configuration.Ontology; -import org.isatools.isacreator.configuration.RecommendedOntology; -import org.isatools.isacreator.ontologymanager.common.OntologyTerm; -import uk.ac.ebi.ook.web.services.Query; -import uk.ac.ebi.ook.web.services.QueryServiceLocator; - -import javax.xml.rpc.ServiceException; -import java.rmi.RemoteException; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * This is the main business class that will communicate with the OLS - * webservice and serve data to the GUI classes. - * - * @author Majority of class Supplied By R.G. Cote (EBI), developer of the OLS web service. - */ -public class OLSClient implements OntologyService { - private static final Logger log = Logger.getLogger(OLSClient.class.getName()); - - public static final String DIRECT_ONTOLOGY_URL = "http://www.ebi.ac.uk/ontology-lookup/browse.do?ontName="; - - private Map ontologies; - - public OLSClient() { - this.ontologies = new HashMap(); - } - - public Map getOntologies() { - - if (ontologies.size() == 0) { - - Map ontologyNames = getOntologyNames(); - Map ontologyVersions = getOntologyVersions(); - - String olsVersion = ontologyVersions.get("OLS"); - - for (String ontologyAbbreviation : ontologyNames.keySet()) { - OntologySourceRefObject newOntology = - new OntologySourceRefObject(ontologyAbbreviation, DIRECT_ONTOLOGY_URL + ontologyAbbreviation, olsVersion, ontologyNames.get(ontologyAbbreviation)); - ontologies.put(ontologyAbbreviation, newOntology); - } - } - return ontologies; - } - - public Map getOntologyNames() { - Map answer = new HashMap(); - QueryServiceLocator locator = new QueryServiceLocator(); - - try { - Query service = locator.getOntologyQuery(); - Map ontologyNames = service.getOntologyNames(); - - if (ontologyNames != null) { - answer = ontologyNames; - } - } catch (RemoteException e) { - log.error("remote exception thrown: " + e.getMessage()); - } catch (Exception e) { - log.error( - "unexpected exception occurred. probably as a result of no internet connection!"); - } - - return answer; - } - - /** - * calls OLS webserver and gets metadata for a termId - * - * @param termId - Term Id to search for - * @param ontology - Ontology to search in. - * @return Map of metadata - key is data type, value is data value. - * Map should not be null. - */ - public Map getTermMetadata(String termId, String ontology) { - Map answer = new ListOrderedMap(); - QueryServiceLocator locator = new QueryServiceLocator(); - - try { - Query service = locator.getOntologyQuery(); - Map metadata = service.getTermMetadata(termId, ontology); - System.out.println("ontology is " + ontology); - answer.put("accession", termId); - if (metadata != null) { - answer.putAll(metadata); - } - } catch (RemoteException e) { - log.error("remote exception thrown " + e.getMessage()); - } catch (Exception e) { - log.error( - "unexpected exception occurred. probably as a result of no internet connection!"); - } - - return answer; - } - - - /** - * Search the OLS for a partial term in an ontology source. - * - * @param term - Term to search for - * @param source - Ontology source to search in e.g. EFO - * @param reverseOrder - Whether or not to flip the mappings from term -> source:accession to source:accession -> term. - * @return - Mapping of source:accession to term, depending on reverse order being true or false. - */ - public Map> getTermsByPartialNameFromSource(String term, - String source, boolean reverseOrder) { - Map answer = new HashMap(); - - try { - QueryServiceLocator locator = new QueryServiceLocator(); - Query service = locator.getOntologyQuery(); - Map matchingTerms = service.getTermsByName(term, source, reverseOrder); - - if (matchingTerms != null) { - answer = matchingTerms; - } - } catch (RemoteException e) { - log.error("remote exception thrown " + e.getMessage()); - } catch (Exception e) { - log.error( - "unexpected exception occurred. probably as a result of no internet connection!"); - } - return processOntologyResult(answer); - } - - /** - * Return the current version of the OLS - * - * @return a String representation of the version. String should not be null. - */ - public Map getOntologyVersions() { - QueryServiceLocator locator = new QueryServiceLocator(); - Map versions = new HashMap(); - - try { - Query service = locator.getOntologyQuery(); - String tempVersion = service.getVersion(); - Pattern p = Pattern.compile("[a-zA-Z]+ [0-9]+.[0-9]+"); - Matcher m = p.matcher(tempVersion); - - if (m.find()) { - tempVersion = tempVersion.substring(m.start(), m.end()); - } - versions.put(OntologyManager.OLS, tempVersion); - } catch (RemoteException e) { - log.error("remote exception thrown " + e.getMessage()); - } catch (Exception e) { - log.error( - "unexpected exception occurred. probably as a result of no internet connection!"); - } - - return versions; - } - - /** - * Get the root terms of an Ontology - * - * @param ontologyAbbreviation - The ontology to get the root terms for e.g. EFO, ENVO, CHEBI - * @return Map representing the Root terms with the Source:Accession as the key and the Label as the Value - */ - public Map getOntologyRoots(String ontologyAbbreviation) { - QueryServiceLocator locator = new QueryServiceLocator(); - Map answer = new HashMap(); - try { - Query service = locator.getOntologyQuery(); - Map rootTerms = service.getRootTerms(ontologyAbbreviation); - if (rootTerms != null) { - answer = rootTerms; - } - } catch (RemoteException re) { - log.error("remote exception thrown " + re.getMessage()); - } catch (ServiceException e) { - log.error("service exception thrown " + e.getMessage()); - } - return processOntologyHierarchyResult(answer); - } - - /** - * Get the parent terms of an Ontology - * - * @param termAccession - Source:Accession string for the term to get children for - * @param ontologyAbbreviation - The ontology to get the root terms for e.g. EFO, ENVO, CHEBI - * @return Map representing the child terms with the Source:Accession as the key and the Label as the Value - */ - public Map getTermParent(String termAccession, String ontologyAbbreviation) { - QueryServiceLocator locator = new QueryServiceLocator(); - Map answer = new HashMap(); - try { - Query service = locator.getOntologyQuery(); - Map parentTerms = service.getTermParents(termAccession, ontologyAbbreviation); - if (parentTerms != null) { - answer = parentTerms; - } - } catch (RemoteException re) { - log.error("remote exception thrown " + re.getMessage()); - } catch (ServiceException e) { - log.error("service exception thrown " + e.getMessage()); - } - return processOntologyHierarchyResult(answer); - } - - /** - * Get the root terms of an Ontology - * - * @param termAccession - Source:Accession string for the term to get children for - * @param ontologyAbbreviation - The ontology to get the root terms for e.g. EFO, ENVO, CHEBI - * @return Map representing the child terms with the Source:Accession as the key and the Label as the Value - */ - public Map getTermChildren(String termAccession, String ontologyAbbreviation) { - QueryServiceLocator locator = new QueryServiceLocator(); - Map answer = new HashMap(); - try { - Query service = locator.getOntologyQuery(); - Map childTerms = service.getTermChildren(termAccession, ontologyAbbreviation, 1, null); - if (childTerms != null) { - answer = childTerms; - } - } catch (RemoteException re) { - log.error("remote exception thrown " + re.getMessage()); - } catch (ServiceException e) { - log.error("service exception thrown " + e.getMessage()); - } - return processOntologyHierarchyResult(answer); - } - - public Map> getTermsByPartialNameFromSource(String term, List recommendedOntology) { - Map> searchResult = new HashMap>(); - - for (RecommendedOntology ro : recommendedOntology) { - Map> subSearchResult = null; - - if (ro.getBranchToSearchUnder() == null) { - - subSearchResult = getTermsByPartialNameFromSource(term, ro.getOntology().getOntologyAbbreviation(), false); - - } else { - subSearchResult = getTermsByPartialNameFromSource(term, ro); - } - - if (subSearchResult != null) { - searchResult.putAll(subSearchResult); - } - } - - return searchResult; - } - - /** - * Retrieves the terms with labels matching a particular String (term) and which occur under a specific branch - * in an ontology. - * - * @param termLabel - String representing the term label being searched for e.g. 'cancer' - * @param recommendedOntology - Recommended ontology to be searched under e.g. OBI_0003212 - * @return Map comprising of the matching term source:accession pair to the term label e.g. ENVO:00002216 -> vegetable. - */ - private Map> getTermsByPartialNameFromSource(String termLabel, RecommendedOntology recommendedOntology) { - - Map> filteredResult = new HashMap>(); - // first step is to search for the term in OLS - Map> termSearchResult = getTermsByPartialNameFromSource(termLabel, recommendedOntology.getOntology().getOntologyAbbreviation(), false); - - Set termsInBranch = getAllTermsAccessionsBelowBranch(recommendedOntology.getBranchToSearchUnder().getBranchIdentifier(), - recommendedOntology.getOntology().getOntologyAbbreviation()); - - // now, since we have the terms in the branch, we simple filter out any Terms in termSearchResult which do not have - // accessions in the termsInBranch Set - for (OntologySourceRefObject termSource : termSearchResult.keySet()) { - - for (OntologyTerm term : termSearchResult.get(termSource)) { - - if (termsInBranch.contains(term.getOntologySource() + ":" + term.getOntologyTermAccession())) { - - if (!filteredResult.containsKey(termSource)) { - filteredResult.put(termSource, new ArrayList()); - } - - filteredResult.get(termSource).add(term); - } - } - } - - return filteredResult; - } - - private Map> processOntologyResult(Map ontologyAccessionToTerm) { - Map> processedResult = new HashMap>(); - - for (String accession : ontologyAccessionToTerm.keySet()) { - - String source = ""; - - if (accession.contains(":")) { - source = accession.substring(0, accession.lastIndexOf(":")); - } else { - source = "NEWT"; - } - - - OntologySourceRefObject ontologySource = getOntologySourceReferenceForOntology(source); - - if (ontologySource != null) { - if (!processedResult.containsKey(ontologySource)) { - processedResult.put(ontologySource, new ArrayList()); - } - - String tmpAccession = accession.replaceAll(source, "").replaceAll(":", "").trim(); - - processedResult.get(ontologySource).add(createOntologyTerm(source, tmpAccession, ontologyAccessionToTerm.get(accession))); - } - } - - return processedResult; - } - - private Map processOntologyHierarchyResult(Map ontologyAccessionToTerm) { - Map processedResult = new HashMap(); - - for (String accession : ontologyAccessionToTerm.keySet()) { - if (accession.contains(":")) { - String source = accession.substring(0, accession.lastIndexOf(":")); - - String tmpAccession = accession.replaceAll(source, "").replaceAll(":", "").trim(); - - processedResult.put(accession, createOntologyTerm(source, tmpAccession, ontologyAccessionToTerm.get(accession))); - } - } - - return processedResult; - } - - private OntologyTerm createOntologyTerm(String source, String accession, String name) { - OntologyTerm term = new OntologyTerm(name, accession, null, getOntologySourceReferenceForOntology(source)); - term.addToComments("Service Provider", OntologyManager.OLS); - term.addToComments("Source", source); - term.addToComments("accession", accession); - return term; - } - - private OntologySourceRefObject getOntologySourceReferenceForOntology(String source) { - Map ontologySources = getOntologies(); - return ontologySources.get(source); - } - - /** - * We only get the accessions so as to reduce the memory needs. Accessions are sufficient for our purposes - * Recursively called method. - * - * @param branchTerm - branch in the ontology to search under. - * @param ontologyAbbreviation - abbreviation of Ontology being searched under e.g. ENVO for the Environment Ontology - * @return Set representing all the terms under a particular branch. - */ - public Set getAllTermsAccessionsBelowBranch(String branchTerm, String ontologyAbbreviation) { - // need to retrieve and add all terms below the branch - Set result = new HashSet(); - - Map branchChildren = getTermChildren(branchTerm, ontologyAbbreviation); - - if (branchChildren.size() > 0) { - for (String childTermAccession : branchChildren.keySet()) { - // we recursively call this method to get all of the children and add the subsequent result to the Set - result.addAll(getAllTermsAccessionsBelowBranch(childTermAccession, ontologyAbbreviation)); - } - } - result.add(branchTerm); - - return result; - } - - /** - * Method will search the Ontology space to determine the parents of a given term. This can then be used in searches to make - * location of a term within an Ontology much quicker. - * - * @param termAccession - the accession of the term being searched on e.g. ENVO:00003073 - * @param ontologyAbbreviation - Abbreviation for the Ontology e.g. ENVO - * @return Map representing the parents of the Term - */ - public Map getAllTermParents(String termAccession, String ontologyAbbreviation) { - // we use a ListOrderedSet so that order is maintained! This is important since order will dictate the way - // we search within the tree whilst navigating from parent A -> B -> C to get to term ENVO:00001234. If the parents were in - // an incorrect order, we'd end up with something like B -> A -> C. - Map result = new ListOrderedMap(); - - Map termParents = getTermParent(termAccession, ontologyAbbreviation); - if (termParents.size() > 0) { - for (String parentTermAccession : termParents.keySet()) { - result.putAll(getAllTermParents(parentTermAccession, ontologyAbbreviation)); - } - } - - result.putAll(termParents); - - return result; - } - - public List getAllOntologies() { - List ontologies = new ArrayList(); - for (OntologySourceRefObject ontologySource : getOntologies().values()) { - ontologies.add(new Ontology("", ontologySource.getSourceVersion(), ontologySource.getSourceName(), ontologySource.getSourceDescription())); - } - - return ontologies; - } - - public String getOntologyURL() { - return DIRECT_ONTOLOGY_URL; - } -} diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/OntologyManager.java b/src/main/java/org/isatools/isacreator/ontologymanager/OntologyManager.java index 9a34b416..fb4152d3 100644 --- a/src/main/java/org/isatools/isacreator/ontologymanager/OntologyManager.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/OntologyManager.java @@ -40,11 +40,13 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.configuration.Ontology; import org.isatools.isacreator.configuration.RecommendedOntology; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; +import org.isatools.isacreator.settings.ISAcreatorProperties; import java.util.*; /** * @author Eamonn Maguire + * @author Alejandra Gonzalez-Beltran * @date Feb 9, 2009 */ public class OntologyManager { @@ -53,35 +55,116 @@ public class OntologyManager { public static final String OLS = "OLS"; public static final String BIO_PORTAL = "BioPortal"; - private static Map> usedOntologySources = new HashMap>(); + private static boolean foundURIs = false; - private static Map completeOntologySourceDictionary = new HashMap(); + //All the ontologySourceRefObject, indexed by their (abbreviated) name + private static Map ontologySources = new HashMap(); - private static Map ontologySelectionHistory = new HashMap(); + //a map with for each of the ontology terms used for annotating the ISA-TAB dataset + private static Map ontologyTerms = new HashMap(); - public static ResultCache>> searchResultCache = new ResultCache>>(); + //a map with = history of the ontology terms used - maintained in the user profile + private static Map ontologyTermHistory = new HashMap(); + //map with - used for ontology terms for which it is not possible to find a URI + private static Map noURITermMap = new HashMap(); + + private static ResultCache>> searchResultCache = new ResultCache>>(); + + private static void addToNoURITermMap(String k, OntologyTerm v){ + noURITermMap.put(k, v); + } + + public static void foundURI(){ + foundURIs = true; + } + + /*** ontologyTermHistory methods ****/ + + public static void addToOntologyTermHistory(OntologyTerm oo) { + if (oo!=null) + addToOntologyTermHistory(oo.getShortForm(), oo); + } public static Map getOntologySelectionHistory() { - return ontologySelectionHistory; + return ontologyTerms; } - public static void setOntologySelectionHistory(Map ontologySelectionHistory) { - OntologyManager.ontologySelectionHistory = new HashMap(); - OntologyManager.ontologySelectionHistory.putAll(ontologySelectionHistory); + /** + * + * @param label + * @param term + */ + public static void addToOntologyTermHistory(String label, OntologyTerm term) { + if (ISAcreatorProperties.getOntologyTermURIProperty()) + if (term.getOntologyTermURI()!=null && !term.getOntologyTermURI().equals("")) + ontologyTermHistory.put(label, term); + else + ontologyTermHistory.put(label, term); + } - public static void addToOntologySelectionHistory(Map ontologySelectionHistory) { - OntologyManager.ontologySelectionHistory.putAll(ontologySelectionHistory); + public static void setOntologyTermHistory(Map history) { + if (history!=null && history.size()==0) + return; + ontologyTermHistory = new HashMap(); + ontologyTermHistory.putAll(history); + } + + public static void clearOntologyTermHistory() { + ontologyTermHistory.clear(); + } + /*** end of ontologyTermHistory methods ****/ + + /*** ontologyTerms methods ****/ + public static void addToOntologyTerms(Map osh) { + for(String key: osh.keySet()) + addToOntologyTerms(key, osh.get(key)); + } + + public static void addToOntologyTerms(Collection terms) { + for(OntologyTerm term: terms) + addToOntologyTerms(term.getShortForm(), term); + } + + public static void addToOntologyTerms(OntologyTerm term){ + if (term!=null) + addToOntologyTerms(term.getShortForm(), term); + } + + public static void addToOntologyTerms(String label, OntologyTerm term) { + if (noURITermMap.containsKey(label)) + return; + if (ontologyTerms.containsKey(label)) + return; + if (ISAcreatorProperties.getOntologyTermURIProperty() && term.getOntologyTermURI()!=null && !term.getOntologyTermURI().equals("")){ + ontologyTerms.put(label, term); + addToOntologyTermHistory(label, term); + //TODO do I need this? --- addToUsedOntologies(term.getOntologySourceInformation()); + } else { + addToNoURITermMap(label, term); + } + } + + public static int getOntologyTermsSize(){ + return ontologyTerms.size(); + } + + public static Collection getOntologyTermsValues(){ + return ontologyTerms.values(); + } + + public static Set getOntologyTermsKeySet(){ + return ontologyTerms.keySet(); } public static OntologyTerm getOntologyTerm(String key){ - return ontologySelectionHistory.get(key); + return ontologyTerms.get(key); } - public static String getOntologyTermPurl(String dataValue){ + public static String getOntologyTermURI(String dataValue){ OntologyTerm ontologyTerm = getOntologyTerm(dataValue); - return ontologyTerm!=null? ontologyTerm.getOntologyPurl() : null; + return ontologyTerm!=null? ontologyTerm.getOntologyTermURI() : null; } public static String getOntologyTermAccession(String dataValue){ @@ -94,29 +177,57 @@ public static String getOntologyTermSource(String dataValue){ return ontologyTerm!=null? ontologyTerm.getOntologySource() : null; } + public static void clearOntologyTerms(){ + ontologyTerms.clear(); + } + + /** + * Retrieves the ontology sources corresponding to used ontology terms + * + * + * @return + */ + public static Set getOntologiesUsed(){ + Set set = new HashSet(); + for(OntologyTerm ot: ontologyTerms.values()){ + set.add(ot.getOntologySourceInformation()); + } + return set; + } + + /*** end of ontologyTerms methods ****/ + + /*** ontologySources methods ****/ public static void placeRecommendedOntologyInformationInRecords(Collection recommendedOntologies) { if (recommendedOntologies != null) { for (RecommendedOntology ro : recommendedOntologies) { Ontology o = ro.getOntology(); - completeOntologySourceDictionary.put(o.getOntologyAbbreviation(), + ontologySources.put(o.getOntologyAbbreviation(), new OntologySourceRefObject(o.getOntologyAbbreviation(), "", o.getOntologyVersion(), o.getOntologyDisplayLabel())); } } } public static String getOntologyDescription(String ontologyAbbreviation) { - if (completeOntologySourceDictionary.containsKey(ontologyAbbreviation)) { - return completeOntologySourceDictionary.get(ontologyAbbreviation).getSourceDescription(); + if (ontologySources.containsKey(ontologyAbbreviation)) { + return ontologySources.get(ontologyAbbreviation).getSourceDescription(); } - return ""; } public static String getOntologyVersion(String ontologyAbbreviation) { - if (completeOntologySourceDictionary.containsKey(ontologyAbbreviation)) { - return completeOntologySourceDictionary.get(ontologyAbbreviation).getSourceVersion(); + if (ontologySources.containsKey(ontologyAbbreviation)) { + return ontologySources.get(ontologyAbbreviation).getSourceVersion(); + } + + return ""; + } + + public static String getSourceFile(String ontologyAbbreviation) { + if (ontologySources.containsKey(ontologyAbbreviation)) { + return ontologySources.get(ontologyAbbreviation).getSourceFile(); } return ""; @@ -125,128 +236,114 @@ public static String getOntologyVersion(String ontologyAbbreviation) { public static void addOLSOntologyDefinitions(Map ontologyAbbrevToNames, Map ontologyAbbrevToVersion) { for (String ontologyAbbreviation : ontologyAbbrevToNames.keySet()) { - completeOntologySourceDictionary.put(ontologyAbbreviation, new OntologySourceRefObject(ontologyAbbreviation, "", + ontologySources.put(ontologyAbbreviation, new OntologySourceRefObject(ontologyAbbreviation, "", ontologyAbbrevToVersion.get(ontologyAbbreviation), ontologyAbbrevToNames.get(ontologyAbbreviation))); } } - /** - * Add an OntologySourceRefObject to the list of defined Ontologies - * - * @param osro - OntologySourceReferenceObject to be added. - */ - public static void addToUsedOntologies(OntologySourceRefObject osro) { - String key = getValidKey(); - removeAnyPreexistingOntologySourceRefForUpdate(key, osro); - getOntologiesUsed(key).add(osro); + public static Collection getOntologySources(){ + return ontologySources.values(); } - private static String getValidKey() { - if (usedOntologySources.isEmpty()) { - usedOntologySources.put("investigation", new ArrayList()); - return "investigation"; - } else { - for (String key : usedOntologySources.keySet()) { - return key; - } - } - - return "investigation"; + public static void clearOntologySources(){ + ontologySources.clear(); } - public static void clearUsedOntologies(String investigationAccession) { - if (usedOntologySources.containsKey(investigationAccession)) { - usedOntologySources.remove(investigationAccession); - } + public static void setOntologySources(Set ontologiesUsed) { + for (OntologySourceRefObject sourceRefObject: ontologiesUsed) + ontologySources.put(sourceRefObject.getSourceName(), sourceRefObject); } - public static List getOntologiesUsed(String investigationAccession) { - return usedOntologySources.get(investigationAccession); + public static OntologySourceRefObject getOntologySourceReferenceObjectByAbbreviation(String source) { + for (OntologySourceRefObject ontologySourceRefObject : getOntologySources()) { + if (source.equalsIgnoreCase(ontologySourceRefObject.getSourceName())) { + return ontologySourceRefObject; + } + } + return null; } + /*** end of ontologySources methods ***/ - public static List getOntologiesUsed() { - List sourceRefObjects = new ArrayList(); - Set addedOntologySourceRefs = new HashSet(); + /*** searchResultCache methods ***/ - for (String investigationAcc : usedOntologySources.keySet()) { - - List refObjects = usedOntologySources.get(investigationAcc); - - for (OntologySourceRefObject refObject : refObjects) { - - if (!addedOntologySourceRefs.contains(refObject.getSourceName())) { - sourceRefObjects.add(refObject); + public static void clearResultCache() { + searchResultCache.clearCache(); + } - addedOntologySourceRefs.add(refObject.getSourceName()); - } - } + public static Map> getSearchResultCacheValue(String key) { + return searchResultCache.get(key); + } - } + public static void addToCache(String key, Map> value) { + searchResultCache.put(key, value); + } - return sourceRefObjects; + public static boolean searchResultCacheContainsKey(String key){ + return searchResultCache.containsKey(key); } - public static void setOntologiesUsed(String investigationAccession, List ontologiesUsed) { - usedOntologySources.put(investigationAccession, ontologiesUsed); + public static int searchResultCacheSize(){ + return searchResultCache.size(); } + /*** end of searchResultCache methods ***/ - public static void removeAnyPreexistingOntologySourceRefForUpdate(String investigationAccession, OntologySourceRefObject osro) { - if (usedOntologySources.get(investigationAccession) != null) { - Iterator iterator = usedOntologySources.get(investigationAccession).iterator(); - while (iterator.hasNext()) + /*** getURIMappingInfo ***/ - if (iterator.next().getSourceName().equals(osro.getSourceName())) { - iterator.remove(); - return; - } - } - } + public static String getURIMappingInfo(){ - public static void clearReferencedOntologySources() { - usedOntologySources.clear(); - } + if (!foundURIs) + return ""; - public static void clearUserHistory() { - ontologySelectionHistory.clear(); - } + StringBuilder builder = new StringBuilder(); - public static void addToUsedOntologySources(String investigationAccession, List ontologiesToAdd) { - for (OntologySourceRefObject osro : ontologiesToAdd) { - addToUsedOntologySources(investigationAccession, osro); + if (!noURITermMap.isEmpty()){ + builder.append("ISA-TAB dataset loaded with URIs"); + builder.append("\nTerms that could not be mapped to a URI: "); + for(String key: noURITermMap.keySet()){ + OntologyTerm ot = noURITermMap.get(key); + builder.append("\n\t"+ ot.getOntologyTermName()+ "\t"+ ot.getOntologySource() +"\t" + ot.getOntologyTermURI()); + } } - } - public static void addToUsedOntologySources(String investigationAccession, OntologySourceRefObject ontologyToAdd) { - removeAnyPreexistingOntologySourceRefForUpdate(investigationAccession, ontologyToAdd); + if (!ontologyTerms.isEmpty()){ + builder.append("\nTerms that could be mapped to a URI: "); + for(String key: ontologyTerms.keySet()){ + OntologyTerm ot = ontologyTerms.get(key); + builder.append("\n\t"+ ot.getOntologyTermName() + "\t"+ ot.getOntologySource() +"\t" + ot.getOntologyTermURI()); + } + } + return builder.toString(); + } - if (!usedOntologySources.containsKey(investigationAccession)) { - usedOntologySources.put(investigationAccession, new ArrayList()); - } - usedOntologySources.get(investigationAccession).add(ontologyToAdd); - } + public static String getURIMappingInfoHTML(){ + if (!foundURIs) + return ""; - public static void newInvestigation(String investigationAccession) { - usedOntologySources.put(investigationAccession, new ArrayList()); - } + StringBuilder builder = new StringBuilder(); - public static void addToUserHistory(OntologyTerm oo) { - if (oo!=null) - ontologySelectionHistory.put(oo.getUniqueId(), oo); - } + if (!noURITermMap.isEmpty()){ + builder.append("ISA-TAB dataset loaded with URIs"); + builder.append("

Terms that could not be mapped to a URI: "); + for(String key: noURITermMap.keySet()){ + OntologyTerm ot = noURITermMap.get(key); + builder.append("

"+ ot.getOntologySource()+":"+ot.getOntologyTermName() +"

"); + } + } - public static OntologySourceRefObject getOntologySourceReferenceObjectByAbbreviation(String source) { - for (OntologySourceRefObject ontologySourceRefObject : getOntologiesUsed()) { - if (source.equalsIgnoreCase(ontologySourceRefObject.getSourceName())) { - return ontologySourceRefObject; + if (!ontologyTerms.isEmpty()){ + builder.append("
Terms that could be mapped to a URI: "); + for(String key: ontologyTerms.keySet()){ + OntologyTerm ot = ontologyTerms.get(key); + builder.append("

"+ ot.getOntologySource()+":"+ot.getOntologyTermName() +" -> " + ot.getOntologyTermURI()+"

"); } + } - return null; + return builder.toString(); } - public static void clearResultCache() { - searchResultCache.clearCache(); - } + /*** end of getURIMappingInfo ***/ + } diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/OntologyQueryAdapter.java b/src/main/java/org/isatools/isacreator/ontologymanager/OntologyQueryAdapter.java deleted file mode 100644 index 601f3edb..00000000 --- a/src/main/java/org/isatools/isacreator/ontologymanager/OntologyQueryAdapter.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - ISAcreator is a component of the ISA software suite (http://www.isa-tools.org) - - License: - ISAcreator is licensed under the Common Public Attribution License version 1.0 (CPAL) - - EXHIBIT A. CPAL version 1.0 - The contents of this file are subject to the CPAL version 1.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://isa-tools.org/licenses/ISAcreator-license.html. - The License is based on the Mozilla Public License version 1.1 but Sections - 14 and 15 have been added to cover use of software over a computer network and - provide for limited attribution for the Original Developer. In addition, Exhibit - A has been modified to be consistent with Exhibit B. - - Software distributed under the License is distributed on an AS IS basis, - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for - the specific language governing rights and limitations under the License. - - The Original Code is ISAcreator. - The Original Developer is the Initial Developer. The Initial Developer of the - Original Code is the ISA Team (Eamonn Maguire, eamonnmag@gmail.com; - Philippe Rocca-Serra, proccaserra@gmail.com; Susanna-Assunta Sansone, sa.sanson@gmail.com; - http://www.isa-tools.org). All portions of the code written by the ISA Team are - Copyright (c) 2007-2011 ISA Team. All Rights Reserved. - - EXHIBIT B. Attribution Information - Attribution Copyright Notice: Copyright (c) 2008-2011 ISA Team - Attribution Phrase: Developed by the ISA Team - Attribution URL: http://www.isa-tools.org - Graphic Image provided in the Covered Code as file: http://isa-tools.org/licenses/icons/poweredByISAtools.png - Display of Attribution Information is required in Larger Works which are defined in the CPAL as a work which combines Covered Code or portions thereof with code not governed by the terms of the CPAL. - - Sponsors: - The ISA Team and the ISA software suite have been funded by the EU Carcinogenomics project (http://www.carcinogenomics.eu), the UK BBSRC (http://www.bbsrc.ac.uk), the UK NERC-NEBC (http://nebc.nerc.ac.uk) and in part by the EU NuGO consortium (http://www.nugo.org/everyone). - */ - - -package org.isatools.isacreator.ontologymanager; - -import org.isatools.isacreator.configuration.Ontology; -import org.isatools.isacreator.ontologymanager.bioportal.model.OntologyPortal; -import org.isatools.isacreator.ontologymanager.utils.OntologyUtils; - -public class OntologyQueryAdapter { - - public static final int GET_ID = 1; - public static final int GET_VERSION = 2; - - Ontology ontology; - - public OntologyQueryAdapter(Ontology ontology) { - this.ontology = ontology; - } - - public String getOntologyQueryString(int type) { - - if(OntologyUtils.getSourceOntologyPortal(ontology) == OntologyPortal.OLS) { - return ontology.getOntologyAbbreviation(); - } else { - switch (type) { - case GET_ID: - return ontology.getOntologyID(); - - case GET_VERSION: - return ontology.getOntologyVersion(); - - default: - return ontology.getOntologyVersion(); - } - } - } - - -} diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/OntologyService.java b/src/main/java/org/isatools/isacreator/ontologymanager/OntologyService.java index 9f1cc3e6..d50320ed 100644 --- a/src/main/java/org/isatools/isacreator/ontologymanager/OntologyService.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/OntologyService.java @@ -42,6 +42,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.configuration.RecommendedOntology; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -50,6 +51,10 @@ public interface OntologyService { public Map getOntologyNames(); + public OntologyTerm getTerm(String termId, String ontology); + + public Map> exactSearch(String term, String ontology); + public Map getTermMetadata(String termId, String ontology); public Map> getTermsByPartialNameFromSource(String term, String source, boolean reverseOrder); @@ -95,8 +100,9 @@ public Map> getTermsByPartialNameFro */ public Map getAllTermParents(String termAccession, String ontology); - public String getOntologyURL(); - public List getAllOntologies(); + //public String getOntologyURL(); + + public Collection getAllOntologies(); } diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/OntologySourceRefObject.java b/src/main/java/org/isatools/isacreator/ontologymanager/OntologySourceRefObject.java index e82230bd..fc793c82 100755 --- a/src/main/java/org/isatools/isacreator/ontologymanager/OntologySourceRefObject.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/OntologySourceRefObject.java @@ -37,7 +37,9 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.ontologymanager; +import org.isatools.isacreator.configuration.Ontology; import org.isatools.isacreator.model.ISASection; +import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies; import java.io.Serializable; @@ -56,25 +58,46 @@ public class OntologySourceRefObject extends ISASection implements Serializable, public static final String SOURCE_VERSION = "Term Source Version"; public static final String SOURCE_DESCRIPTION = "Term Source Description"; - public OntologySourceRefObject() { super(); } + public OntologySourceRefObject(String sourceName){ + super(); + fieldValues.put(SOURCE_NAME, sourceName); + completeFields(); + } + /** * @param sourceName - e.g. GO - * @param sourceFile - e.g. URL - * @param sourceVersion - e.g. 0.2.1 + * @param sourceFile - e.g. URL (e.g. the BioPortal virtual id) + * @param sourceVersion - e.g. 0.2.1 or the BioPortal version id * @param sourceDescription e.g. Gene Ontology */ public OntologySourceRefObject(String sourceName, String sourceFile, String sourceVersion, String sourceDescription) { + super(); fieldValues.put(SOURCE_NAME, sourceName); fieldValues.put(SOURCE_FILE, sourceFile); fieldValues.put(SOURCE_VERSION, sourceVersion); fieldValues.put(SOURCE_DESCRIPTION, sourceDescription); + completeFields(); } + public void completeFields(){ + if (getSourceName()==null) + return; + String ontologyId = "http://data.bioontology.org/ontologies/"+getSourceName(); + + Ontology associatedOntologySource = AcceptedOntologies.getAcceptedOntologies().get(ontologyId); + + if (associatedOntologySource==null) + return; + + setSourceFile(associatedOntologySource.getOntologyID()); + setSourceVersion( associatedOntologySource.getOntologyVersion()); + setSourceDescription(associatedOntologySource.getOntologyDisplayLabel()); + } public String getSourceDescription() { return fieldValues.get(SOURCE_DESCRIPTION); @@ -119,4 +142,48 @@ public int compareTo(OntologySourceRefObject o) { return getSourceName().compareToIgnoreCase(o.getSourceName()); } } + + public boolean equals(Object object){ + if (object == null) + return false; + if (object == this) + return true; + if (!(object instanceof OntologySourceRefObject)) + return false; + + OntologySourceRefObject sourceRefObject = (OntologySourceRefObject) object; + boolean result = true; + if (getSourceName()!=null && sourceRefObject.getSourceName()!=null) + result = result && (getSourceName().equals(sourceRefObject.getSourceName())); + + if (getSourceDescription()!=null && sourceRefObject.getSourceDescription()!=null) + result = result && getSourceDescription().equals(sourceRefObject.getSourceDescription()); + + if (getSourceFile()!=null && sourceRefObject.getSourceFile()!=null) + result = result && getSourceFile().equals(sourceRefObject.getSourceFile()); + + if (getSourceVersion()!=null && sourceRefObject.getSourceFile()!=null) + result = result && getSourceVersion().equals(sourceRefObject.getSourceVersion()); + + return result; + } + + public int hashCode(){ + int result = 0; + + if (getSourceName()!=null) + result += getSourceName().hashCode(); + + if (getSourceDescription()!=null) + result += getSourceDescription().hashCode(); + + if (getSourceFile()!=null) + result += getSourceFile().hashCode(); + + if (getSourceVersion()!=null) + result += getSourceVersion().hashCode(); + + return result; + } + } diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntologies.java b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntologies.java index df0efcaf..4f1df254 100644 --- a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntologies.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntologies.java @@ -38,8 +38,10 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.ontologymanager.bioportal.io; -import java.util.List; -import java.util.Set; +import org.apache.commons.lang.StringUtils; +import org.isatools.isacreator.configuration.Ontology; + +import java.util.*; /** * AcceptedOntologies @@ -49,10 +51,18 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi */ public class AcceptedOntologies { - private static List acceptedOntologies; + private static Map acceptedOntologies; + + // This is used to cache lookups on ontology sources, e.g. EFO to their equivalent ID in BioPortal + private static Map ontologySourceToIDCache; static { + updateAcceptedOntologies(); + } + + public static void updateAcceptedOntologies() { acceptedOntologies = AcceptedOntologiesLoader.getAcceptedOntologies(); + ontologySourceToIDCache = new HashMap(); } /** @@ -62,21 +72,48 @@ public class AcceptedOntologies { * @return when 1123 is supplied, OBI will be returned */ public static String getOntologyAbbreviationFromId(String ontologyId) { - for (AcceptedOntology ontology : acceptedOntologies) { - if (ontology.getOntologyID().equals(ontologyId)) { - return ontology.getOntologyAbbreviation(); + if(acceptedOntologies.containsKey(ontologyId)) + return acceptedOntologies.get(ontologyId).getOntologyAbbreviation(); + return null; + } + + + public static Map getOntologySourceToNames() { + Map ontologySourceToName = new HashMap(); + for (Ontology ontology : acceptedOntologies.values()) { + ontologySourceToName.put(ontology.getOntologyAbbreviation(), ontology.getOntologyDisplayLabel()); + } + return ontologySourceToName; + } + + public static Map getOntologySourceToVersion() { + Map ontologySourceToName = new HashMap(); + for (Ontology ontology : acceptedOntologies.values()) { + ontologySourceToName.put(ontology.getOntologyAbbreviation(), ontology.getOntologyVersion()); + } + return ontologySourceToName; + } + + public static String getOntologyIdForAbbreviation(String abbreviation) { + if(ontologySourceToIDCache.containsKey(abbreviation)) return ontologySourceToIDCache.get(abbreviation); + for(Ontology ontology : acceptedOntologies.values()) { + if(ontology.getOntologyAbbreviation().equals(abbreviation)) { + ontologySourceToIDCache.put(abbreviation, ontology.getOntologyID()); + return ontology.getOntologyID(); } } + return null; } - public static String getAllowedOntologyIds(Set toIgnore) { + + public static String getAllowedOntologyAcronyms(Set toIgnore) { StringBuilder allowedOntologies = new StringBuilder(); int count = 0; - for (AcceptedOntology ontology : acceptedOntologies) { - if (!toIgnore.contains(ontology)) { - allowedOntologies.append(ontology.getOntologyID()); + for (Ontology ontology : acceptedOntologies.values()) { + if (!toIgnore.contains(ontology) && StringUtils.trimToNull(ontology.getOntologyAbbreviation()) != null) { + allowedOntologies.append(ontology.getOntologyAbbreviation()); if (count != acceptedOntologies.size() - 1) { allowedOntologies.append(","); } @@ -87,7 +124,13 @@ public static String getAllowedOntologyIds(Set toIgnore) { return allowedOntologies.toString(); } - public static List values() { + + + public static Map getAcceptedOntologies() { return acceptedOntologies; } + + public static Collection values() { + return acceptedOntologies.values(); + } } \ No newline at end of file diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntologiesLoader.java b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntologiesLoader.java index d9c5b629..5401c774 100644 --- a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntologiesLoader.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntologiesLoader.java @@ -1,6 +1,7 @@ package org.isatools.isacreator.ontologymanager.bioportal.io; import org.isatools.isacreator.configuration.Ontology; +import org.isatools.isacreator.ontologymanager.BioPortal4Client; import org.isatools.isacreator.ontologymanager.BioPortalClient; import org.w3c.dom.Attr; import org.w3c.dom.Document; @@ -20,9 +21,9 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; +import java.util.*; /** * Loads a file defining allowed BioPortal ontologies into a file. @@ -33,19 +34,19 @@ */ public class AcceptedOntologiesLoader { - private static final String FILE = "/defaults/bioportal-accepted-ontologies.xml"; + private static final String FILE = "ProgramData/cache/bioportal-ontology-detail.cache"; - public static void populateAcceptedOntologies(){ + public static void populateAcceptedOntologies() { System.out.println("_____populateAcceptedOntologies()____"); - BioPortalClient client = new BioPortalClient(); + BioPortal4Client client = new BioPortal4Client(); - List ontologies = client.getAllOntologies(true); + Collection ontologies = client.getAllOntologies(); System.out.println("Found " + ontologies.size() + " ontologies \n"); - try{ + try { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); @@ -68,6 +69,18 @@ public static void populateAcceptedOntologies(){ abbreviation.setValue(ontology.getOntologyAbbreviation()); acceptedOntologyElement.setAttributeNode(abbreviation); + Attr name = doc.createAttribute("name"); + name.setValue(ontology.getOntologyDisplayLabel()); + acceptedOntologyElement.setAttributeNode(name); + + Attr version = doc.createAttribute("version"); + version.setValue(ontology.getSubmissionId()); + acceptedOntologyElement.setAttributeNode(version); + + Attr uri = doc.createAttribute("uri"); + uri.setValue(ontology.getHomepage()); + acceptedOntologyElement.setAttributeNode(uri); + Attr id = doc.createAttribute("id"); id.setValue(ontology.getOntologyID()); acceptedOntologyElement.setAttributeNode(id); @@ -76,60 +89,60 @@ public static void populateAcceptedOntologies(){ } - String baseDir = System.getProperty("basedir"); - - if ( baseDir == null ) - { - try{ - baseDir = new File( "." ).getCanonicalPath(); - }catch(IOException e){ - e.printStackTrace(); - } - } - // write the content into xml file TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); - String fullPath = baseDir+ File.separator + "src" + File.separator + "main"+ File.separator + "resources" + FILE; - System.out.println("Printing out file "+ fullPath); + String fullPath = FILE; File outputFile = new File(fullPath); StreamResult result = new StreamResult(outputFile.getAbsolutePath()); - - //output to standard output for debugging - //StreamResult result = new StreamResult(System.out); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); transformer.transform(source, result); - }catch(ParserConfigurationException pce){ + } catch (ParserConfigurationException pce) { pce.printStackTrace(); - } catch(TransformerException tfe){ + } catch (TransformerException tfe) { tfe.printStackTrace(); } } - public static List getAcceptedOntologies() { - XPathReader reader = new XPathReader(AcceptedOntologiesLoader.class.getResourceAsStream(FILE)); + public static Map getAcceptedOntologies() { + Map acceptedOntologies = new HashMap(); + + if(!new File(FILE).exists()) { + // then create it + new File(FILE).getParentFile().mkdirs(); + populateAcceptedOntologies(); + } + + try { + XPathReader reader = new XPathReader(new FileInputStream(FILE)); + NodeList sections = (NodeList) reader.read("/acceptedOntologies/acceptedOntology", XPathConstants.NODESET); - List acceptedOntologies = new ArrayList(); + if (sections.getLength() > 0) { + for (int sectionIndex = 0; sectionIndex <= sections.getLength(); sectionIndex++) { + String id = (String) reader.read("/acceptedOntologies/acceptedOntology[" + sectionIndex + "]/@id", XPathConstants.STRING); + String abbreviation = (String) reader.read("/acceptedOntologies/acceptedOntology[" + sectionIndex + "]/@abbreviation", XPathConstants.STRING); + String name = (String) reader.read("/acceptedOntologies/acceptedOntology[" + sectionIndex + "]/@name", XPathConstants.STRING); + String version = (String) reader.read("/acceptedOntologies/acceptedOntology[" + sectionIndex + "]/@version", XPathConstants.STRING); + String homepage = (String) reader.read("/acceptedOntologies/acceptedOntology[" + sectionIndex + "]/@uri", XPathConstants.STRING); - NodeList sections = (NodeList) reader.read("/acceptedOntologies/acceptedOntology", XPathConstants.NODESET); + Ontology ontology = new Ontology(id, version, abbreviation, name); + ontology.setHomePage(homepage); - if (sections.getLength() > 0) { - for (int sectionIndex = 0; sectionIndex <= sections.getLength(); sectionIndex++) { - String id = (String) reader.read("/acceptedOntologies/acceptedOntology[" + sectionIndex + "]/@id", XPathConstants.STRING); - String abbreviation = (String) reader.read("/acceptedOntologies/acceptedOntology[" + sectionIndex + "]/@abbreviation", XPathConstants.STRING); - acceptedOntologies.add(new AcceptedOntology(id, abbreviation)); + acceptedOntologies.put(id, ontology); + } } + } catch (IOException ioe) { + ioe.printStackTrace(); } return acceptedOntologies; diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntology.java b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntology.java deleted file mode 100644 index f8f7a3c7..00000000 --- a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/io/AcceptedOntology.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.isatools.isacreator.ontologymanager.bioportal.io; - -/** - * Created by the ISA team - * - * @author Eamonn Maguire (eamonnmag@gmail.com) - *

- * Date: 02/05/2012 - * Time: 11:13 - */ -public class AcceptedOntology { - - private String ontologyID; - private String ontologyAbbreviation; - - AcceptedOntology(String ontologyID, String ontologyAbbreviation) { - this.ontologyID = ontologyID; - this.ontologyAbbreviation = ontologyAbbreviation; - } - - @Override - public String toString() { - return ontologyID; - } - - public String getOntologyAbbreviation() { - return ontologyAbbreviation; - } - - public String getOntologyID() { - return ontologyID; - } - -} diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/jsonresulthandlers/BioPortalAnnotatorResultHandler.java b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/jsonresulthandlers/BioPortalAnnotatorResultHandler.java new file mode 100644 index 00000000..a8adb5d9 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/jsonresulthandlers/BioPortalAnnotatorResultHandler.java @@ -0,0 +1,89 @@ +package org.isatools.isacreator.ontologymanager.bioportal.jsonresulthandlers; + +import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies; +import org.isatools.isacreator.ontologymanager.bioportal.model.AnnotatorResult; +import org.isatools.isacreator.ontologymanager.common.OntologyTerm; + +import javax.json.*; +import java.io.StringReader; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + + +public class BioPortalAnnotatorResultHandler { + + BioPortalSearchResultHandler searchHandler; + + public BioPortalAnnotatorResultHandler() { + this(new BioPortalSearchResultHandler()); + } + + public BioPortalAnnotatorResultHandler(BioPortalSearchResultHandler searchHandler) { + this.searchHandler = searchHandler; + } + + public Map> getSearchResults(String queryContents, String originalText, Set originalTerms) { + + // map from search term to a map of full id to the ontology term. + Map> result = new HashMap>(); + // for each token, we wan to find the matches and add them to the list + + StringReader reader = new StringReader(queryContents); + + JsonReader rdr = Json.createReader(reader); + + JsonArray obj = rdr.readArray(); + + for (JsonObject annotationItem : obj.getValuesAs(JsonObject.class)) { + + AnnotatorResult annotatorResult = extractAnnotatorResult(annotationItem); + + if (annotatorResult != null) { + + String originalTerm = originalText.substring(annotatorResult.getStartIndex()-1, annotatorResult.getEndIndex()); + if (originalTerms.contains(originalTerm)) { + + if (!result.containsKey(originalTerm)) { + result.put(originalTerm, new HashMap()); + } + + String ontologySource = annotatorResult.getOntologySource().getOntologyAbbreviation(); + + if (!result.get(originalTerm).containsKey(ontologySource)) { + result.get(originalTerm).put(ontologySource, annotatorResult); + } + } + } + } + + return result; + } + + private AnnotatorResult extractAnnotatorResult(JsonObject resultItem) { + + JsonObject annotatedClass = resultItem.getJsonObject("annotatedClass"); + JsonObject links = annotatedClass.getJsonObject("links"); + + String ontologyId = links.getJsonString("ontology").toString(); + + OntologyTerm ontologyTerm = searchHandler.getTermMetadata(annotatedClass.getString("@id"), ontologyId); + + if (ontologyTerm != null) { + + JsonNumber from = null, to = null; + + for (JsonObject annotation : resultItem.getJsonArray("annotations").getValuesAs(JsonObject.class)) { + from = annotation.getJsonNumber("from"); + to = annotation.getJsonNumber("to"); + } + + if (from != null && to != null) { + return new AnnotatorResult(ontologyTerm, AcceptedOntologies.getAcceptedOntologies().get(ontologyId), 1, + from.intValue(), to.intValue()); + } + } + + return null; + } +} diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/jsonresulthandlers/BioPortalSearchResultHandler.java b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/jsonresulthandlers/BioPortalSearchResultHandler.java new file mode 100644 index 00000000..55c63dd4 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/jsonresulthandlers/BioPortalSearchResultHandler.java @@ -0,0 +1,420 @@ +package org.isatools.isacreator.ontologymanager.bioportal.jsonresulthandlers; + +import org.apache.commons.collections15.map.ListOrderedMap; +import org.apache.commons.httpclient.HostConfiguration; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.lang.StringUtils; +import org.isatools.isacreator.configuration.Ontology; +import org.isatools.isacreator.ontologymanager.BioPortal4Client; +import org.isatools.isacreator.ontologymanager.OntologyManager; +import org.isatools.isacreator.ontologymanager.OntologySourceRefObject; +import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies; +import org.isatools.isacreator.ontologymanager.common.OntologyTerm; + +import javax.json.*; +import java.io.StringReader; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class BioPortalSearchResultHandler { + + public static final String API_KEY = "fd88ee35-6995-475d-b15a-85f1b9dd7a42"; + public static final String PARENTS = "ancestors"; + public static final String CHILDREN = "children"; + + + public Map> getSearchResults(String term, String ontologyIds, String subtree) { + return getSearchResults(term, ontologyIds, subtree, false); + } + + /** + * Returns the result of the search operation + * + * @param term - the string being searched for + * @param ontologyIds - the ontologies the search is being restricted to + * @param @nullable subtree - a subtree, if any to be searched under (optional) + * @return - Map from the id of the ontology to the list of terms found under it. + */ + public Map> getSearchResults(String term, String ontologyIds, String subtree, boolean exactMatch) { + + // map from ontology id to the list of terms found for that id. + Map> result = new HashMap>(); + + String content = querySearchEndpoint(term, ontologyIds, subtree, exactMatch); + + StringReader reader = new StringReader(content); + + JsonReader rdr = Json.createReader(reader); + + JsonObject obj = rdr.readObject(); + JsonArray results = obj.getJsonArray("collection"); + + if (results==null) + return result; + + for (JsonObject resultItem : results.getValuesAs(JsonObject.class)) { + + String ontologyId = extractOntologyId(resultItem); + + if (!result.containsKey(ontologyId)) { + result.put(ontologyId, new ArrayList()); + } + + OntologyTerm ontologyTerm = createOntologyTerm(resultItem); + + result.get(ontologyId).add(ontologyTerm); + + } + + return result; + } + + private String extractOntologyId(JsonObject ontologyItemJsonDictionary) { + JsonObject links = ontologyItemJsonDictionary.getJsonObject("links"); + return links.getJsonString("ontology").toString(); + } + + private void extractDefinitionFromOntologyTerm(JsonObject ontologyItemJsonDictionary, OntologyTerm ontologyTerm) { + JsonArray definitions = ontologyItemJsonDictionary.getJsonArray("definition"); + if (definitions != null && definitions.size() > 0) { + ontologyTerm.addToComments("definition", definitions.get(0).toString()); + } + } + + private void extractSynonymsFromOntologyTerm(JsonObject ontologyItemJsonDictionary, OntologyTerm ontologyTerm) { + JsonArray synonyms = ontologyItemJsonDictionary.getJsonArray("synonyms"); + if (synonyms != null && synonyms.size() > 0) { + StringBuilder synonymList = new StringBuilder(); + int count = 0; + for (JsonValue value : synonyms.getValuesAs(JsonValue.class)) { + synonymList.append(value.toString()); + if (count != synonyms.size() - 1) { + synonymList.append(","); + } + count++; + } + ontologyTerm.addToComments("synonyms", synonymList.toString()); + } + } + + + + private String querySearchEndpoint(String term, String ontologyIds, String subtree, boolean exactMatch) { + try { + HttpClient client = new HttpClient(); + PostMethod method = new PostMethod(BioPortal4Client.REST_URL + "search"); + + // Configure the form parameters + method.addParameter("q", term); + + if (StringUtils.trimToNull(subtree) != null) { + method.addParameter("subtree", subtree); + + if (ontologyIds!=null) + method.addParameter("ontology", ontologyIds); + } else if(!ontologyIds.equals("all")) { + method.addParameter("ontologies", ontologyIds); + } + + + method.addParameter("apikey", API_KEY); + method.addParameter("pagesize", "500"); +// method.addParameter("no_links", "true"); + method.addParameter("no_context", "true"); + + if (exactMatch){ + method.addParameter("exact_match", "true"); + } + + try { + setHostConfiguration(client); + } catch (Exception e) { + System.err.println("Problem encountered setting host configuration for search"); + } + +// System.out.println(method.getURI().toString()); +// for(NameValuePair pair : method.getParameters()) { +// System.out.println(pair.getName() + "=" + pair.getValue()); +// } + + int statusCode = client.executeMethod(method); + if (statusCode != -1) { + + String contents = method.getResponseBodyAsString(); + method.releaseConnection(); + return contents; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public Map getAllOntologies() { + + Map result = new HashMap(); + String content = queryOntologyEndpoint(); + + StringReader reader = new StringReader(content); + JsonReader rdr = Json.createReader(reader); + JsonArray array = rdr.readArray(); + + for (JsonObject resultItem : array.getValuesAs(JsonObject.class)) { + addOntology(result, resultItem); + } + + return result; + } + + private void addOntology(Map result, JsonObject resultItem) { + JsonObject ontology = resultItem.getJsonObject("ontology"); + JsonValue summaryOnly = ontology.get("summaryOnly"); + if (summaryOnly != null) { + Ontology newOntology = new Ontology(ontology.getString("@id"), "version", ontology.getString("acronym"), ontology.getString("name")); + if (!newOntology.getOntologyAbbreviation().contains("test") && + !newOntology.getOntologyDisplayLabel().contains("test")) { + + String version = resultItem.get("version").toString(); + JsonNumber submissionId = resultItem.getJsonNumber("submissionId"); + String homepage = resultItem.get("homepage").toString(); + + newOntology.setHomePage(homepage); + newOntology.setOntologyVersion(version); + newOntology.setSubmissionId(submissionId.toString()); + + result.put(resultItem.getString("@id"), newOntology); + } + + } + } + + + public String queryOntologyEndpoint() { + try { + HttpClient client = new HttpClient(); + + //http://data.bioontology.org/submissions + GetMethod method = new GetMethod(BioPortal4Client.REST_URL + "submissions?apikey=" + API_KEY); + + try { + setHostConfiguration(client); + } catch (Exception e) { + System.err.println("Problem encountered setting host configuration for ontology search"); + } + + + int statusCode = client.executeMethod(method); + if (statusCode != -1) { + String contents = method.getResponseBodyAsString(); + method.releaseConnection(); + return contents; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + private void setHostConfiguration(HttpClient client) { + HostConfiguration configuration = new HostConfiguration(); + configuration.setHost("http://data.bioontology.org"); + String proxyPort = System.getProperty("http.proxyPort"); + if (proxyPort ==null) + return; + configuration.setProxy(System.getProperty("http.proxyHost"), Integer.valueOf(System.getProperty("http.proxyPort"))); + client.setHostConfiguration(configuration); + } + + public OntologyTerm getTermMetadata(String termId, String ontologyId) { + + String content = queryTermMetadataEndpoint(termId, ontologyId); + StringReader reader = new StringReader(content); + JsonReader rdr = Json.createReader(reader); + JsonObject obj = rdr.readObject(); + + // if we have a nice error free page, continue + if (!obj.containsKey("errors")) { + OntologySourceRefObject osro = getOntologySourceRefObject(ontologyId); + + OntologyTerm ontologyTerm = new OntologyTerm(obj.getString("prefLabel"), obj.getString("@id"), obj.getString("@id"), osro); + ontologyTerm.addToComments("Service Provider", OntologyManager.BIO_PORTAL); + extractDefinitionFromOntologyTerm(obj, ontologyTerm); + extractSynonymsFromOntologyTerm(obj, ontologyTerm); + + System.out.println(ontologyTerm.getOntologyTermName() + " - " + ontologyTerm.getOntologyTermAccession() + " - " + ontologyTerm.getOntologyTermURI() ); + + return ontologyTerm; + } else { + return null; + } + } + + private OntologySourceRefObject getOntologySourceRefObject(String ontologyId) { + Ontology associatedOntologySource = AcceptedOntologies.getAcceptedOntologies().get(ontologyId); + return new OntologySourceRefObject(associatedOntologySource.getOntologyAbbreviation(), associatedOntologySource.getOntologyID(), associatedOntologySource.getOntologyVersion(), associatedOntologySource.getOntologyDisplayLabel()); + } + + public String queryTermMetadataEndpoint(String termId, String ontologyURI) { + try { + HttpClient client = new HttpClient(); + String url = ontologyURI + "/classes/" + URLEncoder.encode(termId, "UTF-8") + "?apikey=" + API_KEY; + + GetMethod method = new GetMethod(url); + + System.out.println(method.getURI().toString()); + try { + setHostConfiguration(client); + } catch (Exception e) { + System.err.println("Problem encountered setting host configuration for ontology search"); + } + + int statusCode = client.executeMethod(method); + if (statusCode != -1) { + String contents = method.getResponseBodyAsString(); + System.out.println(contents); + method.releaseConnection(); + return contents; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public Map getOntologyRoots(String ontologyAbbreviation) { + + Map roots = new HashMap(); + + String queryContents = generalQueryEndpoint(BioPortal4Client.REST_URL + "ontologies/" + ontologyAbbreviation + "/classes/roots?apikey=" + API_KEY); + StringReader reader = new StringReader(queryContents); + JsonReader rdr = Json.createReader(reader); + JsonArray rootArray = rdr.readArray(); + + for (JsonObject annotationItem : rootArray.getValuesAs(JsonObject.class)) { + + + OntologySourceRefObject osro = getOntologySourceRefObject(extractOntologyId(annotationItem)); + + OntologyTerm ontologyTerm = createOntologyTerm(annotationItem); + ontologyTerm.setOntologySourceInformation(osro); + + roots.put(ontologyTerm.getOntologyTermAccession(), ontologyTerm); + } + + return roots; + } + + private OntologyTerm createOntologyTerm(JsonObject annotationItem) { + + OntologyTerm ontologyTerm = new OntologyTerm(annotationItem.getString("prefLabel"), annotationItem.getString("@id"), annotationItem.getString("@id"), null); + ontologyTerm.addToComments("Service Provider", OntologyManager.BIO_PORTAL); + extractDefinitionFromOntologyTerm(annotationItem, ontologyTerm); + extractSynonymsFromOntologyTerm(annotationItem, ontologyTerm); + String ontologyId = extractOntologyId(annotationItem); + if (ontologyId!=null){ + String ontologyAbbreviation = ontologyId.substring(ontologyId.lastIndexOf('/')+1); + OntologySourceRefObject sourceRefObject = OntologyManager.getOntologySourceReferenceObjectByAbbreviation(ontologyAbbreviation); + if (sourceRefObject!=null) + ontologyTerm.setOntologySourceInformation(sourceRefObject); + } + return ontologyTerm; + } + + /** + * @param url + * @return + */ + private String generalQueryEndpoint(String url) { + try { + HttpClient client = new HttpClient(); + + GetMethod method = new GetMethod(url); + try { + setHostConfiguration(client); + } catch (Exception e) { + System.err.println("Problem encountered setting host configuration for ontology search"); + } + + int statusCode = client.executeMethod(method); + if (statusCode != -1) { + String contents = method.getResponseBodyAsString(); + method.releaseConnection(); + return contents; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public Map getTermParents(String termAccession, String ontologyAbbreviation) { + return getTermChildrenOrParents(termAccession, ontologyAbbreviation, PARENTS); + } + + public Map getTermChildren(String termAccession, String ontologyAbbreviation) { + return getTermChildrenOrParents(termAccession, ontologyAbbreviation, CHILDREN); + } + + /** + * Will make a call to get the parents or children of a term, identified by its termAccession in a particular + * ontology, defined by the ontologyAbbreviation. + * + * @param termAccession - e.g. http://purl.obolibrary.org/obo/OBI_0000785 + * @param ontologyAbbreviation - e.g. EFO + * @param parentsOrChildren - 'parents' or 'children' as an input value + * @return Map from the ontology term id to its OntologyTerm object. + */ + public Map getTermChildrenOrParents(String termAccession, String ontologyAbbreviation, String parentsOrChildren) { + try { + Map parents = new ListOrderedMap(); + + String queryContents = generalQueryEndpoint(BioPortal4Client.REST_URL + "ontologies/" + ontologyAbbreviation + "/classes/" + + URLEncoder.encode(termAccession, "UTF-8") + "/" + parentsOrChildren + "?apikey=" + API_KEY); + StringReader reader = new StringReader(queryContents); + JsonReader rdr = Json.createReader(reader); + + System.out.println(queryContents); + + JsonStructure topLevelStructure = rdr.read(); + JsonArray rootArray; + + + if (topLevelStructure instanceof JsonObject) { + // the children result returns a dictionary, or JsonStructure, so we have to go down one level to get + // the collection of results. + rootArray = ((JsonObject) topLevelStructure).getJsonArray("collection"); + } else { + // the parents result returns an array directly, so we can just use it immediately. + rootArray = (JsonArray) topLevelStructure; + } + + for (JsonObject annotationItem : rootArray.getValuesAs(JsonObject.class)) { + OntologySourceRefObject osro = getOntologySourceRefObject(extractOntologyId(annotationItem)); + + OntologyTerm ontologyTerm = createOntologyTerm(annotationItem); + ontologyTerm.setOntologySourceInformation(osro); + + parents.put(ontologyTerm.getOntologyTermAccession(), ontologyTerm); + } + + return parents; + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + return null; + + } + + +} diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/model/OntologyPortal.java b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/model/OntologyPortal.java index e7f20057..1d62705a 100644 --- a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/model/OntologyPortal.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/model/OntologyPortal.java @@ -1,6 +1,5 @@ package org.isatools.isacreator.ontologymanager.bioportal.model; -import org.isatools.isacreator.ontologymanager.OLSClient; /** * Created by the ISA team @@ -11,6 +10,5 @@ * Time: 17:38 */ public enum OntologyPortal { - - OLS, BIOPORTAL + BIOPORTAL } diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/xmlresulthandlers/BioPortalAnnotatorResultHandler.java b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/xmlresulthandlers/BioPortalAnnotatorResultHandler.java index cdd83b03..8493f66b 100644 --- a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/xmlresulthandlers/BioPortalAnnotatorResultHandler.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/xmlresulthandlers/BioPortalAnnotatorResultHandler.java @@ -6,7 +6,6 @@ import bioontology.bioportal.annotator.schema.SuccessDocument; import org.isatools.isacreator.configuration.Ontology; import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies; -import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntology; import org.isatools.isacreator.ontologymanager.bioportal.model.AnnotatorResult; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; @@ -107,7 +106,7 @@ private Map getOntologyInformation(SuccessDocument document) { newOntology.setOntologyVersion(ontology.getLocalOntologyId().toString()); - for (AcceptedOntology accceptedOntology : AcceptedOntologies.values()) { + for (Ontology accceptedOntology : AcceptedOntologies.values()) { if (accceptedOntology.toString().equals(newOntology.getOntologyID())) { newOntology.setOntologyAbbreviation(accceptedOntology.getOntologyAbbreviation()); ontologies.put(ontology.getLocalOntologyId().toString(), newOntology); diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/xmlresulthandlers/BioPortalSearchBeanResultHandler.java b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/xmlresulthandlers/BioPortalSearchBeanResultHandler.java index fd098518..f145ec88 100644 --- a/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/xmlresulthandlers/BioPortalSearchBeanResultHandler.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/bioportal/xmlresulthandlers/BioPortalSearchBeanResultHandler.java @@ -119,7 +119,7 @@ private OntologyTerm createBioPortalOntologyFromSearchResult(SearchBeanDocument. private OntologySourceRefObject createOntologySourceReferenceFromSearchResult(SearchBeanDocument.SearchBean searchResult) { OntologySourceRefObject refObject = new OntologySourceRefObject(); - if (AcceptedOntologies.getOntologyAbbreviationFromId(searchResult.getOntologyId()) != null) { + if (AcceptedOntologies.getAcceptedOntologies().get(searchResult.getPreferredName()) != null) { refObject.setSourceName(AcceptedOntologies.getOntologyAbbreviationFromId(searchResult.getOntologyId())); refObject.setSourceDescription(searchResult.getOntologyDisplayLabel()); refObject.setSourceVersion(searchResult.getOntologyVersionId()); diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/common/OntologyTerm.java b/src/main/java/org/isatools/isacreator/ontologymanager/common/OntologyTerm.java index a07cd93b..1c1a12cc 100644 --- a/src/main/java/org/isatools/isacreator/ontologymanager/common/OntologyTerm.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/common/OntologyTerm.java @@ -37,7 +37,10 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.ontologymanager.common; import org.apache.commons.collections15.map.ListOrderedMap; +import org.isatools.isacreator.ontologymanager.OntologyManager; import org.isatools.isacreator.ontologymanager.OntologySourceRefObject; +import org.isatools.isacreator.ontologymanager.utils.OntologyTermUtils; +import org.isatools.isacreator.settings.ISAcreatorProperties; import java.util.HashMap; import java.util.Map; @@ -50,7 +53,7 @@ public class OntologyTerm implements Comparable { private String ontologyTermAccession = null; private String ontologyTermName = null; - private String purl = null; + private String ontologyTermIRI = null; // extra terms for metadata processing private Map comments; @@ -69,7 +72,11 @@ public OntologyTerm(String termName, String accession, String iri, OntologySourc ontologyTermName = termName; ontologyTermAccession = accession; ontologySourceInformation = ontologySourceRefObject; - purl = iri; + + if (iri!=null) + ontologyTermIRI = iri; + else + ontologyTermIRI = getOntologyTermURI(); } public String getOntologyVersionId() { @@ -115,8 +122,17 @@ public String getOntologyTermName() { return ontologyTermName; } - public String getOntologyPurl() { - return purl; + public String getOntologyTermURI() { + if (ontologyTermIRI==null){ + String iri = OntologyTermUtils.getURI(this); + //System.out.println("term====>" + getOntologyTermName()+", iri ===> "+iri); + if (iri!=null) { + ontologyTermIRI = iri; + OntologyManager.foundURI(); + }else + ontologyTermIRI = ""; + } + return ontologyTermIRI; } @@ -124,8 +140,8 @@ public void setOntologyTermName(String ontologyTermName) { this.ontologyTermName = ontologyTermName; } - public void setOntologyPurl(String purl) { - this.purl = purl; + public void setOntologyTermIRI(String purl) { + this.ontologyTermIRI = purl; } public void addToComments(String key, String value) { @@ -146,26 +162,41 @@ public Map getComments() { @Override public String toString() { - return getOntologyTermName() + "(" + getOntologyTermAccession() + ")"; + return getShortForm(); } /*** - * TODO: Change this to return the PURL instead, if not null or empty + * + * This method returns the string used for visualising the ontology term in the interface. + * + * This is ":". + * + * For example "OBI:parallel group design". * * @return */ - public String getUniqueId() { + public String getShortForm() { + String ontologySource = getOntologySource(); + if (!ontologySource.equals("")){ + if (ISAcreatorProperties.getOntologyTermURIProperty()) + if (ontologyTermIRI!=null && !ontologyTermIRI.equals("")) + return ontologySource + ":" + getOntologyTermName(); + } + return getOntologyTermName(); + } + + public String getLongForm(){ String ontologySource = getOntologySource(); if (!ontologySource.equals("")) { - return ontologySource + ":" + getOntologyTermName(); + return getOntologyTermName()+","+ getOntologyTermURI()+","+ontologySource; } return getOntologyTermName(); } public int compareTo(OntologyTerm ontologyTerm) { - if (getOntologyPurl()!=null && ontologyTerm.getOntologyPurl()!=null) - return getOntologyPurl().compareTo(ontologyTerm.getOntologyPurl()); - return getUniqueId().toLowerCase().compareTo(ontologyTerm.getUniqueId().toLowerCase()); + if (getOntologyTermURI()!=null && ontologyTerm.getOntologyTermURI()!=null) + return getOntologyTermURI().compareTo(ontologyTerm.getOntologyTermURI()); + return getShortForm().toLowerCase().compareTo(ontologyTerm.getShortForm().toLowerCase()); } } diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/utils/OntologyTermUtils.java b/src/main/java/org/isatools/isacreator/ontologymanager/utils/OntologyTermUtils.java new file mode 100644 index 00000000..64ce2cad --- /dev/null +++ b/src/main/java/org/isatools/isacreator/ontologymanager/utils/OntologyTermUtils.java @@ -0,0 +1,201 @@ +package org.isatools.isacreator.ontologymanager.utils; + +import org.isatools.isacreator.io.IOUtils; +import org.isatools.isacreator.ontologymanager.BioPortal4Client; +import org.isatools.isacreator.ontologymanager.OntologyManager; +import org.isatools.isacreator.ontologymanager.OntologySourceRefObject; +import org.isatools.isacreator.ontologymanager.common.OntologyTerm; +import org.isatools.isacreator.settings.ISAcreatorProperties; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Created by the ISATeam. + * User: agbeltran + * Date: 13/09/2013 + * Time: 11:54 + * + * @author Alejandra Gonzalez-Beltran + */ +public class OntologyTermUtils { + + /** + * Given an OntologyTerm object, it creates a string such as: + * + * Characteristics[dose,efo:EFO_0000428,EFO] + * + * if not purl is defined in the ontology term, or such as + * + * Characteristics[dose,http://www.ebi.ac.uk/efo/EFO_0000428,EFO] + * + * + * @param ontologyTerm + * @return + */ + public static String ontologyTermToString(OntologyTerm ontologyTerm){ + if (ontologyTerm.getOntologyTermURI()!=null && ISAcreatorProperties.getProperty("ontologyTermURI").equals("true")){ + return ontologyTerm.getOntologyTermName() +"," + ontologyTerm.getOntologyTermURI() + "," + ontologyTerm.getOntologySource(); + } + return ontologyTerm.getOntologyTermName() + "," + ontologyTerm.getOntologyTermAccession() +"," + ontologyTerm.getOntologySource(); + } + + public static String getURI(OntologyTerm ontologyTerm){ + if (ontologyTerm==null || ontologyTerm.getOntologyTermAccession()==null + || ontologyTerm.getOntologySourceInformation()==null || ontologyTerm.getOntologySourceInformation().getSourceName()==null) + return null; + + BioPortal4Client bioPortalClient = new BioPortal4Client(); + Map> result = bioPortalClient.exactSearch(ontologyTerm.getOntologyTermName(), + ontologyTerm.getOntologySourceInformation().getSourceName()); + + + Set set = result.keySet(); + if (!set.isEmpty()){ + List list = result.get(set.iterator().next()); + if (list.size()>0){ + OntologyTerm oo = list.get(0); + + ontologyTerm.setOntologyTermIRI(oo.getOntologyTermURI()); + //ontologyTerm.setOntologyTermAccession(oo.getOntologyTermName()); + return ontologyTerm.getOntologyTermURI(); + //ontologyTerm.setOntologyTermAccession(oo.getOntologyTermAccession()); + } + } //else { + // OntologyManager.addToNoURITermMap(ontologyTerm.getShortForm(), ontologyTerm); + //} + + return null; + } + + + public static OntologyTerm stringToOntologyTerm(String header){ + OntologyTerm ontologyTerm = null; + + String prevVal = IOUtils.getHeaderValue(header); + + String source = ""; + String term = ""; + String accession = ""; + + + //moved this code from the TableReferenceObject and we are keeping it for backward compatibility, so that + //we can still read in column headers with the form + // -- + //but now we will save them back only following the patter by the method above (ontologyTermToString). + + if (prevVal.contains("-")) { + String[] parts = prevVal.split("-"); + source = parts[0]; + term = parts[1]; + accession = parts[2]; + + ontologyTerm = new OntologyTerm(term, accession, null, OntologyManager.getOntologySourceReferenceObjectByAbbreviation(source)); + + } else if (prevVal.contains(":")) { //this is the part for the currently accepted syntax + + //this should be the currently accepted string + //such as "Characteristics[dose,efo:EFO_0000428,EFO]" or "Characteristics[dose,http://www.ebi.ac.uk/efo/EFO_0000428,EFO]" + if (prevVal.contains(",")){ + String[] parts = prevVal.split(","); + term = parts[0]; + accession = parts[1]; + source = parts[2]; + + OntologySourceRefObject ontologySource = OntologyManager.getOntologySourceReferenceObjectByAbbreviation(source); + + if (accession.contains("http://")) + ontologyTerm = new OntologyTerm(term, accession, accession, ontologySource); + else { + if (ISAcreatorProperties.getOntologyTermURIProperty()) + ontologyTerm = null; + else + ontologyTerm = new OntologyTerm(term, accession, null, ontologySource); + } + + }else if (prevVal.startsWith("http://")) { + // we have a PURL. So we'll use this directly + if (prevVal.contains("(")) { + String[] termAndSource = prevVal.split("\\("); + term = termAndSource[0]; + accession = termAndSource[1].replace(")", ""); + + ontologyTerm = new OntologyTerm(term, accession, null, OntologyManager.getOntologySourceReferenceObjectByAbbreviation(source)); + } + } else { + String[] parts = prevVal.split(":"); + if (parts[0].contains("(")) { + String[] termAndSource = parts[0].split("\\("); + term = termAndSource[0]; + source = termAndSource[1]; + } + accession = parts[1].replace(")", ""); + + ontologyTerm = new OntologyTerm(term, accession, null, OntologyManager.getOntologySourceReferenceObjectByAbbreviation(source)); + } + + + } + return ontologyTerm; + } + + + /*** + * + * @param header + * @return + */ + public static String headerToString(String header){ + + String ontologyUniqueId = header.substring(header.indexOf('[') + 1, header.indexOf("]")); + String headerName = header.substring(0,header.indexOf('[')); + + //convert the ontologyUniqueId to the ontology term string + + //Map ontologySelectionHistory = OntologyManager.getOntologySelectionHistory(); + + //if (ontologySelectionHistory!=null){ + + //OntologyTerm ontologyTerm = ontologySelectionHistory.get(ontologyUniqueId); + OntologyTerm ontologyTerm = OntologyManager.getOntologyTerm(ontologyUniqueId); + + if (ontologyTerm!=null){ + return headerName + "[" +ontologyTermToString(ontologyTerm) +"]"; + } + //} + + return null; + } + + /** + * When importing an ISA-TAB file, takes the full annotated header (e.g. Characteristics[organism,http://purl.obolibrary.org/obo/OBI_0100026,OBI]) + * and retrieves the header with the ontology term unique ID + * + * @param fullAnnotatedHeader + * @return + */ + public static String fullAnnotatedHeaderToUniqueId(String fullAnnotatedHeader){ + OntologyTerm ontologyTerm = stringToOntologyTerm(fullAnnotatedHeader); + + String headerName = fullAnnotatedHeader.substring(0,fullAnnotatedHeader.indexOf('[')); + String uniqueId = null; + if (ontologyTerm != null) { + uniqueId = headerName +"["+ ontologyTerm.getShortForm() + "]"; + + //Map history = OntologyManager.getOntologySelectionHistory(); + //if (history.get(ontologyTerm.getShortForm())==null) { + if (OntologyManager.getOntologyTerm(ontologyTerm.getShortForm())==null) { + Map map = new HashMap(); + map.put(uniqueId, ontologyTerm); + OntologyManager.addToOntologyTerms(map); + } + return uniqueId; + } + + return null; + } + + +} diff --git a/src/main/java/org/isatools/isacreator/ontologymanager/utils/OntologyUtils.java b/src/main/java/org/isatools/isacreator/ontologymanager/utils/OntologyUtils.java index 16d3c5b7..034c37b2 100644 --- a/src/main/java/org/isatools/isacreator/ontologymanager/utils/OntologyUtils.java +++ b/src/main/java/org/isatools/isacreator/ontologymanager/utils/OntologyUtils.java @@ -2,11 +2,8 @@ import org.isatools.isacreator.configuration.Ontology; import org.isatools.isacreator.configuration.OntologyBranch; -import org.isatools.isacreator.ontologymanager.BioPortalClient; -import org.isatools.isacreator.ontologymanager.OLSClient; +import org.isatools.isacreator.ontologymanager.BioPortal4Client; import org.isatools.isacreator.ontologymanager.OntologySourceRefObject; -import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies; -import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntology; import org.isatools.isacreator.ontologymanager.bioportal.model.OntologyPortal; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; import org.isatools.isacreator.utils.StringProcessing; @@ -26,12 +23,11 @@ public static OntologyPortal getSourceOntologyPortal(Ontology ontology) { } public static OntologyPortal getSourceOntologyPortalByVersionAndId(Ontology ontology) { - return checkVersion(ontology.getOntologyVersion()) || ontology.getOntologyID().equals("") - ? OntologyPortal.OLS : OntologyPortal.BIOPORTAL; + return OntologyPortal.BIOPORTAL; } public static OntologyPortal getSourceOntologyPortalByVersion(String version) { - return checkVersion(version) ? OntologyPortal.OLS : OntologyPortal.BIOPORTAL; + return OntologyPortal.BIOPORTAL; } private static boolean checkVersion(String version) { @@ -47,27 +43,12 @@ public static String getModifiedBranchIdentifier(String branchIdentifier, String return branchIdentifier; } - public static OntologyPortal getSourcePortalByAbbreviation(String abbreviation) { - boolean isBioPortal = false; - for (AcceptedOntology bioPortalOntologies : AcceptedOntologies.values()) { - if (bioPortalOntologies.getOntologyAbbreviation().equalsIgnoreCase(abbreviation)) { - isBioPortal = true; - break; - } - } - - return isBioPortal ? OntologyPortal.BIOPORTAL : OntologyPortal.OLS; - } - public static OntologySourceRefObject convertOntologyToOntologySourceReferenceObject(Ontology ontology) { OntologySourceRefObject converted = new OntologySourceRefObject( ontology.getOntologyAbbreviation(), "", ontology.getOntologyVersion(), ontology.getOntologyDisplayLabel()); - converted.setSourceFile( - OntologyUtils.getSourceOntologyPortalByVersion(converted.getSourceVersion()) == OntologyPortal.BIOPORTAL - ? BioPortalClient.DIRECT_ONTOLOGY_URL + converted.getSourceVersion() - : OLSClient.DIRECT_ONTOLOGY_URL + converted.getSourceName()); + converted.setSourceFile(OntologyUtils.getSourceOntologyPortalByVersion(BioPortal4Client.DIRECT_ONTOLOGY_URL + converted.getSourceVersion()).toString()); return converted; diff --git a/src/main/java/org/isatools/isacreator/ontologyselectiontool/CustomTreeRenderer.java b/src/main/java/org/isatools/isacreator/ontologyselectiontool/CustomTreeRenderer.java index 42aaa130..68ac6fc9 100644 --- a/src/main/java/org/isatools/isacreator/ontologyselectiontool/CustomTreeRenderer.java +++ b/src/main/java/org/isatools/isacreator/ontologyselectiontool/CustomTreeRenderer.java @@ -66,6 +66,8 @@ public CustomTreeRenderer() { ResourceInjector.get("ontologyselectiontool-package.style").inject(this); contents = new JPanel(new BorderLayout()); + contents.setMinimumSize(new Dimension(260, 25)); + contents.setOpaque(false); icon = new JLabel(); diff --git a/src/main/java/org/isatools/isacreator/ontologyselectiontool/OntologySelectionTool.java b/src/main/java/org/isatools/isacreator/ontologyselectiontool/OntologySelectionTool.java index 851e2f24..de080e4e 100755 --- a/src/main/java/org/isatools/isacreator/ontologyselectiontool/OntologySelectionTool.java +++ b/src/main/java/org/isatools/isacreator/ontologyselectiontool/OntologySelectionTool.java @@ -41,8 +41,9 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.apache.log4j.Logger; import org.isatools.isacreator.autofilteringlist.ExtendedJList; import org.isatools.isacreator.common.ClearFieldUtility; -import org.isatools.isacreator.common.Globals; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.common.filterableTree.FilterableJTree; import org.isatools.isacreator.common.filterableTree.TreeFilterModel; import org.isatools.isacreator.configuration.OntologyBranch; @@ -107,7 +108,6 @@ public class OntologySelectionTool extends JFrame implements MouseListener, Onto browseOntologiesIconOver, searchOntologiesIcon, searchOntologiesIconOver, leftFieldIcon, rightFieldIcon, viewHistoryIcon, viewHistoryIconOver; - private static OntologyService olsClient = null; private static OntologyService bioportalClient = null; private InfiniteProgressPanel progressIndicator; @@ -127,7 +127,9 @@ public class OntologySelectionTool extends JFrame implements MouseListener, Onto private WSOntologyTreeCreator wsOntologyTreeCreator; private JPanel ontologyViewContainer, searchUIContainer, browseUIContainer, historyUIContainer; - private JLabel searchOntologiesTab, browseRecommendedOntologiesTab, viewHistoryTab, searchOntologiesButton, confirmOkButton; + private JLabel searchOntologiesTab, browseRecommendedOntologiesTab, viewHistoryTab, searchOntologiesButton; + + private JButton confirmOkButton; private OptionGroup searchSpan; private Set selectedTerms; @@ -199,32 +201,32 @@ public void setForceOntologySelection(boolean forceOntologySelection) { public void setRecommendedOntologies(final Map recommendedOntologies) { - System.out.println("Resetting recommended ontologies, it is now: parameter="+recommendedOntologies + " field="+ this.recommendedOntologies); + System.out.println("Resetting recommended ontologies, it is now: parameter=" + recommendedOntologies + " field=" + this.recommendedOntologies); - if (recommendedOntologies!=null){ + if (recommendedOntologies != null) { final boolean resetView = !(this.recommendedOntologies == recommendedOntologies); this.recommendedOntologies = recommendedOntologies; SwingUtilities.invokeLater(new Runnable() { - public void run() { + public void run() { - boolean recommendedOntologiesAvailable = checkIfRecommendedOntologiesAreAvailable(); - browseRecommendedOntologiesTab.setVisible(recommendedOntologiesAvailable); + boolean recommendedOntologiesAvailable = checkIfRecommendedOntologiesAreAvailable(); + browseRecommendedOntologiesTab.setVisible(recommendedOntologiesAvailable); - if (resetView) { - resetView(); - // should also reset the recommended ontologies. Displaying recommended ontologies for another field - // if not a great idea. - if (recommendedOntologiesAvailable) { - ontologySearchResultsTree.setModel(new FilterableOntologyTreeModel>(new DefaultMutableTreeNode("results"), ontologySearchResultsTree)); + if (resetView) { + resetView(); + // should also reset the recommended ontologies. Displaying recommended ontologies for another field + // if not a great idea. + if (recommendedOntologiesAvailable) { + ontologySearchResultsTree.setModel(new FilterableOntologyTreeModel>(new DefaultMutableTreeNode("results"), ontologySearchResultsTree)); - treeCreated = false; + treeCreated = false; + } + searchSpan.toggleOptionEnabled(RECOMMENDED_ONTOLOGIES, recommendedOntologiesAvailable); + searchSpan.setSelectedItem(recommendedOntologiesAvailable ? RECOMMENDED_ONTOLOGIES : ALL_ONTOLOGIES); } - searchSpan.toggleOptionEnabled(RECOMMENDED_ONTOLOGIES, recommendedOntologiesAvailable); - searchSpan.setSelectedItem(recommendedOntologiesAvailable ? RECOMMENDED_ONTOLOGIES : ALL_ONTOLOGIES); - } } }); @@ -575,21 +577,16 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { if (propertyChangeEvent.getNewValue() instanceof OntologyTerm) { OntologyTerm historyTerm = (OntologyTerm) propertyChangeEvent.getNewValue(); if (historyTerm != null) { - OntologyPortal portal = OntologyUtils.getSourceOntologyPortalByVersion(historyTerm.getOntologySourceInformation().getSourceVersion()); - if (portal == OntologyPortal.OLS) { - setTermDefinitionView(historyTerm); - } else { - if (bioportalClient == null) { - bioportalClient = new BioPortalClient(); - } - Map ontologyVersions = bioportalClient.getOntologyVersions(); - setTermDefinitionView(historyTerm, ontologyVersions); - } - addSourceToUsedOntologies(historyTerm.getOntologySourceInformation()); + + instantiateBioPortalClientIfNull(); + Map ontologyVersions = bioportalClient.getOntologyVersions(); + setTermDefinitionView(historyTerm, ontologyVersions); + + //OntologyManager.addToUsedOntologies(historyTerm.getOntologySourceInformation()); if (multipleTermsAllowed) { - addToMultipleTerms(historyTerm.getUniqueId()); + addToMultipleTerms(historyTerm.getShortForm()); } else { - selectedTerm.setText(historyTerm.getUniqueId()); + selectedTerm.setText(historyTerm.getShortForm()); } } } @@ -624,7 +621,7 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { private List getSortedHistory() { List ontologyTerms = new ArrayList(); - ontologyTerms.addAll(OntologyManager.getOntologySelectionHistory().values()); + ontologyTerms.addAll(OntologyManager.getOntologyTermsValues()); Collections.sort(ontologyTerms); return ontologyTerms; } @@ -641,12 +638,6 @@ private OntologyBranch createOntologyBranch(OntologyTerm ontologyTerm) { return branch; } - private void setTermDefinitionView(OntologyTerm ontologyTerm) { - boolean sourceIsInPlugins = OntologySearchPluginRegistry.isOntologySourceAbbreviationDefinedInPlugins(ontologyTerm.getOntologySource()); - viewTermDefinition.setContent( - new OntologyBranch(ontologyTerm.getOntologyTermAccession(), ontologyTerm.getOntologyTermName()), ontologyTerm.getOntologySource(), - sourceIsInPlugins ? null : olsClient == null ? new OLSClient() : olsClient); - } private JPanel createTermDefinitionPanel() { JPanel container = createStandardBorderPanel(false); @@ -699,24 +690,15 @@ public void actionPerformed(ActionEvent e) { termSelectionContainer.add(selectedTerm); termSelectionContainer.add(new ClearFieldUtility(selectedTerm)); termSelectionContainer.add(new JLabel(rightFieldIcon)); - termSelectionContainer.add(Box.createVerticalStrut(5)); + termSelectionContainer.add(Box.createVerticalStrut(10)); - confirmOkButton = new JLabel(Globals.OK_ICON); + confirmOkButton = new FlatButton(ButtonType.GREEN, "Select Ontology Term"); confirmOkButton.setOpaque(false); - confirmOkButton.addMouseListener(new MouseAdapter() { + confirmOkButton.addActionListener(new ActionListener() { - public void mousePressed(MouseEvent event) { - confirmOkButton.setIcon(Globals.OK_ICON); + public void actionPerformed(ActionEvent actionEvent) { confirmSelection(); } - - public void mouseEntered(MouseEvent event) { - confirmOkButton.setIcon(Globals.OK_OVER_ICON); - } - - public void mouseExited(MouseEvent event) { - confirmOkButton.setIcon(Globals.OK_ICON); - } }); @@ -737,7 +719,7 @@ private void confirmSelection() { firePropertyChange("selectedOntology", "OLD_VALUE", selectedTerm.getText()); if (historyList.getSelectedIndex() != -1) { - OntologyManager.getOntologySelectionHistory().put(historyList.getSelectedValue().toString(), (OntologyTerm) historyList.getSelectedValue()); + OntologyManager.addToOntologyTerms(historyList.getSelectedValue().toString(), (OntologyTerm) historyList.getSelectedValue()); } historyList.getFilterField().setText(""); historyList.clearSelection(); @@ -764,21 +746,6 @@ private JPanel createStandardBorderPanel(boolean hasBorder) { return panel; } - /** - * Check to determine if the Ontology source already exists in the previously defined Ontology sources. - * - * @param source - Possible source to add. - * @return Boolean - true if the source already exists, false otherwise. - */ - private boolean checkOntologySourceRecorded(String source) { - for (OntologySourceRefObject oRef : OntologyManager.getOntologiesUsed()) { - if (oRef.getSourceName().equals(source)) { - return true; - } - } - - return false; - } /** * Add a value to the selected terms box when multiple term selection is enabled. @@ -807,31 +774,20 @@ private void addTerm(OntologyTerm term) { if (multipleTermsAllowed) { selectedTerms.add(term); - addToMultipleTerms(term.getUniqueId()); + addToMultipleTerms(term.getShortForm()); } else { selectedTerms.clear(); selectedTerms.add(term); - selectedTerm.setText(term.getUniqueId()); + selectedTerm.setText(term.getShortForm()); } } private void addTermToHistory(OntologyTerm termInformation) { - // add the item to the history list - addSourceToUsedOntologies(termInformation.getOntologySourceInformation()); - OntologyManager.addToUserHistory(termInformation); + OntologyManager.addToOntologyTerms(termInformation); historyList.addItem(termInformation); } - - private void addSourceToUsedOntologies(OntologySourceRefObject ontologySourceRefObject) { - if (ontologySourceRefObject != null) { - if (!checkOntologySourceRecorded(ontologySourceRefObject.getSourceName())) { - OntologyManager.addToUsedOntologies(ontologySourceRefObject); - } - } - } - private String getRecommendedOntologyCacheIdentifier() { StringBuilder identifer = new StringBuilder(); @@ -842,19 +798,11 @@ private String getRecommendedOntologyCacheIdentifier() { identifer.append(ontologyAbbr); } } - return identifer.toString(); } private void performSearch() { - - if (olsClient == null) { - olsClient = new OLSClient(); - } - - if (bioportalClient == null) { - bioportalClient = new BioPortalClient(); - } + instantiateBioPortalClientIfNull(); Thread performer = new Thread(new Runnable() { public void run() { @@ -881,7 +829,7 @@ public void run() { String cacheKeyLookup = "term" + ":" + searchOn + ":" + searchField.getText(); - if (!OntologyManager.searchResultCache.containsKey(cacheKeyLookup)) { + if (!OntologyManager.searchResultCacheContainsKey(cacheKeyLookup)) { result = new HashMap>(); if (searchAllOntologies) { @@ -892,11 +840,11 @@ public void run() { // only add to the cache if we got a result! if (result.size() > 0) { - OntologyManager.searchResultCache.addToCache(cacheKeyLookup, result); + OntologyManager.addToCache(cacheKeyLookup, result); } } else { - result = OntologyManager.searchResultCache.get(cacheKeyLookup); + result = OntologyManager.getSearchResultCacheValue(cacheKeyLookup); } @@ -904,7 +852,7 @@ public void run() { } catch (Exception e) { log.error("Failed to connect to ontology service: " + e.getMessage()); - e.printStackTrace(); + System.err.println("Failed to connect to ontology resource."); } finally { if (progressIndicator.isStarted()) { EventQueue.invokeLater(new Runnable() { @@ -922,22 +870,15 @@ public void run() { performer.start(); } + private void instantiateBioPortalClientIfNull() { + if (bioportalClient == null) { + bioportalClient = new BioPortal4Client(); + } + } + private void searchSpecificOntologies() { OntologyManager.placeRecommendedOntologyInformationInRecords(recommendedOntologies.values()); - List olsOntologies = filterRecommendedOntologiesForService(recommendedOntologies.values(), OntologyPortal.OLS); - - if (olsOntologies.size() > 0) { - Map> olsResult = olsClient.getTermsByPartialNameFromSource(searchField.getText(), olsOntologies); - - if (olsResult != null) { - log.info("found terms in " + olsResult.size() + " ols ontologies"); - result.putAll(olsResult); - } - } else { - log.info("Not searching OLS, nothing to search for in recommended ontologies."); - } - List bioportalOntologies = filterRecommendedOntologiesForService(recommendedOntologies.values(), OntologyPortal.BIOPORTAL); int totalResourcesSearchedOnByPluginResources = OntologySearchPluginRegistry.howManyOfTheseResourcesAreSearchedOnByPlugins(recommendedOntologies.values()); @@ -961,13 +902,6 @@ private void searchSpecificOntologies() { private void searchAllOntologies() { log.info("no recommended ontology specified, so searching for " + searchField.getText()); - Map> olsResult = olsClient.getTermsByPartialNameFromSource(searchField.getText(), null, false); - - if (olsResult != null) { - log.info("found terms in " + olsResult.size() + " ols ontologies"); - result.putAll(olsResult); - } - Map> bioportalResult = bioportalClient.getTermsByPartialNameFromSource(searchField.getText(), "all", false); log.info("found terms in " + bioportalResult.size() + " bioportal ontologies"); @@ -1031,9 +965,9 @@ private List filterRecommendedOntologiesForService(Collecti public void updatehistory() { SwingUtilities.invokeLater(new Runnable() { public void run() { - if ((historyList != null) && (OntologyManager.getOntologySelectionHistory() != null)) { + if ((historyList != null)){ - OntologyTerm[] newHistory = new OntologyTerm[OntologyManager.getOntologySelectionHistory().size()]; + OntologyTerm[] newHistory = new OntologyTerm[OntologyManager.getOntologyTermsSize()]; int count = 0; for (OntologyTerm oo : getSortedHistory()) { @@ -1172,12 +1106,10 @@ public void mousePressed(MouseEvent event) { addTerm(ontologyTerm); } - if (OntologyUtils.getSourceOntologyPortalByVersion(ontologySource.getSourceVersion()) == OntologyPortal.BIOPORTAL) { - boolean sourceIsInPlugins = OntologySearchPluginRegistry.isOntologySourceAbbreviationDefinedInPlugins(ontologyTerm.getOntologySource()); - viewTermDefinition.setContent(createOntologyBranch(ontologyTerm), ontologySource.getSourceVersion(), sourceIsInPlugins ? null : bioportalClient == null ? new BioPortalClient() : bioportalClient); - } else { - viewTermDefinition.setContent(createOntologyBranch(ontologyTerm), ontologySource.getSourceVersion(), olsClient); - } + + boolean sourceIsInPlugins = OntologySearchPluginRegistry.isOntologySourceAbbreviationDefinedInPlugins(ontologyTerm.getOntologySource()); + viewTermDefinition.setContent(createOntologyBranch(ontologyTerm), ontologySource.getSourceFile(), sourceIsInPlugins ? null : bioportalClient == null ? new BioPortal4Client() : bioportalClient); + } } else if (tree == browseRecommendedOntologyTree) { @@ -1191,14 +1123,10 @@ public void mousePressed(MouseEvent event) { } } - if (OntologyUtils.getSourceOntologyPortal(termNode.getOntology()) == OntologyPortal.BIOPORTAL) { - viewTermDefinition.setContent(termNode.getBranch(), - termNode.getOntology().getOntologyVersion(), bioportalClient == null ? new BioPortalClient() : bioportalClient); - } else { - viewTermDefinition.setContent(termNode.getBranch(), - termNode.getOntology().getOntologyAbbreviation(), olsClient == null ? new OLSClient() : olsClient); - } + viewTermDefinition.setContent(termNode.getBranch(), + termNode.getOntology().getOntologyAbbreviation(), bioportalClient == null ? new BioPortal4Client() : bioportalClient); + } } } diff --git a/src/main/java/org/isatools/isacreator/ontologyselectiontool/ViewTermDefinitionUI.java b/src/main/java/org/isatools/isacreator/ontologyselectiontool/ViewTermDefinitionUI.java index 3b0d9d83..5f062b51 100644 --- a/src/main/java/org/isatools/isacreator/ontologyselectiontool/ViewTermDefinitionUI.java +++ b/src/main/java/org/isatools/isacreator/ontologyselectiontool/ViewTermDefinitionUI.java @@ -43,6 +43,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.common.UIHelper; import org.isatools.isacreator.configuration.OntologyBranch; import org.isatools.isacreator.ontologymanager.OntologyService; +import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies; +import org.isatools.isacreator.ontologymanager.common.OntologyTerm; import org.jdesktop.fuse.InjectedResource; import org.jdesktop.fuse.ResourceInjector; @@ -116,6 +118,7 @@ private JPanel createOntologyInformationPane(final OntologyBranch term) { contentPane.add(ontologyInfoScroller, BorderLayout.CENTER); + JLabel viewOntologyInBrowser = new JLabel("View in resource."); viewOntologyInBrowser.addMouseListener(new CommonMouseAdapter() { @Override @@ -132,16 +135,18 @@ public void mouseEntered(MouseEvent mouseEvent) { public void mousePressed(MouseEvent mouseEvent) { super.mousePressed(mouseEvent); try { - System.out.println("Source: " + term.getComments().get("Source")); - System.out.println("Accession: " + term.getComments().get("accession")); + String termSource = term.getComments().get("Source"); + System.out.println("Source: " + termSource); + System.out.println("Accession: " + term.getBranchIdentifier()); String serviceProvider = term.getComments().get("Service Provider"); + System.out.println("Service Provider: " + serviceProvider); String url = ""; if (serviceProvider.equalsIgnoreCase("ols")) { - url = "http://www.ebi.ac.uk/ontology-lookup/?termId=" + term.getComments().get("Source") + ":" + term.getComments().get("accession"); + url = "http://www.ebi.ac.uk/ontology-lookup/?termId=" + termSource + ":" + term.getComments().get("accession"); } else if (serviceProvider.equalsIgnoreCase("bioportal")) { - url = "http://bioportal.bioontology.org/ontologies/" + term.getComments().get("Source") + "/?p=terms&conceptid=" + term.getComments().get("accession"); + url = "http://bioportal.bioontology.org/ontologies/" + termSource.substring(termSource.lastIndexOf("/") + 1) + "?p=classes&conceptid=" + term.getBranchIdentifier(); } System.out.println(url); @@ -175,9 +180,13 @@ private JEditorPane createOntologyInformationDisplay(OntologyBranch term) { labelContent += "Term name: " + term.getBranchName() + "

"; // special handling for ChEBI to get the structural image + System.out.println("Showing CHEBI image for " + term.getBranchIdentifier()); if (term.getBranchIdentifier().toLowerCase().contains("chebi")) { - String chebiTermId = term.getBranchIdentifier().substring(term.getBranchIdentifier().indexOf(":") + 1); + String chebiTermId = term.getBranchIdentifier().substring(term.getBranchIdentifier().lastIndexOf("_") + 1); + + System.out.println("Showing CHEBI image for " + chebiTermId); + String chebiImageURL = "http://www.ebi.ac.uk/chebi/displayImage.do?defaultImage=true&imageIndex=0&chebiId=" + chebiTermId; labelContent += "

Chemical structure:" + "

" + @@ -235,7 +244,6 @@ private Map sortMap(Map toSort) { return sortedMap; } - public void setContent(OntologyBranch term, String searchOntology, OntologyService ontologyService) { if (properties != null) { @@ -251,10 +259,18 @@ public void run() { properties = term.getComments(); if (ontologyService != null) { setCurrentPage(new JLabel(LOADING)); - if (!properties.containsKey("Source")) { - properties.put("Source", searchOntology); + String ontology = searchOntology; + + System.out.println("Showing term metadata...."); + System.out.println(term.getBranchIdentifier()); + System.out.println(ontology); + System.out.println(); + + if (term.getBranchIdentifier().startsWith("http") && !ontology.startsWith("http")) { + ontology = AcceptedOntologies.getOntologyIdForAbbreviation(searchOntology); } - properties.putAll(ontologyService.getTermMetadata(term.getBranchIdentifier(), searchOntology)); + properties.put("Source", ontology); + properties.putAll(ontologyService.getTermMetadata(term.getBranchIdentifier(), ontology)); } setCurrentPage(createOntologyInformationPane(term)); } catch (Exception e) { diff --git a/src/main/java/org/isatools/isacreator/orcid/OrcidClient.java b/src/main/java/org/isatools/isacreator/orcid/OrcidClient.java new file mode 100644 index 00000000..d393ecdb --- /dev/null +++ b/src/main/java/org/isatools/isacreator/orcid/OrcidClient.java @@ -0,0 +1,19 @@ +package org.isatools.isacreator.orcid; + +import org.isatools.isacreator.orcid.model.OrcidAuthor; + +/** + * Created by the ISATeam. + * User: agbeltran + * Date: 23/05/2013 + * Time: 13:20 + * + * @author Alejandra Gonzalez-Beltran + */ +public interface OrcidClient { + + public OrcidAuthor getAuthorInfo(String orcidID); + + public OrcidAuthor[] getOrcidProfiles(String searchString); + +} diff --git a/src/main/java/org/isatools/isacreator/orcid/gui/FilterableOrcidTreeModel.java b/src/main/java/org/isatools/isacreator/orcid/gui/FilterableOrcidTreeModel.java new file mode 100644 index 00000000..59a9a035 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/orcid/gui/FilterableOrcidTreeModel.java @@ -0,0 +1,32 @@ +package org.isatools.isacreator.orcid.gui; + +import org.isatools.isacreator.common.filterableTree.FilterableJTree; +import org.isatools.isacreator.common.filterableTree.TreeFilterModel; + +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreeNode; + +/** + * Created by the ISATeam. + * User: agbeltran + * Date: 24/05/2013 + * Time: 11:46 + * + * @author Alejandra Gonzalez-Beltran + */ + + + public class FilterableOrcidTreeModel extends TreeFilterModel { + + public FilterableOrcidTreeModel(TreeNode rootNode, FilterableJTree targetTree) { + super(rootNode, targetTree); + } + + public DefaultMutableTreeNode createRootNode() { + return new DefaultMutableTreeNode(countValues() + " researchers grouped by " + countKeys() + " surnames"); + } + + + } + + diff --git a/src/main/java/org/isatools/isacreator/orcid/gui/OrcidContactSelectedEvent.java b/src/main/java/org/isatools/isacreator/orcid/gui/OrcidContactSelectedEvent.java new file mode 100644 index 00000000..09441ee6 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/orcid/gui/OrcidContactSelectedEvent.java @@ -0,0 +1,44 @@ +package org.isatools.isacreator.orcid.gui; + +import org.isatools.isacreator.common.DropDownComponent; +import org.isatools.isacreator.orcid.model.OrcidAuthor; + +import javax.swing.*; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +/** + * Created by the ISATeam. + * User: agbeltran + * Date: 24/05/2013 + * Time: 10:45 + * + * @author Alejandra Gonzalez-Beltran + */ +public class OrcidContactSelectedEvent implements PropertyChangeListener { + + private OrcidLookupUI orcidLookupUI; + private DropDownComponent dropDownComponent; + private JTextField orcid, firstname, lastname, email; + + public OrcidContactSelectedEvent(OrcidLookupUI ontologySelectionTool, JTextField orcid, JTextField fn, JTextField ln, JTextField e) { + this.orcidLookupUI = ontologySelectionTool; + //this.dropDownComponent = dropDownComponent; + this.orcid = orcid; + firstname = fn; + lastname = ln; + email = e; + } + + public void propertyChange(PropertyChangeEvent propertyChangeEvent) { + //dropDownComponent.hidePopup(orcidLookupUI); + orcidLookupUI.setVisible(false); + OrcidAuthor contact = (OrcidAuthor) propertyChangeEvent.getNewValue(); + System.out.println("property change new value - contact="+contact); + firstname.setText(contact.getGivenNames()); + lastname.setText(contact.getFamilyName()); + email.setText(contact.getEmail()); + orcid.setText(contact.getOrcid()); + } + +} diff --git a/src/main/java/org/isatools/isacreator/orcid/gui/OrcidContactSelectionCancelledEvent.java b/src/main/java/org/isatools/isacreator/orcid/gui/OrcidContactSelectionCancelledEvent.java new file mode 100644 index 00000000..85f234d5 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/orcid/gui/OrcidContactSelectionCancelledEvent.java @@ -0,0 +1,25 @@ +package org.isatools.isacreator.orcid.gui; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +/** + * Created by the ISATeam. + * User: agbeltran + * Date: 24/05/2013 + * Time: 10:49 + * + * @author Alejandra Gonzalez-Beltran + */ +public class OrcidContactSelectionCancelledEvent implements PropertyChangeListener { + + private OrcidLookupUI orcidLookupUI = null; + + public OrcidContactSelectionCancelledEvent(OrcidLookupUI orcidLookupUI){ + this.orcidLookupUI = orcidLookupUI; + } + + public void propertyChange(PropertyChangeEvent propertyChangeEvent) { + orcidLookupUI.setVisible(false); + } +} diff --git a/src/main/java/org/isatools/isacreator/orcid/gui/OrcidLookupUI.java b/src/main/java/org/isatools/isacreator/orcid/gui/OrcidLookupUI.java new file mode 100644 index 00000000..94e408d1 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/orcid/gui/OrcidLookupUI.java @@ -0,0 +1,411 @@ +package org.isatools.isacreator.orcid.gui; + +import com.explodingpixels.macwidgets.IAppWidgetFactory; +import org.isatools.isacreator.common.ClearFieldUtility; +import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; +import org.isatools.isacreator.common.filterableTree.FilterableJTree; +import org.isatools.isacreator.common.filterableTree.TreeFilterModel; +import org.isatools.isacreator.effects.DraggablePaneMouseInputHandler; +import org.isatools.isacreator.effects.InfiniteProgressPanel; +import org.isatools.isacreator.ontologyselectiontool.CustomTreeRenderer; +import org.isatools.isacreator.orcid.OrcidClient; +import org.isatools.isacreator.orcid.impl.OrcidClientImpl; +import org.isatools.isacreator.orcid.model.OrcidAuthor; +import org.jdesktop.fuse.InjectedResource; +import org.jdesktop.fuse.ResourceInjector; + +import javax.swing.*; +import javax.swing.border.EmptyBorder; +import javax.swing.border.EtchedBorder; +import javax.swing.event.MouseInputAdapter; +import javax.swing.plaf.basic.BasicTreeUI; +import javax.swing.tree.DefaultMutableTreeNode; +import java.awt.*; +import java.awt.event.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Created by the ISATeam. + * User: agbeltran + * Date: 23/05/2013 + * Time: 15:28 + * + * @author Alejandra Gonzalez-Beltran + */ +public class OrcidLookupUI extends JFrame implements WindowListener, MouseListener { + + private static InfiniteProgressPanel progressIndicator; + + private JTextField searchField; + private FilterableJTree orcidSearchResultsTree = null; + + private Container searchAndResultsContainer; + private OrcidSearchResultsPanel resultPane; + //private JPanel parent; + private JPanel searchUIContainer; + private JLabel resultButton; + + private static OrcidClient orcidClient = null; + private OrcidAuthor currentOrcidContact; + + @InjectedResource + private ImageIcon orcidText, searchFieldLeft, search, searchOver, + resultOver, result,filterInfo, leftFieldIcon, rightFieldIcon; + + public OrcidLookupUI() { + ResourceInjector.get("orcidlookup-package.style").inject(this); + resultPane = new OrcidSearchResultsPanel(); + } + + public void createGUI() { + setBackground(UIHelper.BG_COLOR); + setUndecorated(true); + setLayout(new BorderLayout()); + setPreferredSize(new Dimension(599, 500)); + ((JComponent) getContentPane()).setBorder(new EtchedBorder(UIHelper.LIGHT_GREEN_COLOR, UIHelper.LIGHT_GREEN_COLOR)); + + progressIndicator = new InfiniteProgressPanel( + "searching orcid"); + + + searchUIContainer = new JPanel(); + searchUIContainer.add(createSearchAndResultPanel()); + + + add(searchUIContainer, BorderLayout.CENTER); + add(createSouthPanel(), BorderLayout.SOUTH); + + pack(); + } + + private Container createSearchAndResultPanel() { + searchAndResultsContainer = Box.createVerticalBox(); + searchAndResultsContainer.setBackground(UIHelper.BG_COLOR); + + searchAndResultsContainer.add(Box.createVerticalStrut(10)); + searchAndResultsContainer.add(UIHelper.wrapComponentInPanel(new JLabel(orcidText))); + Box textContainer = Box.createHorizontalBox(); + + Action searchOrcidContacts = new AbstractAction() { + public void actionPerformed(ActionEvent e) { + performSearch(); + } + }; + + searchField = new JTextField(); + searchField.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "SEARCH_ORCID"); + searchField.getActionMap().put("SEARCH_ORCID", searchOrcidContacts); + + UIHelper.renderComponent(searchField, UIHelper.VER_12_BOLD, UIHelper.LIGHT_GREEN_COLOR, UIHelper.BG_COLOR); + searchField.setPreferredSize(new Dimension(300, 30)); + searchField.setBorder(new EmptyBorder(2, 2, 2, 2)); + searchField.setText("enter name"); + + textContainer.add(Box.createHorizontalStrut(5)); + textContainer.add(new JLabel(searchFieldLeft)); + textContainer.add(searchField); + textContainer.add(Box.createHorizontalStrut(20)); + + final JLabel searchButton = new JLabel(search); + searchButton.addMouseListener(new MouseAdapter() { + public void mouseEntered(MouseEvent mouseEvent) { + searchButton.setIcon(searchOver); + } + + public void mouseExited(MouseEvent mouseEvent) { + searchButton.setIcon(search); + } + + public void mousePressed(MouseEvent mouseEvent) { + searchButton.setIcon(search); + performSearch(); + } + }); + + textContainer.add(searchButton); + + searchAndResultsContainer.add(Box.createVerticalStrut(20)); + searchAndResultsContainer.add(textContainer); + searchAndResultsContainer.add(Box.createVerticalGlue()); + + createResultsPanel(); + + return searchAndResultsContainer; + } + + private Container createResultsPanel(){ + BasicTreeUI ui = new BasicTreeUI() { + public Icon getCollapsedIcon() { + return null; + } + + public Icon getExpandedIcon() { + return null; + } + }; + + createSearchResultsTree(ui); + JScrollPane treeScroll = new JScrollPane(orcidSearchResultsTree, + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + treeScroll.setBorder(new EtchedBorder()); + treeScroll.getViewport().setBackground(UIHelper.BG_COLOR); + treeScroll.setSize(new Dimension(500, 350)); + IAppWidgetFactory.makeIAppScrollPane(treeScroll); + + orcidSearchResultsTree.addMouseListener(this); + + JPanel searchFields = new JPanel(); + searchFields.setLayout(new BoxLayout(searchFields, BoxLayout.PAGE_AXIS)); + searchFields.setBackground(UIHelper.BG_COLOR); + + //searchFields.add(searchSpan); + //searchFields.add(searchFieldCont); + searchFields.add(Box.createVerticalStrut(10)); + + searchAndResultsContainer.add(searchFields, BorderLayout.NORTH); + searchAndResultsContainer.add(treeScroll); + + JPanel filterPanel = new JPanel(); + filterPanel.setBackground(UIHelper.BG_COLOR); + filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS)); + + ((JComponent) orcidSearchResultsTree.getFilterField()).setBorder(null); + UIHelper.renderComponent(orcidSearchResultsTree.getFilterField(), UIHelper.VER_11_BOLD, UIHelper.DARK_GREEN_COLOR, false); + + filterPanel.add(new JLabel(filterInfo)); + filterPanel.add(new JLabel(leftFieldIcon)); + filterPanel.add(orcidSearchResultsTree.getFilterField()); + filterPanel.add(new ClearFieldUtility(orcidSearchResultsTree.getFilterField())); + filterPanel.add(new JLabel(rightFieldIcon)); + return filterPanel; + } + + private void createSearchResultsTree(BasicTreeUI ui) { + DefaultMutableTreeNode top = new DefaultMutableTreeNode("result"); + + orcidSearchResultsTree = new FilterableJTree(); + TreeFilterModel treeModel = new FilterableOrcidTreeModel(top, orcidSearchResultsTree); + + orcidSearchResultsTree.setModel(treeModel); + orcidSearchResultsTree.setCellRenderer(new CustomTreeRenderer()); + orcidSearchResultsTree.expandRow(0); + orcidSearchResultsTree.expandRow(1); // expand root and first result node on acquiring result! if there is no result, no exceptions will be thrown! + + orcidSearchResultsTree.setShowsRootHandles(false); + orcidSearchResultsTree.setUI(ui); + } + + + private Container createSouthPanel() { + + JPanel southPanel = new JPanel(new BorderLayout()); + southPanel.setBackground(UIHelper.BG_COLOR); + + FlatButton closeButton = new FlatButton(ButtonType.RED, "Close"); + closeButton .addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + firePropertyChange("noSelectedOrcidAuthor", "noneSelected", ""); + setVisible(false); + } + }); + + FlatButton acceptButton = new FlatButton(ButtonType.GREEN, "Accept"); + acceptButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + firePropertyChange("selectedOrcid", "OLD_VALUE", + currentOrcidContact); + + setVisible(false); + } + }); + + + southPanel.add(closeButton, BorderLayout.WEST); + southPanel.add(acceptButton, BorderLayout.EAST); + + return southPanel; + } + + private void performSearch() { + + Thread performer = new Thread(new Runnable() { + public void run() { + //try { + System.out.println("starting search"); + if (!searchField.getText().equals("")) { + progressIndicator.setSize(new Dimension( + getWidth(), + getHeight())); + setGlassPane(progressIndicator); + progressIndicator.start(); + OrcidLookupUI.this.validate(); + + OrcidAuthor[] result = orcidClient.getOrcidProfiles(searchField.getText()); + + + Map> map = new HashMap>(); + + for(OrcidAuthor contact: result){ + Set set = new HashSet(); + for(OrcidAuthor contact1: result){ + if (contact.getFamilyName().equals(contact1.getFamilyName())) + set.add(contact1); + } + map.put(contact.getFamilyName(), set); + } + orcidSearchResultsTree.setItems(map); + + progressIndicator.stop(); + + + /* + for (OrcidAuthor contact: result) { + currentOrcidContact = contact; + // push to SearchResultPane + resetButtons(); + resultPane.showOrcidContact(currentOrcidContact); + swapContainers(resultPane); + resultButton.setIcon(resultOver); + progressIndicator.stop(); + break; + } + */ + + } + //} catch (Exception e) { + // e.printStackTrace(); + //} finally { + // if (progressIndicator.isStarted()) { + // SwingUtilities.invokeLater(new Runnable() { + // public void run() { + // progressIndicator.stop(); + // } + // }); + // } + //} + } + }); + + + + orcidClient = new OrcidClientImpl(); + + if (orcidClient != null) { + performer.start(); + } else { + resultPane.showError(); + } + } + + private void resetButtons() { +// if (resultButton.getIcon() != resultInactive) { +// resultButton.setIcon(result); +// } + + } + + private void swapContainers(Container newContainer) { + if (newContainer != null) { + searchUIContainer.removeAll(); + searchUIContainer.add(newContainer); + searchUIContainer.repaint(); + searchUIContainer.validate(); + } + } + + public void windowOpened(WindowEvent windowEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void windowClosing(WindowEvent windowEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void windowClosed(WindowEvent windowEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void windowIconified(WindowEvent windowEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void windowDeiconified(WindowEvent windowEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void windowActivated(WindowEvent windowEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void windowDeactivated(WindowEvent windowEvent) { + firePropertyChange("noSelectedOrcid", "canceled", windowEvent.toString()); + } + + public void installListeners() { + MouseInputAdapter handler = new DraggablePaneMouseInputHandler(this); + Window window = this; + window.addMouseListener(handler); + window.addMouseMotionListener(handler); + } + + public void mouseClicked(MouseEvent mouseEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void mousePressed(MouseEvent mouseEvent) { + if (mouseEvent.getSource() instanceof JTree) { + JTree tree = (JTree) mouseEvent.getSource(); + + DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); + if (selectedNode != null) { + + if (tree == orcidSearchResultsTree) { + if (selectedNode.isLeaf()) { + + DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) selectedNode.getParent(); + String surname = (String) parentNode.getUserObject(); + System.out.println("Selected surname ="+surname); + + OrcidAuthor orcidAuthor = (OrcidAuthor) selectedNode.getUserObject(); + + System.out.println("Selected author="+orcidAuthor); + + if (mouseEvent.getClickCount() == 1) { + + currentOrcidContact = orcidAuthor; + //retrieve the author information + firePropertyChange("selectedOrcid", "OLD_VALUE", + currentOrcidContact); + + } + +// if (OntologyUtils.getSourceOntologyPortalByVersion(ontologySource.getSourceVersion()) == OntologyPortal.BIOPORTAL) { +// boolean sourceIsInPlugins = OntologySearchPluginRegistry.isOntologySourceAbbreviationDefinedInPlugins(ontologyTerm.getOntologySource()); +// viewTermDefinition.setContent(createOntologyBranch(ontologyTerm), ontologySource.getSourceVersion(), sourceIsInPlugins ? null : bioportalClient == null ? new BioPortalClient() : bioportalClient); +// } else { +// viewTermDefinition.setContent(createOntologyBranch(ontologyTerm), ontologySource.getSourceVersion(), olsClient); +// } + } + } + } + } + } + + public void mouseReleased(MouseEvent mouseEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void mouseEntered(MouseEvent mouseEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void mouseExited(MouseEvent mouseEvent) { + //To change body of implemented methods use File | Settings | File Templates. + } +} diff --git a/src/main/java/org/isatools/isacreator/orcid/gui/OrcidSearchResultsPanel.java b/src/main/java/org/isatools/isacreator/orcid/gui/OrcidSearchResultsPanel.java new file mode 100644 index 00000000..125fcd9a --- /dev/null +++ b/src/main/java/org/isatools/isacreator/orcid/gui/OrcidSearchResultsPanel.java @@ -0,0 +1,111 @@ +package org.isatools.isacreator.orcid.gui; + +import com.explodingpixels.macwidgets.IAppWidgetFactory; +import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.orcid.model.OrcidAuthor; +import org.jdesktop.fuse.InjectedResource; +import org.jdesktop.fuse.ResourceInjector; + +import javax.swing.*; +import javax.swing.border.EmptyBorder; +import javax.swing.text.html.HTMLEditorKit; +import java.awt.*; + +/** + * Created by the ISATeam. + * User: agbeltran + * Date: 23/05/2013 + * Time: 15:32 + * + * @author Alejandra Gonzalez-Beltran + */ +public class OrcidSearchResultsPanel extends JPanel { + + private JEditorPane resultInfo; + + private JScrollPane resultScroller; + + @InjectedResource + private ImageIcon connectionError; + + public OrcidSearchResultsPanel() { + ResourceInjector.get("orcidlookup-package.style").inject(this); + setLayout(new BorderLayout()); + setBackground(UIHelper.BG_COLOR); + resultInfo = new JEditorPane(); + resultInfo.setContentType("text/html"); + resultInfo.setEditable(false); + resultInfo.setBackground(UIHelper.BG_COLOR); + resultInfo.setAutoscrolls(true); + resultInfo.setEditorKit(new HTMLEditorKit()); + + resultScroller = new JScrollPane(resultInfo, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + resultScroller.setBorder(new EmptyBorder(2, 2, 2, 2)); + resultScroller.setPreferredSize(new Dimension(480, 270)); + + IAppWidgetFactory.makeIAppScrollPane(resultScroller); + } + + public void showOrcidContact(OrcidAuthor currentOrcidContact) { + reformResultData(currentOrcidContact, resultInfo); + removeAll(); + add(resultScroller); + revalidate(); + repaint(); + } + + private void reformResultData(OrcidAuthor contact, JEditorPane htmlPane) { + + String header = "" + "" + + "" + "" + + ""; + + StringBuffer result = new StringBuffer(); + result.append(header); + if (contact != null) { + result.append("

"); + result.append("").append(contact.getGivenNames()+" "+contact.getFamilyName()).append("

"); + + if (contact.getEmail()!=null){ + result.append("").append(contact.getEmail()).append("

"); + } +// if (!p.getAbstractText().trim().equals("")) { +// result.append("").append(p.getAbstractText().trim()).append("

"); +// } +// result.append("PUBMED ID:").append(p.getPubmedId()).append("

"); +//result.append("DOI:").append(p.getPublicationDOI().toUpperCase()).append("

"); + result.append("

"); + result.append("

"); + } + + result.append(""); + + htmlPane.setText(result.toString()); + htmlPane.setCaretPosition(0); + htmlPane.revalidate(); + + } + + public void showError() { + removeAll(); + add(new JLabel(connectionError)); + revalidate(); + repaint(); + } +} diff --git a/src/main/java/org/isatools/isacreator/orcid/impl/OrcidClientImpl.java b/src/main/java/org/isatools/isacreator/orcid/impl/OrcidClientImpl.java new file mode 100644 index 00000000..d83e4602 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/orcid/impl/OrcidClientImpl.java @@ -0,0 +1,132 @@ +package org.isatools.isacreator.orcid.impl; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.methods.GetMethod; +import org.isatools.isacreator.orcid.OrcidClient; +import org.isatools.isacreator.orcid.model.OrcidAuthor; +import org.isatools.isacreator.orcid.xmlhandlers.OrcidSearchResultHandler; +import org.orcid.ns.orcid.OrcidMessageDocument; + +import java.io.IOException; +import java.net.URLEncoder; + +/** + * Created by the ISATeam. + * User: agbeltran + * Date: 23/05/2013 + * Time: 13:37 + * + * @author Alejandra Gonzalez-Beltran + */ +public class OrcidClientImpl implements OrcidClient { + + public static final String QUERY_URL = "http://pub.orcid.org/search/orcid-bio/"; + + public static final String ACCEPT = "Accept-Encoding"; + public static final String ORCID_XML = "application/orcid+xml"; + public static final String CONTENT_TYPE = "Content-Type"; + + private HttpClient client = null; + private GetMethod getMethod = null; + private OrcidSearchResultHandler handler = null; + + + public OrcidClientImpl() { + + client = new HttpClient(); + getMethod = new GetMethod(QUERY_URL); + handler = new OrcidSearchResultHandler(); + + } + + public OrcidAuthor getAuthorInfo(String orcidID) { + + try { + + getMethod.setQueryString("q=" + (orcidID.contains("-") ? "orcid" : "text") + ":" + orcidID); + + System.out.println("query string=" + getMethod.getQueryString()); + System.out.println("URI=" + getMethod.getURI()); + + + getMethod.addRequestHeader(CONTENT_TYPE, ORCID_XML); + //getMethod.addRequestHeader(ACCEPT, ORCID_XML); + + int statusCode = client.executeMethod(getMethod); + + if (statusCode != -1) { + String contents = getMethod.getResponseBodyAsString(); + + System.out.println("status text=" + getMethod.getStatusText()); + System.out.println("contents=" + contents); + + getMethod.releaseConnection(); + return processAuthorInfo(contents); + } else { + System.out.println("status code is -1"); + } + + } catch (IOException ex) { + ex.printStackTrace(); + }//catch(HttpException ex){ + + //} + return null; + } + + public OrcidAuthor[] getOrcidProfiles(String searchString) { + + try { + getMethod.setQueryString("q=text:" + URLEncoder.encode(searchString, "UTF-8") + ""); + + System.out.println("query string=" + getMethod.getQueryString()); + System.out.println("URI=" + getMethod.getURI()); + + + getMethod.addRequestHeader(CONTENT_TYPE, ORCID_XML); + + int statusCode = client.executeMethod(getMethod); + + if (statusCode != -1) { + String contents = getMethod.getResponseBodyAsString(); + + System.out.println("status text=" + getMethod.getStatusText()); + System.out.println("contents=" + contents); + + getMethod.releaseConnection(); + return processOrcidProfles(contents); + } else { + System.out.println("status code is -1"); + } + + } catch (IOException ex) { + ex.printStackTrace(); + }//catch(HttpException ex){ + + //} + return null; + + + } + + private OrcidAuthor[] processOrcidProfles(String contents) { + OrcidMessageDocument orcidMessageDocument = handler.getOrcidMessageDocument(contents); + return handler.getOrcidAuthors(orcidMessageDocument); + } + + private OrcidAuthor processAuthorInfo(String contents) { + System.out.println("contents=" + contents); + OrcidMessageDocument orcidMessageDocument = handler.getOrcidMessageDocument(contents); + return handler.getSingleOrcidAuthor(orcidMessageDocument); + } + + + public static void main(String[] args) { + OrcidClientImpl client = new OrcidClientImpl(); + //client.getAuthorInfo("0000-0003-3499-8262"); + // client.getOrcidProfiles("English"); + //client.getOrcidProfiles("gonzalez-beltran"); + client.getOrcidProfiles("0000-0003-3499-8262"); + } + +} diff --git a/src/main/java/org/isatools/isacreator/orcid/model/OrcidAuthor.java b/src/main/java/org/isatools/isacreator/orcid/model/OrcidAuthor.java new file mode 100644 index 00000000..a565a5e2 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/orcid/model/OrcidAuthor.java @@ -0,0 +1,91 @@ +package org.isatools.isacreator.orcid.model; + +/** + * Created by the ISATeam. + * User: agbeltran + * Date: 23/05/2013 + * Time: 16:10 + * + * @author Alejandra Gonzalez-Beltran + */ +public class OrcidAuthor {//extends Contact { + + private String orcid; + + //first name + private String givenNames; + //last name + private String familyName; + private String email; + + private String pastInstitution; + private String currentPrimaryInstitution; + private String currentOtherInstitution; + + + + public OrcidAuthor(){ + + } + + + + public String getOrcid(){ + return orcid; + } + + public String getGivenNames(){ + return givenNames; + } + + public String getFamilyName(){ + return familyName; + } + + public String getPastInstitution(){ + return pastInstitution; + } + + public String getCurrentPrimaryInstitution(){ + return currentPrimaryInstitution; + } + + public String getCurrentOtherInstitution(){ + return currentOtherInstitution; + } + + public String getEmail(){ + return email; + } + + + public void setOrcid(String orcid){ + this.orcid = orcid; + } + + public void setGivenNames(String givenNames){ + this.givenNames = givenNames; + } + + public void setFamilyName(String familyName){ + this.familyName = familyName; + } + + public void setCurrentPrimaryInstitution(String currentPrimaryInstitution){ + this.currentPrimaryInstitution = currentPrimaryInstitution; + } + + public void setEmail(String email){ + this.email = email; + } + + + + public String getIdentifier() { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public String toString(){ + return getGivenNames()+" "+getFamilyName(); + } +} diff --git a/src/main/java/org/isatools/isacreator/orcid/xmlhandlers/OrcidSearchResultHandler.java b/src/main/java/org/isatools/isacreator/orcid/xmlhandlers/OrcidSearchResultHandler.java new file mode 100644 index 00000000..2e9a568a --- /dev/null +++ b/src/main/java/org/isatools/isacreator/orcid/xmlhandlers/OrcidSearchResultHandler.java @@ -0,0 +1,117 @@ +package org.isatools.isacreator.orcid.xmlhandlers; + +import org.isatools.isacreator.orcid.model.OrcidAuthor; +import org.orcid.ns.orcid.*; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +/** + * Created by the ISATeam. + * User: agbeltran + * Date: 23/05/2013 + * Time: 21:21 + * + * @author Alejandra Gonzalez-Beltran + */ +public class OrcidSearchResultHandler { + + public OrcidMessageDocument getOrcidMessageDocument(String xmlAsString) { + OrcidMessageDocument resultDocument = null; + try { + + InputStream stream = new ByteArrayInputStream(xmlAsString.getBytes("UTF-8")); + resultDocument = OrcidMessageDocument.Factory.parse(stream); + } catch (org.apache.xmlbeans.XmlException e) { + System.err.println("XML Exception encountered"); + e.printStackTrace(); + } catch (java.io.IOException e) { + System.err.println("IO Exception: " + e.getMessage()); + e.printStackTrace(); + } + + return resultDocument; + } + + public OrcidAuthor[] getOrcidAuthors(OrcidMessageDocument messageDocument) { + + OrcidMessageDocument.OrcidMessage orcidMessage = messageDocument.getOrcidMessage(); + OrcidSearchResultsDocument.OrcidSearchResults searchResults = orcidMessage.getOrcidSearchResults(); + + if (searchResults == null) + return null; + + OrcidSearchResultDocument.OrcidSearchResult[] results = searchResults.getOrcidSearchResultArray(); + + OrcidAuthor[] authors = new OrcidAuthor[results.length]; + + int i = 0; + for (OrcidSearchResultDocument.OrcidSearchResult result : results) { + OrcidProfileDocument.OrcidProfile profile = result.getOrcidProfile(); + authors[i] = getOrcidAuthor(profile); + i++; + } + return authors; + } + + public OrcidAuthor getSingleOrcidAuthor(OrcidMessageDocument messageDocument) { + + OrcidAuthor orcidAuthor = null; + OrcidMessageDocument.OrcidMessage orcidMessage = messageDocument.getOrcidMessage(); + OrcidSearchResultsDocument.OrcidSearchResults searchResults = orcidMessage.getOrcidSearchResults(); + + if (searchResults == null) + return null; + + OrcidSearchResultDocument.OrcidSearchResult[] results = searchResults.getOrcidSearchResultArray(); + + + if (results.length == 1) { + OrcidProfileDocument.OrcidProfile profile = results[0].getOrcidProfile(); + orcidAuthor = getOrcidAuthor(profile); + } + + System.out.println(orcidAuthor); + return orcidAuthor; + } + + + private OrcidAuthor getOrcidAuthor(OrcidProfileDocument.OrcidProfile profile) { + OrcidAuthor orcidAuthor = new OrcidAuthor(); + orcidAuthor.setOrcid(removeFragments(profile.getOrcid().toString())); + + OrcidBioDocument.OrcidBio orcidBio = profile.getOrcidBio(); + PersonalDetailsDocument.PersonalDetails personalDetails = orcidBio.getPersonalDetails(); + AffiliationsDocument.Affiliations affiliations = orcidBio.getAffiliations(); + + + GivenNamesDocument.GivenNames givenNames = personalDetails.getGivenNames(); + + orcidAuthor.setGivenNames(removeFragments(givenNames.xmlText())); + if (personalDetails.getFamilyName() != null) { + orcidAuthor.setFamilyName(removeFragments(personalDetails.getFamilyName().xmlText())); + } + + + if (affiliations != null) { + AffiliationDocument.Affiliation[] affiliationArray = affiliations.getAffiliationArray(); + if (affiliationArray.length > 0) + orcidAuthor.setCurrentPrimaryInstitution(removeFragments(affiliationArray[0].getAffiliationName().xmlText())); + } + + + ContactDetailsDocument.ContactDetails contactDetails = orcidBio.getContactDetails(); + if (contactDetails != null) { + Email[] emails = contactDetails.getEmailArray(); + if (emails.length > 0) + orcidAuthor.setEmail(emails[0].getStringValue()); + } + + return orcidAuthor; + } + + private String removeFragments(String text) { + return text.substring(14, text.length() - 15); + + } +} diff --git a/src/main/java/org/isatools/isacreator/publicationlocator/PublicationLocatorUI.java b/src/main/java/org/isatools/isacreator/publicationlocator/PublicationLocatorUI.java index 02c62f07..50004df1 100644 --- a/src/main/java/org/isatools/isacreator/publicationlocator/PublicationLocatorUI.java +++ b/src/main/java/org/isatools/isacreator/publicationlocator/PublicationLocatorUI.java @@ -39,6 +39,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.archiveoutput.ArchiveOutputWindow; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.effects.DraggablePaneMouseInputHandler; import org.isatools.isacreator.effects.InfiniteProgressPanel; import org.isatools.isacreator.gui.DataEntryForm; @@ -64,13 +66,6 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi public class PublicationLocatorUI extends JFrame implements WindowListener { - static { - ResourceInjector.addModule("org.jdesktop.fuse.swing.SwingModule"); - - ResourceInjector.get("publication-package.style").load( - ArchiveOutputWindow.class.getResource("/dependency-injections/publicationlocator-package.properties")); - } - private static final int PUBMED_SEARCH = 0; private static final int DOI_SEARCH = 1; private static final int RESULT = 2; @@ -83,7 +78,7 @@ public class PublicationLocatorUI extends JFrame implements WindowListener { @InjectedResource private ImageIcon searchBy, pubmedOption, pubmedOptionOver, doiOption, doiOptionOver, resultInactive, result, - resultOver, end, close, closeOver, accept, acceptOver, search, searchOver, pubmedText, doiText, searchFieldLeft; + resultOver, end, search, searchOver, pubmedText, doiText, searchFieldLeft; private JPanel swappableContainer; @@ -129,41 +124,21 @@ public void createGUI() { private Container createSouthPanel() { JPanel southPanel = new JPanel(new BorderLayout()); + southPanel.setBorder(UIHelper.EMPTY_BORDER); southPanel.setBackground(UIHelper.BG_COLOR); - final JLabel closeButton = new JLabel(close); - closeButton.addMouseListener(new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent mouseEvent) { - closeButton.setIcon(closeOver); - } - - @Override - public void mouseExited(MouseEvent mouseEvent) { - closeButton.setIcon(close); - } - - @Override - public void mousePressed(MouseEvent mouseEvent) { + JButton closeButton = new FlatButton(ButtonType.RED, "Cancel"); + closeButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { firePropertyChange("noSelectedPublication", "noneSelected", ""); setVisible(false); } }); - final JLabel export = new JLabel(accept); - export.addMouseListener(new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent mouseEvent) { - export.setIcon(acceptOver); - } - @Override - public void mouseExited(MouseEvent mouseEvent) { - export.setIcon(accept); - } - - @Override - public void mousePressed(MouseEvent mouseEvent) { + JButton export = new FlatButton(ButtonType.GREEN, "Select Publication"); + export.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { firePropertyChange("selectedPublication", "OLD_VALUE", currentPublication); setVisible(false); diff --git a/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeBuilderPane.java b/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeBuilderPane.java index 0cb3cb37..94849f31 100644 --- a/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeBuilderPane.java +++ b/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeBuilderPane.java @@ -60,8 +60,6 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi public class QRCodeBuilderPane extends JPanel { - @InjectedResource - private ImageIcon help; private String[] columnNames; private String[][] spreadsheetDataSnapshot; @@ -72,7 +70,6 @@ public QRCodeBuilderPane(String[] columnNames, String[][] spreadsheetDataSnapsho this.columnNames = columnNames; this.spreadsheetDataSnapshot = spreadsheetDataSnapshot; - ResourceInjector.get("qrcode-generator-package.style").inject(this); } public void createGUI() { @@ -96,8 +93,6 @@ public void createGUI() { IAppWidgetFactory.makeIAppScrollPane(mappingBuilderScroller); add(mappingBuilderScroller, BorderLayout.CENTER); - - add(UIHelper.wrapComponentInPanel(new JLabel(help)), BorderLayout.WEST); } public List getMappings() { diff --git a/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeDetailedView.java b/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeDetailedView.java index 23ba8d1c..a01a3913 100644 --- a/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeDetailedView.java +++ b/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeDetailedView.java @@ -58,9 +58,6 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi public class QRCodeDetailedView extends JPanel { - @InjectedResource - private ImageIcon qrInfoSectionHeader, qrCodeSectionHeader; - private JLabel qrCodeImage; private QRCode qrCode; private QRCodeInfoRenderer qrCodeDetailsUI; @@ -87,18 +84,13 @@ private Container createTopPanel() { container.add(Box.createVerticalStrut(16), BorderLayout.NORTH); - JLabel sectionHeader = new JLabel(qrCodeSectionHeader); - sectionHeader.setHorizontalAlignment(SwingConstants.LEFT); - sectionHeader.setVerticalAlignment(SwingConstants.TOP); - - container.add(sectionHeader, BorderLayout.WEST); qrCodeImage = new JLabel(); qrCodeImage.setPreferredSize(new Dimension(100, 100)); qrCodeImage.setVerticalAlignment(SwingConstants.TOP); qrCodeImage.setHorizontalAlignment(SwingConstants.RIGHT); - container.add(qrCodeImage, BorderLayout.EAST); + container.add(qrCodeImage, BorderLayout.WEST); return container; } @@ -152,12 +144,6 @@ private void createPane() { updateContent(); - - JLabel infoSectionLabel = new JLabel(qrInfoSectionHeader); - infoSectionLabel.setHorizontalAlignment(SwingConstants.LEFT); - QRCodeInfoRenderer.this.add(Box.createVerticalStrut(15)); - QRCodeInfoRenderer.this.add(UIHelper.wrapComponentInPanel(infoSectionLabel)); - QRCodeInfoRenderer.this.add(Box.createVerticalStrut(15)); QRCodeInfoRenderer.this.add(content); } diff --git a/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeGeneratorUI.java b/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeGeneratorUI.java index 09a65f35..d28fd480 100644 --- a/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeGeneratorUI.java +++ b/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeGeneratorUI.java @@ -39,6 +39,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.common.SelectOutputDirectoryDialog; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.common.dialog.ConfirmationDialog; import org.isatools.isacreator.gui.ISAcreator; import org.isatools.isacreator.qrcode.html.HTMLCreator; @@ -52,6 +54,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import javax.swing.border.EmptyBorder; import javax.swing.border.EtchedBorder; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; @@ -91,8 +95,7 @@ public class QRCodeGeneratorUI extends JDialog { @InjectedResource private ImageIcon qrCodeGeneratorLogo, qrCodeViewIcon, qrCodeViewOver, qrCodeBuilderIcon, - qrCodeBuilderIconOver, helpIcon, helpIconOver, closeWindowIcon, closeWindowIconOver, exportIcon, - exportIconOver, working, builderFirst; + qrCodeBuilderIconOver, helpIcon, helpIconOver, working, builderFirst; private QRCodeViewerPane viewerPane; private QRCodeBuilderPane builderPane; @@ -319,22 +322,12 @@ public void run() { private Container createSouthPanel() { JPanel southPanel = new JPanel(new BorderLayout()); + southPanel.setBorder(UIHelper.EMPTY_BORDER); southPanel.setBackground(UIHelper.BG_COLOR); - final JLabel closeButton = new JLabel(closeWindowIcon); - closeButton.addMouseListener(new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent mouseEvent) { - closeButton.setIcon(closeWindowIconOver); - } - - @Override - public void mouseExited(MouseEvent mouseEvent) { - closeButton.setIcon(closeWindowIcon); - } - - @Override - public void mousePressed(MouseEvent mouseEvent) { + JButton closeButton = new FlatButton(ButtonType.RED, "Cancel"); + closeButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { confirmChoice = new ConfirmationDialog(); confirmChoice.addPropertyChangeListener(ConfirmationDialog.NO, new PropertyChangeListener() { @@ -359,94 +352,86 @@ public void run() { confirmChoice.showDialog(isacreatorEnvironment); } }); + } + }); + JButton export = new FlatButton(ButtonType.GREEN, "Export QR Codes"); + export.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + exportQRCodes(); } }); - final JLabel export = new JLabel(exportIcon); - export.addMouseListener(new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent mouseEvent) { - export.setIcon(exportIconOver); - } - @Override - public void mouseExited(MouseEvent mouseEvent) { - export.setIcon(exportIcon); - } + southPanel.add(closeButton, BorderLayout.WEST); + southPanel.add(export, BorderLayout.EAST); - @Override - public void mousePressed(MouseEvent mouseEvent) { + return southPanel; + } - if (builderPane == null) { - swapContainers(UIHelper.wrapComponentInPanel(new JLabel(builderFirst))); - } else { - final SelectOutputDirectoryDialog outputDir = new SelectOutputDirectoryDialog(); + private void exportQRCodes() { + if (builderPane == null) { + swapContainers(UIHelper.wrapComponentInPanel(new JLabel(builderFirst))); + } else { + final SelectOutputDirectoryDialog outputDir = new SelectOutputDirectoryDialog(); - if (generatedQRCodes == null) { + if (generatedQRCodes == null) { - Thread performer = new Thread(new Runnable() { - public void run() { - generatedQRCodes = CodeGenerator.createQRCodeImage(apiHook.generateEncodeInfo(builderPane.getMappings()), new Dimension(100, 100)); + Thread performer = new Thread(new Runnable() { + public void run() { + generatedQRCodes = CodeGenerator.createQRCodeImage(apiHook.generateEncodeInfo(builderPane.getMappings()), new Dimension(100, 100)); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - swapContainers(selectedSection == HELP ? helpPane : selectedSection == QR_CODE_VIEW ? viewerPane : builderPane); - outputDir.createGUI(); - outputDir.showDialog(isacreatorEnvironment); - } - }); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + swapContainers(selectedSection == HELP ? helpPane : selectedSection == QR_CODE_VIEW ? viewerPane : builderPane); + outputDir.createGUI(); + outputDir.showDialog(isacreatorEnvironment); } - }); - swapContainers(UIHelper.wrapComponentInPanel(new JLabel(working))); - performer.start(); - } else { - outputDir.createGUI(); - outputDir.showDialog(isacreatorEnvironment); } - outputDir.addPropertyChangeListener(SelectOutputDirectoryDialog.CANCEL, new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent propertyChangeEvent) { - outputDir.hideDialog(); - outputDir.dispose(); - } - }); + }); + swapContainers(UIHelper.wrapComponentInPanel(new JLabel(working))); + performer.start(); + } else { + outputDir.createGUI(); + outputDir.showDialog(isacreatorEnvironment); + } - outputDir.addPropertyChangeListener(SelectOutputDirectoryDialog.CONTINUE, new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent propertyChangeEvent) { - outputDir.hideDialog(); - outputDir.dispose(); + outputDir.addPropertyChangeListener(SelectOutputDirectoryDialog.CANCEL, new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent propertyChangeEvent) { + outputDir.hideDialog(); + outputDir.dispose(); + } + }); - File outputDir = new File(propertyChangeEvent.getNewValue().toString() + File.separator + "qr-codes"); + outputDir.addPropertyChangeListener(SelectOutputDirectoryDialog.CONTINUE, new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent propertyChangeEvent) { + outputDir.hideDialog(); + outputDir.dispose(); - if (!outputDir.exists()) { - outputDir.mkdir(); - } + File outputDir = new File(propertyChangeEvent.getNewValue().toString() + File.separator + "qr-codes"); - CodeGenerator.generateFilesFromQRCodes(generatedQRCodes, outputDir.getAbsolutePath()); - - HTMLCreator htmlOutput = new HTMLCreator(generatedQRCodes); - try { - htmlOutput.createHTML(outputDir); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } + if (!outputDir.exists()) { + outputDir.mkdir(); + } - closeWindow(); - } - }); + CodeGenerator.generateFilesFromQRCodes(generatedQRCodes, outputDir.getAbsolutePath()); + HTMLCreator htmlOutput = new HTMLCreator(generatedQRCodes); + try { + htmlOutput.createHTML(outputDir); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + closeWindow(); } - } - }); + }); - southPanel.add(closeButton, BorderLayout.WEST); - southPanel.add(export, BorderLayout.EAST); - return southPanel; + } } private void closeWindow() { diff --git a/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeTreeRenderer.java b/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeTreeRenderer.java index 2948cad6..fd59d22a 100644 --- a/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeTreeRenderer.java +++ b/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeTreeRenderer.java @@ -58,7 +58,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi public class QRCodeTreeRenderer extends JComponent implements TreeCellRenderer { @InjectedResource - private ImageIcon selectedIcon, notSelectedIcon, rootClosed, rootExpanded, separator; + private ImageIcon selectedIcon, notSelectedIcon, rootClosed, rootExpanded; private JLabel leftSide; private JLabel text; @@ -85,7 +85,6 @@ public QRCodeTreeRenderer() { add(qrCodeContainer, BorderLayout.WEST); text = UIHelper.createLabel("", UIHelper.VER_12_PLAIN, UIHelper.DARK_GREEN_COLOR); - text.setIcon(separator); add(text, BorderLayout.CENTER); } diff --git a/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeViewerPane.java b/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeViewerPane.java index 0a884d36..d7830dc2 100644 --- a/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeViewerPane.java +++ b/src/main/java/org/isatools/isacreator/qrcode/ui/QRCodeViewerPane.java @@ -70,7 +70,7 @@ public class QRCodeViewerPane extends JPanel implements MouseListener { // will display a list with the generated codes. @InjectedResource - private ImageIcon leftFilter, rightFilter, separator; + private ImageIcon leftFilter, rightFilter; private FilterableJTree qrCodeTree; @@ -99,7 +99,6 @@ public void createGUI() { treePanel.setBackground(UIHelper.BG_COLOR); treePanel.add(createTreePanel()); - treePanel.add(UIHelper.wrapComponentInPanel(new JLabel(separator))); add(treePanel, BorderLayout.WEST); add(detailedView, BorderLayout.CENTER); diff --git a/src/main/java/org/isatools/isacreator/settings/GeneralViewerEditor.java b/src/main/java/org/isatools/isacreator/settings/GeneralViewerEditor.java index eb7b3de2..02e70870 100644 --- a/src/main/java/org/isatools/isacreator/settings/GeneralViewerEditor.java +++ b/src/main/java/org/isatools/isacreator/settings/GeneralViewerEditor.java @@ -137,9 +137,9 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { String term = propertyChangeEvent.getNewValue().toString(); if (term != null) { updateEditor(term); - removeTerm.setVisible(true); + removeButton.setVisible(true); } else { - removeTerm.setVisible(false); + removeButton.setVisible(false); } } }); diff --git a/src/main/java/org/isatools/isacreator/settings/ISAcreatorProperties.java b/src/main/java/org/isatools/isacreator/settings/ISAcreatorProperties.java index f608c388..988d7492 100644 --- a/src/main/java/org/isatools/isacreator/settings/ISAcreatorProperties.java +++ b/src/main/java/org/isatools/isacreator/settings/ISAcreatorProperties.java @@ -48,6 +48,7 @@ public class ISAcreatorProperties { public static final String CURRENT_CONFIGURATION = "current_configuration"; public static final String CURRENT_ISATAB = "current_isatab"; public static final String STRICT_VALIDATION = "strictValidation.isOn"; + public static final String ONTOLOGY_TERM_URI = "ontologyTermURI"; private static Map properties = new HashMap(); @@ -56,6 +57,10 @@ public static void setProperty(String key, String value) { saveProperties(); } + public static boolean getOntologyTermURIProperty(){ + return ISAcreatorProperties.getProperty(ISAcreatorProperties.ONTOLOGY_TERM_URI).equals("true"); + } + public static String getProperty(String key) { if (properties.containsKey(key)) { return properties.get(key); diff --git a/src/main/java/org/isatools/isacreator/settings/OntologySettings.java b/src/main/java/org/isatools/isacreator/settings/OntologySettings.java index 65d8e472..e8b56b37 100644 --- a/src/main/java/org/isatools/isacreator/settings/OntologySettings.java +++ b/src/main/java/org/isatools/isacreator/settings/OntologySettings.java @@ -41,6 +41,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.autofilteringlist.ExtendedJList; import org.isatools.isacreator.common.ColumnFilterRenderer; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.effects.borders.RoundedBorder; import org.isatools.isacreator.gui.menu.ISAcreatorMenu; import org.isatools.isacreator.io.CustomizableFileFilter; @@ -48,12 +50,16 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.io.UserProfileManager; import org.isatools.isacreator.managers.ApplicationManager; import org.isatools.isacreator.ontologymanager.OntologyManager; +import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies; +import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologiesLoader; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; @@ -69,11 +75,12 @@ public class OntologySettings extends SettingsScreen { private JLabel loadedOntologyStats; private JLabel ontologyTermInformation; - + private FlatButton updateCacheButton; private JFileChooser jfc; private Map userOntologyHistory; + private JLabel information; public OntologySettings(ISAcreatorMenu menu) { this.menu = menu; @@ -83,7 +90,9 @@ public OntologySettings(ISAcreatorMenu menu) { setLayout(new BorderLayout()); setOpaque(false); - add(createOntologyConfigPanel(), BorderLayout.NORTH); + add(createOntologySourceUpdatePanel(), BorderLayout.NORTH); + add(createOntologyConfigPanel(), BorderLayout.CENTER); + setBorder(new TitledBorder( new RoundedBorder(UIHelper.LIGHT_GREEN_COLOR, 9), "configure ontologies", TitledBorder.DEFAULT_JUSTIFICATION, @@ -92,6 +101,48 @@ public OntologySettings(ISAcreatorMenu menu) { } + private JPanel createOntologySourceUpdatePanel() { + JPanel informationPanel = new JPanel(new GridLayout(1, 2)); + + information = UIHelper.createLabel(String.format("%d ontologies are currently available.", AcceptedOntologies.getAcceptedOntologies().size()), UIHelper.VER_10_PLAIN, UIHelper.GREY_COLOR); + informationPanel.add(information); + + updateCacheButton = new FlatButton(ButtonType.BLUE, "Update Ontology Detail Cache"); + updateCacheButton.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent actionEvent) { + + Thread updateCacheThread = new Thread(new Runnable() { + public void run() { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + updateCacheButton.setText("Updating"); + updateCacheButton.setEnabled(false); + + } + }); + AcceptedOntologiesLoader.populateAcceptedOntologies(); + AcceptedOntologies.updateAcceptedOntologies(); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + information.setText(String.format("Update complete - %d ontologies are currently available.", AcceptedOntologies.getAcceptedOntologies().size())); + updateCacheButton.setText("Update Ontology Detail Cache"); + updateCacheButton.setEnabled(true); + + } + }); + + } + }); + updateCacheThread.start(); + } + }); + informationPanel.add(updateCacheButton); + + return informationPanel; + } + private JPanel createOntologyConfigPanel() { JPanel configContainer = new JPanel(new GridLayout(1, 2)); configContainer.setOpaque(false); @@ -152,10 +203,10 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { if (historyTerm != null) { updateOntologyTermInfo(userOntologyHistory.get(historyTerm)); ontologyTermInformation.setVisible(true); - removeTerm.setVisible(true); + removeButton.setVisible(true); } else { ontologyTermInformation.setVisible(false); - removeTerm.setVisible(false); + removeButton.setVisible(false); } } }); @@ -165,6 +216,7 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); historyScroll.setBorder(new EmptyBorder(0, 0, 0, 0)); + IAppWidgetFactory.makeIAppScrollPane(historyScroll); UIHelper.renderComponent(historyList.getFilterField(), UIHelper.VER_11_BOLD, UIHelper.GREY_COLOR, false); @@ -177,22 +229,31 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { loadedOntologiesContainer.add(UIHelper.wrapComponentInPanel(loadedOntologyStats)); - // add list and filter field to UI - loadedOntologiesContainer.add(historyList.getFilterField()); - loadedOntologiesContainer.add(Box.createVerticalStrut(5)); + JPanel ontologyPanel = new JPanel(new BorderLayout()); + + ontologyPanel.add(historyList.getFilterField(), BorderLayout.NORTH); + // add the actual list containing the elements! - loadedOntologiesContainer.add(historyScroll); - loadedOntologiesContainer.add(Box.createVerticalStrut(5)); + ontologyPanel.add(historyScroll, BorderLayout.CENTER); + // add controls for list! - loadedOntologiesContainer.add(createControlPanel()); - loadedOntologiesContainer.add(Box.createVerticalStrut(5)); + Container southPanel = Box.createVerticalBox(); + southPanel.add(createControlPanel()); + southPanel.add(Box.createVerticalStrut(5)); + ontologyTermInformation = UIHelper.createLabel("", UIHelper.VER_10_PLAIN); ontologyTermInformation.setPreferredSize(new Dimension(200, 60)); ontologyTermInformation.setVisible(false); + southPanel.add(UIHelper.wrapComponentInPanel(ontologyTermInformation)); + + ontologyPanel.add(southPanel, BorderLayout.SOUTH); + + + // add list and filter field to UI + - loadedOntologiesContainer.add(Box.createVerticalStrut(20)); - loadedOntologiesContainer.add(UIHelper.wrapComponentInPanel(ontologyTermInformation)); + loadedOntologiesContainer.add(ontologyPanel); return loadedOntologiesContainer; } @@ -201,7 +262,7 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { private void updateListContents() { historyList.getItems().clear(); for (OntologyTerm h : userOntologyHistory.values()) { - historyList.addItem(h.getUniqueId()); + historyList.addItem(h.getShortForm()); } } @@ -252,7 +313,7 @@ private int calculateUniqueOntologySources() { public boolean updateSettings() { - OntologyManager.setOntologySelectionHistory(userOntologyHistory); + OntologyManager.setOntologyTermHistory(userOntologyHistory); UserProfileManager.saveUserProfiles(); return true; } @@ -272,8 +333,7 @@ protected void performImportLogic() { JOptionPane optionPane = null; try { - OntologyLibrary ol = UserProfileManager.loadOntologyLibrary( - file); + OntologyLibrary ol = UserProfileManager.loadOntologyLibrary(file); userOntologyHistory.putAll(ol.getOntologies()); UserProfileManager.getCurrentUser().setUsedOntologySources(ol.getOntologySources()); diff --git a/src/main/java/org/isatools/isacreator/settings/SettingsScreen.java b/src/main/java/org/isatools/isacreator/settings/SettingsScreen.java index c3344e5a..4aa00d25 100644 --- a/src/main/java/org/isatools/isacreator/settings/SettingsScreen.java +++ b/src/main/java/org/isatools/isacreator/settings/SettingsScreen.java @@ -38,12 +38,12 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.settings; import org.apache.log4j.Logger; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import javax.swing.*; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; +import java.awt.event.*; import java.util.Properties; /** @@ -54,21 +54,10 @@ public abstract class SettingsScreen extends JPanel { protected final static Logger log = Logger.getLogger(SettingsScreen.class.getName()); - static final ImageIcon EXPORT = new ImageIcon(SettingsScreen.class.getResource("/images/settings/export.png")); - static final ImageIcon EXPORT_OVER = new ImageIcon(SettingsScreen.class.getResource("/images/settings/export_over.png")); - static final ImageIcon IMPORT = new ImageIcon(SettingsScreen.class.getResource("/images/settings/import.png")); - static final ImageIcon IMPORT_OVER = new ImageIcon(SettingsScreen.class.getResource("/images/settings/import_over.png")); - static final ImageIcon REMOVE = new ImageIcon(SettingsScreen.class.getResource("/images/settings/remove.png")); - static final ImageIcon REMOVE_OVER = new ImageIcon(SettingsScreen.class.getResource("/images/settings/remove_over.png")); - static final ImageIcon CONFIRM_DELETION = new ImageIcon(SettingsScreen.class.getResource("/images/settings/confirm.png")); - static final ImageIcon CONFIRM_DELETION_OVER = new ImageIcon(SettingsScreen.class.getResource("/images/settings/confirm_over.png")); - static final ImageIcon CANCEL_DELETION = new ImageIcon(SettingsScreen.class.getResource("/images/settings/cancel.png")); - static final ImageIcon CANCEL_DELETION_OVER = new ImageIcon(SettingsScreen.class.getResource("/images/settings/cancel_over.png")); - protected Properties settings; protected Properties propertiesOverride; - protected JLabel removeTerm; + protected FlatButton removeButton; protected abstract boolean updateSettings(); @@ -88,47 +77,25 @@ protected JPanel createControlPanel() { confirmDeletionContainer.setOpaque(false); confirmDeletionContainer.setVisible(false); - final JLabel confirmRemovalButton = new JLabel(CONFIRM_DELETION); - - confirmRemovalButton.addMouseListener(new MouseAdapter() { - - public void mouseEntered(MouseEvent mouseEvent) { - confirmRemovalButton.setIcon(CONFIRM_DELETION_OVER); - } - - public void mouseExited(MouseEvent mouseEvent) { - confirmRemovalButton.setIcon(CONFIRM_DELETION); - } - public void mousePressed(MouseEvent mouseEvent) { - confirmRemovalButton.setIcon(CONFIRM_DELETION); + FlatButton confirmButton = new FlatButton(ButtonType.RED, "Confirm"); + confirmButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { confirmDeletionContainer.setVisible(false); performDeletionLogic(); } - }); - final JLabel cancelRemovalButton = new JLabel(CANCEL_DELETION); - - cancelRemovalButton.addMouseListener(new MouseAdapter() { - - public void mouseEntered(MouseEvent mouseEvent) { - cancelRemovalButton.setIcon(CANCEL_DELETION_OVER); - } - - public void mouseExited(MouseEvent mouseEvent) { - cancelRemovalButton.setIcon(CANCEL_DELETION); - } - public void mousePressed(MouseEvent mouseEvent) { - cancelRemovalButton.setIcon(CANCEL_DELETION); + FlatButton cancelButton = new FlatButton(ButtonType.GREY, "Cancel"); + confirmButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { confirmDeletionContainer.setVisible(false); } - }); - confirmDeletionContainer.add(confirmRemovalButton); - confirmDeletionContainer.add(cancelRemovalButton); + confirmDeletionContainer.add(cancelButton); + confirmDeletionContainer.add(confirmButton); // add main buttons! @@ -136,82 +103,35 @@ public void mousePressed(MouseEvent mouseEvent) { mainButtonContainer.setLayout(new BoxLayout(mainButtonContainer, BoxLayout.LINE_AXIS)); mainButtonContainer.setPreferredSize(new Dimension(130, 30)); - final JLabel exportButton = new JLabel(EXPORT); - exportButton.addMouseListener(new MouseAdapter() { - - - public void mouseEntered(MouseEvent mouseEvent) { - exportButton.setIcon(EXPORT_OVER); - } - - public void mouseExited(MouseEvent mouseEvent) { - exportButton.setIcon(EXPORT); - } - - public void mousePressed(MouseEvent mouseEvent) { - exportButton.setIcon(EXPORT); - + FlatButton exportButton = new FlatButton(ButtonType.GREEN, "Export"); + exportButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { performExportLogic(); - - // ask where to export the library to! } - }); - final JLabel importButton = new JLabel(IMPORT); - importButton.addMouseListener(new MouseListener() { - public void mouseClicked(MouseEvent mouseEvent) { - - } - - public void mouseEntered(MouseEvent mouseEvent) { - importButton.setIcon(IMPORT_OVER); - } - - public void mouseExited(MouseEvent mouseEvent) { - importButton.setIcon(IMPORT); - } - - public void mousePressed(MouseEvent mouseEvent) { - importButton.setIcon(IMPORT); - + FlatButton importButton = new FlatButton(ButtonType.GREEN, "Import"); + importButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { performImportLogic(); - // ask where to export the library to! - - } - - public void mouseReleased(MouseEvent mouseEvent) { - } }); - removeTerm = new JLabel(REMOVE); - removeTerm.addMouseListener(new MouseAdapter() { - - - public void mouseEntered(MouseEvent mouseEvent) { - removeTerm.setIcon(REMOVE_OVER); - } - - public void mouseExited(MouseEvent mouseEvent) { - removeTerm.setIcon(REMOVE); - } - - public void mousePressed(MouseEvent mouseEvent) { - removeTerm.setIcon(REMOVE); + removeButton = new FlatButton(ButtonType.RED, "Remove"); + removeButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { confirmDeletionContainer.setVisible(true); } - - }); - removeTerm.setVisible(false); + + removeButton.setVisible(false); mainButtonContainer.add(exportButton); mainButtonContainer.add(Box.createHorizontalStrut(5)); mainButtonContainer.add(importButton); mainButtonContainer.add(Box.createHorizontalStrut(5)); - mainButtonContainer.add(removeTerm); + mainButtonContainer.add(removeButton); controlPanel.add(mainButtonContainer); controlPanel.add(confirmDeletionContainer); diff --git a/src/main/java/org/isatools/isacreator/spreadsheet/AddColumnGUI.java b/src/main/java/org/isatools/isacreator/spreadsheet/AddColumnGUI.java index 43a22763..c70c6475 100755 --- a/src/main/java/org/isatools/isacreator/spreadsheet/AddColumnGUI.java +++ b/src/main/java/org/isatools/isacreator/spreadsheet/AddColumnGUI.java @@ -41,6 +41,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.autofiltercombo.AutoFilterCombo; import org.isatools.isacreator.common.DropDownComponent; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.configuration.DataTypes; import org.isatools.isacreator.configuration.FieldObject; import org.isatools.isacreator.configuration.Ontology; @@ -50,15 +52,11 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.ontologymanager.OntologyManager; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; import org.isatools.isacreator.ontologyselectiontool.OntologySelectionTool; -import org.jdesktop.fuse.InjectedResource; -import org.jdesktop.fuse.ResourceInjector; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Collections; @@ -72,11 +70,6 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi */ public class AddColumnGUI extends JDialog { - @InjectedResource - private ImageIcon addCharacteristicButton, addCharacteristicButtonOver, addFactorButton, - addFactorButtonOver, addParameterButton, addParameterButtonOver, addCommentButton, addCommentButtonOver, - closeButton, closeButtonOver; - private final static String UNIT_ONTOLOGY = "UO"; final static int ADD_FACTOR_COLUMN = 1; @@ -88,20 +81,19 @@ public class AddColumnGUI extends JDialog { private JLabel status; private JRadioButton qualitativeOp; private JRadioButton quantativeOp; - private JTextField stdTextField; + protected JTextField stdTextField; private JTextField unitField; - private JTextField varSelectOntologyField; + protected JTextField varSelectOntologyField; private OntologyTerm selectedOntologyTerm; - private Spreadsheet st; - private int type; + protected Spreadsheet st; + protected int type; private DropDownComponent dropdown; - private static OntologySelectionTool ontologySelectionTool; + protected static OntologySelectionTool ontologySelectionTool; public AddColumnGUI(Spreadsheet st, int type) { this.type = type; this.st = st; - ResourceInjector.get("spreadsheet-package.style").inject(this); } /** @@ -115,6 +107,7 @@ private void changePanels(int panelType) { containingPanel.setBackground(UIHelper.BG_COLOR); JPanel headerCont = new JPanel(new GridLayout(1, 1)); + headerCont.setSize(new Dimension(300, 25)); headerCont.setOpaque(false); Box container = Box.createVerticalBox(); @@ -128,10 +121,7 @@ private void changePanels(int panelType) { terms[i] = factors.get(i).getFactorName(); } - headerCont.add(new JLabel( - new ImageIcon(getClass() - .getResource("/images/spreadsheet/addFactorHeader.png")), - JLabel.RIGHT)); + headerCont.add(UIHelper.createLabel("Add Factor", UIHelper.VER_14_BOLD, UIHelper.DARK_GREEN_COLOR, JLabel.LEFT)); container.add(headerCont); container.add(Box.createVerticalStrut(5)); container.add(createDropDownField("factor", terms)); @@ -140,10 +130,7 @@ private void changePanels(int panelType) { } if (panelType == ADD_CHARACTERISTIC_COLUMN) { - headerCont.add(new JLabel( - new ImageIcon(getClass() - .getResource("/images/spreadsheet/addCharacteristicHeader.png")), - JLabel.RIGHT)); + headerCont.add(UIHelper.createLabel("Add Characteristic", UIHelper.VER_14_BOLD, UIHelper.DARK_GREEN_COLOR, JLabel.LEFT)); container.add(headerCont); container.add(createStdOntologyField("characteristic")); container.add(Box.createVerticalStrut(5)); @@ -151,10 +138,7 @@ private void changePanels(int panelType) { } if (panelType == ADD_PARAMETER_COLUMN) { - headerCont.add(new JLabel( - new ImageIcon(getClass() - .getResource("/images/spreadsheet/addParameterHeader.png")), - JLabel.RIGHT)); + headerCont.add(UIHelper.createLabel("Add Parameter Value", UIHelper.VER_14_BOLD, UIHelper.DARK_GREEN_COLOR, JLabel.LEFT)); container.add(headerCont); container.add(createStdOntologyField("parameter")); container.add(Box.createVerticalStrut(5)); @@ -162,10 +146,7 @@ private void changePanels(int panelType) { } if (panelType == ADD_COMMENT_COLUMN) { - headerCont.add(new JLabel( - new ImageIcon(getClass() - .getResource("/images/spreadsheet/addCommentHeader.png")), - JLabel.RIGHT)); + headerCont.add(UIHelper.createLabel("Add Comment", UIHelper.VER_14_BOLD, UIHelper.DARK_GREEN_COLOR, JLabel.LEFT)); container.add(headerCont); JLabel lab = new JLabel("Enter comment qualifier"); @@ -194,7 +175,7 @@ private void changePanels(int panelType) { * @param data - e.g. new String[]{"dose","compound"}; * @return JPanel containing drop down field and its associated label. */ - private JPanel createDropDownField(String typeToAdd, String[] data) { + JPanel createDropDownField(String typeToAdd, String[] data) { JPanel olsFieldCont = new JPanel(new GridLayout(1, 2)); olsFieldCont.setBackground(UIHelper.BG_COLOR); @@ -252,7 +233,8 @@ public void propertyChange(PropertyChangeEvent evt) { OntologyTerm term = OntologyManager.getOntologyTerm(evt.getNewValue().toString()); selectedOntologyTerm = term; if (term != null) { - field.setText(isHeaderType ? getStringForHeaderFromOntologyTerm(term) : term.getUniqueId()); + field.setText(term.getShortForm()); + //field.setText(isHeaderType ? getStringForHeaderFromOntologyTerm(term) : term.getShortForm()); } else { field.setText(evt.getNewValue().toString()); } @@ -269,10 +251,9 @@ public void propertyChange(PropertyChangeEvent evt) { return dropdown; } - private String getStringForHeaderFromOntologyTerm(OntologyTerm ontologyTerm) { - // we just need the one term. - return ontologyTerm.getOntologySource() +"-" + ontologyTerm.getOntologyTermName() + "-" + ontologyTerm.getOntologyTermAccession(); - } +// private String getStringForHeaderFromOntologyTerm(OntologyTerm ontologyTerm) { +// return ontologyTerm.getShortForm(); //OntologyTermUtils.ontologyTermToString(ontologyTerm); +// } /** * Create a field which requires ontology lookup. @@ -280,7 +261,7 @@ private String getStringForHeaderFromOntologyTerm(OntologyTerm ontologyTerm) { * @param typeToAdd - Type of field to add, just for definition of label. e.g. characteristic, parameter. * @return JPanel containing the label and the Ontology field. */ - private JPanel createStdOntologyField(String typeToAdd) { + JPanel createStdOntologyField(String typeToAdd) { JPanel ontologyFieldCont = new JPanel(new GridLayout(1, 2)); ontologyFieldCont.setBackground(UIHelper.BG_COLOR); @@ -301,7 +282,7 @@ private JPanel createStdOntologyField(String typeToAdd) { * * @return - JPanel containing the elements. */ - private JPanel createUnitField() { + JPanel createUnitField() { JPanel unitContainer = new JPanel(); unitContainer.setLayout(new BoxLayout(unitContainer, BoxLayout.PAGE_AXIS)); unitContainer.setOpaque(false); @@ -363,39 +344,35 @@ private void instantiatePanel() { status = new JLabel(""); status.setForeground(UIHelper.RED_COLOR); - final ImageIcon typeText; - final ImageIcon[] typeHoverImage = new ImageIcon[1]; + final String typeText; switch (type) { case ADD_CHARACTERISTIC_COLUMN: - typeText = addCharacteristicButton; - typeHoverImage[0] = addCharacteristicButtonOver; + typeText = "Add Characteristic"; break; case ADD_FACTOR_COLUMN: - typeText = addFactorButton; - typeHoverImage[0] = addFactorButtonOver; + typeText = "Add Factor"; break; case ADD_PARAMETER_COLUMN: - typeText = addParameterButton; - typeHoverImage[0] = addParameterButtonOver; + typeText = "Add Parameter"; break; case ADD_COMMENT_COLUMN: - typeText = addCommentButton; - typeHoverImage[0] = addCommentButtonOver; + typeText = "Add Comment"; break; default: - typeText = addCommentButton; + typeText = "Add Comment"; } - final JLabel addColumn = new JLabel((typeText), JLabel.RIGHT); + final JButton addColumn = new FlatButton(ButtonType.GREEN, typeText); - addColumn.addMouseListener(new MouseAdapter() { + addColumn.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent actionEvent) { - public void mousePressed(MouseEvent event) { String typeAsText; switch (type) { @@ -424,6 +401,7 @@ public void mousePressed(MouseEvent event) { } if (type == ADD_COMMENT_COLUMN && stdTextField != null) { + String toAdd = stdTextField.getText(); if (toAdd.equals("")) { @@ -462,7 +440,7 @@ public void run() { if (varSelectOntologyField != null) { toAdd = varSelectOntologyField.getText(); - OntologyManager.addToUserHistory(selectedOntologyTerm); + OntologyManager.addToOntologyTerms(selectedOntologyTerm); } else { if (optionList.getSelectedItem() != null) { @@ -497,40 +475,7 @@ public void run() { String colName = typeAsText + "[" + toAdd + "]"; - if (!st.getSpreadsheetFunctions().checkColumnExists(colName)) { - boolean useOntology = qualitativeOp.isSelected(); - DataTypes type = useOntology ? DataTypes.ONTOLOGY_TERM - : DataTypes.STRING; - FieldObject charFo = new FieldObject(st.getColumnCount(), - colName, typeAsText + " value", type, - "", false, false, false); - st.getSpreadsheetFunctions().addFieldToReferenceObject(charFo); - - if (!toAdd.equals("")) { - st.getSpreadsheetFunctions().addColumnAfterPosition(colName, null, charFo.isRequired(), -1); - } - - if (quantativeOp.isSelected()) { - FieldObject unitFo = new FieldObject(st.getColumnCount(), - "Unit", - "Unit for definition of value", - DataTypes.ONTOLOGY_TERM, "", false, false, - false); - st.getSpreadsheetFunctions().addFieldToReferenceObject(unitFo); - st.getSpreadsheetFunctions().addColumnAfterPosition("Unit", - unitField.getText(), unitFo.isRequired(), -1); - } - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - st.getParentFrame().hideSheet(); - } - }); - } else { - status.setText("Duplicate " + - typeAsText + ""); - status.setForeground(UIHelper.RED_COLOR); - } + doAddColumn(typeAsText, toAdd, colName); } else { status.setText( "No factors available"); @@ -539,20 +484,12 @@ public void run() { } } - public void mouseEntered(MouseEvent event) { - addColumn.setIcon(typeHoverImage[0]); - } - - public void mouseExited(MouseEvent event) { - addColumn.setIcon(typeText); - } }); - final JLabel close = new JLabel(closeButton, - JLabel.LEFT); - close.addMouseListener(new MouseAdapter() { + final JButton close = new FlatButton(ButtonType.RED, "Cancel"); + close.addActionListener(new ActionListener() { - public void mousePressed(MouseEvent event) { + public void actionPerformed(ActionEvent event) { SwingUtilities.invokeLater(new Runnable() { public void run() { st.getParentFrame().hideSheet(); @@ -560,14 +497,6 @@ public void run() { } }); } - - public void mouseEntered(MouseEvent event) { - close.setIcon(closeButtonOver); - } - - public void mouseExited(MouseEvent event) { - close.setIcon(closeButton); - } }); JPanel southPanel = new JPanel(); @@ -575,6 +504,7 @@ public void mouseExited(MouseEvent event) { southPanel.setBackground(UIHelper.BG_COLOR); JPanel buttonCont = new JPanel(new BorderLayout()); + buttonCont.setBorder(UIHelper.EMPTY_BORDER); buttonCont.setBackground(UIHelper.BG_COLOR); buttonCont.add(close, BorderLayout.WEST); @@ -591,4 +521,41 @@ public void mouseExited(MouseEvent event) { add(southPanel, BorderLayout.SOUTH); pack(); } + + private void doAddColumn(String typeAsText, String toAdd, String colName) { + if (!st.getSpreadsheetFunctions().checkColumnExists(colName)) { + boolean useOntology = qualitativeOp.isSelected(); + DataTypes type = useOntology ? DataTypes.ONTOLOGY_TERM + : DataTypes.STRING; + FieldObject charFo = new FieldObject(st.getColumnCount(), + colName, typeAsText + " value", type, + "", false, false, false); + st.getSpreadsheetFunctions().addFieldToReferenceObject(charFo); + + if (!toAdd.equals("")) { + st.getSpreadsheetFunctions().addColumnAfterPosition(colName, null, charFo.isRequired(), -1); + } + + if (quantativeOp.isSelected()) { + FieldObject unitFo = new FieldObject(st.getColumnCount(), + "Unit", + "Unit for definition of value", + DataTypes.ONTOLOGY_TERM, "", false, false, + false); + st.getSpreadsheetFunctions().addFieldToReferenceObject(unitFo); + st.getSpreadsheetFunctions().addColumnAfterPosition("Unit", + unitField.getText(), unitFo.isRequired(), -1); + } + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + st.getParentFrame().hideSheet(); + } + }); + } else { + status.setText("Duplicate " + + typeAsText + ""); + status.setForeground(UIHelper.RED_COLOR); + } + } } diff --git a/src/main/java/org/isatools/isacreator/spreadsheet/AddMultipleRowsGUI.java b/src/main/java/org/isatools/isacreator/spreadsheet/AddMultipleRowsGUI.java index fccaafec..e0ac038a 100755 --- a/src/main/java/org/isatools/isacreator/spreadsheet/AddMultipleRowsGUI.java +++ b/src/main/java/org/isatools/isacreator/spreadsheet/AddMultipleRowsGUI.java @@ -39,13 +39,17 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.spreadsheet; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.effects.components.RoundedJTextField; import org.jdesktop.fuse.InjectedResource; import org.jdesktop.fuse.ResourceInjector; import javax.swing.*; +import javax.swing.border.LineBorder; import java.awt.*; import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -56,15 +60,11 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi */ public class AddMultipleRowsGUI extends JDialog { - @InjectedResource - private ImageIcon panelHeader, addRowButton, addRowButtonOver, closeButton, closeButtonOver; - private JLabel close, addRows; private JTextField numRowsTxt; private Spreadsheet st; public AddMultipleRowsGUI(Spreadsheet st) { this.st = st; - ResourceInjector.get("spreadsheet-package.style").inject(this); } private void addRows() { @@ -94,15 +94,17 @@ public void run() { * Creates the JFrame for the class. */ private void instantiateFrame() { + getInsets().left = 3; //setPreferredSize(new Dimension(250, 200)); setBackground(UIHelper.BG_COLOR); + // add panel returned from instantiatePanel() method JPanel headerCont = new JPanel(new GridLayout(1, 1)); + headerCont.setPreferredSize(new Dimension(300, 25)); headerCont.setBackground(UIHelper.BG_COLOR); - headerCont.add(new JLabel(panelHeader, - JLabel.RIGHT)); + headerCont.add(UIHelper.createLabel("Add Rows", UIHelper.VER_14_BOLD, UIHelper.DARK_GREEN_COLOR, JLabel.LEFT)); add(headerCont, BorderLayout.NORTH); add(instantiatePanel()); @@ -132,29 +134,17 @@ public void actionPerformed(ActionEvent e) { numRowsTxt.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "ADDROWS"); numRowsTxt.getActionMap().put("ADDROWS", addRowsAction); - addRows = new JLabel(addRowButton, - JLabel.RIGHT); - addRows.addMouseListener(new MouseAdapter() { - public void mousePressed(MouseEvent event) { + JButton addRows = new FlatButton(ButtonType.GREEN, "Add Rows"); + addRows.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { addRows(); } - - public void mouseEntered(MouseEvent event) { - addRows.setIcon(addRowButtonOver); - } - - public void mouseExited(MouseEvent event) { - addRows.setIcon(addRowButton); - } }); - close = new JLabel(closeButton, - JLabel.LEFT); - close.addMouseListener(new MouseAdapter() { - - - public void mousePressed(MouseEvent event) { + JButton close = new FlatButton(ButtonType.RED, "Cancel"); + close.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { SwingUtilities.invokeLater(new Runnable() { public void run() { st.getParentFrame().hideSheet(); @@ -162,26 +152,21 @@ public void run() { } }); } - - public void mouseEntered(MouseEvent event) { - close.setIcon(closeButtonOver); - } - - public void mouseExited(MouseEvent event) { - close.setIcon(closeButton); - } }); + JPanel container = new JPanel(new BorderLayout()); + container.setPreferredSize(new Dimension(300, 60)); container.setBackground(UIHelper.BG_COLOR); JPanel fieldCont = new JPanel(new GridLayout(1, 2)); fieldCont.setBackground(UIHelper.BG_COLOR); fieldCont.add(numRowsLab); fieldCont.add(numRowsTxt); - container.add(fieldCont, BorderLayout.CENTER); + container.add(fieldCont, BorderLayout.NORTH); JPanel buttonCont = new JPanel(new BorderLayout()); + buttonCont.setBorder(UIHelper.EMPTY_BORDER); buttonCont.setBackground(UIHelper.BG_COLOR); buttonCont.add(close, BorderLayout.WEST); buttonCont.add(addRows, BorderLayout.EAST); diff --git a/src/main/java/org/isatools/isacreator/spreadsheet/MultipleSortGUI.java b/src/main/java/org/isatools/isacreator/spreadsheet/MultipleSortGUI.java index 5247f797..51fb7dd7 100755 --- a/src/main/java/org/isatools/isacreator/spreadsheet/MultipleSortGUI.java +++ b/src/main/java/org/isatools/isacreator/spreadsheet/MultipleSortGUI.java @@ -38,10 +38,13 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.spreadsheet; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; import org.jdesktop.fuse.InjectedResource; import org.jdesktop.fuse.ResourceInjector; import javax.swing.*; +import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -55,9 +58,6 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi */ public class MultipleSortGUI extends JDialog implements ActionListener { - @InjectedResource - private ImageIcon titleIcon, sortButton, sortButtonOver, closeButton, closeButtonOver; - private JCheckBox sort2Check = new JCheckBox("Sort on 2 columns?", false); private JComboBox sortOpt1; private JComboBox sortOpt1IsAscending; @@ -67,8 +67,6 @@ public class MultipleSortGUI extends JDialog implements ActionListener { public MultipleSortGUI(Spreadsheet st) { this.st = st; - - ResourceInjector.get("spreadsheet-package.style").inject(this); } /** @@ -109,10 +107,12 @@ private void instantiateFrame() { JPanel headerCont = new JPanel(); headerCont.setBackground(UIHelper.BG_COLOR); + headerCont.setSize(new Dimension(300, 25)); headerCont.setLayout(new BoxLayout(headerCont, BoxLayout.LINE_AXIS)); - headerCont.add(new JLabel(titleIcon, - JLabel.RIGHT)); + headerCont.add(UIHelper.createLabel("Perform Multiple Sort", UIHelper.VER_14_BOLD, UIHelper.DARK_GREEN_COLOR, JLabel.LEFT)); + headerCont.setBorder(new EmptyBorder(10,10,10,10)); add(headerCont, BorderLayout.NORTH); + instantiatePanel(); pack(); @@ -139,11 +139,9 @@ public void instantiatePanel() { sortOpt2IsAscending.setPreferredSize(new Dimension(40, 20)); sortOpt2IsAscending.setEnabled(false); - final JLabel sort = new JLabel(sortButton, - JLabel.RIGHT); - sort.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton sort = new FlatButton(ButtonType.GREEN, "Apply Sort"); + sort.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { try { int primaryCol = getAbsoluteColumn(sortOpt1.getSelectedItem().toString()); @@ -171,22 +169,11 @@ public void mousePressed(MouseEvent event) { e.printStackTrace(); } } - - - public void mouseEntered(MouseEvent event) { - sort.setIcon(sortButtonOver); - } - - public void mouseExited(MouseEvent event) { - sort.setIcon(sortButton); - } }); - final JLabel close = new JLabel(closeButton, - JLabel.LEFT); - close.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent event) { + JButton close = new FlatButton(ButtonType.RED, "Cancel"); + close.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { SwingUtilities.invokeLater(new Runnable() { public void run() { st.getParentFrame().hideSheet(); @@ -194,14 +181,6 @@ public void run() { } }); } - - public void mouseEntered(MouseEvent event) { - close.setIcon(closeButtonOver); - } - - public void mouseExited(MouseEvent event) { - close.setIcon(closeButton); - } }); // Panel to contain button @@ -305,6 +284,7 @@ public void mouseExited(MouseEvent event) { // panel to contain everything. JPanel container = new JPanel(new BorderLayout()); container.setBackground(UIHelper.BG_COLOR); + container.setBorder(new EmptyBorder(10,10,10,10)); add(options, BorderLayout.CENTER); add(doSortPanel, BorderLayout.SOUTH); } diff --git a/src/main/java/org/isatools/isacreator/spreadsheet/RenameColumnGUI.java b/src/main/java/org/isatools/isacreator/spreadsheet/RenameColumnGUI.java new file mode 100644 index 00000000..1837d812 --- /dev/null +++ b/src/main/java/org/isatools/isacreator/spreadsheet/RenameColumnGUI.java @@ -0,0 +1,149 @@ +package org.isatools.isacreator.spreadsheet; + +import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.common.button.ButtonType; +import org.isatools.isacreator.common.button.FlatButton; +import org.isatools.isacreator.effects.components.RoundedJTextField; + +import javax.swing.*; +import javax.swing.table.TableColumn; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class RenameColumnGUI extends AddColumnGUI { + + private TableColumn column; + + public RenameColumnGUI(Spreadsheet st, int type, TableColumn column) { + super(st, type); + this.column = column; + } + + public void createGUI() { + createMainPanel(); + createSouthPanel(); + } + + private String getHeaderValue() { + String currentHeader = column.getHeaderValue().toString(); + currentHeader = currentHeader.substring(currentHeader.indexOf("[") + 1, currentHeader.indexOf("]")); + return currentHeader; + } + + private void createMainPanel() { + JPanel containingPanel = new JPanel(); + containingPanel.setBackground(UIHelper.BG_COLOR); + + JPanel headerCont = new JPanel(new GridLayout(1, 1)); + headerCont.setSize(new Dimension(300, 25)); + headerCont.setOpaque(false); + + Box container = Box.createVerticalBox(); + container.setBackground(UIHelper.BG_COLOR); + + + if (type == ADD_CHARACTERISTIC_COLUMN) { + headerCont.add(UIHelper.createLabel("Rename Characteristic", UIHelper.VER_14_BOLD, UIHelper.DARK_GREEN_COLOR, JLabel.LEFT)); + container.add(headerCont); + container.add(createStdOntologyField("characteristic")); + varSelectOntologyField.setText(getHeaderValue()); + } + + if (type == ADD_PARAMETER_COLUMN) { + headerCont.add(UIHelper.createLabel("Rename Parameter Value", UIHelper.VER_14_BOLD, UIHelper.DARK_GREEN_COLOR, JLabel.LEFT)); + container.add(headerCont); + container.add(createStdOntologyField("parameter")); + varSelectOntologyField.setText(getHeaderValue()); + } + + if (type == ADD_COMMENT_COLUMN) { + headerCont.add(UIHelper.createLabel("Rename Comment", UIHelper.VER_14_BOLD, UIHelper.DARK_GREEN_COLOR, JLabel.LEFT)); + container.add(headerCont); + + JLabel lab = new JLabel("Enter comment qualifier"); + UIHelper.createLabel("Enter comment qualifier", UIHelper.VER_12_PLAIN, UIHelper.DARK_GREEN_COLOR); + + stdTextField = new RoundedJTextField(10); + stdTextField.setText(getHeaderValue()); + + JPanel commentFieldcont = new JPanel(new GridLayout(1, 2)); + commentFieldcont.setOpaque(false); + + commentFieldcont.add(lab); + commentFieldcont.add(stdTextField); + + container.add(commentFieldcont); + } + + containingPanel.add(container, BorderLayout.NORTH); + add(containingPanel, BorderLayout.CENTER); + } + + private void createSouthPanel() { + JButton close = new FlatButton(ButtonType.RED, "Cancel"); + close.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent event) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + st.getParentFrame().hideSheet(); + ontologySelectionTool = null; + } + }); + } + }); + + JButton renameButton = new FlatButton(ButtonType.GREEN, "Rename"); + renameButton.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent event) { + if (type == ADD_COMMENT_COLUMN) { + if (!stdTextField.getText().isEmpty()) { + setColumnHeaderValue("Comment[" + stdTextField.getText() + "]"); + } else { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + UIHelper.renderComponent(stdTextField, UIHelper.VER_12_PLAIN, UIHelper.RED_COLOR, UIHelper.TRANSPARENT_RED_COLOR); + } + }); + } + } else if (!varSelectOntologyField.getText().isEmpty()) { + if (type == ADD_CHARACTERISTIC_COLUMN) { + setColumnHeaderValue("Characteristics[" + varSelectOntologyField.getText() + "]"); + } + if (type == ADD_PARAMETER_COLUMN) { + setColumnHeaderValue("Parameter Value[" + varSelectOntologyField.getText() + "]"); + } + } else { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + UIHelper.renderComponent(varSelectOntologyField, UIHelper.VER_12_PLAIN, UIHelper.RED_COLOR, UIHelper.TRANSPARENT_RED_COLOR); + } + }); + } + } + }); + + JPanel buttonCont = new JPanel(new BorderLayout()); + buttonCont.setBorder(UIHelper.EMPTY_BORDER); + buttonCont.setBackground(UIHelper.BG_COLOR); + buttonCont.add(close, BorderLayout.WEST); + buttonCont.add(renameButton, BorderLayout.EAST); + + add(buttonCont, BorderLayout.SOUTH); + } + + private void setColumnHeaderValue(final String header) { + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + column.setHeaderValue(header); + st.getParentFrame().hideSheet(); + st.getTable().addNotify(); + ontologySelectionTool = null; + } + }); + } + +} diff --git a/src/main/java/org/isatools/isacreator/spreadsheet/Spreadsheet.java b/src/main/java/org/isatools/isacreator/spreadsheet/Spreadsheet.java index 3ebc419c..bccd36fc 100644 --- a/src/main/java/org/isatools/isacreator/spreadsheet/Spreadsheet.java +++ b/src/main/java/org/isatools/isacreator/spreadsheet/Spreadsheet.java @@ -213,6 +213,7 @@ public Spreadsheet(AnimatableJFrame parentFrame, TableReferenceObject tableRefer /** * Spreadsheet Constructor. + * * @param spreadsheetTitle - name to display on the spreadsheet... * @param assayDataEntryEnvironment - The assay data entry object :o) */ @@ -268,13 +269,8 @@ public void instantiateSpreadsheet() { } private void addOntologyTermsToUserHistory() { - Map referencedOntologyTerms = tableReferenceObject.getReferencedOntologyTerms(); - Map ontoHistory = OntologyManager.getOntologySelectionHistory(); - - for (OntologyTerm oo : referencedOntologyTerms.values()) { - ontoHistory.put(oo.getUniqueId(), oo); - } + OntologyManager.addToOntologyTerms(referencedOntologyTerms); } private void populateSpreadsheetWithContent() { @@ -550,7 +546,7 @@ public void changeFilesToRelativeOrAbsolute(int toSwitch) { /** - * Create the Button panel - a panel which contains graphical representations of the options available + * Create the FlatButton panel - a panel which contains graphical representations of the options available * to the user when interacting with the software. */ private void createButtonPanel() { @@ -931,9 +927,9 @@ public void addButtons() { /** * Helper method that adds a number of buttons to a panel. * - * @param container - Container to add the components to + * @param container - Container to add the components to * @param addSpaceOnLastElement - do you wish to add a space after the last component? If false, there will be no padding added after the last component. - * @param components - Components to add. Added in the order they are passed in to the method. + * @param components - Components to add. Added in the order they are passed in to the method. */ public void addComponentsToContainer(Container container, boolean addSpaceOnLastElement, JComponent... components) { int count = 0; @@ -1282,17 +1278,6 @@ private void rebuildDependencies(Map> mappings) } } - - /** - * Searches UserHistory for a unique ontology id (source:term pair) - * - * @param uniqueId- the ID being searched for in the previous user history. - * @return - OntologyObject matching the unique id if found, null otherwise. - */ - private OntologyTerm searchUserHistory(String uniqueId) { - return OntologyManager.getOntologySelectionHistory().get(uniqueId); - } - /** * Add a listener for undoable events * @@ -1467,6 +1452,34 @@ public void run() { }); } + protected void showRenameColumnsGUI(final TableColumn column) { + + EventQueue.invokeLater(new Runnable() { + public void run() { + RenameColumnGUI goingToDisplay = null; + String toShow = column.getHeaderValue().toString().substring(0, column.getHeaderValue().toString().indexOf("[")); + if (toShow.contains("Characteristics")) { + goingToDisplay = new RenameColumnGUI(Spreadsheet.this, + AddColumnGUI.ADD_CHARACTERISTIC_COLUMN, column); + + } else if (toShow.contains("Parameter Value")) { + goingToDisplay = new RenameColumnGUI(Spreadsheet.this, + AddColumnGUI.ADD_PARAMETER_COLUMN, column); + + } else if (toShow.contains("Comment")) { + goingToDisplay = new RenameColumnGUI(Spreadsheet.this, + AddColumnGUI.ADD_COMMENT_COLUMN, column); + } + + if (goingToDisplay != null) { + goingToDisplay.createGUI(); + // do this to ensure that the gui is fully created before displaying it. + parentFrame.showJDialogAsSheet(goingToDisplay); + } + } + }); + } + /** * Displays an error message when a user tries to delete more than one column at a time. */ @@ -1605,20 +1618,31 @@ public void valueChanged(ListSelectionEvent event) { String s = table.getValueAt(rowSelected, columnSelected) .toString(); - OntologyTerm ooForSelectedTerm = searchUserHistory(s); + OntologyTerm ooForSelectedTerm = OntologyManager.getOntologyTerm(s); if (ooForSelectedTerm != null) { // update status panel in bottom left hand corner of workspace to contain the ontology // information. this should possibly be extended to visualize the ontology location within // the ontology tree itself. + studyDataEntryEnvironment.getDataEntryEnvironment().setStatusPaneInfo("" + "ontology term information" + "" + "

" + ooForSelectedTerm.getOntologyTermName() + "

" + "

source ref: " + ooForSelectedTerm.getOntologySource() + "

" + - "

accession no: " + - ooForSelectedTerm.getOntologyTermAccession() + "

" + + + (ooForSelectedTerm.getOntologyTermAccession().startsWith("http://") ? "" : + "

accession no: " + + ooForSelectedTerm.getOntologyTermAccession() + "

") + + +// ((ooForSelectedTerm.getOntologyTermURI()!=null && !ooForSelectedTerm.getOntologyTermURI().equals("")) ? +// "

uri: " + ooForSelectedTerm.getOntologyTermURI() + "

" : "") + + ""); + + if (ooForSelectedTerm.getOntologyTermAccession().startsWith("http://")) { + studyDataEntryEnvironment.getDataEntryEnvironment().setLink(ooForSelectedTerm.getOntologyTermAccession()); + } } } } diff --git a/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetColumnRenderer.java b/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetColumnRenderer.java index 925f5d38..a6c4f310 100644 --- a/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetColumnRenderer.java +++ b/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetColumnRenderer.java @@ -38,6 +38,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.spreadsheet; import org.isatools.isacreator.common.UIHelper; +import org.isatools.isacreator.ontologymanager.utils.OntologyTermUtils; import org.isatools.isacreator.settings.ISAcreatorProperties; import org.isatools.isacreator.utils.GeneralUtils; import org.jdesktop.fuse.InjectedResource; @@ -52,10 +53,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import java.util.Set; /** - * SpreadsheetColumnRenderer + * SpreadsheetColumnRenderer - GUI component for the Spreadsheet table. */ - - public class SpreadsheetColumnRenderer extends JPanel implements TableCellRenderer { @InjectedResource @@ -129,11 +128,20 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole boolean shortNames = Boolean.parseBoolean(ISAcreatorProperties.getProperty("useShortNames")); + String valueString = value.toString(); + if (shortNames) { - String shortHeader = GeneralUtils.getShortString(value.toString()); + String shortHeader = GeneralUtils.getShortString(valueString); text.setText(shortHeader); } else { - text.setText(value.toString()); + if (valueString.contains(":")){ + if (valueString.contains("http://")) + text.setText(OntologyTermUtils.fullAnnotatedHeaderToUniqueId(valueString)); + else + text.setText(valueString); + }else{ + text.setText(valueString); + } } return this; diff --git a/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetFunctions.java b/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetFunctions.java index 61503d41..2dfb864b 100644 --- a/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetFunctions.java +++ b/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetFunctions.java @@ -38,18 +38,22 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi package org.isatools.isacreator.spreadsheet; import org.apache.commons.collections15.set.ListOrderedSet; +import org.isatools.isacreator.autofiltercombo.AutoFilterCombo; +import org.isatools.isacreator.autofiltercombo.AutoFilterComboCellEditor; import org.isatools.isacreator.common.UIHelper; import org.isatools.isacreator.configuration.DataTypes; import org.isatools.isacreator.configuration.FieldObject; import org.isatools.isacreator.configuration.RecommendedOntology; -import org.isatools.isacreator.filterablelistselector.FilterableListCellEditor; +import org.isatools.isacreator.io.IOUtils; import org.isatools.isacreator.ontologymanager.OntologyManager; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; +import org.isatools.isacreator.ontologymanager.utils.OntologyTermUtils; import org.isatools.isacreator.ontologyselectiontool.OntologyCellEditor; import org.isatools.isacreator.plugins.host.service.PluginSpreadsheetWidget; import org.isatools.isacreator.plugins.registries.SpreadsheetPluginRegistry; import org.isatools.isacreator.protocolselector.ProtocolSelectorCellEditor; import org.isatools.isacreator.sampleselection.SampleSelectorCellEditor; +import org.isatools.isacreator.settings.ISAcreatorProperties; import org.isatools.isacreator.spreadsheet.model.TableReferenceObject; import org.isatools.isacreator.utils.GeneralUtils; @@ -232,20 +236,29 @@ public boolean exportTable(File f, String separator, boolean removeEmptyColumns) Set emptyColumns = new HashSet(); - Map history = OntologyManager.getOntologySelectionHistory(); - for (int col = 1; col < spreadsheet.getTable().getColumnCount(); col++) { TableColumn tc = spreadsheet.getTable().getColumnModel().getColumn(col); // only hide columns which are empty and that are not necessarily required! if (removeEmptyColumns && checkIsEmpty(tc) && !spreadsheet.getTableReferenceObject().isRequired(tc.getHeaderValue().toString())) { emptyColumns.add(tc); } else { + + String toPrint = null; + + String header = tc.getHeaderValue().toString(); + + OntologyTerm oo = OntologyManager.getOntologyTerm(IOUtils.getHeaderValue(header)); + + if (oo!=null) + toPrint = "\"" + IOUtils.getHeaderName(header) + "["+ OntologyTermUtils.ontologyTermToString(oo) +"]"+ "\""; + else + toPrint = "\"" + header + "\""; + if (col == 1) { - ps.print("\"" + tc.getHeaderValue() + "\""); + ps.print(toPrint); } else { - ps.print(separator + "\"" + tc.getHeaderValue() + "\""); + ps.print( separator + toPrint); } - if (tc.getCellEditor() instanceof OntologyCellEditor || tc.getHeaderValue().toString().equalsIgnoreCase("unit")) { ps.print(separator + "\"Term Source REF\""); @@ -282,11 +295,14 @@ public boolean exportTable(File f, String separator, boolean removeEmptyColumns) String termAccession = ""; if (!GeneralUtils.isValueURL(val)) { - OntologyTerm oo = history.get(val); - if (oo != null) { - termAccession = oo.getOntologyTermAccession(); + OntologyTerm oo = OntologyManager.getOntologyTerm(val); + if (oo != null) { + if (ISAcreatorProperties.getProperty("ontologyTermURI").equals("true")) + termAccession = oo.getOntologyTermURI(); + else + termAccession = oo.getOntologyTermAccession(); } if (val.contains(":")) { @@ -998,7 +1014,19 @@ protected void addCellEditor(TableColumn col, String previousColumnName) { } if (spreadsheet.getTableReferenceObject().getClassType(columnName) == DataTypes.LIST) { - col.setCellEditor(new FilterableListCellEditor(spreadsheet.getTableReferenceObject().getListItems(columnName))); + if (columnName.equalsIgnoreCase("unit")) { + FieldObject unitField = spreadsheet.getTableReferenceObject().getNextUnitField(previousColumnName); + if (unitField != null) { + System.out.println(Arrays.toString(unitField.getFieldList())); + + col.setCellEditor(new AutoFilterComboCellEditor(new AutoFilterCombo( + unitField.getFieldList(), false))); + } + } else { + col.setCellEditor(new AutoFilterComboCellEditor(new AutoFilterCombo( + spreadsheet.getTableReferenceObject().getListItems(columnName), false))); + + } return; } @@ -1257,11 +1285,11 @@ public Set getValuesInSelectedRowsForColumn(String columnName) { Set values = new ListOrderedSet(); for (int columnIndex = 0; columnIndex < spreadsheet.getColumnCount(); columnIndex++) { String colName = spreadsheet.spreadsheetModel.getColumnName(columnIndex); - - if(colName.equals(columnName)) { + + if (colName.equals(columnName)) { // add all values for this column. - for(int row : selectedRows) { + for (int row : selectedRows) { values.add(spreadsheet.spreadsheetModel.getValueAt(row, columnIndex).toString()); } break; diff --git a/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetPopupMenus.java b/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetPopupMenus.java index 8b15ad0c..5704f25a 100644 --- a/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetPopupMenus.java +++ b/src/main/java/org/isatools/isacreator/spreadsheet/SpreadsheetPopupMenus.java @@ -36,6 +36,7 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi */ package org.isatools.isacreator.spreadsheet; +import org.isatools.isacreator.api.utils.SpreadsheetUtils; import org.isatools.isacreator.common.UIHelper; import org.isatools.isacreator.configuration.DataTypes; import org.isatools.isacreator.configuration.FieldObject; @@ -74,11 +75,19 @@ public SpreadsheetPopupMenus(Spreadsheet spreadsheet) { * @param y vertical position for the location of the popup menu. * @param columnName -> name of column where the popup was called. */ - public void popupMenu(JComponent jc, final int x, final int y, String columnName) { + public void popupMenu(JComponent jc, final int x, final int y, final String columnName) { final JPopupMenu popup = new JPopupMenu("Utilities"); popup.setLightWeightPopupEnabled(false); popup.setBackground(new Color(0, 104, 56, 50)); + JMenuItem rename = new JMenuItem("Rename"); + rename.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + popup.setVisible(false); + spreadsheet.showRenameColumnsGUI(spreadsheet.getTable().getColumn(columnName)); + } + }); + JMenuItem undo = new JMenuItem("Undo"); undo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -401,10 +410,16 @@ public void actionPerformed(ActionEvent actionEvent) { popup.add(undo); popup.add(redo); popup.add(new JSeparator()); + + if (SpreadsheetUtils.isCommentParameterOrCharacteristic(columnName)) { + popup.add(rename); + } + popup.add(new JSeparator()); + popup.add(addRow); popup.add(deleteRow); - popup.add(new JSeparator()); + checkAndAddIfShouldAddColumn(columnName, popup, addColumn); if (spreadsheet.hiddenColumns.size() > 0) { diff --git a/src/main/java/org/isatools/isacreator/spreadsheet/model/TableReferenceObject.java b/src/main/java/org/isatools/isacreator/spreadsheet/model/TableReferenceObject.java index 7fa9e977..5489ee6c 100644 --- a/src/main/java/org/isatools/isacreator/spreadsheet/model/TableReferenceObject.java +++ b/src/main/java/org/isatools/isacreator/spreadsheet/model/TableReferenceObject.java @@ -49,6 +49,8 @@ The ISA Team and the ISA software suite have been funded by the EU Carcinogenomi import org.isatools.isacreator.model.Protocol; import org.isatools.isacreator.ontologymanager.OntologyManager; import org.isatools.isacreator.ontologymanager.common.OntologyTerm; +import org.isatools.isacreator.ontologymanager.utils.OntologyTermUtils; +import org.isatools.isacreator.settings.ISAcreatorProperties; import org.isatools.isacreator.spreadsheet.StringValidation; import org.isatools.isacreator.spreadsheet.ValidationObject; @@ -293,6 +295,13 @@ public void addField(FieldObject fo) { fieldIndexLookup.put(fo.getColNo(), fo); } + /** + * + * Adds the row data. + * + * @param headers free text or full annotated headers (e.g. Characteristics[