diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml
deleted file mode 100644
index 6f92022c5..000000000
--- a/.github/workflows/build_docs.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: Build Documentation
-
-on: [push]
-
-jobs:
- build:
-
- runs-on: ubuntu-latest
- strategy:
- matrix:
- python: [3.7, 3.8]
-
- steps:
- - uses: actions/checkout@v2
- name: Check out source-code repository
-
- - name: Setup Python
- uses: actions/setup-python@v1
- with:
- python-version: ${{ matrix.python }}
-
- - name: Install pip
- run: |
- python -m pip install --upgrade pip
-
- - name: Install doc dependencies
- run: |
- pip install -r docs/requirements.txt
-
- - name: Build docs
- run: |
- cd docs
- make html
-
diff --git a/.qube.yml b/.qube.yml
index ac0e06ef9..f6e6a0443 100644
--- a/.qube.yml
+++ b/.qube.yml
@@ -4,7 +4,7 @@ email: sven.fillinger@qbic.uni-tuebingen.de
project_name: data-model-lib
project_short_description: "Data models. A collection of QBiC's central data models\
\ and DTOs. "
-version: 2.13.0
+version: 2.14.0
domain: lib
language: groovy
project_slug: data-model-lib
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index c40a0a0b3..5e976e3aa 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -4,6 +4,22 @@ Changelog
This project adheres to `Semantic Versioning `_.
+2.14.0 (2021-10-27)
+-------------------
+
+**Added**
+
+* Added String representing product abbreviation to ProductCategory Enum (`#266 `_)
+* ProductId now provides 'From' method to be created via String representation (`#264 `_)
+
+**Fixed**
+
+**Dependencies**
+
+**Deprecated**
+
+* ``life.qbic.datamodel.dtos.business.services.ProductType.groovy``. The abbreviation is now accessible via the ``abbreviation`` property in ``life.qbic.datamodel.dtos.business.ProductCategory`` (`#266 `_)
+
2.13.0 (2021-10-13)
-------------------
diff --git a/docs/conf.py b/docs/conf.py
index 4971609d3..899faaa96 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -55,9 +55,9 @@
# the built documents.
#
# The short X.Y version.
-version = '2.13.0'
+version = '2.14.0'
# The full version, including alpha/beta/rc tags.
-release = '2.13.0'
+release = '2.14.0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/pom.xml b/pom.xml
index aec2d99dc..83ca85566 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
life.qbic
data-model-lib
- 2.13.0
+ 2.14.0
data-model-lib
http://github.com/qbicsoftware/data-model-lib
Data models. A collection of QBiC's central data models and DTOs.
diff --git a/qube.cfg b/qube.cfg
index ee3a9cd7e..c3e8f9f25 100644
--- a/qube.cfg
+++ b/qube.cfg
@@ -1,5 +1,5 @@
[bumpversion]
-current_version = 2.13.0
+current_version = 2.14.0
[bumpversion_files_whitelisted]
dot_qube = .qube.yml
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/ProductCategory.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/ProductCategory.groovy
index 4078d3338..e0c7ef0f9 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/ProductCategory.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/ProductCategory.groovy
@@ -9,22 +9,28 @@ package life.qbic.datamodel.dtos.business
*/
enum ProductCategory {
- SEQUENCING("Sequencing"),
- PROJECT_MANAGEMENT("Project Management"),
- PRIMARY_BIOINFO("Primary Bioinformatics"),
- SECONDARY_BIOINFO("Secondary Bioinformatics"),
- DATA_STORAGE("Data Storage"),
- PROTEOMIC("Proteomics"),
- METABOLOMIC("Metabolomics"),
- EXTERNAL_SERVICE("External Service")
+ SEQUENCING("Sequencing", "SE"),
+ PROJECT_MANAGEMENT("Project Management", "PM"),
+ PRIMARY_BIOINFO("Primary Bioinformatics", "PB"),
+ SECONDARY_BIOINFO("Secondary Bioinformatics", "SB"),
+ DATA_STORAGE("Data Storage", "DS"),
+ PROTEOMIC("Proteomics", "PR"),
+ METABOLOMIC("Metabolomics", "ME"),
+ EXTERNAL_SERVICE("External Service", "EXT")
/**
* Value describing the enum type with a string
*/
- private final String value
+ private String value
- ProductCategory(String value) {
+ /**
+ * Abbreviation for the enum type name
+ */
+ private String abbreviation
+
+ ProductCategory(String value, String abbreviation) {
this.value = value
+ this.abbreviation = abbreviation
}
/**
@@ -35,4 +41,14 @@ enum ProductCategory {
String getValue() {
return value
}
+
+ /**
+ * Returns the abbreviation associated to the given enum
+ * This is NOT the same as {@link #toString}
+ * @return a user-friendly string value
+ */
+ String getAbbreviation() {
+ return abbreviation
+ }
+
}
\ No newline at end of file
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/ProductCategoryFactory.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/ProductCategoryFactory.groovy
index 855a13491..e23f01da8 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/ProductCategoryFactory.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/ProductCategoryFactory.groovy
@@ -27,4 +27,20 @@ class ProductCategoryFactory extends EnumFactory{
}
return desiredKey
}
+
+ /**
+ * This method returns the enum with the provided String abbreviation.
+ *
+ * @throws IllegalArgumentException in case the String could not be mapped
+ * @param abbreviation the String corresponding to the abbreviation stored in the enum
+ * @return the enum key for the provided abbreviation
+ */
+ ProductCategory getForAbbreviation(String abbreviation) {
+ ProductCategory desiredKey
+ desiredKey = ProductCategory.values().find {it.abbreviation.equals(abbreviation.trim())}
+ if (!desiredKey) {
+ throw new IllegalArgumentException("Unknown abbreviation'$abbreviation' for ${ProductCategory.getSimpleName()}")
+ }
+ return desiredKey
+ }
}
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/ProductId.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/ProductId.groovy
index 32a7b044a..c7c5a5eff 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/ProductId.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/ProductId.groovy
@@ -27,6 +27,9 @@ class ProductId implements Comparable{
/**
* A builder for ProductId instances.
*/
+
+ private static final ProductCategoryFactory productCategoryFactory = new ProductCategoryFactory()
+
static class Builder {
private String productType
private long uniqueId
@@ -113,6 +116,39 @@ class ProductId implements Comparable{
return type
}
+ /**
+ * Returns a ProductId from a given String representation
+ *
+ * Expects a ProductIdString with the Format P_N
+ * P being the one of the abbreviation values stored in {@link ProductCategory} enum
+ * N being an Integer Number
+ *
+ * @param String representation of a productId
+ * @return ProductId containing productCategory abbreviation and uniqueNumber of String representation
+ */
+ static ProductId from(String productId) {
+ if (!productId.contains("_")) {
+ throw new IllegalArgumentException("${productId} is not a valid product identifier.")
+ }
+ def splitId = productId.split("_")
+ String productCategoryString = splitId[0].trim()
+ String runningNumberString = splitId[1].trim()
+ Long runningNumber
+ ProductCategory productCategory
+ try {
+ runningNumber = Long.parseUnsignedLong(runningNumberString)
+ productCategory = productCategoryFactory.getForAbbreviation(productCategoryString)
+ }
+ catch (NumberFormatException numberFormatException) {
+ throw new NumberFormatException("Provided productId does not have a valid uniqueID. Provided unique id: ${runningNumberString}")
+ }
+ catch (IllegalArgumentException illegalArgumentException) {
+ throw new IllegalArgumentException("ProductId does not have a valid ProductCategory abbreviation. Provided abbreviation: ${productCategoryString}")
+
+ }
+ return new Builder(productCategory.getAbbreviation() , runningNumber).build()
+ }
+
/**
* Returns a String representation in the format:
*
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/DataStorage.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/DataStorage.groovy
index 21bc5fe2c..cc937b81f 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/DataStorage.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/DataStorage.groovy
@@ -1,6 +1,7 @@
package life.qbic.datamodel.dtos.business.services
import groovy.transform.EqualsAndHashCode
+import life.qbic.datamodel.dtos.business.ProductCategory
import life.qbic.datamodel.dtos.business.ProductId
import life.qbic.datamodel.dtos.business.facilities.Facility
@@ -20,12 +21,12 @@ class DataStorage extends PartialProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @deprecated since 2.5.0
*/
@Deprecated
DataStorage(String name, String description, double unitPrice, ProductUnit unit, String runningNumber) {
- super(name, description, unitPrice, unit, new ProductId(ProductType.DATA_STORAGE.toString(), runningNumber))
+ super(name, description, unitPrice, unit, new ProductId(ProductCategory.DATA_STORAGE.getAbbreviation(), runningNumber))
}
/**
@@ -37,13 +38,13 @@ class DataStorage extends PartialProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
*
* @deprecated 2.11.0
*/
@Deprecated
DataStorage(String name, String description, double unitPrice, ProductUnit unit, long runningNumber) {
- super(name, description, unitPrice, unit, new ProductId.Builder(ProductType.DATA_STORAGE.toString(), runningNumber).build())
+ super(name, description, unitPrice, unit, new ProductId.Builder(ProductCategory.DATA_STORAGE.getAbbreviation(), runningNumber).build())
}
/**
@@ -56,11 +57,11 @@ class DataStorage extends PartialProduct {
* @param internalUnitPrice The price in € per unit for internal customers
* @param externalUnitPrice The price in € per unit for external customers
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
*
* @since 2.11.0
*/
DataStorage(String name, String description, double internalUnitPrice, double externalUnitPrice, ProductUnit unit, long runningNumber, Facility serviceProvider) {
- super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductType.DATA_STORAGE.toString(), runningNumber).build(), serviceProvider)
+ super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductCategory.DATA_STORAGE.getAbbreviation(), runningNumber).build(), serviceProvider)
}
}
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/ExternalServiceProduct.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/ExternalServiceProduct.groovy
index 34bee0ab9..ae089d1f1 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/ExternalServiceProduct.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/ExternalServiceProduct.groovy
@@ -1,6 +1,7 @@
package life.qbic.datamodel.dtos.business.services
import groovy.transform.EqualsAndHashCode
+import life.qbic.datamodel.dtos.business.ProductCategory
import life.qbic.datamodel.dtos.business.ProductId
import life.qbic.datamodel.dtos.business.facilities.Facility
@@ -24,6 +25,7 @@ class ExternalServiceProduct extends PartialProduct {
* @param serviceProvider The service provider
*/
ExternalServiceProduct(String name, String description, double internalUnitPrice, double externalUnitPrice, ProductUnit unit, long runningNumber, Facility serviceProvider) {
- super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductType.EXTERNAL_SERVICE.toString(), runningNumber).build(), serviceProvider)
+ super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(
+ ProductCategory.EXTERNAL_SERVICE.getAbbreviation(), runningNumber).build(), serviceProvider)
}
}
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/MetabolomicAnalysis.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/MetabolomicAnalysis.groovy
index b2e62e524..ca23f9567 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/MetabolomicAnalysis.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/MetabolomicAnalysis.groovy
@@ -1,6 +1,7 @@
package life.qbic.datamodel.dtos.business.services
import groovy.transform.EqualsAndHashCode
+import life.qbic.datamodel.dtos.business.ProductCategory
import life.qbic.datamodel.dtos.business.ProductId
import life.qbic.datamodel.dtos.business.facilities.Facility
@@ -20,12 +21,12 @@ class MetabolomicAnalysis extends AtomicProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @deprecated since 2.5.0
*/
@Deprecated
MetabolomicAnalysis(String name, String description, double unitPrice, ProductUnit unit, String runningNumber) {
- super(name, description, unitPrice, unit, new ProductId(ProductType.METABOLOMIC.toString(), runningNumber))
+ super(name, description, unitPrice, unit, new ProductId(ProductCategory.METABOLOMIC.getAbbreviation(), runningNumber))
}
/**
@@ -37,13 +38,13 @@ class MetabolomicAnalysis extends AtomicProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
*
* @deprecated 2.11.0
*/
@Deprecated
MetabolomicAnalysis(String name, String description, double unitPrice, ProductUnit unit, long runningNumber) {
- super(name, description, unitPrice, unit, new ProductId.Builder(ProductType.METABOLOMIC.toString(), runningNumber).build())
+ super(name, description, unitPrice, unit, new ProductId.Builder(ProductCategory.METABOLOMIC.getAbbreviation(), runningNumber).build())
}
/**
@@ -56,13 +57,13 @@ class MetabolomicAnalysis extends AtomicProduct {
* @param internalUnitPrice The price in € per unit for internal customers
* @param externalUnitPrice The price in € per unit for external customers
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @param serviceProvider The facility providing the service product
*
* @since 2.11.0
*/
MetabolomicAnalysis(String name, String description, double internalUnitPrice, double externalUnitPrice, ProductUnit unit, long runningNumber, Facility serviceProvider) {
- super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductType.METABOLOMIC.toString(), runningNumber).build(), serviceProvider)
+ super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductCategory.METABOLOMIC.getAbbreviation(), runningNumber).build(), serviceProvider)
}
}
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/PrimaryAnalysis.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/PrimaryAnalysis.groovy
index 2f06907d4..67badca36 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/PrimaryAnalysis.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/PrimaryAnalysis.groovy
@@ -1,6 +1,7 @@
package life.qbic.datamodel.dtos.business.services
import groovy.transform.EqualsAndHashCode
+import life.qbic.datamodel.dtos.business.ProductCategory
import life.qbic.datamodel.dtos.business.ProductId
import life.qbic.datamodel.dtos.business.facilities.Facility
@@ -20,12 +21,12 @@ class PrimaryAnalysis extends AtomicProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @deprecated since 2.5.0
*/
@Deprecated
PrimaryAnalysis(String name, String description, double unitPrice, ProductUnit unit, String runningNumber) {
- super(name, description, unitPrice, unit, new ProductId(ProductType.PRIMARY_BIOINFO.toString(), runningNumber))
+ super(name, description, unitPrice, unit, new ProductId(ProductCategory.PRIMARY_BIOINFO.getAbbreviation(), runningNumber))
}
/**
@@ -37,13 +38,13 @@ class PrimaryAnalysis extends AtomicProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
*
* @deprecated 2.11.0
*/
@Deprecated
PrimaryAnalysis(String name, String description, double unitPrice, ProductUnit unit, long runningNumber) {
- super(name, description, unitPrice, unit, new ProductId.Builder(ProductType.PRIMARY_BIOINFO.toString(), runningNumber).build())
+ super(name, description, unitPrice, unit, new ProductId.Builder(ProductCategory.PRIMARY_BIOINFO.getAbbreviation(), runningNumber).build())
}
/**
@@ -56,12 +57,12 @@ class PrimaryAnalysis extends AtomicProduct {
* @param internalUnitPrice The price in € per unit for internal customers
* @param externalUnitPrice The price in € per unit for external customers
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @param serviceProvider The facility providing the service product
*
* @since 2.11.0
*/
PrimaryAnalysis(String name, String description, double internalUnitPrice, double externalUnitPrice, ProductUnit unit, long runningNumber, Facility serviceProvider) {
- super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductType.PRIMARY_BIOINFO.toString(), runningNumber).build(), serviceProvider)
+ super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductCategory.PRIMARY_BIOINFO.getAbbreviation(), runningNumber).build(), serviceProvider)
}
}
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProductType.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProductType.groovy
index bb1f25f60..d8ec92fae 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProductType.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProductType.groovy
@@ -5,8 +5,10 @@ package life.qbic.datamodel.dtos.business.services
* by the ProductIdentifier {@link life.qbic.datamodel.dtos.business.ProductId}
*
* @since: 2.0.0
+ * @deprecated Will be removed, please use the abbreviation in the {@link life.qbic.datamodel.dtos.business.ProductCategory}
+ * @see life.qbic.datamodel.dtos.business.ProductCategory#getAbbreviation()
*/
-
+@Deprecated
enum ProductType {
SEQUENCING("SE"),
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProjectManagement.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProjectManagement.groovy
index e99d1c65f..76aed2982 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProjectManagement.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProjectManagement.groovy
@@ -1,6 +1,7 @@
package life.qbic.datamodel.dtos.business.services
import groovy.transform.EqualsAndHashCode
+import life.qbic.datamodel.dtos.business.ProductCategory
import life.qbic.datamodel.dtos.business.ProductId
import life.qbic.datamodel.dtos.business.facilities.Facility
@@ -20,12 +21,12 @@ class ProjectManagement extends PartialProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @deprecated since 2.5.0
*/
@Deprecated
ProjectManagement(String name, String description, double unitPrice, ProductUnit unit, String runningNumber) {
- super(name, description, unitPrice, unit, new ProductId(ProductType.PROJECT_MANAGEMENT.toString(), runningNumber))
+ super(name, description, unitPrice, unit, new ProductId(ProductCategory.PROJECT_MANAGEMENT.getAbbreviation(), runningNumber))
}
/**
@@ -37,13 +38,13 @@ class ProjectManagement extends PartialProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
*
* @deprecated 2.11.0
*/
@Deprecated
ProjectManagement(String name, String description, double unitPrice, ProductUnit unit, long runningNumber) {
- super(name, description, unitPrice, unit, new ProductId.Builder(ProductType.PROJECT_MANAGEMENT.toString(), runningNumber).build())
+ super(name, description, unitPrice, unit, new ProductId.Builder(ProductCategory.PROJECT_MANAGEMENT.getAbbreviation(), runningNumber).build())
}
/**
@@ -56,12 +57,12 @@ class ProjectManagement extends PartialProduct {
* @param internalUnitPrice The price in € per unit for internal customers
* @param externalUnitPrice The price in € per unit for external customers
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @param serviceProvider The facility providing the service product
*
* @since 2.11.0
*/
ProjectManagement(String name, String description, double internalUnitPrice, double externalUnitPrice, ProductUnit unit, long runningNumber, Facility serviceProvider) {
- super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductType.PROJECT_MANAGEMENT.toString(), runningNumber).build(), serviceProvider)
+ super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductCategory.PROJECT_MANAGEMENT.getAbbreviation(), runningNumber).build(), serviceProvider)
}
}
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProteomicAnalysis.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProteomicAnalysis.groovy
index aa6b50aca..174bffce3 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProteomicAnalysis.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProteomicAnalysis.groovy
@@ -1,6 +1,7 @@
package life.qbic.datamodel.dtos.business.services
import groovy.transform.EqualsAndHashCode
+import life.qbic.datamodel.dtos.business.ProductCategory
import life.qbic.datamodel.dtos.business.ProductId
import life.qbic.datamodel.dtos.business.facilities.Facility
@@ -21,12 +22,12 @@ class ProteomicAnalysis extends AtomicProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @deprecated since 2.5.0
*/
@Deprecated
ProteomicAnalysis(String name, String description, double unitPrice, ProductUnit unit, String runningNumber) {
- super(name, description, unitPrice, unit, new ProductId(ProductType.PROTEOMIC.toString(), runningNumber))
+ super(name, description, unitPrice, unit, new ProductId(ProductCategory.PROTEOMIC.getAbbreviation(), runningNumber))
}
/**
@@ -38,13 +39,13 @@ class ProteomicAnalysis extends AtomicProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
*
* @deprecated 2.11.0
*/
@Deprecated
ProteomicAnalysis(String name, String description, double unitPrice, ProductUnit unit, long runningNumber) {
- super(name, description, unitPrice, unit, new ProductId.Builder(ProductType.PROTEOMIC.toString(), runningNumber).build())
+ super(name, description, unitPrice, unit, new ProductId.Builder(ProductCategory.PROTEOMIC.getAbbreviation(), runningNumber).build())
}
/**
@@ -57,12 +58,12 @@ class ProteomicAnalysis extends AtomicProduct {
* @param internalUnitPrice The price in € per unit for internal customers
* @param externalUnitPrice The price in € per unit for external customers
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @param serviceProvider The facility providing the service product
*
* @since 2.11.0
*/
ProteomicAnalysis(String name, String description, double internalUnitPrice, double externalUnitPrice, ProductUnit unit, long runningNumber, Facility serviceProvider) {
- super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductType.PROTEOMIC.toString(), runningNumber).build(), serviceProvider)
+ super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductCategory.PROTEOMIC.getAbbreviation(), runningNumber).build(), serviceProvider)
}
}
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/SecondaryAnalysis.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/SecondaryAnalysis.groovy
index 25407a3ae..9a69ea244 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/SecondaryAnalysis.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/SecondaryAnalysis.groovy
@@ -1,6 +1,7 @@
package life.qbic.datamodel.dtos.business.services
import groovy.transform.EqualsAndHashCode
+import life.qbic.datamodel.dtos.business.ProductCategory
import life.qbic.datamodel.dtos.business.ProductId
import life.qbic.datamodel.dtos.business.facilities.Facility
@@ -21,12 +22,12 @@ class SecondaryAnalysis extends AtomicProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @deprecated since 2.5.0
*/
@Deprecated
SecondaryAnalysis(String name, String description, double unitPrice, ProductUnit unit, String runningNumber) {
- super(name, description, unitPrice, unit, new ProductId(ProductType.SECONDARY_BIOINFO.toString() , runningNumber))
+ super(name, description, unitPrice, unit, new ProductId(ProductCategory.SECONDARY_BIOINFO.getAbbreviation() , runningNumber))
}
/**
@@ -38,13 +39,13 @@ class SecondaryAnalysis extends AtomicProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
*
* @deprecated 2.11.0
*/
@Deprecated
SecondaryAnalysis(String name, String description, double unitPrice, ProductUnit unit, long runningNumber) {
- super(name, description, unitPrice, unit, new ProductId.Builder(ProductType.SECONDARY_BIOINFO.toString(), runningNumber).build())
+ super(name, description, unitPrice, unit, new ProductId.Builder(ProductCategory.SECONDARY_BIOINFO.getAbbreviation(), runningNumber).build())
}
/**
@@ -57,11 +58,11 @@ class SecondaryAnalysis extends AtomicProduct {
* @param internalUnitPrice The price in € per unit for internal customers
* @param externalUnitPrice The price in € per unit for external customers
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
*
* @since 2.11.0
*/
SecondaryAnalysis(String name, String description, double internalUnitPrice, double externalUnitPrice, ProductUnit unit, long runningNumber, Facility serviceProvider) {
- super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductType.SECONDARY_BIOINFO.toString(), runningNumber).build(), serviceProvider)
+ super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductCategory.SECONDARY_BIOINFO.getAbbreviation(), runningNumber).build(), serviceProvider)
}
}
diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/Sequencing.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/Sequencing.groovy
index a99f1e518..7d41f2e14 100644
--- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/Sequencing.groovy
+++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/Sequencing.groovy
@@ -1,6 +1,7 @@
package life.qbic.datamodel.dtos.business.services
import groovy.transform.EqualsAndHashCode
+import life.qbic.datamodel.dtos.business.ProductCategory
import life.qbic.datamodel.dtos.business.ProductId
import life.qbic.datamodel.dtos.business.facilities.Facility
@@ -20,12 +21,12 @@ class Sequencing extends AtomicProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @deprecated 2.5.0
*/
@Deprecated
Sequencing(String name, String description, double unitPrice, ProductUnit unit, String runningNumber) {
- super(name, description, unitPrice, unit, new ProductId(ProductType.SEQUENCING.toString(), runningNumber))
+ super(name, description, unitPrice, unit, new ProductId(ProductCategory.SEQUENCING.getAbbreviation(), runningNumber))
}
/**
@@ -37,13 +38,13 @@ class Sequencing extends AtomicProduct {
* @param description The description of what the product is about.
* @param unitPrice The price in € per unit
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
*
* @deprecated 2.11.0
*/
@Deprecated
Sequencing(String name, String description, double unitPrice, ProductUnit unit, long runningNumber) {
- super(name, description, unitPrice, unit, new ProductId.Builder(ProductType.SEQUENCING.toString(), runningNumber).build())
+ super(name, description, unitPrice, unit, new ProductId.Builder(ProductCategory.SEQUENCING.getAbbreviation(), runningNumber).build())
}
/**
@@ -56,12 +57,12 @@ class Sequencing extends AtomicProduct {
* @param internalUnitPrice The price in € per unit for internal customers
* @param externalUnitPrice The price in € per unit for external customers
* @param unit The product unit
- * @param runningNumber Number used in conjunction with ProductType{@link life.qbic.datamodel.dtos.business.services.ProductType} to identify product
+ * @param runningNumber Number used in conjunction with {@link ProductCategory} to identify product
* @param serviceProvider The facility providing the service product
*
* @since 2.11.0
*/
Sequencing(String name, String description, double internalUnitPrice, double externalUnitPrice, ProductUnit unit, long runningNumber, Facility serviceProvider) {
- super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductType.SEQUENCING.toString(), runningNumber).build(), serviceProvider)
+ super(name, description, internalUnitPrice, externalUnitPrice, unit, new ProductId.Builder(ProductCategory.SEQUENCING.getAbbreviation(), runningNumber).build(), serviceProvider)
}
}
diff --git a/src/test/groovy/life/qbic/datamodel/dtos/business/ProductCategoryFactorySpec.groovy b/src/test/groovy/life/qbic/datamodel/dtos/business/ProductCategoryFactorySpec.groovy
index a46e4d7aa..0619d12d1 100644
--- a/src/test/groovy/life/qbic/datamodel/dtos/business/ProductCategoryFactorySpec.groovy
+++ b/src/test/groovy/life/qbic/datamodel/dtos/business/ProductCategoryFactorySpec.groovy
@@ -38,6 +38,7 @@ class ProductCategoryFactorySpec extends Specification {
"Data Storage" | ProductCategory.DATA_STORAGE
"Proteomics" | ProductCategory.PROTEOMIC
"Metabolomics" | ProductCategory.METABOLOMIC
+ "External Service" | ProductCategory.EXTERNAL_SERVICE
}
def "GetForString(java.lang.String) returns the correct enums and ignores whitespace"() {
@@ -56,5 +57,44 @@ class ProductCategoryFactorySpec extends Specification {
"\nData Storage\t" | ProductCategory.DATA_STORAGE
" Proteomics " | ProductCategory.PROTEOMIC
" Metabolomics " | ProductCategory.METABOLOMIC
+ " External Service " | ProductCategory.EXTERNAL_SERVICE
+ }
+
+ def "GetForAbbreviation(java.lang.String) returns the correct enums for correct requests"() {
+ when: "the factory is tasked to deliver an enum given a string value"
+ ProductCategory category = productCategoryFactory.getForAbbreviation(request)
+
+ then: "the returned ProductCategory is the same as the expected result"
+ category == expectedEnum
+
+ where: "all valid combinations are tested"
+ request | expectedEnum
+ "SE" | ProductCategory.SEQUENCING
+ "PM" | ProductCategory.PROJECT_MANAGEMENT
+ "PB" | ProductCategory.PRIMARY_BIOINFO
+ "SB" | ProductCategory.SECONDARY_BIOINFO
+ "DS" | ProductCategory.DATA_STORAGE
+ "PR" | ProductCategory.PROTEOMIC
+ "ME" | ProductCategory.METABOLOMIC
+ "EXT" | ProductCategory.EXTERNAL_SERVICE
+ }
+
+ def "GetForAbbreviation(java.lang.String) returns the correct enums and ignores whitespace"() {
+ when: "the factory is tasked to deliver an enum given a string value"
+ ProductCategory category = productCategoryFactory.getForAbbreviation(request)
+
+ then: "the returned ProductCategory is the same as the expected result"
+ category == expectedEnum
+
+ where: "all valid combinations are tested"
+ request | expectedEnum
+ "SE " | ProductCategory.SEQUENCING
+ " PM" | ProductCategory.PROJECT_MANAGEMENT
+ " PB " | ProductCategory.PRIMARY_BIOINFO
+ "\tSB " | ProductCategory.SECONDARY_BIOINFO
+ "\nDS\t" | ProductCategory.DATA_STORAGE
+ " PR " | ProductCategory.PROTEOMIC
+ " ME " | ProductCategory.METABOLOMIC
+ " EXT " | ProductCategory.EXTERNAL_SERVICE
}
}
diff --git a/src/test/groovy/life/qbic/datamodel/dtos/business/ProductIdSpec.groovy b/src/test/groovy/life/qbic/datamodel/dtos/business/ProductIdSpec.groovy
index 72c09e4f4..e37d370e0 100644
--- a/src/test/groovy/life/qbic/datamodel/dtos/business/ProductIdSpec.groovy
+++ b/src/test/groovy/life/qbic/datamodel/dtos/business/ProductIdSpec.groovy
@@ -120,16 +120,84 @@ class ProductIdSpec extends Specification {
result == expectedResult
where:
- x | y | expectedResult
- new ProductId.Builder("A",1).build() | new ProductId.Builder("B",1).build() | -1
- new ProductId.Builder("B",1).build() | new ProductId.Builder("A",1).build() | 1
- new ProductId.Builder("A",1).build() | new ProductId.Builder("A",1).build() | 0
- new ProductId.Builder("A",1).build() | new ProductId.Builder("A",42).build() | -1
- new ProductId.Builder("A",42).build() | new ProductId.Builder("A",1).build() | 1
- new ProductId.Builder("A",1).build() | new ProductId.Builder("B",0).build() | -1
- new ProductId.Builder("Z",42).build() | new ProductId.Builder("A",100).build() | 1
+ x | y | expectedResult
+ new ProductId.Builder("A", 1).build() | new ProductId.Builder("B", 1).build() | -1
+ new ProductId.Builder("B", 1).build() | new ProductId.Builder("A", 1).build() | 1
+ new ProductId.Builder("A", 1).build() | new ProductId.Builder("A", 1).build() | 0
+ new ProductId.Builder("A", 1).build() | new ProductId.Builder("A", 42).build() | -1
+ new ProductId.Builder("A", 42).build() | new ProductId.Builder("A", 1).build() | 1
+ new ProductId.Builder("A", 1).build() | new ProductId.Builder("B", 0).build() | -1
+ new ProductId.Builder("Z", 42).build() | new ProductId.Builder("A", 100).build() | 1
}
+ def "Valid ProductId String can be converted to ProductId"() {
+ when:
+ ProductId productId = ProductId.from(validProductIdString)
+ then:
+ validProductId == productId
+
+ where:
+ validProductIdString | validProductId
+ "SE_1" | new ProductId.Builder("SE", 1).build()
+ "PM_2" | new ProductId.Builder("PM", 2).build()
+ "PB_3" | new ProductId.Builder("PB", 3).build()
+ "SB_4" | new ProductId.Builder("SB", 4).build()
+ "DS_5" | new ProductId.Builder("DS", 5).build()
+ "PR_6" | new ProductId.Builder("PR", 6).build()
+ "ME_7" | new ProductId.Builder("ME", 7).build()
+ "EXT_8" | new ProductId.Builder("EXT", 8).build()
+ }
+
+ def "ProductId String with invalid number will return NumberFormatException"() {
+ when:
+ ProductId.from(inValidProductIdString)
+ then:
+ thrown(NumberFormatException)
+ where:
+ inValidProductIdString | _
+ "SE_1.5" | _
+ "PM_Z" | _
+ "PB_ARG" | _
+ "SB_1,4" | _
+ "DS_1,A" | _
+ "PR_A_5" | _
+ "ME_A-0" | _
+ "EXT_D/0" | _
+ }
+
+ def "ProductId String with invalid productType will return IllegalArgumentException"() {
+ when:
+ ProductId.from(inValidProductIdString)
+ then:
+ thrown(IllegalArgumentException)
+ where:
+ inValidProductIdString | _
+ "Dane_1" | _
+ "Mary_2" | _
+ "Fred_3" | _
+ "A:P_4" | _
+ "101_5" | _
+ "Wat_6" | _
+ "Decibel_7" | _
+ "Why_8" | _
+ }
+
+ def "ProductId String with invalid Format will return IllegalArgumentException"() {
+ when:
+ ProductId.from(inValidProductIdString)
+ then:
+ thrown(IllegalArgumentException)
+ where:
+ inValidProductIdString | _
+ "SE1" | _
+ "PM2" | _
+ "PB3" | _
+ "SB4" | _
+ "DS5" | _
+ "PR&6" | _
+ "ME-7" | _
+ "EXT/8" | _
+ }
}