Opened 9 years ago

Closed 9 years ago

#725 closed task (fixed)

MeLuDi v.1.1 bug fixes and improvements

Reported by: olle Owned by: olle
Priority: major Milestone: MeLuDi v1.2
Component: net.sf.basedb.meludi Keywords:
Cc:

Description

This ticket covers bug fixes and improvements to MeLuDi v.1.1.

Change History (47)

comment:1 by olle, 9 years ago

Status: newassigned

Ticket accepted.

comment:2 by olle, 9 years ago

Traceability note:

  • MeLuDi v.1.0 was introduced in Ticket #690 (MeLuDi - Registration wizard for melanoma-lung cancer projects).
  • MeLuDi v.1.1 was introduced in Ticket #718 (MeLuDi v.1.0 bug fixes and improvements).

comment:3 by olle, 9 years ago

(In [3057]) Refs #725. Updates due to version number change to "1.2-dev".

  1. Version number change to "1.2-dev":
    a. Outermost Ant XML build file build.xml in / updated.
    b. Extensions XML configuration file extensions.xml in META-INF/ updated.
    c. Javascript file meludi-2.js in resources/ updated.
    d. Javascript file samplereportgenerator.js in resources/reports/ updated.
    e. Java class/file Meludi.java in src/net/sf/basedb/meludi/ updated.

comment:4 by olle, 9 years ago

Functional specification update:

  • Project focus should have a new option "Colon cancer".

Design update:

  1. Java servlet class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. New public string constants defined for different project focus filter values, including value for "Colon cancer".
    b. Protected method doGet(HttpServletRequest req, HttpServletResponse resp) updated to include value for "Colon cancer" in list of allowed values for Annotationtype.PROJECT_FOCUS.
  2. Specimen tube registration updated:
    a. JSP file specimentube.jsp in resources/sampleproc/ updated to include new option "Colon cancer" for project focus.
  3. Personal information registration updated:
    a. JSP file persinfo.jsp in resources/personal/ updated to include new option "Colon cancer" for project focus.
  4. Sample report generator updated::
    a. JSP file samplereportgenerator.jsp in resources/reports/ updated to include new option "Colon cancer" for project focus filter.
    b. Javascript file samplereportgenerator.js in resources/reports/ updated in function getProjectFocusFilterDisplayText(projectFocusFilter) to include new option "Colon cancer" for project focus filter.
    c. Java servlet class/file SampleReportServlet.java in src/net/sf/basedb/meludi/servlet/ updated to use new public string constants for different project focus filter values defined in InstallServlet, instead of locally defined constants.
  5. Case summary updated:
    a. Java servlet class/file CaseSummaryServlet.java in src/net/sf/basedb/meludi/servlet/ updated in private method String fetchProjectFocus(DbControl dc, SnapshotManager manager, Sample s) to include new option "Colon cancer" for project focus filter, and to use new public string constants for different project focus filter values defined in InstallServlet, instead of locally defined constants.

comment:5 by olle, 9 years ago

(In [3058]) Refs #725. Project focus updated with new option "Colon cancer":

  1. Java servlet class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. New public string constants defined for different project focus filter values, including value for "Colon cancer".
    b. Protected method doGet(HttpServletRequest req, HttpServletResponse resp) updated to include value for "Colon cancer" in list of allowed values for Annotationtype.PROJECT_FOCUS.
  2. Specimen tube registration updated:
    a. JSP file specimentube.jsp in resources/sampleproc/ updated to include new option "Colon cancer" for project focus.
  3. Personal information registration updated:
    a. JSP file persinfo.jsp in resources/personal/ updated to include new option "Colon cancer" for project focus.
  4. Sample report generator updated::
    a. JSP file samplereportgenerator.jsp in resources/reports/ updated to include new option "Colon cancer" for project focus filter.
    b. Javascript file samplereportgenerator.js in resources/reports/ updated in function getProjectFocusFilterDisplayText(projectFocusFilter) to include new option "Colon cancer" for project focus filter.
    c. Java servlet class/file SampleReportServlet.java in src/net/sf/basedb/meludi/servlet/ updated to use new public string constants for different project focus filter values defined in InstallServlet, instead of locally defined constants.
  5. Case summary updated:
    a. Java servlet class/file CaseSummaryServlet.java in src/net/sf/basedb/meludi/servlet/ updated in private method String fetchProjectFocus(DbControl dc, SnapshotManager manager, Sample s) to include new option "Colon cancer" for project focus filter, and to use new public string constants for different project focus filter values defined in InstallServlet, instead of locally defined constants.

comment:6 by olle, 9 years ago

Bug found in sample report generator:

  • A bug was introduced in the sample report generator 2014-12-11 in change set [3028], when annotations of type PROJECT_FOCUS ("ProjectFocus") was only stored with the case item, but not with specimen items. However, java servlet SampleReportServlet.java in src/net/sf/basedb/meludi/servlet/ was never updated in private method boolean passProjectFocusFilter(DbControl dc, SnapshotManager manager, String projectFocusFilter, Sample s), that still obtained the project focus string by calling (String) Annotationtype.PROJECT_FOCUS.getAnnotationValue(dc, manager, s), both when sample s was of subtype "Case" and "Specimen". This led to no specimen ever pass the test, when a specific filter was chosen, even if the parent case had a project focus annotation value of the right type.

Suggested fix:

  • Java servlet SampleReportServlet.java in src/net/sf/basedb/meludi/servlet/ should be updated in private method boolean passProjectFocusFilter(DbControl dc, SnapshotManager manager, String projectFocusFilter, Sample s) to call a new private method String fetchProjectFocus(DbControl dc, SnapshotManager manager, Sample s) to obtain the relevant project focus value. The latter method should check the annotation value for the parent case, if the input sample is of subtype "Specimen".

comment:7 by olle, 9 years ago

(In [3060]) Refs #725. Bugged fixed in sample report generator, that led to no specimens pass the project focus filter test, when a specific project focus filter was chosen.

  1. Java servlet SampleReportServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. private method boolean passProjectFocusFilter(DbControl dc, SnapshotManager manager, String projectFocusFilter, Sample s) is updated to call new private method String fetchProjectFocus(DbControl dc, SnapshotManager manager, Sample s) to obtain the relevant project focus value.
    b. New private method String fetchProjectFocus(DbControl dc, SnapshotManager manager, Sample s) added. It checks the project focus annotation value for the parent case, if the input sample is of subtype "Specimen".
    c. New private instance variables ItemSubtype subtypeSpecimen and ItemSubtype subtypeCase with private accessor methods added for convenience. They are initialized in protected method doGet(HttpServletRequest req, HttpServletResponse resp).
    d. Private method Site fetchSite(DbControl dc, SnapshotManager manager, ItemSubtype subtypeCase, ItemSubtype subtypeSpecimen, Sample s) is updated by removal of arguments ItemSubtype subtypeCase and ItemSubtype subtypeSpecimen, and instead calling getter methods ItemSubtype getSubtypeCase() and ItemSubtype getSubtypeSpecimen() to obtain the desired values.

comment:8 by olle, 9 years ago

Functional specification update:

  • Specimen tube registration should include an input field for the estimated part of viable tumour cells, in percentage of the total number of cells. It should accept an integer value, but allowed to be null.

Design update:

  1. Java data access object class/file Annotationtype.java in src/net/sf/basedb/meludi/dao/ updated with new integer annotation type VIABLE_TUMOUR_CELLS_PERCENT for samples.
  2. Java servlet class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method doGet(HttpServletRequest req, HttpServletResponse resp) updated to include annotations of new integer annotation type Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT for specimen items.
  3. Specimen tube registration updated:
    a. JSP file specimentube.jsp in resources/sampleproc/ updated with new input field for integer value of percentage viable tumour cells.
    b. Javascript file specimentube.js in resources/sampleproc/ updated in function initPage() to add event handler to input field viableTumourCellsPercent and coupling it to new function viableTumourCellsPercentOnChange(), that checks that the value is a reasonable percent value, in which case new global variable viableTumourCellsPercentIsValid is set to true. Function validateStep2() is updated to require that new global variable viableTumourCellsPercentIsValid is true, for step 2 to be considered valid. Function submit() updated to obtain the value in the viable tumour cells percentage input field and include it in the data sent to SpecimenTubeServlet.
    c. Java servlet class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated in private method void setAnnotations(DbControl dc, Annotatable item, JSONObject jsonCase, int nofSections, String operatorComment) to get optional integer value of percentage viable tumour cells from JSONObject jsonCase via string key "viableTumourCellsPercent", and set the value for annotation of type Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT for the item in question.
  4. Personal information registration updated:
    a. JSP file persinfo.jsp in resources/personal/ updated with new input field for integer value of percentage viable tumour cells.
    b. Javascript file persinfo.js in resources/personal/ updated in function initPage() to add event handler to input field viableTumourCellsPercent and coupling it to new function viableTumourCellsPercentOnChange(), that checks that the value is a reasonable percent value, in which case new global variable viableTumourCellsPercentIsValid is set to true. Function initializeStep3() is updated to obtain value for percentage viable tumour cells from specimen data, if an existing case should be updated. Function validateStep3() is updated to require that new global variable viableTumourCellsPercentIsValid is true, for step 3 to be considered valid, for a case with specimen(s). Function submit() updated to obtain the value in the viable tumour cells percentage input field and include it in the data sent to PersonalRegistrationServlet.
    c. Java servlet class/file PersonalRegistrationServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) to load value of percentage viable tumour cells from annotation "viableTumourCellsPercent" for existing specimens. Private method void setAnnotations(DbControl dc, Annotatable item, JSONObject jsonCase, int nofSections, String operatorComment) updated to get optional integer value of percentage viable tumour cells from JSONObject jsonCase via string key "viableTumourCellsPercent", and set the value for annotation of type Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT for the item in question.
  5. Case summary updated:
    a. JSP file case_summary.jsp in resources/reports/ updated with new report field in the specimen section for integer value of percentage viable tumour cells.
    b. Javascript file case_summary.js in resources/reports/ updated in function caseInfoLoaded(response) by adding columns for values of viable tumour cells percentage for specimens.
    c. Java servlet class/file CaseSummaryServlet.java in src/net/sf/basedb/meludi/servlet/ updated in private method void loadSpecimenInfo(DbControl dc, SnapshotManager manager, SpecimenTube specimen) to load annotations of integer annotation type Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT.
Last edited 9 years ago by olle (previous) (diff)

comment:9 by olle, 9 years ago

(In [3067]) Refs #725. Specimen tube registration updated to include an input field for the estimated part of viable tumour cells, in percentage of the total number of cells. It should accept an integer value, but allowed to be null:

  1. Java data access object class/file Annotationtype.java in src/net/sf/basedb/meludi/dao/ updated with new integer annotation type VIABLE_TUMOUR_CELLS_PERCENT for samples.
  2. Java servlet class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method doGet(HttpServletRequest req, HttpServletResponse resp) updated to include annotations of new integer annotation type Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT for specimen items.
  3. Specimen tube registration updated:
    a. JSP file specimentube.jsp in resources/sampleproc/ updated with new input field for integer value of percentage viable tumour cells.
    b. Javascript file specimentube.js in resources/sampleproc/ updated in function initPage() to add event handler to input field viableTumourCellsPercent and coupling it to new function viableTumourCellsPercentOnChange(), that checks that the value is a reasonable percent value, in which case new global variable viableTumourCellsPercentIsValid is set to true. Function validateStep2() is updated to require that new global variable viableTumourCellsPercentIsValid is true, for step 2 to be considered valid. Function submit() updated to obtain the value in the viable tumour cells percentage input field and include it in the data sent to SpecimenTubeServlet.
    c. Java servlet class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated in private method void setAnnotations(DbControl dc, Annotatable item, JSONObject jsonCase, int nofSections, String operatorComment) to get optional integer value of percentage viable tumour cells from JSONObject jsonCase via string key "viableTumourCellsPercent", and set the value for annotation of type Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT for the item in question.
  4. Personal information registration updated:
    a. JSP file persinfo.jsp in resources/personal/ updated with new input field for integer value of percentage viable tumour cells.
    b. Javascript file persinfo.js in resources/personal/ updated in function initPage() to add event handler to input field viableTumourCellsPercent and coupling it to new function viableTumourCellsPercentOnChange(), that checks that the value is a reasonable percent value, in which case new global variable viableTumourCellsPercentIsValid is set to true. Function initializeStep3() is updated to obtain value for percentage viable tumour cells from specimen data, if an existing case should be updated. Function validateStep3() is updated to require that new global variable viableTumourCellsPercentIsValid is true, for step 3 to be considered valid, for a case with specimen(s). Function submit() updated to obtain the value in the viable tumour cells percentage input field and include it in the data sent to PersonalRegistrationServlet.
    c. Java servlet class/file PersonalRegistrationServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) to load value of percentage viable tumour cells from annotation "viableTumourCellsPercent" for existing specimens. Private method void setAnnotations(DbControl dc, Annotatable item, JSONObject jsonCase, int nofSections, String operatorComment) updated to get optional integer value of percentage viable tumour cells from JSONObject jsonCase via string key "viableTumourCellsPercent", and set the value for annotation of type Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT for the item in question.
  5. Case summary updated:
    a. JSP file case_summary.jsp in resources/reports/ updated with new report field in the specimen section for integer value of percentage viable tumour cells.
    b. Javascript file case_summary.js in resources/reports/ updated in function caseInfoLoaded(response) by adding columns for values of viable tumour cells percentage for specimens.
    c. Java servlet class/file CaseSummaryServlet.java in src/net/sf/basedb/meludi/servlet/ updated in private method void loadSpecimenInfo(DbControl dc, SnapshotManager manager, SpecimenTube specimen) to load annotations of integer annotation type Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT.

comment:10 by olle, 9 years ago

(In [3068]) Refs #725. JSP file case_summary.jsp in resources/reports/ updated by shortening title of specimen report field "Operator delivery comment" to "Op. delivery comment", in order to ensure that it fits on a single line.

comment:11 by olle, 9 years ago

Functional specification update:

  • MeLuDi should be updated with a Counter service of the same type as in Reggie 3.0. Initially, the number of registered patients, specimen tubes, extracted DNA and RNA items should be counted, and the numbers be displayed in a new summary section on the main index page.

Design update:

  1. Two new java classes/files CounterServiceFactory.java and CounterService.java in src/net/sf/basedb/meludi/counter/ added. Java class/file CounterService.java will start a timer task and automatically update counters at least every 60 minutes. Package private method void count() first calls new public static synchronized method SessionControl Meludi.getRootSessionControl(SessionControl systemSc) to get a SessionControl where the root user is logged in and the "MeLuDi" project is active, after which it calls private methods void countPatients(DbControl dc, JSONObject json), void countSpecimen(DbControl dc, JSONObject json), and void countExtracts(DbControl dc, JSONObject json) to count the number of patient, specimen tube, DNA, and RNA items and return the numbers in a JSON object for JSON keys "patients-all", "specimen-all", "dna-all-extracted", and "rna-all-extracted", respectively. Public method JSONObject getCurrentCounts() returns a JSON object with the current count values.
  2. Extension XML configuration file extensions.xml in META-INF/ is updated with a new entry for factory class net.sf.basedb.meludi.counter.CounterServiceFactory.
  3. Java servlet class/file SessionServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method doGet(HttpServletRequest req, HttpServletResponse resp) to support command "GetCounters" by adding the result of a call to CounterService.getInstance().getCurrentCounts() to the returned JSON object for JSON key "counts".
  4. Java class/file Meludi.java in src/net/sf/basedb/meludi/ updated:
    a. New private static variable SessionControl rootSc added.
    b. New public static synchronized method SessionControl getRootSessionControl(SessionControl systemSc) added. It returns a session control where the root user is logged in and the "MeLuDi" project is active. Note that the name of the project is hard coded, and will therefore only work with this project (in Reggie the corresponding project is "SCAN-B").
    c. New public static synchronized method void closeRootSessionControl() added. It closes the root session control if it is active.
  5. Main index page updated with new summary section showing the number of registered patients, specimen tubes, DNA, and RNA extracts:
    a. JSP file index.jsp in resources/ updated with new counter style entries and new div block with entries for patient, specimen, DNA, and RNA counter values corresponding to data-counter string keys "patients-all", "specimen-all", "dna-all-extracted", and "rna-all-extracted", respectively.
    b. Javascript file index.js in resources/ updated in function initPage() by exchanging call to function countNext() for call to new function loadCounts(). Function countNext() exchanged for new function loadCounts(), that sends an Ajax request with command "GetCounters" to SessionServlet, setting function onCounted(request) as callback function. Function onCounted(request) updated to support a list of counters and set them to the returned counter values.

comment:12 by olle, 9 years ago

(In [3100]) Refs #725. MeLuDi updated with a Counter service of the same type as in Reggie 3.0. Initially, the number of registered patients, specimen tubes, extracted DNA and RNA items are counted, and the numbers are displayed in a new summary section on the main index page:

  1. Two new java classes/files CounterServiceFactory.java and CounterService.java in src/net/sf/basedb/meludi/counter/ added. Java class/file CounterService.java will start a timer task and automatically update counters at least every 60 minutes. Package private method void count() first calls new public static synchronized method SessionControl Meludi.getRootSessionControl(SessionControl systemSc) to get a SessionControl where the root user is logged in and the "MeLuDi" project is active, after which it calls private methods void countPatients(DbControl dc, JSONObject json), void countSpecimen(DbControl dc, JSONObject json), and void countExtracts(DbControl dc, JSONObject json) to count the number of patient, specimen tube, DNA, and RNA items and return the numbers in a JSON object for JSON keys "patients-all", "specimen-all", "dna-all-extracted", and "rna-all-extracted", respectively. Public method JSONObject getCurrentCounts() returns a JSON object with the current count values.
  2. Extension XML configuration file extensions.xml in META-INF/ is updated with a new entry for factory class net.sf.basedb.meludi.counter.CounterServiceFactory.
  3. Java servlet class/file SessionServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method doGet(HttpServletRequest req, HttpServletResponse resp) to support command "GetCounters" by adding the result of a call to CounterService.getInstance().getCurrentCounts() to the returned JSON object for JSON key "counts".
  4. Java class/file Meludi.java in src/net/sf/basedb/meludi/ updated:
    a. New private static variable SessionControl rootSc added.
    b. New public static synchronized method SessionControl getRootSessionControl(SessionControl systemSc) added. It returns a session control where the root user is logged in and the "MeLuDi" project is active. Note that the name of the project is hard coded, and will therefore only work with this project (in Reggie the corresponding project is "SCAN-B").
    c. New public static synchronized method void closeRootSessionControl() added. It closes the root session control if it is active.
  5. Main index page updated with new summary section showing the number of registered patients, specimen tubes, DNA, and RNA extracts:
    a. JSP file index.jsp in resources/ updated with new counter style entries and new div block with entries for patient, specimen, DNA, and RNA counter values corresponding to data-counter string keys "patients-all", "specimen-all", "dna-all-extracted", and "rna-all-extracted", respectively.
    b. Javascript file index.js in resources/ updated in function initPage() by exchanging call to function countNext() for call to new function loadCounts(). Function countNext() exchanged for new function loadCounts(), that sends an Ajax request with command "GetCounters" to SessionServlet, setting function onCounted(request) as callback function. Function onCounted(request) updated to support a list of counters and set them to the returned counter values.

comment:13 by olle, 9 years ago

(In [3101]) Refs #725. MeLuDi updated in servlets managing items to call CounterService.getInstance().setForceCount() after installation or registration of new items, forcing an update of the item counter values displayed on the main index page:

  1. Java servlet InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) to call CounterService.getInstance().setForceCount() after having created new items.
  2. Java servlet PersonalRegistrationServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doPost(HttpServletRequest req, HttpServletResponse resp) to call CounterService.getInstance().setForceCount() after having created new items.
  3. Java servlet SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doPost(HttpServletRequest req, HttpServletResponse resp) to call CounterService.getInstance().setForceCount() after having created new items.

comment:14 by olle, 9 years ago

(In [3102]) Refs #725. MeLuDi updated in servlets to not use full class name (including package name) when calling CounterService.getInstance().setForceCount() after installation or registration of new items:

  1. Java servlet InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) to not use full class name when calling CounterService.getInstance().setForceCount() after having created new items.
  2. Java servlet SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doPost(HttpServletRequest req, HttpServletResponse resp) to not use full class name when calling CounterService.getInstance().setForceCount() after having created new items.

comment:15 by olle, 9 years ago

Functional specification update:

  • MeLuDi should be updated to display a counter value next to the entry for updating existing cases with patient info on the main index page. The counter should show the number of case items without parent, i.e. patient.

Design update:

  1. Class/file CounterService.java in src/net/sf/basedb/meludi/counter/ updated:
    a. Package private method void count() updated to call new private method void countCases(DbControl dc, JSONObject json), and include the result in the returned JSON object.
    b. New private method void countCases(DbControl dc, JSONObject json) added. It counts the full number of cases, and the number of cases without parent item, and returns the numbers in a JSON object for JSON keys "cases-all" and "cases-without-patient", respectively.
  2. Main index page updated to display the number os cases without patient next to the entry for updating existing cases with patient info:
    a. JSP file index.jsp in resources/ updated with new counter span block next to the entry for updating existing cases with patient info. The counter displays a value corresponding to data-counter string key "cases-without-patient".

comment:16 by olle, 9 years ago

(In [3103]) Refs #725. MeLuDi updated to display a counter value next to the entry for updating existing cases with patient info on the main index page. The counter shows the number of case items without parent, i.e. patient:

  1. Class/file CounterService.java in src/net/sf/basedb/meludi/counter/ updated:
    a. Package private method void count() updated to call new private method void countCases(DbControl dc, JSONObject json), and include the result in the returned JSON object.
    b. New private method void countCases(DbControl dc, JSONObject json) added. It counts the full number of cases, and the number of cases without parent item, and returns the numbers in a JSON object for JSON keys "cases-all" and "cases-without-patient", respectively.
  2. Main index page updated to display the number os cases without patient next to the entry for updating existing cases with patient info:
    a. JSP file index.jsp in resources/ updated with new counter span block next to the entry for updating existing cases with patient info. The counter displays a value corresponding to data-counter string key "cases-without-patient".

comment:17 by olle, 9 years ago

Bug to be fixed:

  • The wizard for registering a new case without patient info only checks if any specimens have already been registered for a case with the input case name, but does not check if DNA or RNA extracts have been registered for it. The latter checks should be added, since the wizard is not intended for updating.

Design update:

  1. Java servlet SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) to check if DNA or RNA extracts have been registered for the input case name. If any extracts are found, an InvalidDataException should be thrown, with a message that the wizard cannot be used for updating.

comment:18 by olle, 9 years ago

(In [3104]) Refs #725. Bug fixed in wizard for registering a new case without patient info. It only checked if specimens had already been registered for a case with the input case name, but not if DNA or RNA extracts had been registered for it. The latter checks are added, since the wizard is not intended for updating:

  1. Java servlet SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) to check if DNA or RNA extracts have been registered for the input case name. If any extracts are found, an InvalidDataException is thrown, with a message that the wizard cannot be used for updating.

comment:19 by olle, 9 years ago

(In [3105]) Refs #725. Sample and extract registration wizards updated to support input of arrival and sampling dates using a BASE pop-up calendar:

  1. JSP file specimentube.jsp in resources/sampleproc/ updated to display a calendar icon next to input fields for arrival and sampling dates. Clicking on the icon displays a pop-up calendar, where the corresponding date value can be selected by clicking on a date in the calendar.
  2. JSP file persinfo.jsp in resources/personal/ updated to display a calendar icon next to input fields for arrival and sampling dates. Clicking on the icon displays a pop-up calendar, where the corresponding date value can be selected by clicking on a date in the calendar.

comment:20 by olle, 9 years ago

(In [3106]) Refs #725. Bug not allowing null values for the estimated part of viable tumour cells, when registering new cases, has been fixed:

  1. Javascript file specimentube.js in resources/sampleproc/ updated:
    a. Global variable viableTumourCellsPercentIsValid is now initialized to true, instead of false.
    b. Function viableTumourCellsPeercentOnChange() updated to only apply checks using function parseInt(), if the input string differs from null.
  2. Javascript file persinfo.js in resources/personal/ updated:
    a. Global variable viableTumourCellsPercentIsValid is now initialized to true, instead of false.
    b. Function viableTumourCellsPeercentOnChange() updated to only apply checks using function parseInt(), if the input string differs from null.

comment:21 by olle, 9 years ago

(In [3120]) Refs #725. Case summary updated further to ensure that titles fit on a single line:

  1. Cascading style sheet file case_summary.css in resources/css/ updated by changing padding for table header.
  2. JSP file case_summary.jsp in resources/reports/ updated by shortening title of specimen report fields "% Viable tumour cells" and "Op. delivery comment" to "% Viab. tumour cells" and "Op. delivery comm.", respectively.

comment:22 by olle, 9 years ago

(In [3122]) Refs #725. MeLuDi updated to use BASE version "3.4.0" instead of "3.3.2":

  1. Outermost Ant XML build file build.xml in / updated in property depend.base-version and by removal of references to library base-webservices-client-*.jar, that is no longer used in BASE 3.4.0.
  2. Extensions XML configuration file extensions.xml in META-INF/ updated in xml tag "min-base-version", by exchanging value 3.3.2 for 3.4.0.
  3. Library file json-simple-1.1.jar in lib/compile/ exchanged for json-simple-1.1.1.jar.

comment:23 by olle, 9 years ago

Functional specification update:

  • The set of mutation analysis options has been updated due to new referral forms:

Previous mutation analysis option set (check boxes, default = none selected):

Option text Option value
KRAS/NRAS (exon 2-4) KRAS_NRAS
BRAF (codon 600) BRAF
EGFR (exon 18-21) EGFR

New mutation analysis option set (check boxes, default = none selected):

Option text Option value
KRAS exon 2-4 KRAS
NRAS exon 2-4 NRAS
BRAF codon 600 BRAF
EGFR exon 18-21 EGFR
ALK/EML4 translocation ALKEML4
PDGFRA exon 11, 13, 17 PDGFRA
KIT exon 9, 11, 13, 17, 18 KIT
Other analysis Other

Design update:

  • It was decided to exchange the Annotationtype.MUTATION_ANALYSIS value option "KRAS_NRAS" for two new values "KRAS" and "NRAS", since currently few samples have been registered with the former value. These items should have the mutation analysis updated as part of the installation to have both values "KRAS" and "NRAS" selected, instead of "KRAS_NRAS", since the latter option will no longer be available.
  1. JSP file specimentube.jsp in resources/sampleproc/ updated in check box options for mutation analysis to display options on the new referral form.
  2. Javascript file specimentube.js in resources/sampleproc/ updated in function streg.submit() to obtain the mutation analysis selection from the form in JSP file specimentube.jsp and transfer them to servlet SpecimenTubeServlet. Also removal of unused special event handlers for mutation analysis check boxes in function streg.initPage().
  3. JSP file persinfo.jsp in resources/personal/ updated in check box options for mutation analysis to display options on the new referral form.
  4. Javascript file persinfo.js in resources/personal/ updated in function persinfo.submit() to obtain the mutation analysis selection from the form in JSP file persinfo.jsp and transfer them to servlet PersonalRegistrationServlet. Also removal of unused special event handlers for mutation analysis check boxes in function persinfo.initPage().
  5. Java class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) with new value options for Annotationtype.MUTATION_ANALYSIS. Old value option "KRAS_NRAS" should be exchanged for the two new values "KRAS" and "NRAS".
  6. Java class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doPost(HttpServletRequest req, HttpServletResponse resp) for command "CreateSpecimenTubes" to obtain a list of selected mutation analysis values, that includes the new value options. Old value option "KRAS_NRAS" should be exchanged for the two new values "KRAS" and "NRAS".
  7. Java class/file PersonalRegistrationServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doPost(HttpServletRequest req, HttpServletResponse resp) for command "CreateCase" to obtain a list of selected mutation analysis values, that includes the new value options. Old value option "KRAS_NRAS" should be exchanged for the two new values "KRAS" and "NRAS".

comment:24 by olle, 9 years ago

(In [3123]) Refs #725. Specimen tube registration updated in the set of mutation analysis options, in order to be compatible with new referral forms. Since currently few samples have been registered with removed value "KRAS_NRAS", these items should have the mutation analysis updated as part of the installation to have both new values "KRAS" and "NRAS" selected, instead of "KRAS_NRAS".

  1. JSP file specimentube.jsp in resources/sampleproc/ updated in check box options for mutation analysis to display options on the new referral form.
  2. Javascript file specimentube.js in resources/sampleproc/ updated in function streg.submit() to obtain the mutation analysis selection from the form in JSP file specimentube.jsp and transfer them to servlet SpecimenTubeServlet. Also removal of unused special event handlers for mutation analysis check boxes in function streg.initPage().
  3. JSP file persinfo.jsp in resources/personal/ updated in check box options for mutation analysis to display options on the new referral form.
  4. Javascript file persinfo.js in resources/personal/ updated in function persinfo.submit() to obtain the mutation analysis selection from the form in JSP file persinfo.jsp and transfer them to servlet PersonalRegistrationServlet. Also removal of unused special event handlers for mutation analysis check boxes in function persinfo.initPage().
  5. Java class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) with new value options for Annotationtype.MUTATION_ANALYSIS. Old value option "KRAS_NRAS" is exchanged for the two new values "KRAS" and "NRAS".
  6. Java class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doPost(HttpServletRequest req, HttpServletResponse resp) for command "CreateSpecimenTubes" to obtain a list of selected mutation analysis values, that includes the new value options. Old value option "KRAS_NRAS" is exchanged for the two new values "KRAS" and "NRAS".
  7. Java class/file PersonalRegistrationServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doPost(HttpServletRequest req, HttpServletResponse resp) for command "CreateCase" to obtain a list of selected mutation analysis values, that includes the new value options. Old value option "KRAS_NRAS" is exchanged for the two new values "KRAS" and "NRAS".

comment:25 by olle, 9 years ago

Functional specification update:

  • Project focus should have a new option "GIST (Gastrointestinal stromal tumour)".

Design update:

  1. Java servlet class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. New public string constant defined for "GIST (Gastrointestinal stromal tumour)".
    b. Protected method doGet(HttpServletRequest req, HttpServletResponse resp) updated to include value for "GIST (Gastrointestinal stromal tumour)" in list of allowed values for Annotationtype.PROJECT_FOCUS.
  2. Specimen tube registration updated:
    a. JSP file specimentube.jsp in resources/sampleproc/ updated to include new option "GIST (Gastrointestinal stromal tumour)" for project focus.
  3. Personal information registration updated:
    a. JSP file persinfo.jsp in resources/personal/ updated to include new option "GIST (Gastrointestinal stromal tumour)" for project focus.
  4. Sample report generator updated:
    a. JSP file samplereportgenerator.jsp in resources/reports/ updated to include new option "GIST (Gastrointestinal stromal tumour)" for project focus filter.
    b. Javascript file samplereportgenerator.js in resources/reports/ updated in function getProjectFocusFilterDisplayText(projectFocusFilter) to include new option "GIST (Gastrointestinal stromal tumour)" for project focus filter.
  5. Case summary updated:
    a. Java servlet class/file CaseSummaryServlet.java in src/net/sf/basedb/meludi/servlet/ updated in private method String fetchProjectFocus(DbControl dc, SnapshotManager manager, Sample s) to include new option "GIST (Gastrointestinal stromal tumour)" for project focus filter.

comment:26 by olle, 9 years ago

(In [3139]) Refs #725. Project focus updated with new option "GIST (Gastrointestinal stromal tumour)":

  1. Java servlet class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. New public string constant defined for "GIST (Gastrointestinal stromal tumour)".
    b. Protected method doGet(HttpServletRequest req, HttpServletResponse resp) updated to include value for "GIST (Gastrointestinal stromal tumour)" in list of allowed values for Annotationtype.PROJECT_FOCUS.
  2. Specimen tube registration updated:
    a. JSP file specimentube.jsp in resources/sampleproc/ updated to include new option "GIST (Gastrointestinal stromal tumour)" for project focus.
  3. Personal information registration updated:
    a. JSP file persinfo.jsp in resources/personal/ updated to include new option "GIST (Gastrointestinal stromal tumour)" for project focus.
  4. Sample report generator updated:
    a. JSP file samplereportgenerator.jsp in resources/reports/ updated to include new option "GIST (Gastrointestinal stromal tumour)" for project focus filter.
    b. Javascript file samplereportgenerator.js in resources/reports/ updated in function getProjectFocusFilterDisplayText(projectFocusFilter) to include new option "GIST (Gastrointestinal stromal tumour)" for project focus filter.
  5. Case summary updated:
    a. Java servlet class/file CaseSummaryServlet.java in src/net/sf/basedb/meludi/servlet/ updated in private method String fetchProjectFocus(DbControl dc, SnapshotManager manager, Sample s) to include new option "GIST (Gastrointestinal stromal tumour)" for project focus filter.
Last edited 9 years ago by olle (previous) (diff)

comment:27 by olle, 9 years ago

Functional specification update:

  • Case registration with and without patient info should be updated to initially show the next available case name in the case name input field, as is already done for label generation.

Design update:

  1. Specimen tube registration updated in Javascript file specimentube.js in resources/sampleproc/:
    a. Function initPage() updated at end to send an Ajax request to servlet LabelGenerationServlet to count number of registered cases and send the result to new function caseInfoLoadedStep1().
    b. New function caseInfoLoadedStep1() added. It retrieves the number of registered cases from the Ajax request and inserts the next available case name in the case name input field.
  2. Personal information registration updated in Javascript file persinfo.js in resources/personal/:
    a. Function initPage() updated at end to send an Ajax request to servlet LabelGenerationServlet to count number of registered cases and send the result to new function caseInfoLoadedStep1().
    b. New function caseInfoLoadedStep1() added. It retrieves the number of registered cases from the Ajax request and inserts the next available case name in the case name input field.
Last edited 9 years ago by olle (previous) (diff)

comment:28 by olle, 9 years ago

(In [3148]) Refs #725. Case registration with and without patient info updated to initially show the next available case name in the case name input field, as is already done for label generation:

  1. Specimen tube registration updated in Javascript file specimentube.js in resources/sampleproc/:
    a. Function initPage() updated at end to send an Ajax request to servlet LabelGenerationServlet to count number of registered cases and send the result to new function caseInfoLoadedStep1().
    b. New function caseInfoLoadedStep1() added. It retrieves the number of registered cases from the Ajax request and inserts the next available case name in the case name input field.
  2. Personal information registration updated in Javascript file persinfo.js in resources/personal/:
    a. Function initPage() updated at end to send an Ajax request to servlet LabelGenerationServlet to count number of registered cases and send the result to new function caseInfoLoadedStep1().
    b. New function caseInfoLoadedStep1() added. It retrieves the number of registered cases from the Ajax request and inserts the next available case name in the case name input field.

comment:29 by olle, 9 years ago

Functional specification updates for DNA/RNA extraction wizard(s):

  • MeLuDi should support registration of DNA/RNA extracted from existing specimens, including concentration measurements and delta-Ct values for DNA. Measurements should also be stored for input RNA/DNA.
  • It should be possible to select up to 24 items of unprocessed specimens or unquantified RNA/DNA, and create a Lab Tracking Sheet for AllPrep isolation for the selection.
  • Newly created RNA are extracted from a specimen in a QIAcube run, and a QIAcube position should therefore be stored for the former.
  • RNA concentrations are measured using a NanoDrop instrument, both for newly created and input RNA:
    a. A NanoDrop plate position should be allocated.
    b. A Sample id file intended for use by the NanoDrop instrument should be created.
    c. It should be possible to import measurement values from a NanoDrop value file.
  • Newly created DNA are extracted from a specimen in a process, not involving a QIAcube run, and no QIAcube position should therefore be stored for the former.
  • DNA concentrations are measured using a Qubit instrument, both for newly created and input DNA:
    a. It should be possible to input Qubit measurement values by hand in the web form.
    b. It should be possible to import measurement values from a Qubit value file, provided that the instrument is reset before the measurement session, and that the measurements are made in the same order as in the Lab Tracking Sheet for AllPrep isolation, since the Qubit value file identifies values by timestamp, instead of sample names.
  • DNA delta-Ct values are measured using a qPCR instrument, both for newly created and input DNA:
    a. A Sample id file intended for use by the qPCR instrument should be created.
    b. It should be possible to import measurement values from a qPCR value file.

More specifications concerning QIAcube runs:

  • Two QIAcube instruments are used, a primary and a secondary one. If only one instrument is needed, the primary is used. The instruments are specified by a prefix consisting of an uppercase letter. It should be possible to modify the prefixes for the primary and secondary QIAcubes, since different physical instruments might be used. The default prefixes for the primary and secondary instruments are "C" and "A", respectively:
    a. For 1-12 specimens, the primary instrument is used.
    b. For 13-24 specimens, the samples are distributed as evenly as possible between the two instruments.
    c. For each QIAcube, the samples are allocated positions according to the QIAcube placement scheme, in order to ensure stability of the centrifuge.
    d. Originally, 1 and 11 samples are not allowed in a QIAcube run, since they cannot be distributed so as to result in acceptable stability of the centrifuge. However, they will be allowed here, if a counterbalance blank vial filled with water is added, to ensure stability. A reminder note should be displayed to minimize the risk, that the counterbalance vial is forgotten.
    e. A generalized QIAcube position will be used in the form, consisting of a QIAcube instrument prefix letter followed by the traditional position number in the instrument.
    f. The generalized QIAcube position will be stored as two annotations for an extract; the original QIAcube position number and a QIAcube instrument prefix.

More specifications concerning allocation of NanoDrop plate positions:

  • NanoDrop plate positions should be allocated in consecutive order, starting with "A1":
    a. Plate positions are first allocated for RNA extracted from specimens, in the order of the generalized QIAcube positions, where positions in the primary instrument comes before those in the secondary. Note that there may be gaps in the QIAcube positions for an instrument, due to the necessity of placing the samples in a way that ensures balance of the centrifuge, but there should not be a corresponding gap in the sequence of NanoDrop plate positions.
    b. Plate positions for input RNA are allocated in consecutive order, starting with the first available, efter positions have been allocated for newly created RNA.

More specifications concerning the created Lab Tracking Sheet for AllPrep isolation:

  • The sheet should contain the following parts, from top to bottom:
    1. A header.
    2. Upper info section.
    3. Table section.
    4. Lower info section.
  • The header should contain two boxes:
    1. Plate ID.
    2. Operator (pre-filled).
  • The upper info section should contain:
    1. Date for isolation (pre-filled)
    2. FFPE DNA/RNA kit lot no. (pre-filled)
    3. Kapa SYBR Fast lot. no.
    4. Quality Control Primers (QCP) RGT
    5. QUBIT DNA High Sens
    6. QUBIT DNA Broad Range
  • The table section should contain the following columns:
    1. Sample (pre-filled)
    2. Pos. in QIAcube (pre-filled)
    3. NanoDrop Plate Pos. (pre-filled)
    4. RNA conc. ND (ng/ul)
    5. DNA conc. Qubit (ng/ul)
    6. Delta Ct
    7. Remark
  • The lower info section should contain:
    1. DNA elution volume (pre-filled)
    2. DNAse treated RNA
    3. Proteinase K treatment

Two wizards should be developed:

  1. Lab tracking protocol for Allprep isolation
  2. DNA/RNA registration/quantification

Lab tracking protocol for Allprep isolation wizard

  • The wizard should contain 3 steps.
  • Step 1 should display a list of unprocessed specimen and input RNA/DNA items, from which the user can select up to 24 items.
  • Step 2 should allow input of the following data:
    a. Extraction date.
    b. Extraction protocol.
    c. RNA default volume (µl).
    d. DNA default volume.
    e. QIAcube date.
    f. Primary QIAcube prefix.
    g. Secondary QIAcube prefix.
    h. QIAcube run number.
    i. Operator.
    j. Allprep DNA/RNA FFPE kit lot no.
  • Step 3 should display a table with 11 columns, 6 of which contain values, while the other 5 are "dummy" columns, which will get values in the next wizard. The dummy columns are shown, in order to for the two wizards to have a similar layout, and while some are present in the lab tracking sheet to be created:
    1. Specimen/RNA/DNA name for selected items.
    2. QIAcube position.
    3. Storage box for selected item, if existing.
    4. NanoDrop plate position.
    5. RNA volume (µl).
    6. RNA concentration (ng/µl) (dummy).
    7. RNA quantity (µg) (dummy).
    8. DNA volume (µl).
    9. DNA concentration (ng/µl) (dummy).
    9. DNA quantity (µg) (dummy).
    10. DNA qPCR ΔCt value (dummy).
    11. Comment.

    The following functionality should exist through buttons:
    a. Downloading of a NanoDrop Sample ID file, intended to be imported in the NanoDrop software before analysis.
    b. Downloading of a qPCR Sample ID file, intended to be imported in the qPCR software before analysis.
    c. Creation of a Lab Tracking Sheet for Allprep isolation.

DNA/RNA registration/quantification

  • The wizard should contain 3 steps.
  • Step 1 should display a list of unprocessed specimen and input RNA/DNA items, from which the user can select up to 24 items.
  • Step 2 should allow input of the following data:
    a. Extraction date.
    b. Extraction protocol.
    c. RNA default volume (µl).
    d. DNA default volume.
    e. Specimen Xylene lot no.
    f. Specimen ETOH 99.5% lot no.
    g. Specimen PKD buffer lot no.
    h. Specimen ATL buffer lot no.
    i. Specimen Proteinase K lot no.
    j. Specimen RNase A lot no.
    k. QIAcube date.
    l. Primary QIAcube prefix.
    m. Secondary QIAcube prefix.
    n. QIAcube run number.
    o. Operator.
    p. Allprep DNA/RNA FFPE kit lot no.
    q. ETOF 99.5% lot no.
    r. Buffer RLT lot no.
    s. Buffer FRN lot no.
    t. Buffer AL lot no.
    u. Buffer AW1 lot no.
    v. Buffer AW2 lot no.
    w. Buffer ATE lot no.
    x. Buffer RDD lot no.
    y. RNase free water lot no.
    z. DNAse mix lot no.
    z2. RNeasy Min Elute Spin Column.
    z3. QIAamp Min Elute Spin Column.

    The following functionality should exist:
    a. The lot no. input fields should be pre-filled with values from the latest created DNA specimen, extracted from a specimen.
    b. It should be possible to select a text file in comma-separated format with used lot no. values, that should be imported to the input fields.
  • Step 3 should display a table with 11 columns, 6 of which contain values, while the other 5 are filled with values after the user has finished input in this wizard step:
    1. Specimen/RNA/DNA name for selected items.
    2. QIAcube position.
    3. Storage box for selected item, if existing.
    4. NanoDrop plate position.
    5. RNA volume (µl).
    6. RNA concentration (ng/µl).
    7. RNA quantity (µg).
    8. DNA volume (µl).
    9. DNA concentration (ng/µl).
    9. DNA quantity (µg).
    10. DNA qPCR ΔCt value.
    11. Comment.

    The following functionality should exist through buttons:
    a. It should be possible to select a NanoDrop value file, that should be imported to give RNA concentrations.
    b. It should be possible to select a Qubit value file, that should be imported to give DNA concentrations.
    c. It should be possible to select a qPCR value file, that should be imported to give DNA qPCR ΔCt values.
    d. Creation of a Lab Tracking Sheet for Allprep isolation, with input values present in the table.
    e. Registration of newly created RNA/DNA items and updating of input RNA/DNA items with the found quantities.
Last edited 9 years ago by olle (previous) (diff)

comment:30 by olle, 9 years ago

(In [3156]) Refs #725. Bug fixed in case registration with patient info when showing the next available case name in the case name input field, introduced in change set [3148]. Since the case name is validated when the contents of input field changes, the default case name was never set as valid, leading to the personal number entered always being regarded as non-standard:

  1. Javascript file persinfo.js in resources/personal/ updated in function persinfo.caseInfoLoadedStep1() to call function persinfo.caseNameOnChange() at the end to validate the default case name.

comment:31 by olle, 9 years ago

(In [3157]) Refs #725. Bug fixed in Javascript file persinfo.js in resources/personal/ by renaming function persinfo.samplingDateTimeOnChange() to samplingDateOnChange(), which is the name referred to in event handler in function persinfo.initPage(). Also, the new name is more appropriate, as only a pure date without time specification is input:

  1. Function persinfo.samplingDateTimeOnChange() renamed to samplingDateOnChange().

comment:32 by olle, 9 years ago

(In [3159]) Refs #725. Specimen tube registration without and with patient info updated to ensure that arrival date is not before sampling date (date of surgical removal):

  1. Javascript file specimentube.js in resources/sampleproc/ updated in function streg.samplingDateOnChange() to check that arrival date is not before sampling date, and if not display an error message.
  2. Javascript file persinfo.js in resources/personal/ updated in function persinfo.samplingDateOnChange() to check that arrival date is not before sampling date, and if not display an error message.

comment:33 by olle, 9 years ago

Design specification updates related to the functional specification updates for DNA/RNA extraction wizard(s):

Placeholder for information to be added at a later time.

comment:34 by olle, 9 years ago

(In [3176]) Refs #725. MeLuDi updated with basic functionality for the DNA/RNA extraction wizards. For details regarding the design, please check Ticket #725 (MeLuDi v.1.1 bug fixes and improvements):

  1. JSP and Javascript files index.jsp and index.js in resources/ updated with two new wizards, "Lab tracking protocol for Allprep isolation" and "DNA/RNA registration/quantification".
  2. A number of new JSP and Javascript files added to resources/sampleproc/, containing the user interface for the new wizards:
    a. extraction_preparation manages the Allprep isolation wizard.
    b. edit_dnarna_prep_details manages the pop-up dialog for editing values in a table row in the Allprep isolation wizard.
    c. extraction_registration manages the DNA/RNA registration/quantification wizard.
    d. edit_dnarna_details manages the pop-up dialog for editing values in a table row in the DNA/RNA registration/quantification wizard.
    e. JSP file extraction_protocol2.jsp and Javascript file extraction_protocol.js manage creation of the lab tracking sheet for Allprep isolation, with values obtained from the other Javascript files.
  3. Service class/file CounterService.java in src/net/sf/basedb/meludi/counter/ updated with new counters.
  4. Data access object class/file Annotationtype.java in src/net/sf/basedb/meludi/dao/ updated with new annotations for extracts.
  5. Data access object classes/files Dna.java, Rna.java, and SpecimenTube.java in src/net/sf/basedb/meludi/dao/ updated.
  6. New Java servlet class/file ExtractionServlet.java in src/net/sf/basedb/meludi/servlet/ added. It contains the main functionality for the DNA/RNA extraction wizards, together with the Javascript files.
  7. Java servlet class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated for the new extract annotations.
  8. Java servlet class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated.
  9. Servlet configuration XML file servlets.xml in META-INF updated with entry for new servlet ExtractionServlet.

comment:35 by olle, 9 years ago

(In [3177]) Refs #725. Wizards "Lab tracking protocol for Allprep isolation" and "DNA/RNA registration/quantification" updated by removing the "Pre-normalize" column, since it is not used in the current registration stage. The code is commented out, in order to simplify its re-appearance in the future:

  1. Javascript files extraction_preparation.js and extraction_registration.js in resources/sampleproc/ updated by commenting out code for the "Pre-normalize" column.

comment:36 by olle, 9 years ago

Functional specification updates for DNA/RNA extraction wizard(s) with support for the batch concept:

  • The selection of unprocessed specimen and input RNA/DNA items ("extract source items") in step 1 of the "Lab tracking protocol for Allprep isolation" wizard should be considered a batch, which should be assigned to a start DNA plate. The wizards should support this notion not only by creating the start DNA plate, but also by allowing the latter to be used to represent the batch of selected extract source items in later stages.
  • The date entered at input field in section "Extraction" in the "Lab tracking protocol for Allprep isolation" wizard should be renamed "Isolation date", and stored as an annotation with created DNA/RNA extracts.
  • The default DNA/RNA volume input fields should be removed from the "Lab tracking protocol for Allprep isolation" wizard, but remain in the "DNA/RNA registration/quantification" wizard. The reason is that the values are not known when the first wizard is used.
  • The wizards should be updated to support extra samples outside the MeLuDi project to be included in a QIAcube run, when there are QIAcube positions available. The number of extra samples should be entered in the "Lab tracking protocol for Allprep isolation" wizard, as they influence what QIAcube positions should be filled, in order to ensure balance of the centrifuge. The created lab tracking sheet should also include lines for the extra samples, but no measurement values should be stored in the MeLuDi database for them.

Design updates:

  • Specifications of the start DNA plate:
    a. The plate should be a DNA reaction plate for extracts.
    b. A start DNA plate should have a name consisting of prefix "LP" + a five-figure serial number with initial zeroes, starting from "LP00001".
    c. The start plate item should have a multi-valued "SourceItemNames" String annotation, intended to store the item names of the extract source items included in the batch.

Lab tracking protocol for Allprep isolation wizard updates:

  • Step 1 still contains selection of a batch of unprocessed/unquantified specimens/RNA/DNA, except that only items with original quantity equal to null is shown in the selection list.
  • Step 2 should have an initial input field for "Start plate name", which will be automatically filled with the next name after stored start DNA plate with highest serial number. If no start plate is stored, plate name "LP00001" is used.
  • Step 3 has two additions; the created Lab Tracking Sheet for Allprep isolation now has the chosen start DNA plate name inserted in the header at "Plate ID:", and a new button "Register" has been added. Clicking the "Register" button will create the chosen start DNA plate, which will have an annotation "SourceItemNames", containing a list of names of the extract source items, selected in step 1. The latter items will also be updated by having the original quantity set to 0.0, which will prevent them from appearing in the selection list, if the wizard is run again.

DNA/RNA registration/quantification wizard updates:

  • Step 1 should be updated to allow selection of an unprocessed start DNA plate, representing the batch of extract source items selected in the previous wizard. A start DNA plate is considered unprocessed, if its event date equals null.
  • Step 2 should have an initial input field for "Start plate name", which will be automatically filled with the name of the plate selected in step 1.
  • Step 3 has the same layout as previously, but extract source items in the batch will now be taken from the "SourceItemNames" annotation of the selected start DNA plate. The functionality should be updated with two additions; created Lab Tracking Sheet for Allprep isolation has the chosen start DNA plate name inserted in the header at "Plate ID:", and the functionality when clicking button "Register" has been extended. As previously at registration, RNA/DNA items for specimens are created and all RNA/DNA items related to the batch are updated with measurement values in the table in step 3, but in addition the start DNA plate event date will be set to the QIAcube date, which will mark it as processed, and prevent it from appearing in the selection list in step 1, if the wizard is run again.

Counter service updates:

  • The counter service should be updated with a counter for unprocessed start DNA plates.

Other updates not related to batches:

  • Lab tracking protocol for Allprep isolation wizard should be updated in step 2 to pre-fill lot no. input fields with values from the latest created DNA specimen, extracted from a specimen. Currently this wizard only contains one lot no. input field, which is for the AllPrep DNA/RNA FFPE kit used.
Last edited 9 years ago by olle (previous) (diff)

comment:37 by olle, 9 years ago

Design specification update:

  1. Java class/file CounterService.java in src/net/sf/basedb/meludi/counter/ updated:
    a. Package private method void count() updated by calling two new private methods, void countExtractSourceItems(DbControl dc, JSONObject json) and void countBioPlates(DbControl dc, JSONObject json).
    b. New private method void countExtractSourceItems(DbControl dc, JSONObject json) added. It performs three queries; for number of specimens without extract, DNA without original quantity, and RNA without original quantity, after which it returns the sum as the value for JSON key "unprocessed-extract-source-items".
    c. New private method void countBioPlates(DbControl dc, JSONObject json) added. It performs a query for the number of active DNA plates with event date not set and returns the result as the value for JSON key "dna-plates-without-eventdate".
  1. JSP file index.jsp i resources/ updated:
    a. Entry for "Lab Tracking protocol for Allprep isolation" updated by exchanging the counter "specimens-without-extract" for "unprocessed-extract-source-items" and counter title "Number of unprocessed selections" for "Number of unprocessed specimens and unquantified RNA/DNA".
    b. Entry for "DNA/RNA registration/quantification" updated by exchanging the counter "specimens-without-extract" for "dna-plates-without-eventdate" and counter title "Number of unprocessed specimens and unquantified RNA/DNA" for "Number of unprocessed start DNA plates".
  1. JSP file extraction_preparation.jsp and Javascript file extraction_preparation.js in resources/sampleproc/ updated to support extra QIAcube items outside the MeLuDi project, and get a "Register" functionality to create a start DNA reaction plate with all values for annotations necessary to recreate the selections made in step 1 and 2 of the wizard. Step 2 also updated by removal of the input fields for default DNA/RNA volumes. The table shown in step 3 has been simplified by removal of unused columns.
  1. JSP file extraction_protocol2.jsp and Javascript file extraction_protocol.js in resources/sampleproc/ updated to show start plate name in header of created form. Also updated to use exchange "Tracking Sheet" in header for "Tracking Report", when the created form contains measurement values, i.e. it is being requested from the "DNA/RNA registration/quantification" wizard.
  1. JSP file extraction_registration.jsp and Javascript file extraction_registration.js in resources/sampleproc/ updated to support extra QIAcube items outside the MeLuDi project, and to get input date from a selected start DNA reaction plate in step 1, instead of having to make exactly the same extract source item selections, as for the "Lab tracking protocol for Allprep isolation" wizard. When registering extracts, chosen default DNA/RNA volumes are transmitted to the Extraction servlet, to be stored as annotations for the used start DNA reaction plate.
  1. Data access object (DAO) class/file Annotationtype.java in src/net/sf/basedb/meludi/dao/ updated with new annotation types:
Name Type Item type Multi-valued
IsolationDate Type.DATE Item.EXTRACT No
SourceItemNames Type.STRING Item.BIOPLATE Yes
BatchNumberExtraQiacubeItems Type.STRING Item.BIOPLATE No
BatchIsolationDate Type.DATE Item.BIOPLATE No
BatchExtractionProtocolId Type.INT Item.BIOPLATE No
BatchExtractionProtocolName Type.STRING Item.BIOPLATE No
BatchRnaDefaultVolumeInMicroLitre Type.FLOAT Item.BIOPLATE No
BatchDnaDefaultVolumeInMicroLitre Type.FLOAT Item.BIOPLATE No
BatchQiacubeDate Type.DATE Item.BIOPLATE No
BatchQiacubePrimaryPrefix Type.STRING Item.BIOPLATE No
BatchQiacubeSecondaryPrefix Type.STRING Item.BIOPLATE No
BatchQiacubeRunNo Type.INT Item.BIOPLATE No
BatchQiacubeOperator Type.STRING Item.BIOPLATE No
BatchAllprepFfpeKit Type.STRING Item.BIOPLATE No
BatchQiacubeOperator Type.STRING Item.BIOPLATE No
  1. Data access object (DAO) class/file BioplateType.java in src/net/sf/basedb/meludi/dao/ updated with new bioplate type DNA.
  1. Data access object (DAO) class/file Dna.java in src/net/sf/basedb/meludi/dao/ updated with new public static method Dna findByName(DbControl dc, String name).
  1. Data access object (DAO) class/file ReactionPlate.java in src/net/sf/basedb/meludi/dao/ updated with new public static method List<ReactionPlate> findActiveByBioPlateType(DbControl dc, BioplateType bioPlateType, Subtype subtype, String prefix, int numFreeWells, Annotationtype runDateAnnotation). It returns a list of active reaction plates which can hold biomaterial items of the given subtype and have names starting with an optional prefix.
  1. Data access object (DAO) class/file Rna.java in src/net/sf/basedb/meludi/dao/ updated with new public static methods Rna findByName(DbControl dc, String name) and List<Rna> findUnquantifiedRna(DbControl dc).
  1. Data access object (DAO) class/file Subtype.java in src/net/sf/basedb/meludi/dao/ updated with new public static final subtype EXTRACTION_PROTOCOL for protocol items.
  1. Java servlet class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated with new bioplate type BioplateType.DNA, annotation type category Subtype.DNA, and new annotation types.
  1. Java servlet class/file ExtractionServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Protected method void doGet(HttpServletRequest req, HttpServletResponse resp) updated with support for new commands "GetUnprocessedStartPlates" and "GetSourceItemListFromStartPlate", as wells as exchanging command "GetNextLibraryPlateName" for "GetNextStartPlateName". The latter method is also updated to get the next plate name from the stored plate with highest number, and not assume that the number of this plate equals the number of plates, i.e. that there is no gaps in the number sequence.
    b. Protected method void doPost(HttpServletRequest req, HttpServletResponse resp) updated with support for new commands "RegisterStartPlate". Command "RegisterDnaRna" updated to store isolation date as annotation for created DNA/RNA extracts, and store default DNA/RNA volumes as annotations for the start plate.
    c. Names of package private methods long findNumberOfLibraryPlates(DbControl dc, String libraryPlatePrefix) and List<BioPlate> findLibraryPlates(DbControl dc, String libraryPlatePrefix) exchanged for long findNumberOfPlates(DbControl dc, String platePrefix) and List<BioPlate> findPlates(DbControl dc, String platePrefix), respectively.
    d. New package private method BioPlate findPlateWithHighestNumber(DbControl dc, String platePrefix) added.
Version 12, edited 9 years ago by olle (previous) (next) (diff)

comment:38 by olle, 9 years ago

(In [3180]) Refs #725. MeLuDi updated in the functionality for the DNA/RNA extraction wizards:

  1. Java class/file CounterService.java in src/net/sf/basedb/meludi/counter/ updated:
    a. Package private method void count() updated by calling two new private methods, void countExtractSourceItems(DbControl dc, JSONObject json) and void countBioPlates(DbControl dc, JSONObject json).
    b. New private method void countExtractSourceItems(DbControl dc, JSONObject json) added. It performs three queries; for number of specimens without extract, DNA without original quantity, and RNA without original quantity, after which it returns the sum as the value for JSON key "unprocessed-extract-source-items".
    c. New private method void countBioPlates(DbControl dc, JSONObject json) added. It performs a query for the number of active DNA plates with event date not set and returns the result as the value for JSON key "dna-plates-without-eventdate".
  1. JSP file index.jsp i resources/ updated:
    a. Entry for "Lab Tracking protocol for Allprep isolation" updated by exchanging the counter "specimens-without-extract" for "unprocessed-extract-source-items" and counter title "Number of unprocessed selections" for "Number of unprocessed specimens and unquantified RNA/DNA".
    b. Entry for "DNA/RNA registration/quantification" updated by exchanging the counter "specimens-without-extract" for "dna-plates-without-eventdate" and counter title "Number of unprocessed specimens and unquantified RNA/DNA" for "Number of unprocessed start DNA plates".
  1. JSP file extraction_preparation.jsp and Javascript file extraction_preparation.js in resources/sampleproc/ updated to support extra QIAcube items outside the MeLuDi project, and get a "Register" functionality to create a start DNA reaction plate with all values for annotations necessary to recreate the selections made in step 1 and 2 of the wizard. Step 2 also updated by removal of the input fields for default DNA/RNA volumes. The table shown in step 3 has been simplified by removal of unused columns.
  1. JSP file extraction_protocol2.jsp and Javascript file extraction_protocol.js in resources/sampleproc/ updated to show start plate name in header of created form. Also updated to use exchange "Tracking Sheet" in header for "Tracking Report", when the created form contains measurement values, i.e. it is being requested from the "DNA/RNA registration/quantification" wizard.
  1. JSP file extraction_registration.jsp and Javascript file extraction_registration.js in resources/sampleproc/ updated to support extra QIAcube items outside the MeLuDi project, and to get input date from a selected start DNA reaction plate in step 1, instead of having to make exactly the same extract source item selections, as for the "Lab tracking protocol for Allprep isolation" wizard. When registering extracts, chosen default DNA/RNA volumes are transmitted to the Extraction servlet, to be stored as annotations for the used start DNA reaction plate.
  1. Data access object (DAO) class/file Annotationtype.java in src/net/sf/basedb/meludi/dao/ updated with new annotation types:
Name Type Item type Multi-valued
IsolationDate Type.DATE Item.EXTRACT No
SourceItemNames Type.STRING Item.BIOPLATE Yes
BatchNumberExtraQiacubeItems Type.INT Item.BIOPLATE No
BatchIsolationDate Type.DATE Item.BIOPLATE No
BatchExtractionProtocolId Type.INT Item.BIOPLATE No
BatchExtractionProtocolName Type.STRING Item.BIOPLATE No
BatchRnaDefaultVolumeInMicroLitre Type.FLOAT Item.BIOPLATE No
BatchDnaDefaultVolumeInMicroLitre Type.FLOAT Item.BIOPLATE No
BatchQiacubeDate Type.DATE Item.BIOPLATE No
BatchQiacubePrimaryPrefix Type.STRING Item.BIOPLATE No
BatchQiacubeSecondaryPrefix Type.STRING Item.BIOPLATE No
BatchQiacubeRunNo Type.INT Item.BIOPLATE No
BatchQiacubeOperator Type.STRING Item.BIOPLATE No
BatchAllprepFfpeKit Type.STRING Item.BIOPLATE No
BatchQiacubeOperator Type.STRING Item.BIOPLATE No
  1. Data access object (DAO) class/file BioplateType.java in src/net/sf/basedb/meludi/dao/ updated with new bioplate type DNA.
  1. Data access object (DAO) class/file Dna.java in src/net/sf/basedb/meludi/dao/ updated with new public static method Dna findByName(DbControl dc, String name).
  1. Data access object (DAO) class/file ReactionPlate.java in src/net/sf/basedb/meludi/dao/ updated with new public static method List<ReactionPlate> findActiveByBioPlateType(DbControl dc, BioplateType bioPlateType, Subtype subtype, String prefix, int numFreeWells, Annotationtype runDateAnnotation). It returns a list of active reaction plates which can hold biomaterial items of the given subtype and have names starting with an optional prefix.
  1. Data access object (DAO) class/file Rna.java in src/net/sf/basedb/meludi/dao/ updated with new public static methods Rna findByName(DbControl dc, String name) and List<Rna> findUnquantifiedRna(DbControl dc).
  1. Data access object (DAO) class/file Subtype.java in src/net/sf/basedb/meludi/dao/ updated with new public static final subtype EXTRACTION_PROTOCOL for protocol items.
  1. Java servlet class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated with new bioplate type BioplateType.DNA, annotation type category Subtype.DNA, and new annotation types.
  1. Java servlet class/file ExtractionServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Protected method void doGet(HttpServletRequest req, HttpServletResponse resp) updated with support for new commands "GetUnprocessedStartPlates" and "GetSourceItemListFromStartPlate", as wells as exchanging command "GetNextLibraryPlateName" for "GetNextStartPlateName". The latter method is also updated to get the next plate name from the stored plate with highest number, and not assume that the number of this plate equals the number of plates, i.e. that there is no gaps in the number sequence.
    b. Protected method void doPost(HttpServletRequest req, HttpServletResponse resp) updated with support for new commands "RegisterStartPlate". Command "RegisterDnaRna" updated to store isolation date as annotation for created DNA/RNA extracts, and store default DNA/RNA volumes as annotations for the start plate.
    c. Names of package private methods long findNumberOfLibraryPlates(DbControl dc, String libraryPlatePrefix) and List<BioPlate> findLibraryPlates(DbControl dc, String libraryPlatePrefix) exchanged for long findNumberOfPlates(DbControl dc, String platePrefix) and List<BioPlate> findPlates(DbControl dc, String platePrefix), respectively.
    d. New package private method BioPlate findPlateWithHighestNumber(DbControl dc, String platePrefix) added.
Last edited 9 years ago by olle (previous) (diff)

comment:39 by olle, 9 years ago

Functional specification update of "DNA/RNA registration/quantification" wizard:

  • The "DNA/RNA registration/quantification" wizard should be updated in step 2 regarding input options for reagent lot no.:
    a. A new button should be added for clearing the reagent input fields.
    b. Lot no. from the latest registered DNA extract should not be loaded automatically, but be coupled to a new button.

comment:40 by olle, 9 years ago

(In [3183]) Refs #725. MeLuDi updated in the "DNA/RNA registration/quantification" wizard step 2 input options for reagent lot no.s to couple loading of lot no.s from latest registered DNA extract to a new button, and add a new button for clearing the reagent input fields:

  1. JSP file extraction_registration.jsp in resources/sampleproc/ updated in the "Common information for Extraction and QIAcube" step:
    a. The section has been included in a div tag with id = "commonInfoSection".
    b. The "Input options" part has been extended with two buttons; one for clearing the reagent input fields, and one for copying lot no.s from latest registered DNA.
  1. Javascript file extraction_registration.js in resources/sampleproc/ updated:
    a. Function exreg.initializeStep2() updated to couple clicks on two new buttons to new functions exreg.clearReagents() and exreg.copyReagentsFromLatestExtract(), respectively. Reagent lot no.s from latest registered DNA extract will now not be loaded automatically.
    b. New function exreg.clearReagents() added. It will clear reagent lot no. input fields.
    c. New function exreg.copyReagentsFromLatestExtract() added. It will make an AJAX request to ExtractionServlet with command GetLastProcessedDna and callback function exreg.lastProcessedDnaLoaded().
    d. Function exreg.lastProcessedDnaLoaded() updated by removal of unnecessary condition check.

comment:41 by olle, 9 years ago

(In [3184]) Refs #725. CSS file meludi-2.css in resources/css/ updated with changes in corresponding Reggie CSS file reggie-2.css, with support for debug-tools.

comment:42 by olle, 9 years ago

(In [3185]) Refs #725. Javascript file meludi-2.js in resources/ updated in function Wizard() by setting value of variable debug to 0, in order to not including a check box to simulate session timeout in the web pages.

comment:43 by olle, 9 years ago

(In [3187]) Refs #725. Java servlet class/file ExtractionServlet.java in src/net/sf/basedb/meludi/servlet/ updated by removal of debug output and some unused code.

comment:44 by olle, 9 years ago

(In [3189]) Refs #725. Updates due to version number change to "1.2".

  1. Version number change to "1.2":
    a. Outermost Ant XML build file build.xml in / updated.
    b. Extensions XML configuration file extensions.xml in META-INF/ updated.
    c. Javascript file meludi-2.js in resources/ updated.
    d. Javascript file samplereportgenerator.js in resources/reports/ updated.
    e. Java class/file Meludi.java in src/net/sf/basedb/meludi/ updated.

comment:45 by olle, 9 years ago

(In [3190]) Refs #725. Outermost README file updated for MeLuDi 1.2.

comment:46 by olle, 9 years ago

(In [3191]) Refs #725. Javascript file case_summary.js in resources/reports/ updated in function cs.caseInfoLoaded() by disabling LabEnv links for items, since it is not clear if the relevant laboratories are equipped with sensors, and if so, their identity.

Last edited 9 years ago by olle (previous) (diff)

comment:47 by olle, 9 years ago

Resolution: fixed
Status: assignedclosed

Ticket closed as MeLuDi version 1.2 has been created.

Note: See TracTickets for help on using tickets.