extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/Site.java

Code
Comments
Other
Rev Date Author Line
1614 24 Apr 12 nicklas 1 package net.sf.basedb.reggie;
1614 24 Apr 12 nicklas 2
1641 09 May 12 nicklas 3 import java.util.Collection;
1641 09 May 12 nicklas 4 import java.util.Collections;
2608 28 Aug 14 nicklas 5 import java.util.Comparator;
1614 24 Apr 12 nicklas 6 import java.util.HashMap;
1614 24 Apr 12 nicklas 7 import java.util.Map;
1614 24 Apr 12 nicklas 8
4002 17 Jun 16 nicklas 9 import net.sf.basedb.core.Group;
4002 17 Jun 16 nicklas 10 import net.sf.basedb.core.Item;
4002 17 Jun 16 nicklas 11 import net.sf.basedb.reggie.dao.ReggieRole;
2894 05 Nov 14 nicklas 12 import net.sf.basedb.reggie.logo.Logo;
6277 03 Jun 21 nicklas 13 import net.sf.basedb.util.MD5;
2894 05 Nov 14 nicklas 14
1614 24 Apr 12 nicklas 15 import org.json.simple.JSONObject;
1614 24 Apr 12 nicklas 16
1614 24 Apr 12 nicklas 17 /**
1614 24 Apr 12 nicklas 18   Information about the various sites that are participating.
1614 24 Apr 12 nicklas 19   @author nicklas
1614 24 Apr 12 nicklas 20   @since 2.5
1614 24 Apr 12 nicklas 21 */
1614 24 Apr 12 nicklas 22 public class Site 
4002 17 Jun 16 nicklas 23   extends ReggieRole<Group>
1614 24 Apr 12 nicklas 24 {
1614 24 Apr 12 nicklas 25   // Store all sites by prefix
1614 24 Apr 12 nicklas 26   private static final Map<String, Site> sites = new HashMap<String, Site>();
1614 24 Apr 12 nicklas 27
6610 25 Feb 22 nicklas 28   public static final Site LUND         = new Site("11", "Lund", "2010-11-10", true, true, true, Logo.REGION_SKÅNE);
6610 25 Feb 22 nicklas 29   public static final Site HELSINGBORG  = new Site("22", "Helsingborg", "2010-11-01", true, true, true, Logo.REGION_SKÅNE);
6610 25 Feb 22 nicklas 30   public static final Site HALMSTAD     = new Site("33", "Halmstad", "2010-10-01", true, true, true, Logo.REGION_HALLAND);
6610 25 Feb 22 nicklas 31   public static final Site KRISTIANSTAD = new Site("44", "Kristianstad", "2010-09-15", true, true, true, Logo.REGION_SKÅNE);
6610 25 Feb 22 nicklas 32   public static final Site KARLSKRONA   = new Site("55", "Karlskrona", "2010-10-04", true, true, true, Logo.LANDSTINGET_BLEKINGE);
6610 25 Feb 22 nicklas 33   public static final Site VÄXJÖ        = new Site("66", "Växjö", "2010-10-01", true, true, true, Logo.LANDSTINGET_KRONOBERG);
6610 25 Feb 22 nicklas 34   public static final Site MALMÖ        = new Site("77", "Malmö", "2010-08-30", true, true, true, Logo.REGION_SKÅNE);
6610 25 Feb 22 nicklas 35   public static final Site UPPSALA      = new Site("88", "Uppsala", "2013-10-01", true, false, false, Logo.UPPSALA_LANDSTING);
6610 25 Feb 22 nicklas 36   public static final Site BORÅS        = new Site("91", "Borås", "2021-02-15", true, false, false, Logo.BORÅS);
6610 25 Feb 22 nicklas 37   public static final Site JÖNKÖPING    = new Site("99", "Jönköping", "2015-06-11", true, false, false, Logo.JÖNKÖPINGS_LÄN);
6610 25 Feb 22 nicklas 38   public static final Site UNKNOWN      = new Site(null, "Unknown", null, false, false, false, null);
1623 26 Apr 12 nicklas 39   
1614 24 Apr 12 nicklas 40   /**
1641 09 May 12 nicklas 41     Get all registered sites.
1641 09 May 12 nicklas 42   */
1641 09 May 12 nicklas 43   public static final Collection<Site> getAllSites()
1641 09 May 12 nicklas 44   {
1641 09 May 12 nicklas 45     return Collections.unmodifiableCollection(sites.values());
1641 09 May 12 nicklas 46   }
1641 09 May 12 nicklas 47   
2608 28 Aug 14 nicklas 48   public static final Comparator<Site> SORT_BY_NAME = new Comparator<Site>() 
2608 28 Aug 14 nicklas 49   {
2608 28 Aug 14 nicklas 50     @Override
2608 28 Aug 14 nicklas 51     public int compare(Site s1, Site s2) 
2608 28 Aug 14 nicklas 52     {
2608 28 Aug 14 nicklas 53       return s1.getName().compareTo(s2.getName());
2608 28 Aug 14 nicklas 54     }
2608 28 Aug 14 nicklas 55   
2608 28 Aug 14 nicklas 56   };
2608 28 Aug 14 nicklas 57   
1641 09 May 12 nicklas 58   /**
1614 24 Apr 12 nicklas 59     Find the site the given case name belongs to. Usually, the
1614 24 Apr 12 nicklas 60     first two characters in the case name is the site prefix. 
1623 26 Apr 12 nicklas 61     If no site with the given prefix is found, {@link #UNKNOWN} is returned.
1623 26 Apr 12 nicklas 62     @return A Site object or UNKNOWN
1614 24 Apr 12 nicklas 63   */
1614 24 Apr 12 nicklas 64   public static Site findByCaseName(String caseName)
1614 24 Apr 12 nicklas 65   {
1623 26 Apr 12 nicklas 66     Site s = sites.get(caseName.substring(0, 2));
1623 26 Apr 12 nicklas 67     return s == null ? UNKNOWN : s;
1614 24 Apr 12 nicklas 68   }
1614 24 Apr 12 nicklas 69   
1614 24 Apr 12 nicklas 70   private final String prefix;
1614 24 Apr 12 nicklas 71   private final String name;
1614 24 Apr 12 nicklas 72   private final String startDate;
1614 24 Apr 12 nicklas 73   private final boolean useCaseSuffix;
6610 25 Feb 22 nicklas 74   private final boolean usePlasmaSerum;
2250 25 Feb 14 olle 75   private final boolean partOfRCC_syd;
2894 05 Nov 14 nicklas 76   private final Logo logo;
1614 24 Apr 12 nicklas 77   private JSONObject json;
1614 24 Apr 12 nicklas 78   
6610 25 Feb 22 nicklas 79   private Site(String prefix, String name, String startDate, boolean useCaseSuffix, boolean partOfRCC_syd, boolean usePlasmaSerum, Logo logo)
1614 24 Apr 12 nicklas 80   {
4002 17 Jun 16 nicklas 81     super(name, Item.GROUP, false);
1614 24 Apr 12 nicklas 82     this.prefix = prefix;
1614 24 Apr 12 nicklas 83     this.name = name;
1614 24 Apr 12 nicklas 84     this.startDate = startDate;
1614 24 Apr 12 nicklas 85     this.useCaseSuffix = useCaseSuffix;
6610 25 Feb 22 nicklas 86     this.usePlasmaSerum = usePlasmaSerum;
2250 25 Feb 14 olle 87     this.partOfRCC_syd = partOfRCC_syd;
2894 05 Nov 14 nicklas 88     this.logo = logo;
1623 26 Apr 12 nicklas 89     if (prefix != null) sites.put(prefix, this);
1614 24 Apr 12 nicklas 90   }
1614 24 Apr 12 nicklas 91   
1614 24 Apr 12 nicklas 92   /**
1614 24 Apr 12 nicklas 93     Get the prefix for the site.
1614 24 Apr 12 nicklas 94   */
1614 24 Apr 12 nicklas 95   public String getPrefix()
1614 24 Apr 12 nicklas 96   {
1614 24 Apr 12 nicklas 97     return prefix;
1614 24 Apr 12 nicklas 98   }
1614 24 Apr 12 nicklas 99   
1614 24 Apr 12 nicklas 100   /**
1614 24 Apr 12 nicklas 101     Get the full name of the site.
1614 24 Apr 12 nicklas 102   */
4002 17 Jun 16 nicklas 103   @Override
1614 24 Apr 12 nicklas 104   public String getName()
1614 24 Apr 12 nicklas 105   {
1614 24 Apr 12 nicklas 106     return name;
1614 24 Apr 12 nicklas 107   }
1614 24 Apr 12 nicklas 108   
1614 24 Apr 12 nicklas 109   /**
1614 24 Apr 12 nicklas 110     Get the date the site joined the project.
1614 24 Apr 12 nicklas 111   */
1614 24 Apr 12 nicklas 112   public String getStartDate()
1614 24 Apr 12 nicklas 113   {
1614 24 Apr 12 nicklas 114     return startDate;
1614 24 Apr 12 nicklas 115   }
1614 24 Apr 12 nicklas 116   
1614 24 Apr 12 nicklas 117   /**
1614 24 Apr 12 nicklas 118     Is this site using a suffix (eg, 'C') in the barcode on pre-neoadjuvant
1614 24 Apr 12 nicklas 119     referral forms (eg. specimen tubes, blood samples)? 
1614 24 Apr 12 nicklas 120     If no suffix is used it is expected that the site use different 
1614 24 Apr 12 nicklas 121     case numbers for such forms.
1614 24 Apr 12 nicklas 122   */
1614 24 Apr 12 nicklas 123   public boolean useCaseSuffixForPreNeoForms()
1614 24 Apr 12 nicklas 124   {
1614 24 Apr 12 nicklas 125     return useCaseSuffix;
1614 24 Apr 12 nicklas 126   }
2250 25 Feb 14 olle 127
2250 25 Feb 14 olle 128   /**
2250 25 Feb 14 olle 129       Get flag indicating whether site belongs to "RCC syd" (Regionalt Cancercentrum syd)
2250 25 Feb 14 olle 130    */
2250 25 Feb 14 olle 131   public boolean isPartOfRCC_syd()
2250 25 Feb 14 olle 132   {
2250 25 Feb 14 olle 133     return partOfRCC_syd;
2250 25 Feb 14 olle 134   }
1614 24 Apr 12 nicklas 135   
1614 24 Apr 12 nicklas 136   /**
6610 25 Feb 22 nicklas 137     A flag indicating if the Plasma/Serum checkbox should be selected by default or not.
6610 25 Feb 22 nicklas 138     @since 4.371.1
6610 25 Feb 22 nicklas 139   */
6610 25 Feb 22 nicklas 140   public boolean usePlasmaSerum()
6610 25 Feb 22 nicklas 141   {
6610 25 Feb 22 nicklas 142     return usePlasmaSerum;
6610 25 Feb 22 nicklas 143   }
6610 25 Feb 22 nicklas 144   
6610 25 Feb 22 nicklas 145   /**
2894 05 Nov 14 nicklas 146     Get the logo for this site. Even if a Logo object has been defined for this 
2894 05 Nov 14 nicklas 147     site this method may return null if the image file doesn't exists.
2894 05 Nov 14 nicklas 148     @since 2.18
2894 05 Nov 14 nicklas 149   */
2894 05 Nov 14 nicklas 150   public Logo getLogo()
2894 05 Nov 14 nicklas 151   {
2894 05 Nov 14 nicklas 152     return logo != null && logo.exists() ? logo : null;
2894 05 Nov 14 nicklas 153   }
2894 05 Nov 14 nicklas 154
6277 03 Jun 21 nicklas 155   /**
6277 03 Jun 21 nicklas 156     Convert the numeric SCAN-B number, which should be a value
6277 03 Jun 21 nicklas 157     between 1 and 99,999 to a 7-digit SCAN-B ID with site prefix.
6277 03 Jun 21 nicklas 158     The UNKNOW site will not add a prefix and returns a 5-digit
6277 03 Jun 21 nicklas 159     string instead.
6277 03 Jun 21 nicklas 160     @since 4.31.2
6277 03 Jun 21 nicklas 161   */
6277 03 Jun 21 nicklas 162   public String toScanbID(int scanbNumber)
6277 03 Jun 21 nicklas 163   {
6277 03 Jun 21 nicklas 164     return (prefix==null?"":prefix)+MD5.leftPad(Integer.toString(scanbNumber), '0', 5);
6277 03 Jun 21 nicklas 165   }
2894 05 Nov 14 nicklas 166   
6277 03 Jun 21 nicklas 167   
2894 05 Nov 14 nicklas 168   /**
1614 24 Apr 12 nicklas 169     Get the site information as a JSON object.
1614 24 Apr 12 nicklas 170   */
1614 24 Apr 12 nicklas 171   public JSONObject asJSONObject()
1614 24 Apr 12 nicklas 172   {
1614 24 Apr 12 nicklas 173     if (json == null)
1614 24 Apr 12 nicklas 174     {
1614 24 Apr 12 nicklas 175       json = new JSONObject();
1614 24 Apr 12 nicklas 176       json.put("prefix", getPrefix());
1614 24 Apr 12 nicklas 177       json.put("name", getName());
1614 24 Apr 12 nicklas 178       json.put("startDate", getStartDate());
6610 25 Feb 22 nicklas 179       json.put("usePlasmaSerum", usePlasmaSerum());
6610 25 Feb 22 nicklas 180       json.put("useCaseSuffixForPreNeoForms", useCaseSuffixForPreNeoForms());
6610 25 Feb 22 nicklas 181       json.put("isRCCSyd", isPartOfRCC_syd());
1614 24 Apr 12 nicklas 182     }
1614 24 Apr 12 nicklas 183     return json;
1614 24 Apr 12 nicklas 184   }
1614 24 Apr 12 nicklas 185 }