extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/plugins/release/CaseWriter.java

Code
Comments
Other
Rev Date Author Line
3940 16 May 16 nicklas 1 package net.sf.basedb.reggie.plugins.release;
3940 16 May 16 nicklas 2
3940 16 May 16 nicklas 3 import java.util.Date;
4469 26 Apr 17 nicklas 4 import java.util.List;
3940 16 May 16 nicklas 5
4379 06 Mar 17 nicklas 6 import org.json.simple.JSONArray;
4371 02 Mar 17 nicklas 7 import org.json.simple.JSONObject;
4371 02 Mar 17 nicklas 8
4468 26 Apr 17 nicklas 9 import net.sf.basedb.core.AnnotationType;
4084 07 Sep 16 nicklas 10 import net.sf.basedb.core.BioSource;
3940 16 May 16 nicklas 11 import net.sf.basedb.core.DbControl;
4461 21 Apr 17 nicklas 12 import net.sf.basedb.core.Item;
3940 16 May 16 nicklas 13 import net.sf.basedb.core.Sample;
4461 21 Apr 17 nicklas 14 import net.sf.basedb.core.Type;
4461 21 Apr 17 nicklas 15 import net.sf.basedb.reggie.converter.DateToYearConverter;
3940 16 May 16 nicklas 16 import net.sf.basedb.reggie.dao.Annotationtype;
5096 14 Nov 18 nicklas 17 import net.sf.basedb.reggie.dao.Case;
4380 06 Mar 17 nicklas 18 import net.sf.basedb.reggie.json.FilteredJSONArray;
4380 06 Mar 17 nicklas 19 import net.sf.basedb.util.filter.NotNullFilter;
3940 16 May 16 nicklas 20
3940 16 May 16 nicklas 21 /**
5096 14 Nov 18 nicklas 22   Cohort writer implementation for Case items.
3940 16 May 16 nicklas 23   @since 4.5
3940 16 May 16 nicklas 24 */
3940 16 May 16 nicklas 25 public class CaseWriter 
3940 16 May 16 nicklas 26   extends CohortWriter 
3940 16 May 16 nicklas 27 {
3940 16 May 16 nicklas 28
3940 16 May 16 nicklas 29   
5090 14 Nov 18 nicklas 30   public CaseWriter(DbControl dc, ReleaseWriterOptions options)
3940 16 May 16 nicklas 31   {
5090 14 Nov 18 nicklas 32     super(dc, options);
3940 16 May 16 nicklas 33   }
3940 16 May 16 nicklas 34   
4371 02 Mar 17 nicklas 35   @Override
5091 14 Nov 18 nicklas 36   public JSONArray toJSONObjects(CohortItem item)
4371 02 Mar 17 nicklas 37   {
5096 14 Nov 18 nicklas 38     List<Case> cases = item.getCases();
5096 14 Nov 18 nicklas 39     if (cases.size() == 0) return null;
4371 02 Mar 17 nicklas 40     
5096 14 Nov 18 nicklas 41     BioSource patient = item.getPatient().getItem();    
5096 14 Nov 18 nicklas 42     JSONArray json = new JSONArray();
5096 14 Nov 18 nicklas 43     for (Case c : cases)
4461 21 Apr 17 nicklas 44     {
5096 14 Nov 18 nicklas 45       Sample theCase = c.getItem();
5096 14 Nov 18 nicklas 46       
5096 14 Nov 18 nicklas 47       JSONObject jsonCase = new JSONObject();
5096 14 Nov 18 nicklas 48       jsonCase.put("name", theCase.getExternalId());
5096 14 Nov 18 nicklas 49       jsonCase.put("type", theCase.getType().name());
5096 14 Nov 18 nicklas 50       jsonCase.put("subtype", getName(theCase.getItemSubtype()));
5096 14 Nov 18 nicklas 51       jsonCase.put("parent", patient.getExternalId());
5096 14 Nov 18 nicklas 52   
5096 14 Nov 18 nicklas 53       JSONArray jsonAnnotations = new FilteredJSONArray(new NotNullFilter<>(false));
5096 14 Nov 18 nicklas 54       jsonAnnotations.add(item.getAnnotationJSON(Annotationtype.CONSENT, theCase, null));
5096 14 Nov 18 nicklas 55       jsonAnnotations.add(item.getAnnotationJSON(Annotationtype.LATERALITY, theCase, null));
5096 14 Nov 18 nicklas 56       
5096 14 Nov 18 nicklas 57       Date refDate = (Date)item.getAnnotationValue(Annotationtype.REFERENCE_DATE, theCase);
5096 14 Nov 18 nicklas 58       String refSource = (String)item.getAnnotationValue(Annotationtype.REFERENCE_DATE_SOURCE, theCase);
5096 14 Nov 18 nicklas 59       if (refDate != null && refSource != null)
5096 14 Nov 18 nicklas 60       {
5096 14 Nov 18 nicklas 61         jsonAnnotations.add(item.createAnnotationJSON("ReferenceYear", DateToYearConverter.INSTANCE.convert(refDate)));
5096 14 Nov 18 nicklas 62         jsonAnnotations.add(item.createAnnotationJSON("ReferenceSource", refSource));
5096 14 Nov 18 nicklas 63       }
6099 11 Jan 21 nicklas 64       jsonAnnotations.add(item.getAnnotationJSON(Annotationtype.LINKED_CASE, theCase, null));
5096 14 Nov 18 nicklas 65       jsonCase.put("annotations", jsonAnnotations);
5096 14 Nov 18 nicklas 66       json.add(jsonCase);
4461 21 Apr 17 nicklas 67     }
4461 21 Apr 17 nicklas 68     
5096 14 Nov 18 nicklas 69     return json;
4371 02 Mar 17 nicklas 70   }
3940 16 May 16 nicklas 71
4379 06 Mar 17 nicklas 72   @Override
4469 26 Apr 17 nicklas 73   public List<CohortTypeDef> getTypeDefsInJSON()
4379 06 Mar 17 nicklas 74   {
4379 06 Mar 17 nicklas 75     DbControl dc = getDbControl();
4461 21 Apr 17 nicklas 76     
4469 26 Apr 17 nicklas 77     CohortTypeDefFactory caseFactory = new CohortTypeDefFactory(dc, Item.SAMPLE, "Case");
4461 21 Apr 17 nicklas 78     
4468 26 Apr 17 nicklas 79     // Only allow "Yes" on the receiving end
4469 26 Apr 17 nicklas 80     caseFactory.createAnnotationType(Annotationtype.CONSENT).setEnumeration("Yes");
5973 24 Jun 20 nicklas 81     caseFactory.createAnnotationType(Annotationtype.LATERALITY).setProjectSpecificValues(true);
4461 21 Apr 17 nicklas 82     
4468 26 Apr 17 nicklas 83     caseFactory.setProjectSpecificValues(true);
4469 26 Apr 17 nicklas 84     caseFactory.createAnnotationType("ReferenceYear", Type.INT);
4468 26 Apr 17 nicklas 85     AnnotationType refDateSource = Annotationtype.REFERENCE_DATE_SOURCE.get(dc);
4469 26 Apr 17 nicklas 86     caseFactory.createAnnotationType("ReferenceSource", Type.STRING).setEnumeration(refDateSource.getValues());
6099 11 Jan 21 nicklas 87     caseFactory.createAnnotationType("LinkedCase", Type.INT);
4461 21 Apr 17 nicklas 88
4468 26 Apr 17 nicklas 89     return caseFactory.allCreated();
4379 06 Mar 17 nicklas 90   }
4371 02 Mar 17 nicklas 91
3940 16 May 16 nicklas 92 }