extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/dao/Subtype.java

Code
Comments
Other
Rev Date Author Line
1427 28 Oct 11 nicklas 1 package net.sf.basedb.reggie.dao;
1427 28 Oct 11 nicklas 2
1544 29 Feb 12 nicklas 3 import java.lang.reflect.Field;
1610 23 Apr 12 nicklas 4 import java.util.List;
1544 29 Feb 12 nicklas 5
1543 28 Feb 12 nicklas 6 import org.json.simple.JSONObject;
1543 28 Feb 12 nicklas 7
3069 09 Jan 15 nicklas 8 import net.sf.basedb.core.BasicItem;
1427 28 Oct 11 nicklas 9 import net.sf.basedb.core.DbControl;
1610 23 Apr 12 nicklas 10 import net.sf.basedb.core.Include;
1610 23 Apr 12 nicklas 11 import net.sf.basedb.core.InvalidDataException;
1427 28 Oct 11 nicklas 12 import net.sf.basedb.core.Item;
1610 23 Apr 12 nicklas 13 import net.sf.basedb.core.ItemNotFoundException;
1492 02 Dec 11 nicklas 14 import net.sf.basedb.core.ItemQuery;
1427 28 Oct 11 nicklas 15 import net.sf.basedb.core.ItemSubtype;
3069 09 Jan 15 nicklas 16 import net.sf.basedb.core.Project;
1492 02 Dec 11 nicklas 17 import net.sf.basedb.core.Subtypable;
1610 23 Apr 12 nicklas 18 import net.sf.basedb.core.Type;
1492 02 Dec 11 nicklas 19 import net.sf.basedb.core.query.Expressions;
1492 02 Dec 11 nicklas 20 import net.sf.basedb.core.query.Hql;
1543 28 Feb 12 nicklas 21 import net.sf.basedb.core.query.Restriction;
1492 02 Dec 11 nicklas 22 import net.sf.basedb.core.query.Restrictions;
3618 23 Nov 15 nicklas 23 import net.sf.basedb.util.filter.Filter;
1427 28 Oct 11 nicklas 24
1427 28 Oct 11 nicklas 25 /**
1427 28 Oct 11 nicklas 26   Used to define a subtype by name and main item type.
1427 28 Oct 11 nicklas 27   
1427 28 Oct 11 nicklas 28   @author nicklas
1427 28 Oct 11 nicklas 29   @since 2.0
1427 28 Oct 11 nicklas 30 */
1427 28 Oct 11 nicklas 31 public class Subtype 
1427 28 Oct 11 nicklas 32 {
1427 28 Oct 11 nicklas 33
1427 28 Oct 11 nicklas 34   /**
1427 28 Oct 11 nicklas 35     The definition of the "Patient" subtype.
1427 28 Oct 11 nicklas 36     @since 2.0
1427 28 Oct 11 nicklas 37   */
5088 13 Nov 18 nicklas 38   public static final Subtype PATIENT = new Subtype("Patient", "PAT", null, "Q", Item.BIOSOURCE, false);
1526 25 Jan 12 nicklas 39
1427 28 Oct 11 nicklas 40   /**
1526 25 Jan 12 nicklas 41     The definition of the "No" subtype (for virtual patient with consent=No).
1526 25 Jan 12 nicklas 42     @since 2.2
1526 25 Jan 12 nicklas 43   */
5088 13 Nov 18 nicklas 44   public static final Subtype NO = new Subtype("No", "No", null, "N", Item.BIOSOURCE, false);
1526 25 Jan 12 nicklas 45
1526 25 Jan 12 nicklas 46   /**
5108 19 Nov 18 nicklas 47     The definition of the "NotAsked" subtype (for virtual patient with consent=Not asked).
1526 25 Jan 12 nicklas 48     @since 2.2
1526 25 Jan 12 nicklas 49   */
5108 19 Nov 18 nicklas 50   public static final Subtype NOT_ASKED = new Subtype("NotAsked", "NotAsked", null, "Z", Item.BIOSOURCE, false);
1526 25 Jan 12 nicklas 51
1526 25 Jan 12 nicklas 52   /**
2839 20 Oct 14 olle 53     The definition of the "Retract" subtype (for virtual patient with retracted "Yes"-consent).
2839 20 Oct 14 olle 54     @since 2.17
2839 20 Oct 14 olle 55    */
5088 13 Nov 18 nicklas 56   public static final Subtype RETRACT = new Subtype("Retract", "Retract", null, "R", Item.BIOSOURCE, false);
2839 20 Oct 14 olle 57
2839 20 Oct 14 olle 58   /**
2839 20 Oct 14 olle 59     The definition of the "RetroNo" subtype (for virtual patient with consent "No" or missing).
2839 20 Oct 14 olle 60     @since 2.17
2839 20 Oct 14 olle 61    */
5088 13 Nov 18 nicklas 62   public static final Subtype RETRO_NO = new Subtype("RetroNo", "RetroNo", null, "N", Item.BIOSOURCE, false);
2839 20 Oct 14 olle 63
2839 20 Oct 14 olle 64   /**
1427 28 Oct 11 nicklas 65     The definition of the "Case" subtype.
1427 28 Oct 11 nicklas 66     @since 2.0
1427 28 Oct 11 nicklas 67   */
5088 13 Nov 18 nicklas 68   public static final Subtype CASE = new Subtype("Case", null, null, "C", Item.SAMPLE, false);
1515 19 Jan 12 nicklas 69
1515 19 Jan 12 nicklas 70   /**
1515 19 Jan 12 nicklas 71     The definition of the "Blood" subtype.
1515 19 Jan 12 nicklas 72     @since 2.2
1515 19 Jan 12 nicklas 73   */
5088 13 Nov 18 nicklas 74   public static final Subtype BLOOD = new Subtype("Blood", null, "b", "B", Item.SAMPLE, false);
1515 19 Jan 12 nicklas 75
3355 28 May 15 nicklas 76   /**
3355 28 May 15 nicklas 77     The definition of the "BloodDNA" subtype.
3355 28 May 15 nicklas 78     @since 3.4
3355 28 May 15 nicklas 79   */
5088 13 Nov 18 nicklas 80   public static final Subtype BLOOD_DNA = new Subtype("BloodDNA", null, "d", null, Item.EXTRACT, false);
1427 28 Oct 11 nicklas 81   
1427 28 Oct 11 nicklas 82   /**
1427 28 Oct 11 nicklas 83     The definition of the "Specimen" subtype.
1427 28 Oct 11 nicklas 84     @since 2.0
1427 28 Oct 11 nicklas 85   */
5088 13 Nov 18 nicklas 86   public static final Subtype SPECIMEN = new Subtype("Specimen", null, null, "S", Item.SAMPLE, false);
1608 20 Apr 12 nicklas 87
1608 20 Apr 12 nicklas 88   /**
1608 20 Apr 12 nicklas 89     The definition of the "NoSpecimen" subtype (for cases when no specimen has been received).
1608 20 Apr 12 nicklas 90     @since 2.5
1608 20 Apr 12 nicklas 91   */
5088 13 Nov 18 nicklas 92   public static final Subtype NO_SPECIMEN = new Subtype("NoSpecimen", null, null, "S", Item.SAMPLE, false);
1608 20 Apr 12 nicklas 93
1427 28 Oct 11 nicklas 94   /**
5774 04 Dec 19 nicklas 95     The definition of the "TMASpecimen" subtype.
5774 04 Dec 19 nicklas 96     @since 4.25
5774 04 Dec 19 nicklas 97   */
5774 04 Dec 19 nicklas 98   public static final Subtype TMA_SPECIMEN = new Subtype("TMASpecimen", null, "tma", "T", Item.SAMPLE, false);
5774 04 Dec 19 nicklas 99
5774 04 Dec 19 nicklas 100   /**
1427 28 Oct 11 nicklas 101     The definition of the "Histology" subtype.
1427 28 Oct 11 nicklas 102     @since 2.0
1427 28 Oct 11 nicklas 103   */
5088 13 Nov 18 nicklas 104   public static final Subtype HISTOLOGY = new Subtype("Histology", null, "his", null, Item.SAMPLE, false);
1427 28 Oct 11 nicklas 105   
1427 28 Oct 11 nicklas 106   /**
1668 25 May 12 nicklas 107     The definition of the "Stained" subtype.
1668 25 May 12 nicklas 108     @since 2.7
1668 25 May 12 nicklas 109   */
5088 13 Nov 18 nicklas 110   public static final Subtype STAINED = new Subtype("Stained", null, "he", null, Item.SAMPLE, false);
1668 25 May 12 nicklas 111
3640 02 Dec 15 nicklas 112   /**
3640 02 Dec 15 nicklas 113     The definition of the "Freezer" subtype. Should already exist in BASE.
3640 02 Dec 15 nicklas 114     @since 4.0
3640 02 Dec 15 nicklas 115   */
5088 13 Nov 18 nicklas 116   public static final Subtype FREEZER = new Subtype("Freezer", null, null, null, Item.HARDWARE, false);
1668 25 May 12 nicklas 117   
3640 02 Dec 15 nicklas 118   
1668 25 May 12 nicklas 119   /**
1427 28 Oct 11 nicklas 120     The definition of the "Lysate" subtype.
1427 28 Oct 11 nicklas 121     @since 2.0
1427 28 Oct 11 nicklas 122   */
5088 13 Nov 18 nicklas 123   public static final Subtype LYSATE = new Subtype("Lysate", null, "l", null, Item.EXTRACT, false);
1427 28 Oct 11 nicklas 124
1543 28 Feb 12 nicklas 125   /**
1543 28 Feb 12 nicklas 126     The definition of the "DNA" extract subtype.
1543 28 Feb 12 nicklas 127     @since 2.4
1543 28 Feb 12 nicklas 128   */
5088 13 Nov 18 nicklas 129   public static final Subtype DNA = new Subtype("DNA", null, "d", null, Item.EXTRACT, false);
1427 28 Oct 11 nicklas 130
1543 28 Feb 12 nicklas 131   /**
1543 28 Feb 12 nicklas 132     The definition of the "RNA" extract subtype.
1543 28 Feb 12 nicklas 133     @since 2.4
1543 28 Feb 12 nicklas 134   */
5088 13 Nov 18 nicklas 135   public static final Subtype RNA = new Subtype("RNA", null, "r", null, Item.EXTRACT, false);
1543 28 Feb 12 nicklas 136
1543 28 Feb 12 nicklas 137   /**
1639 09 May 12 nicklas 138     The definition of the "FlowThrough" extract subtype.
1639 09 May 12 nicklas 139     @since 2.6
1639 09 May 12 nicklas 140   */
5088 13 Nov 18 nicklas 141   public static final Subtype FLOW_THROUGH = new Subtype("FlowThrough", null, "ft", null, Item.EXTRACT, false);
1639 09 May 12 nicklas 142
1639 09 May 12 nicklas 143   
1639 09 May 12 nicklas 144   /**
1543 28 Feb 12 nicklas 145     The definition of the "RNA Quality control" extract subtype.
1543 28 Feb 12 nicklas 146     @since 2.4
1543 28 Feb 12 nicklas 147   */
5088 13 Nov 18 nicklas 148   public static final Subtype RNAQC = new Subtype("RNAQC", null, "qc", null, Item.EXTRACT, true);
1543 28 Feb 12 nicklas 149
2898 05 Nov 14 nicklas 150   /**
2898 05 Nov 14 nicklas 151     The definition of the "RNANormalizedAliquot" extract subtype.
2898 05 Nov 14 nicklas 152     @since 2.18
2898 05 Nov 14 nicklas 153   */
5088 13 Nov 18 nicklas 154   public static final Subtype RNA_NORMALIZED_ALIQUOT = new Subtype("RNANormalizedAliquot", null, "n", null, Item.EXTRACT, false);
3269 23 Apr 15 nicklas 155
3269 23 Apr 15 nicklas 156   /**
5359 12 Apr 19 nicklas 157     The definition of the "DNANormalizedAliquot" extract subtype.
5359 12 Apr 19 nicklas 158     @since 4.23
5359 12 Apr 19 nicklas 159   */
5359 12 Apr 19 nicklas 160   public static final Subtype DNA_NORMALIZED_ALIQUOT = new Subtype("DNANormalizedAliquot", null, "n", null, Item.EXTRACT, false);
5359 12 Apr 19 nicklas 161
5359 12 Apr 19 nicklas 162   /**
3269 23 Apr 15 nicklas 163     The definition of the "RNANormalization" protocol subtype.
3269 23 Apr 15 nicklas 164     @since 3.4
3269 23 Apr 15 nicklas 165   */
5088 13 Nov 18 nicklas 166   public static final Subtype RNA_NORMALIZATION_PROTOCOL = new Subtype("RNANormalization", null, null, null, Item.PROTOCOL, false);
5359 12 Apr 19 nicklas 167
5359 12 Apr 19 nicklas 168   /**
5359 12 Apr 19 nicklas 169     The definition of the "DNANormalization" protocol subtype.
5359 12 Apr 19 nicklas 170     @since 4.23
5359 12 Apr 19 nicklas 171   */
5359 12 Apr 19 nicklas 172   public static final Subtype DNA_NORMALIZATION_PROTOCOL = new Subtype("DNANormalization", null, null, null, Item.PROTOCOL, false);
1427 28 Oct 11 nicklas 173   
1543 28 Feb 12 nicklas 174   /**
1543 28 Feb 12 nicklas 175     The definition of the "Quality control" protocol subtype.
1543 28 Feb 12 nicklas 176     @since 2.4
1543 28 Feb 12 nicklas 177   */
5088 13 Nov 18 nicklas 178   public static final Subtype QUALITY_CONTROL = new Subtype("Quality control", null, null, null, Item.PROTOCOL, false);
1543 28 Feb 12 nicklas 179   
1543 28 Feb 12 nicklas 180   /**
1639 09 May 12 nicklas 181     The definition of the "Sample handling" protocol subtype (used to create
1639 09 May 12 nicklas 182     Lysate items).
1639 09 May 12 nicklas 183     @since 2.6
1639 09 May 12 nicklas 184   */
5088 13 Nov 18 nicklas 185   public static final Subtype SAMPLE_HANDLING_PROTOCOL = new Subtype("Sample handling", null, null, null, Item.PROTOCOL, false);
1639 09 May 12 nicklas 186   
1639 09 May 12 nicklas 187   /**
1639 09 May 12 nicklas 188     The definition of the "Extract" protocol subtype (used to create
1639 09 May 12 nicklas 189     other extract items). This should have been installed by BASE.
1639 09 May 12 nicklas 190     @since 2.6
1639 09 May 12 nicklas 191   */
5088 13 Nov 18 nicklas 192   public static final Subtype EXTRACTION_PROTOCOL = new Subtype("Extraction", null, null, null, Item.PROTOCOL, false);
1684 04 Jun 12 nicklas 193
1684 04 Jun 12 nicklas 194   /**
1684 04 Jun 12 nicklas 195     The definition of the "Histology" protocol subtype (used when embedding Histology items in
1684 04 Jun 12 nicklas 196     paraffin blocks).
1684 04 Jun 12 nicklas 197     @since 2.7
1684 04 Jun 12 nicklas 198   */
5088 13 Nov 18 nicklas 199   public static final Subtype HISTOLOGY_PROTOCOL = new Subtype("Histology", null, null, null, Item.PROTOCOL, false);
1684 04 Jun 12 nicklas 200
1685 04 Jun 12 nicklas 201   /**
1685 04 Jun 12 nicklas 202     The definition of the "Staining" protocol subtype (used when HE-staining Histology items).
1685 04 Jun 12 nicklas 203     @since 2.7
1685 04 Jun 12 nicklas 204   */
5088 13 Nov 18 nicklas 205   public static final Subtype STAINING_PROTOCOL = new Subtype("Staining", null, null, null, Item.PROTOCOL, false);
1639 09 May 12 nicklas 206   
1865 19 Feb 13 nicklas 207   /**
1865 19 Feb 13 nicklas 208     The definition of the "mRNA" extract subtype.
1867 19 Feb 13 nicklas 209     @since 2.12
1865 19 Feb 13 nicklas 210   */
5088 13 Nov 18 nicklas 211   public static final Subtype MRNA = new Subtype("mRNA", null, "m", null, Item.EXTRACT, false);
1865 19 Feb 13 nicklas 212
1865 19 Feb 13 nicklas 213   /**
1865 19 Feb 13 nicklas 214     The definition of the "cDNA" extract subtype.
1867 19 Feb 13 nicklas 215     @since 2.12
1865 19 Feb 13 nicklas 216   */
5088 13 Nov 18 nicklas 217   public static final Subtype CDNA = new Subtype("cDNA", null, "c", null, Item.EXTRACT, false);
1865 19 Feb 13 nicklas 218
1865 19 Feb 13 nicklas 219   /**
1865 19 Feb 13 nicklas 220     The definition of the "Library" extract subtype. Should already exist
1865 19 Feb 13 nicklas 221     in BASE.
1867 19 Feb 13 nicklas 222     @since 2.12
1865 19 Feb 13 nicklas 223   */
5088 13 Nov 18 nicklas 224   public static final Subtype LIBRARY = new Subtype("Library", null, "lib", null, Item.EXTRACT, false);
1865 19 Feb 13 nicklas 225
1865 19 Feb 13 nicklas 226   /**
1910 19 Mar 13 nicklas 227     The definition of the "PooledLibrary" extract subtype.
1910 19 Mar 13 nicklas 228     @since 2.12
1910 19 Mar 13 nicklas 229   */
5088 13 Nov 18 nicklas 230   public static final Subtype POOLED_LIBRARY = new Subtype("PooledLibrary", "Pool", null, null, Item.EXTRACT, false);
1910 19 Mar 13 nicklas 231
1910 19 Mar 13 nicklas 232   /**
2109 29 Oct 13 nicklas 233     The definition of the "PooledLibraryAliquot" extract subtype.
2109 29 Oct 13 nicklas 234     @since 2.12
2109 29 Oct 13 nicklas 235   */
5088 13 Nov 18 nicklas 236   public static final Subtype POOLED_LIBRARY_ALIQUOT = new Subtype("PooledLibraryAliquot", null, "a", null, Item.EXTRACT, false);
2109 29 Oct 13 nicklas 237
2109 29 Oct 13 nicklas 238   
2109 29 Oct 13 nicklas 239   /**
1910 19 Mar 13 nicklas 240     The definition of the "FlowCell" physical bioassay subtype.
1910 19 Mar 13 nicklas 241     @since 2.12
1910 19 Mar 13 nicklas 242   */
5088 13 Nov 18 nicklas 243   public static final Subtype FLOW_CELL = new Subtype("FlowCell", "FlowCell", null, null, Item.PHYSICALBIOASSAY, false);
1910 19 Mar 13 nicklas 244   
6461 01 Nov 21 nicklas 245   /**
6461 01 Nov 21 nicklas 246     The definition of the "BeadChip" physical bioassay subtype.
6461 01 Nov 21 nicklas 247     @since 4.34
6461 01 Nov 21 nicklas 248   */
6461 01 Nov 21 nicklas 249   public static final Subtype BEAD_CHIP = new Subtype("BeadChip", "BeadChip", null, null, Item.PHYSICALBIOASSAY, false);
2049 07 Oct 13 nicklas 250   
1910 19 Mar 13 nicklas 251   /**
6461 01 Nov 21 nicklas 252     The definition of the "Scan" derived bioassay subtype.
6461 01 Nov 21 nicklas 253     @since 4.34
6461 01 Nov 21 nicklas 254   */
6461 01 Nov 21 nicklas 255   public static final Subtype SCAN = new Subtype("Scan", "Scan", null, null, Item.DERIVEDBIOASSAY, false);
6475 05 Nov 21 nicklas 256
6461 01 Nov 21 nicklas 257   /**
6477 05 Nov 21 nicklas 258     The definition of the "Scanner" hardware type. Should already exist in BASE.
6477 05 Nov 21 nicklas 259     @since 4.34
6477 05 Nov 21 nicklas 260   */
6477 05 Nov 21 nicklas 261   public static final Subtype SCANNER = new Subtype("Scanner", null, null, null, Item.HARDWARE, false);
6477 05 Nov 21 nicklas 262
6477 05 Nov 21 nicklas 263   /**
6475 05 Nov 21 nicklas 264     The definition of the "GenotypeCall" derived bioassay subtype.
6475 05 Nov 21 nicklas 265     @since 4.34
6475 05 Nov 21 nicklas 266   */
6475 05 Nov 21 nicklas 267   public static final Subtype GENOTYPE_CALL = new Subtype("GenotypeCall", "GenotypeCall", null, null, Item.DERIVEDBIOASSAY, false);
6475 05 Nov 21 nicklas 268
6475 05 Nov 21 nicklas 269   /**
6475 05 Nov 21 nicklas 270     The definition of the "Genotyping" software subtype.
6475 05 Nov 21 nicklas 271     @since 4.34
6475 05 Nov 21 nicklas 272   */
6475 05 Nov 21 nicklas 273   public static final Subtype GENOTYPING_SOFTWARE = new Subtype("Genotyping", null, null, null, Item.SOFTWARE, false);
6475 05 Nov 21 nicklas 274
6475 05 Nov 21 nicklas 275   /**
6475 05 Nov 21 nicklas 276     File subtype for genotype call files.
6475 05 Nov 21 nicklas 277     @since 4.34
6475 05 Nov 21 nicklas 278   */
6475 05 Nov 21 nicklas 279   public static final Subtype GENOTYPE_CALL_FILE = new Subtype("Genotype call", null, null, null, Item.FILE, false);
6475 05 Nov 21 nicklas 280
6475 05 Nov 21 nicklas 281   /**
6865 09 Nov 22 nicklas 282     The definition of the "Methylation" derived bioassay subtype.
6865 09 Nov 22 nicklas 283     @since 4.41
6865 09 Nov 22 nicklas 284   */
6865 09 Nov 22 nicklas 285   public static final Subtype METHYLATION = new Subtype("Methylation", null, "mth", null, Item.DERIVEDBIOASSAY, false);
6865 09 Nov 22 nicklas 286   
6865 09 Nov 22 nicklas 287   /**
6866 14 Nov 22 nicklas 288     The definition of the "Methylation" software subtype.
6866 14 Nov 22 nicklas 289     @since 4.41
6866 14 Nov 22 nicklas 290   */
6866 14 Nov 22 nicklas 291   public static final Subtype METHYLATION_SOFTWARE = new Subtype("Methylation", null, null, null, Item.SOFTWARE, false);
6866 14 Nov 22 nicklas 292
6870 16 Nov 22 nicklas 293   /**
6870 16 Nov 22 nicklas 294     The definition of the "Methylation beta-analysis" job subtype.
6870 16 Nov 22 nicklas 295     @since 4.41
6870 16 Nov 22 nicklas 296   */
6870 16 Nov 22 nicklas 297   public static final Subtype METHYLATION_BETA_JOB = new Subtype("MethylationBeta", null, null, null, Item.JOB, false);
6866 14 Nov 22 nicklas 298   
6866 14 Nov 22 nicklas 299   /**
6866 14 Nov 22 nicklas 300     File subtype for IDAT files.
6866 14 Nov 22 nicklas 301     @since 4.41
6866 14 Nov 22 nicklas 302   */
6866 14 Nov 22 nicklas 303   public static final Subtype IDAT = new Subtype("IDAT", null, null, null, Item.FILE, false);
7267 21 Jun 23 nicklas 304
6866 14 Nov 22 nicklas 305   
6866 14 Nov 22 nicklas 306   /**
7267 21 Jun 23 nicklas 307     The definition of the "CopyNumber" software subtype.
7267 21 Jun 23 nicklas 308     @since 4.49
7267 21 Jun 23 nicklas 309   */
7267 21 Jun 23 nicklas 310   public static final Subtype COPY_NUMBER_SOFTWARE = new Subtype("Copy number", null, null, null, Item.SOFTWARE, false);
7267 21 Jun 23 nicklas 311
7268 22 Jun 23 nicklas 312   /**
7268 22 Jun 23 nicklas 313     The definition of the "ASCAT" job subtype.
7268 22 Jun 23 nicklas 314     @since 4.49
7268 22 Jun 23 nicklas 315   */
7268 22 Jun 23 nicklas 316   public static final Subtype ASCAT_JOB = new Subtype("ASCAT", null, null, null, Item.JOB, false);
7268 22 Jun 23 nicklas 317
7268 22 Jun 23 nicklas 318   /**
7268 22 Jun 23 nicklas 319     The definition of the "CopyNumber" derived bioassay subtype.
7268 22 Jun 23 nicklas 320     @since 4.49
7268 22 Jun 23 nicklas 321   */
7268 22 Jun 23 nicklas 322   public static final Subtype COPY_NUMBER = new Subtype("CopyNumber", null, "cn", null, Item.DERIVEDBIOASSAY, false);
7268 22 Jun 23 nicklas 323
7267 21 Jun 23 nicklas 324   
7267 21 Jun 23 nicklas 325   /**
2049 07 Oct 13 nicklas 326     The definition of the "SequencingRun" derived bioassay subtype.
2057 10 Oct 13 nicklas 327     @since 2.13
2049 07 Oct 13 nicklas 328   */
5088 13 Nov 18 nicklas 329   public static final Subtype SEQUENCING_RUN = new Subtype("SequencingRun", "SequencingRun", null, null, Item.DERIVEDBIOASSAY, false);
2267 05 Mar 14 nicklas 330
2267 05 Mar 14 nicklas 331   /**
4325 30 Jan 17 nicklas 332     The definition of the "SequencingRun" job subtype.
4325 30 Jan 17 nicklas 333     @since 4.9
4325 30 Jan 17 nicklas 334   */
5088 13 Nov 18 nicklas 335   public static final Subtype SEQUENCING_RUN_JOB = new Subtype("SequencingRun", null, null, null, Item.JOB, false);
4325 30 Jan 17 nicklas 336   
4325 30 Jan 17 nicklas 337   /**
2267 05 Mar 14 nicklas 338     The definition of the "DemuxedSequences" derived bioassay subtype.
2267 05 Mar 14 nicklas 339     @since 2.16
2267 05 Mar 14 nicklas 340   */
5088 13 Nov 18 nicklas 341   public static final Subtype DEMUXED_SEQUENCES = new Subtype("DemuxedSequences", null, "x", null, Item.DERIVEDBIOASSAY, false);
2267 05 Mar 14 nicklas 342
2267 05 Mar 14 nicklas 343   /**
2267 05 Mar 14 nicklas 344     The definition of the "MergedSequences" derived bioassay subtype.
2267 05 Mar 14 nicklas 345     @since 2.16
2267 05 Mar 14 nicklas 346   */
5088 13 Nov 18 nicklas 347   public static final Subtype MERGED_SEQUENCES = new Subtype("MergedSequences", null, "g", null, Item.DERIVEDBIOASSAY, false);
2375 24 Apr 14 nicklas 348
2375 24 Apr 14 nicklas 349   /**
4325 30 Jan 17 nicklas 350     The definition of the "DemuxAndMerge" job subtype.
4325 30 Jan 17 nicklas 351     @since 4.9
4325 30 Jan 17 nicklas 352   */
5088 13 Nov 18 nicklas 353   public static final Subtype DEMUX_MERGE_JOB = new Subtype("DemuxAndMerge", null, null, null, Item.JOB, false);
4325 30 Jan 17 nicklas 354
6181 25 Mar 21 nicklas 355   /**
6181 25 Mar 21 nicklas 356     The definition of the "FastqImport" job subtype.
6181 25 Mar 21 nicklas 357     @since 4.32
6181 25 Mar 21 nicklas 358   */
6181 25 Mar 21 nicklas 359   public static final Subtype FASTQ_IMPORT_JOB = new Subtype("FASTQImport", null, null, null, Item.JOB, false);
4325 30 Jan 17 nicklas 360   
4325 30 Jan 17 nicklas 361   /**
2420 13 May 14 nicklas 362     The definition of the "MaskedSequences" derived bioassay subtype.
2375 24 Apr 14 nicklas 363     @since 2.16
2375 24 Apr 14 nicklas 364   */
5088 13 Nov 18 nicklas 365   public static final Subtype MASKED_SEQUENCES = new Subtype("MaskedSequences", null, "k", null, Item.DERIVEDBIOASSAY, false);
2375 24 Apr 14 nicklas 366
2375 24 Apr 14 nicklas 367   /**
2375 24 Apr 14 nicklas 368     The definition of the "AlignedSequences" derived bioassay subtype.
2375 24 Apr 14 nicklas 369     @since 2.16
2375 24 Apr 14 nicklas 370   */
5088 13 Nov 18 nicklas 371   public static final Subtype ALIGNED_SEQUENCES = new Subtype("AlignedSequences", null, "a", null, Item.DERIVEDBIOASSAY, false);
2049 07 Oct 13 nicklas 372   
2049 07 Oct 13 nicklas 373   /**
7388 31 Oct 23 nicklas 374     The definition of the "PanelOfNormal" derived bioassay subtype.
7388 31 Oct 23 nicklas 375     @since 4.50
7388 31 Oct 23 nicklas 376   */
7388 31 Oct 23 nicklas 377   public static final Subtype PANEL_OF_NORMAL = new Subtype("PanelOfNormal", null, "pon", null, Item.DERIVEDBIOASSAY, false);
7388 31 Oct 23 nicklas 378   
7388 31 Oct 23 nicklas 379   /**
4325 30 Jan 17 nicklas 380     The definition of the "MaskAndAlign" job subtype.
4325 30 Jan 17 nicklas 381     @since 4.9
4325 30 Jan 17 nicklas 382   */
5088 13 Nov 18 nicklas 383   public static final Subtype MASK_ALIGN_JOB = new Subtype("MaskAndAlign", null, null, null, Item.JOB, false);
4325 30 Jan 17 nicklas 384
4325 30 Jan 17 nicklas 385   /**
4325 30 Jan 17 nicklas 386     The definition of the "Cufflinks" job subtype.
4325 30 Jan 17 nicklas 387     @since 4.9
4325 30 Jan 17 nicklas 388   */
5088 13 Nov 18 nicklas 389   public static final Subtype CUFFLINKS_JOB = new Subtype("Cufflinks", null, null, null, Item.JOB, false);
4325 30 Jan 17 nicklas 390
4325 30 Jan 17 nicklas 391   /**
4543 27 Jun 17 nicklas 392     The definition of the legacy "Tophat" and "Cufflinks" job subtype.
4543 27 Jun 17 nicklas 393     @since 4.11
4543 27 Jun 17 nicklas 394   */
5088 13 Nov 18 nicklas 395   public static final Subtype TOPHAT_CUFFLINKS_JOB = new Subtype("TophatAndCufflinks", null, null, null, Item.JOB, false);
4543 27 Jun 17 nicklas 396
4543 27 Jun 17 nicklas 397   /**
4588 25 Sep 17 nicklas 398     The definition of the Hisat alignment job.
4588 25 Sep 17 nicklas 399     @since 4.12
4588 25 Sep 17 nicklas 400   */
5088 13 Nov 18 nicklas 401   public static final Subtype HISAT_ALIGN_JOB = new Subtype("HisatAlign", null, null, null, Item.JOB, false);
4588 25 Sep 17 nicklas 402
4588 25 Sep 17 nicklas 403   /**
7085 31 Mar 23 nicklas 404     The definition of the Bwa-mem2 alignment job.
7085 31 Mar 23 nicklas 405     @since 4.46
7085 31 Mar 23 nicklas 406   */
7085 31 Mar 23 nicklas 407   public static final Subtype BWA_MEM2_ALIGN_JOB = new Subtype("BwaMem2Align", null, null, null, Item.JOB, false);
7085 31 Mar 23 nicklas 408
7085 31 Mar 23 nicklas 409   /**
5826 18 Feb 20 nicklas 410     The definition of the MIPs alignment job.
5826 18 Feb 20 nicklas 411     @since 4.26
5826 18 Feb 20 nicklas 412   */
5826 18 Feb 20 nicklas 413   public static final Subtype MIPS_ALIGN_JOB = new Subtype("MIPsAlign", null, null, null, Item.JOB, false);
5826 18 Feb 20 nicklas 414
5826 18 Feb 20 nicklas 415   /**
4664 30 Jan 18 nicklas 416     The definition of the StringTie job.
4664 30 Jan 18 nicklas 417     @since 4.15
4664 30 Jan 18 nicklas 418   */
5088 13 Nov 18 nicklas 419   public static final Subtype STRINGTIE_JOB = new Subtype("StringTie", null, null, null, Item.JOB, false);
5032 16 Oct 18 nicklas 420
5032 16 Oct 18 nicklas 421   /**
5032 16 Oct 18 nicklas 422     The definition of the mBaf analysis job.
5032 16 Oct 18 nicklas 423     @since 4.20
5032 16 Oct 18 nicklas 424   */
5088 13 Nov 18 nicklas 425   public static final Subtype MBAF_JOB = new Subtype("mBAF analysis", null, null, null, Item.JOB, false);
5684 25 Oct 19 nicklas 426
4664 30 Jan 18 nicklas 427   /**
5684 25 Oct 19 nicklas 428     The definition of the variant calling job.
5684 25 Oct 19 nicklas 429     @since 4.20
5684 25 Oct 19 nicklas 430   */
5684 25 Oct 19 nicklas 431   public static final Subtype VARIANT_CALLING_JOB = new Subtype("Variant calling", null, null, null, Item.JOB, false);
5684 25 Oct 19 nicklas 432
5684 25 Oct 19 nicklas 433   /**
6387 15 Sep 21 nicklas 434     The definition of the targeted genotyping job.
6389 15 Sep 21 nicklas 435     @since 4.32
6387 15 Sep 21 nicklas 436   */
6387 15 Sep 21 nicklas 437   public static final Subtype TARGETED_GENOTYPING_JOB = new Subtype("Targeted genotyping", null, null, null, Item.JOB, false);
6387 15 Sep 21 nicklas 438
6387 15 Sep 21 nicklas 439   
6387 15 Sep 21 nicklas 440   /**
5772 03 Dec 19 nicklas 441     The definition of the variant calling job.
5772 03 Dec 19 nicklas 442     @since 4.25
5772 03 Dec 19 nicklas 443   */
5772 03 Dec 19 nicklas 444   public static final Subtype VARIANT_STATISTICS_JOB = new Subtype("Variant statistics", null, null, null, Item.JOB, false);
5922 27 Apr 20 nicklas 445
5922 27 Apr 20 nicklas 446   /**
5922 27 Apr 20 nicklas 447     The definition of the Single Sample Predictor job.
5922 27 Apr 20 nicklas 448     @since 4.27
5922 27 Apr 20 nicklas 449   */
5922 27 Apr 20 nicklas 450   public static final Subtype SSP_JOB = new Subtype("Single Sample Predictor", null, null, null, Item.JOB, false);
6010 18 Sep 20 nicklas 451
6010 18 Sep 20 nicklas 452   /**
2057 10 Oct 13 nicklas 453     The definition of the "Sequencer" hardware subtype. Should already exist in BASE.
2057 10 Oct 13 nicklas 454     @since 2.13
2057 10 Oct 13 nicklas 455   */
5088 13 Nov 18 nicklas 456   public static final Subtype SEQUENCER = new Subtype("Sequencer", null, null, null, Item.HARDWARE, false);
2057 10 Oct 13 nicklas 457   
2057 10 Oct 13 nicklas 458   /**
2107 29 Oct 13 nicklas 459     The definition of the "Cluster generator" hardware subtype. Should already exist in BASE.
2107 29 Oct 13 nicklas 460     @since 2.13
2107 29 Oct 13 nicklas 461   */
5088 13 Nov 18 nicklas 462   public static final Subtype CLUSTER_GENERATOR = new Subtype("Cluster generator", null, null, null, Item.HARDWARE, false);
2107 29 Oct 13 nicklas 463
2107 29 Oct 13 nicklas 464   /**
1865 19 Feb 13 nicklas 465     The definition of the "mRNA preparation" protocol subtype.
1867 19 Feb 13 nicklas 466     @since 2.12
1865 19 Feb 13 nicklas 467   */
5088 13 Nov 18 nicklas 468   public static final Subtype MRNA_PROTOCOL = new Subtype("mRNA preparation", null, null, null, Item.PROTOCOL, false);
1865 19 Feb 13 nicklas 469
1685 04 Jun 12 nicklas 470   
1639 09 May 12 nicklas 471   /**
1865 19 Feb 13 nicklas 472     The definition of the "cDNA preparation" protocol subtype.
1867 19 Feb 13 nicklas 473     @since 2.12
1865 19 Feb 13 nicklas 474   */
5088 13 Nov 18 nicklas 475   public static final Subtype CDNA_PROTOCOL = new Subtype("cDNA preparation", null, null, null, Item.PROTOCOL, false);
1865 19 Feb 13 nicklas 476   
1865 19 Feb 13 nicklas 477   /**
1865 19 Feb 13 nicklas 478     The definition of the "Barcode" subtype for tags. Should already
1865 19 Feb 13 nicklas 479     exist in BASE.
1867 19 Feb 13 nicklas 480     @since 2.12
1865 19 Feb 13 nicklas 481    */
5088 13 Nov 18 nicklas 482   public static final Subtype BARCODE = new Subtype("Barcode", null, null, null, Item.TAG, false);
1895 05 Mar 13 nicklas 483
1895 05 Mar 13 nicklas 484   /**
1895 05 Mar 13 nicklas 485     The definition of the "Library preparation" protocol subtype. Should already exist
1895 05 Mar 13 nicklas 486     in BASE.
1895 05 Mar 13 nicklas 487     @since 2.12
1895 05 Mar 13 nicklas 488   */
5088 13 Nov 18 nicklas 489   public static final Subtype LIBRARY_PROTOCOL = new Subtype("Library preparation", null, null, null, Item.PROTOCOL, false);
1895 05 Mar 13 nicklas 490
1865 19 Feb 13 nicklas 491   
1865 19 Feb 13 nicklas 492   /**
1910 19 Mar 13 nicklas 493     The definition of the "Pooling" protocol subtype. Should already exist
1910 19 Mar 13 nicklas 494     in BASE.
1910 19 Mar 13 nicklas 495     @since 2.12
1910 19 Mar 13 nicklas 496   */
5088 13 Nov 18 nicklas 497   public static final Subtype POOLING_PROTOCOL = new Subtype("Pooling", null, null, null, Item.PROTOCOL, false);
1910 19 Mar 13 nicklas 498
1992 23 May 13 nicklas 499   /**
2020 13 Sep 13 nicklas 500     The definition of the "Cluster generation" protocol subtype. Should already exist
2020 13 Sep 13 nicklas 501     in BASE.
2020 13 Sep 13 nicklas 502     @since 2.13
2020 13 Sep 13 nicklas 503   */
5088 13 Nov 18 nicklas 504   public static final Subtype CLUSTER_PROTOCOL = new Subtype("Cluster generation", null, null, null, Item.PROTOCOL, false);
2059 11 Oct 13 nicklas 505
2020 13 Sep 13 nicklas 506   /**
2059 11 Oct 13 nicklas 507     The definition of the "Sequencing" protocol subtype. Should already exist
2059 11 Oct 13 nicklas 508     in BASE.
2059 11 Oct 13 nicklas 509     @since 2.13
2059 11 Oct 13 nicklas 510   */
5088 13 Nov 18 nicklas 511   public static final Subtype SEQUENCING_PROTOCOL = new Subtype("Sequencing", null, null, null, Item.PROTOCOL, false);
2059 11 Oct 13 nicklas 512
2267 05 Mar 14 nicklas 513   /**
2267 05 Mar 14 nicklas 514     The definition of the "Demuxing" protocol subtype.
2267 05 Mar 14 nicklas 515     @since 2.16
2267 05 Mar 14 nicklas 516   */
5088 13 Nov 18 nicklas 517   public static final Subtype DEMUX_PROTOCOL = new Subtype("Demuxing", null, null, null, Item.PROTOCOL, false);
2267 05 Mar 14 nicklas 518
2267 05 Mar 14 nicklas 519   /**
2267 05 Mar 14 nicklas 520     The definition of the "Demuxing" software subtype.
2267 05 Mar 14 nicklas 521     @since 2.16
2267 05 Mar 14 nicklas 522   */
5088 13 Nov 18 nicklas 523   public static final Subtype DEMUX_SOFTWARE = new Subtype("Demuxing", null, null, null, Item.SOFTWARE, false);
2267 05 Mar 14 nicklas 524
2267 05 Mar 14 nicklas 525   /**
2267 05 Mar 14 nicklas 526     The definition of the "Merging" protocol subtype.
2267 05 Mar 14 nicklas 527     @since 2.16
2267 05 Mar 14 nicklas 528   */
5088 13 Nov 18 nicklas 529   public static final Subtype MERGE_PROTOCOL = new Subtype("Merging", null, null, null, Item.PROTOCOL, false);
2059 11 Oct 13 nicklas 530   
2059 11 Oct 13 nicklas 531   /**
2267 05 Mar 14 nicklas 532     The definition of the "Merging" software subtype.
2267 05 Mar 14 nicklas 533     @since 2.16
2267 05 Mar 14 nicklas 534   */
5088 13 Nov 18 nicklas 535   public static final Subtype MERGE_SOFTWARE = new Subtype("Merging", null, null, null, Item.SOFTWARE, false);
2375 24 Apr 14 nicklas 536
2267 05 Mar 14 nicklas 537   /**
2420 13 May 14 nicklas 538     The definition of the "Masking" protocol subtype.
2375 24 Apr 14 nicklas 539     @since 2.16
2375 24 Apr 14 nicklas 540   */
5088 13 Nov 18 nicklas 541   public static final Subtype MASKING_PROTOCOL = new Subtype("Masking", null, null, null, Item.PROTOCOL, false);
2375 24 Apr 14 nicklas 542   
2375 24 Apr 14 nicklas 543   /**
2420 13 May 14 nicklas 544     The definition of the "Masking" software subtype.
2375 24 Apr 14 nicklas 545     @since 2.16
2375 24 Apr 14 nicklas 546   */
5088 13 Nov 18 nicklas 547   public static final Subtype MASKING_SOFTWARE = new Subtype("Masking", null, null, null, Item.SOFTWARE, false);
2375 24 Apr 14 nicklas 548
2375 24 Apr 14 nicklas 549   /**
2375 24 Apr 14 nicklas 550     The definition of the "Alignment" protocol subtype.
2375 24 Apr 14 nicklas 551     @since 2.16
2375 24 Apr 14 nicklas 552   */
5088 13 Nov 18 nicklas 553   public static final Subtype ALIGNMENT_PROTOCOL = new Subtype("Alignment", null, null, null, Item.PROTOCOL, false);
2375 24 Apr 14 nicklas 554   
2375 24 Apr 14 nicklas 555   /**
2375 24 Apr 14 nicklas 556     The definition of the "Alignment" software subtype.
2375 24 Apr 14 nicklas 557     @since 2.16
2375 24 Apr 14 nicklas 558   */
5088 13 Nov 18 nicklas 559   public static final Subtype ALIGNMENT_SOFTWARE = new Subtype("Alignment", null, null, null, Item.SOFTWARE, false);
2375 24 Apr 14 nicklas 560
2375 24 Apr 14 nicklas 561   /**
2721 01 Oct 14 nicklas 562     The definition of the "Feature extraction" protocol subtype.
2721 01 Oct 14 nicklas 563     @since 2.17
2721 01 Oct 14 nicklas 564   */
5088 13 Nov 18 nicklas 565   public static final Subtype FEATURE_EXTRACTION_PROTOCOL = new Subtype("Feature extraction", null, null, null, Item.PROTOCOL, false);
2721 01 Oct 14 nicklas 566   
2721 01 Oct 14 nicklas 567   /**
2721 01 Oct 14 nicklas 568     The definition of the "Feature extraction" software subtype.
2721 01 Oct 14 nicklas 569     @since 2.17
2721 01 Oct 14 nicklas 570   */
5088 13 Nov 18 nicklas 571   public static final Subtype FEATURE_EXTRACTION_SOFTWARE = new Subtype("Feature extraction", null, null, null, Item.SOFTWARE, false);
2721 01 Oct 14 nicklas 572
3616 23 Nov 15 nicklas 573   /**
5057 29 Oct 18 nicklas 574     The definition of the "Variant calling" software subtype.
5057 29 Oct 18 nicklas 575     @since 4.20
5057 29 Oct 18 nicklas 576   */
5088 13 Nov 18 nicklas 577   public static final Subtype VARIANT_CALLING_SOFTWARE = new Subtype("Variant calling", null, null, null, Item.SOFTWARE, false);
5057 29 Oct 18 nicklas 578
5057 29 Oct 18 nicklas 579   /**
3616 23 Nov 15 nicklas 580     The definition of the "Report" software subtype.
3616 23 Nov 15 nicklas 581     @since 4.0
3616 23 Nov 15 nicklas 582   */
5088 13 Nov 18 nicklas 583   public static final Subtype REPORT_SOFTWARE = new Subtype("Report", null, null, null, Item.SOFTWARE, false);
2721 01 Oct 14 nicklas 584   
2721 01 Oct 14 nicklas 585   /**
4325 30 Jan 17 nicklas 586     The definition of the "Report" job subtype.
4325 30 Jan 17 nicklas 587     @since 4.9
4325 30 Jan 17 nicklas 588   */
5088 13 Nov 18 nicklas 589   public static final Subtype REPORT_JOB = new Subtype("Report", null, null, null, Item.JOB, false);
4325 30 Jan 17 nicklas 590
4325 30 Jan 17 nicklas 591   /**
1992 23 May 13 nicklas 592     File subtype for BioAnalyzer PDF reports.
1992 23 May 13 nicklas 593     @since 2.12
1992 23 May 13 nicklas 594   */
5088 13 Nov 18 nicklas 595   public static final Subtype BIOANALYZER_PDF = new Subtype("BioAnalyzer PDF", null, null, null, Item.FILE, false);
1992 23 May 13 nicklas 596
1992 23 May 13 nicklas 597   /**
1992 23 May 13 nicklas 598     File subtype for Caliper PDF reports.
1992 23 May 13 nicklas 599     @since 2.12
1992 23 May 13 nicklas 600   */
5088 13 Nov 18 nicklas 601   public static final Subtype CALIPER_PDF = new Subtype("Caliper PDF", null, null, null, Item.FILE, false);
1992 23 May 13 nicklas 602
1992 23 May 13 nicklas 603   /**
1992 23 May 13 nicklas 604     File subtype for Caliper Well Table data files (CSV format).
1992 23 May 13 nicklas 605     @since 2.12
1992 23 May 13 nicklas 606   */
5088 13 Nov 18 nicklas 607   public static final Subtype CALIPER_WELL_TABLE = new Subtype("Caliper Well Table", null, null, null, Item.FILE, false);
1992 23 May 13 nicklas 608
1992 23 May 13 nicklas 609   /**
1992 23 May 13 nicklas 610     File subtype for Caliper raw data files (GXD format).
1992 23 May 13 nicklas 611     @since 2.12
1992 23 May 13 nicklas 612   */
5088 13 Nov 18 nicklas 613   public static final Subtype CALIPER_RAW_DATA = new Subtype("Caliper Raw Data", null, null, null, Item.FILE, false);
1992 23 May 13 nicklas 614
1992 23 May 13 nicklas 615   /**
5300 14 Feb 19 nicklas 616     File subtype for Qubit data files (CSV or Excel format).
5300 14 Feb 19 nicklas 617     TODO -- rename?
1992 23 May 13 nicklas 618     @since 2.12
1992 23 May 13 nicklas 619   */
5088 13 Nov 18 nicklas 620   public static final Subtype QUBIT_CSV = new Subtype("Qubit CSV", null, null, null, Item.FILE, false);
2565 11 Aug 14 nicklas 621
2565 11 Aug 14 nicklas 622   /**
2565 11 Aug 14 nicklas 623     File subtype for sequence data files.
2565 11 Aug 14 nicklas 624     @since 2.16
2565 11 Aug 14 nicklas 625   */
5088 13 Nov 18 nicklas 626   public static final Subtype SEQUENCE_DATA = new Subtype("Sequence data", null, null, null, Item.FILE, false);
2565 11 Aug 14 nicklas 627
2565 11 Aug 14 nicklas 628   /**
2565 11 Aug 14 nicklas 629     File subtype for aligned sequence data files.
2565 11 Aug 14 nicklas 630     @since 2.16
2565 11 Aug 14 nicklas 631   */
5088 13 Nov 18 nicklas 632   public static final Subtype ALIGNED_SEQUENCE_DATA = new Subtype("Aligned sequence data", null, null, null, Item.FILE, false);
2721 01 Oct 14 nicklas 633
2721 01 Oct 14 nicklas 634   /**
4619 13 Nov 17 nicklas 635     File subtype for variant call files.
4619 13 Nov 17 nicklas 636     @since 4.13
4619 13 Nov 17 nicklas 637   */
5088 13 Nov 18 nicklas 638   public static final Subtype VARIANT_CALL_FORMAT = new Subtype("Variant call format", null, null, null, Item.FILE, false);
4619 13 Nov 17 nicklas 639   
4619 13 Nov 17 nicklas 640   /**
2721 01 Oct 14 nicklas 641     File subtype for raw data files.
2721 01 Oct 14 nicklas 642     @since 2.17
2721 01 Oct 14 nicklas 643   */
5088 13 Nov 18 nicklas 644   public static final Subtype RAW_DATA = new Subtype("Raw data", null, null, null, Item.FILE, false);
2721 01 Oct 14 nicklas 645
1910 19 Mar 13 nicklas 646   
1910 19 Mar 13 nicklas 647   /**
1543 28 Feb 12 nicklas 648     Create a subtype representation of an ItemSubtype object.
1543 28 Feb 12 nicklas 649     @since 2.4
1543 28 Feb 12 nicklas 650   */
1543 28 Feb 12 nicklas 651   public static final Subtype get(ItemSubtype subtype)
1543 28 Feb 12 nicklas 652   {
5088 13 Nov 18 nicklas 653     Subtype s = new Subtype(subtype.getName(), null, null, null, subtype.getMainItemType(), subtype.getPushAnnotations());
1543 28 Feb 12 nicklas 654     s.id = subtype.getId();
1543 28 Feb 12 nicklas 655     return s;
1543 28 Feb 12 nicklas 656   }
1543 28 Feb 12 nicklas 657   
1544 29 Feb 12 nicklas 658   /**
1544 29 Feb 12 nicklas 659     Get the subtype by name of the static constant defined in this class.
1544 29 Feb 12 nicklas 660     
3571 30 Oct 15 nicklas 661     @param cName The name of the static constant
1544 29 Feb 12 nicklas 662     @return A subtype object or null if not found
1544 29 Feb 12 nicklas 663     @since 2.4
1544 29 Feb 12 nicklas 664   */
1544 29 Feb 12 nicklas 665   public static Subtype getByCName(String cName)
1544 29 Feb 12 nicklas 666   {
1544 29 Feb 12 nicklas 667     if (cName == null) return null;
1544 29 Feb 12 nicklas 668     Subtype subtype = null;
1544 29 Feb 12 nicklas 669     try
1544 29 Feb 12 nicklas 670     {
1544 29 Feb 12 nicklas 671       Field f = Subtype.class.getDeclaredField(cName);
1544 29 Feb 12 nicklas 672       subtype = (Subtype)f.get(null);
1544 29 Feb 12 nicklas 673     }
1544 29 Feb 12 nicklas 674     catch (NoSuchFieldException ex)
1544 29 Feb 12 nicklas 675     {}
1544 29 Feb 12 nicklas 676     catch (IllegalAccessException ex)
1544 29 Feb 12 nicklas 677     {}
1544 29 Feb 12 nicklas 678     catch (ClassCastException ex)
1544 29 Feb 12 nicklas 679     {}
1544 29 Feb 12 nicklas 680     return subtype;
1544 29 Feb 12 nicklas 681   }
1544 29 Feb 12 nicklas 682   
5845 26 Feb 20 nicklas 683   /**
5845 26 Feb 20 nicklas 684     Add a filter to the given query to only return items that
5845 26 Feb 20 nicklas 685     belong to a specific subtype. The subtype must be specified 
5845 26 Feb 20 nicklas 686     by setting the "parameterName" parameter to the subtype
5845 26 Feb 20 nicklas 687     before executing the query. Use Query.setEntityParameter().
5845 26 Feb 20 nicklas 688     @since 4.26
5845 26 Feb 20 nicklas 689   */
5845 26 Feb 20 nicklas 690   public static void createFilterParameter(DbControl dc, ItemQuery<?> query, String alias, String parameterName)
5845 26 Feb 20 nicklas 691   {
5845 26 Feb 20 nicklas 692     query.restrict(Restrictions.eq(Hql.property(alias, "itemSubtype"), Hql.entityParameter(parameterName, Item.ITEMSUBTYPE)));
5845 26 Feb 20 nicklas 693   }
5845 26 Feb 20 nicklas 694
1427 28 Oct 11 nicklas 695   private final String name;
3302 04 May 15 nicklas 696   private final String itemSuffix;
4894 09 Jul 18 nicklas 697   private final String itemPrefix;
5088 13 Nov 18 nicklas 698   private final String externalIdPrefix;
1427 28 Oct 11 nicklas 699   private final Item mainType;
1627 27 Apr 12 nicklas 700   private final boolean pushAnnotations;
1427 28 Oct 11 nicklas 701   private int id;
1543 28 Feb 12 nicklas 702   private JSONObject json;
1427 28 Oct 11 nicklas 703   
1427 28 Oct 11 nicklas 704   /**
1427 28 Oct 11 nicklas 705     Create a new definition
1427 28 Oct 11 nicklas 706     @param name The name of the subtype
5088 13 Nov 18 nicklas 707    * @param mainType The main item type of the subtype
1427 28 Oct 11 nicklas 708   */
5088 13 Nov 18 nicklas 709   private Subtype(String name, String itemPrefix, String itemSuffix, String externalIdPrefix, Item mainType, boolean pushAnnotations)
1427 28 Oct 11 nicklas 710   {
1427 28 Oct 11 nicklas 711     this.name = name;
4894 09 Jul 18 nicklas 712     this.itemPrefix = itemPrefix;
3302 04 May 15 nicklas 713     this.itemSuffix = itemSuffix;
5088 13 Nov 18 nicklas 714     this.externalIdPrefix = externalIdPrefix;
1427 28 Oct 11 nicklas 715     this.mainType = mainType;
1627 27 Apr 12 nicklas 716     this.pushAnnotations = pushAnnotations;
1427 28 Oct 11 nicklas 717   }
1543 28 Feb 12 nicklas 718   
1427 28 Oct 11 nicklas 719   /**
1427 28 Oct 11 nicklas 720     Get the name of the subtype.
1427 28 Oct 11 nicklas 721   */
1427 28 Oct 11 nicklas 722   public String getName()
1427 28 Oct 11 nicklas 723   {
1427 28 Oct 11 nicklas 724     return name;
1427 28 Oct 11 nicklas 725   }
1427 28 Oct 11 nicklas 726   
1427 28 Oct 11 nicklas 727   /**
3302 04 May 15 nicklas 728     Get the suffix to use for items of this type.
3302 04 May 15 nicklas 729     Null if no suffix is used.
3302 04 May 15 nicklas 730     @since 3.4
3302 04 May 15 nicklas 731   */
3302 04 May 15 nicklas 732   public String getItemSuffix()
3302 04 May 15 nicklas 733   {
3302 04 May 15 nicklas 734     return itemSuffix;
3302 04 May 15 nicklas 735   }
3302 04 May 15 nicklas 736   
3302 04 May 15 nicklas 737   /**
4894 09 Jul 18 nicklas 738     Get the prefix to use for items of this type.
4894 09 Jul 18 nicklas 739     Null if no prefix is used.
4894 09 Jul 18 nicklas 740     @since 4.19
4894 09 Jul 18 nicklas 741   */
4894 09 Jul 18 nicklas 742   public String getItemPrefix()
4894 09 Jul 18 nicklas 743   {
4894 09 Jul 18 nicklas 744     return itemPrefix;
4894 09 Jul 18 nicklas 745   }
4894 09 Jul 18 nicklas 746
5088 13 Nov 18 nicklas 747   /**
5088 13 Nov 18 nicklas 748     Get the prefix to use for the external id for items of this type.
5088 13 Nov 18 nicklas 749     Null if no prefix is used.
5088 13 Nov 18 nicklas 750     @since 4.21
5088 13 Nov 18 nicklas 751   */
5088 13 Nov 18 nicklas 752   public String getExternalIdPrefix()
5088 13 Nov 18 nicklas 753   {
5088 13 Nov 18 nicklas 754     return externalIdPrefix;
5088 13 Nov 18 nicklas 755   }
4894 09 Jul 18 nicklas 756   
4894 09 Jul 18 nicklas 757   /**
1427 28 Oct 11 nicklas 758     Get the main item type of the subtype.
1427 28 Oct 11 nicklas 759   */
1427 28 Oct 11 nicklas 760   public Item getMainType()
1427 28 Oct 11 nicklas 761   {
1427 28 Oct 11 nicklas 762     return mainType;
1427 28 Oct 11 nicklas 763   }
1427 28 Oct 11 nicklas 764   
1427 28 Oct 11 nicklas 765   /**
1627 27 Apr 12 nicklas 766     Should annotations on items with this subtype be pushed
1627 27 Apr 12 nicklas 767     to the parent item or not?
1627 27 Apr 12 nicklas 768     @since 2.5
1627 27 Apr 12 nicklas 769   */
1627 27 Apr 12 nicklas 770   public boolean getPushAnnotations()
1627 27 Apr 12 nicklas 771   {
1627 27 Apr 12 nicklas 772     return pushAnnotations;
1627 27 Apr 12 nicklas 773   }
1627 27 Apr 12 nicklas 774   
1627 27 Apr 12 nicklas 775   /**
1543 28 Feb 12 nicklas 776     Get the subtype information as a JSON object ready to be sent as an AJAX response.
1543 28 Feb 12 nicklas 777     @since 2.4
1543 28 Feb 12 nicklas 778   */
1543 28 Feb 12 nicklas 779   public JSONObject asJSONObject(DbControl dc)
1543 28 Feb 12 nicklas 780   {
1543 28 Feb 12 nicklas 781     if (json == null)
1543 28 Feb 12 nicklas 782     {
1543 28 Feb 12 nicklas 783       if (id==0) load(dc); // Ensure that the subtype has been loaded
1543 28 Feb 12 nicklas 784       json = new JSONObject();
1543 28 Feb 12 nicklas 785       json.put("id", id);
1543 28 Feb 12 nicklas 786       json.put("name", getName());
1543 28 Feb 12 nicklas 787       json.put("mainType", getMainType().name());
1543 28 Feb 12 nicklas 788     }
1543 28 Feb 12 nicklas 789     return json;
1543 28 Feb 12 nicklas 790   }
1543 28 Feb 12 nicklas 791   
1543 28 Feb 12 nicklas 792   /**
1644 15 May 12 nicklas 793     Load the subtype as a BASE item. Same as {@link #get(DbControl)}
1644 15 May 12 nicklas 794     but throw an exception instead of returning null if no BASE
1644 15 May 12 nicklas 795     item exists.
1427 28 Oct 11 nicklas 796     @param dc The DbControl to use for database access
1518 23 Jan 12 nicklas 797     @return An ItemSubtype object
1427 28 Oct 11 nicklas 798   */
1427 28 Oct 11 nicklas 799   public ItemSubtype load(DbControl dc)
1427 28 Oct 11 nicklas 800   {
1427 28 Oct 11 nicklas 801     ItemSubtype subtype = null;
1427 28 Oct 11 nicklas 802     if (id == 0)
1427 28 Oct 11 nicklas 803     {
1610 23 Apr 12 nicklas 804       List<ItemSubtype> result = list(dc);
1610 23 Apr 12 nicklas 805       if (result.size() == 0)
1610 23 Apr 12 nicklas 806       {
1610 23 Apr 12 nicklas 807         throw new ItemNotFoundException("ItemSubtype["+name+"]");
1610 23 Apr 12 nicklas 808       }
1610 23 Apr 12 nicklas 809       else if (result.size() > 1)
1610 23 Apr 12 nicklas 810       {
1610 23 Apr 12 nicklas 811         throw new InvalidDataException("Found > 1 ItemSubtype["+name+"]");
1610 23 Apr 12 nicklas 812       }
1610 23 Apr 12 nicklas 813       subtype = result.get(0);
1427 28 Oct 11 nicklas 814       id = subtype.getId();
1427 28 Oct 11 nicklas 815     }
1427 28 Oct 11 nicklas 816     else
1427 28 Oct 11 nicklas 817     {
1427 28 Oct 11 nicklas 818       subtype = ItemSubtype.getById(dc, id);
1427 28 Oct 11 nicklas 819     }
1427 28 Oct 11 nicklas 820     return subtype;
1427 28 Oct 11 nicklas 821   }
1427 28 Oct 11 nicklas 822   
1492 02 Dec 11 nicklas 823   /**
1644 15 May 12 nicklas 824     Load the subtype as a BASE item. Same as {@link #load(DbControl)} but return null
1644 15 May 12 nicklas 825     if no BASE item is found instead of throwing an exception.
1644 15 May 12 nicklas 826     @param dc The DbControl to use for database access
1644 15 May 12 nicklas 827     @return An ItemSubtype object
1644 15 May 12 nicklas 828     @since 2.6
1644 15 May 12 nicklas 829   */
1644 15 May 12 nicklas 830   public ItemSubtype get(DbControl dc)
1644 15 May 12 nicklas 831   {
1644 15 May 12 nicklas 832     ItemSubtype subtype = null;
1644 15 May 12 nicklas 833     if (id == 0)
1644 15 May 12 nicklas 834     {
1644 15 May 12 nicklas 835       List<ItemSubtype> result = list(dc);
1644 15 May 12 nicklas 836       if (result.size() == 1)
1644 15 May 12 nicklas 837       {
1644 15 May 12 nicklas 838         subtype = result.get(0);
1644 15 May 12 nicklas 839         id = subtype.getId();
1644 15 May 12 nicklas 840       }
1644 15 May 12 nicklas 841     }
1644 15 May 12 nicklas 842     else
1644 15 May 12 nicklas 843     {
1644 15 May 12 nicklas 844       subtype = ItemSubtype.getById(dc, id);
1644 15 May 12 nicklas 845     }
1644 15 May 12 nicklas 846     return subtype;
1644 15 May 12 nicklas 847     
1644 15 May 12 nicklas 848   }
1644 15 May 12 nicklas 849   
1644 15 May 12 nicklas 850   /**
1640 09 May 12 nicklas 851     List all subtypes registered in BASE with a name and main item type
1640 09 May 12 nicklas 852     matching this subtype definition. Normally, only a single subtype 
1640 09 May 12 nicklas 853     should be returned.
1610 23 Apr 12 nicklas 854   */
1610 23 Apr 12 nicklas 855   public List<ItemSubtype> list(DbControl dc)
1610 23 Apr 12 nicklas 856   {
1640 09 May 12 nicklas 857     ItemQuery<ItemSubtype> query = ItemSubtype.getQuery(getMainType());
1610 23 Apr 12 nicklas 858     query.restrict(
1610 23 Apr 12 nicklas 859       Restrictions.eq(
1610 23 Apr 12 nicklas 860         Hql.property("name"), 
1610 23 Apr 12 nicklas 861         Expressions.parameter("name", getName(), Type.STRING)
1610 23 Apr 12 nicklas 862       ));
1610 23 Apr 12 nicklas 863     query.include(Include.ALL);
1610 23 Apr 12 nicklas 864     return query.list(dc);
1610 23 Apr 12 nicklas 865   }
1610 23 Apr 12 nicklas 866   
1610 23 Apr 12 nicklas 867   /**
1492 02 Dec 11 nicklas 868     Add a filter restriction the given query so that it
1492 02 Dec 11 nicklas 869     only return items of this subtype.
1492 02 Dec 11 nicklas 870     
1492 02 Dec 11 nicklas 871     @param query The query to filter
1492 02 Dec 11 nicklas 872     @since 2.1
1492 02 Dec 11 nicklas 873   */
1503 18 Jan 12 nicklas 874   public void addFilter(DbControl dc, ItemQuery<? extends Subtypable> query)
1492 02 Dec 11 nicklas 875   {
1503 18 Jan 12 nicklas 876     addFilter(dc, query, null);
1492 02 Dec 11 nicklas 877   }
1492 02 Dec 11 nicklas 878
1492 02 Dec 11 nicklas 879   /**
1492 02 Dec 11 nicklas 880     Add a filter restriction to the given query based on the 
1492 02 Dec 11 nicklas 881     given subtype. If no alias is specified, the filter is
1492 02 Dec 11 nicklas 882     applied to the root item, otherwise it is applied
1492 02 Dec 11 nicklas 883     to the alias of a joined (eg. parent or child) item
1492 02 Dec 11 nicklas 884     
1492 02 Dec 11 nicklas 885     @param query The query to restrict
1492 02 Dec 11 nicklas 886     @param alias Specify an alias if the filter should be
1492 02 Dec 11 nicklas 887       placed on a joined (eg. child or parent) item instead
1492 02 Dec 11 nicklas 888       of the root item
1492 02 Dec 11 nicklas 889     @since 2.1
1492 02 Dec 11 nicklas 890   */
1543 28 Feb 12 nicklas 891   public void addFilter(DbControl dc, ItemQuery<?> query, String alias)
1492 02 Dec 11 nicklas 892   {
1543 28 Feb 12 nicklas 893     query.restrict(restriction(dc, alias));
1543 28 Feb 12 nicklas 894   }
1543 28 Feb 12 nicklas 895   
1543 28 Feb 12 nicklas 896   public Restriction restriction(DbControl dc, String alias)
1543 28 Feb 12 nicklas 897   {
1503 18 Jan 12 nicklas 898     if (id==0) load(dc); // Ensure that the subtype has been loaded
1543 28 Feb 12 nicklas 899     return Restrictions.eq(Hql.property(alias, "itemSubtype.id"), Expressions.integer(id));
1492 02 Dec 11 nicklas 900   }
1543 28 Feb 12 nicklas 901
3069 09 Jan 15 nicklas 902   /**
3069 09 Jan 15 nicklas 903     Get the latest item that is the project default item of this
3069 09 Jan 15 nicklas 904     subtype. In this case, an item with a higher ID is considerd 
3069 09 Jan 15 nicklas 905     later than an item with a lower ID.
3618 23 Nov 15 nicklas 906     @since 3.0, 4.0
3069 09 Jan 15 nicklas 907   */
3618 23 Nov 15 nicklas 908   @SuppressWarnings("unchecked")
3618 23 Nov 15 nicklas 909   public <T extends BasicItem> T getLatestProjectDefault(DbControl dc, Filter<? super T> filter)
3069 09 Jan 15 nicklas 910   {
3069 09 Jan 15 nicklas 911     int projectId = dc.getSessionControl().getActiveProjectId();
3618 23 Nov 15 nicklas 912     T bestMatch = null;
3069 09 Jan 15 nicklas 913     if (projectId != 0)
3069 09 Jan 15 nicklas 914     {
3069 09 Jan 15 nicklas 915       Project p = Project.getById(dc, projectId);
3069 09 Jan 15 nicklas 916       List<? extends BasicItem> defaultItems = p.findDefaultItems(dc, get(dc), true);
3069 09 Jan 15 nicklas 917       for (BasicItem item : defaultItems)
3069 09 Jan 15 nicklas 918       {
3069 09 Jan 15 nicklas 919         if (bestMatch == null || bestMatch.getId() < item.getId())
3069 09 Jan 15 nicklas 920         {
3618 23 Nov 15 nicklas 921           if (filter == null || filter.evaluate((T)item))
3618 23 Nov 15 nicklas 922           {
3618 23 Nov 15 nicklas 923             bestMatch = (T)item;
3618 23 Nov 15 nicklas 924           }
3069 09 Jan 15 nicklas 925         }
3069 09 Jan 15 nicklas 926       }
3069 09 Jan 15 nicklas 927     }
3069 09 Jan 15 nicklas 928     return bestMatch;
3069 09 Jan 15 nicklas 929   }
3503 22 Sep 15 nicklas 930
3503 22 Sep 15 nicklas 931   @Override
3503 22 Sep 15 nicklas 932   public int hashCode() 
3503 22 Sep 15 nicklas 933   {
3503 22 Sep 15 nicklas 934     return id;
3503 22 Sep 15 nicklas 935   }
3503 22 Sep 15 nicklas 936
3503 22 Sep 15 nicklas 937   @Override
3503 22 Sep 15 nicklas 938   public boolean equals(Object other) 
3503 22 Sep 15 nicklas 939   {
3503 22 Sep 15 nicklas 940     if (this == other) return true;
3503 22 Sep 15 nicklas 941     if (other == null || this.getClass() != other.getClass()) return false;
3503 22 Sep 15 nicklas 942     return id == ((Subtype)other).id;
3503 22 Sep 15 nicklas 943   }
3069 09 Jan 15 nicklas 944   
1427 28 Oct 11 nicklas 945 }