/*
- * Copyright (C) 2017 Roland Haeder<roland@mxchange.org>
+ * Copyright (C) 2017, 2018 Free Software Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
import org.mxchange.jfinancials.database.BaseFinancialsDatabaseBean;
import org.mxchange.jproduct.model.category.Category;
import org.mxchange.jproduct.model.product.Product;
+import org.mxchange.jproduct.model.product.Products;
/**
* A general bean for product-related methods that can be generalized.
return managedProduct;
}
+ /**
+ * Merges given product's data
+ * <p>
+ * @param detachedProduct Product instance to merge
+ * <p>
+ * @return Detached product instance
+ */
+ protected Product mergeProductData (final Product detachedProduct) {
+ // Trace message
+ this.getLoggerBeanLocal().logTrace(MessageFormat.format("mergeProductData: detachedProduct={0} - CALLED!", detachedProduct)); //NOI18N
+
+ // The product instance must be valid
+ if (null == detachedProduct) {
+ // Throw NPE again
+ throw new NullPointerException("detachedProduct is null"); //NOI18N
+ } else if (detachedProduct.getProductId() == null) {
+ // Throw NPE again
+ throw new NullPointerException("detachedProduct.productId is null"); //NOI18N //NOI18N
+ } else if (detachedProduct.getProductId() < 1) {
+ // Not valid
+ throw new IllegalStateException(MessageFormat.format("detachedProduct.productId={0} is not valid.", detachedProduct.getProductId())); //NOI18N
+ }
+
+ // Set updated timestamp
+ // @TODO detachedProduct.setProductUpdated(new Date());
+ // Get product from it and find it
+ final Product foundProduct = this.getEntityManager().find(detachedProduct.getClass(), detachedProduct.getProductId());
+
+ // Should be found
+ assert (foundProduct instanceof Product) : MessageFormat.format("Product with id {0} not found, but should be.", detachedProduct.getProductId()); //NOI18N
+
+ // Debug message
+ this.getLoggerBeanLocal().logDebug(MessageFormat.format("updateUserPersonalData: foundProduct.productId={0}", foundProduct.getProductId())); //NOI18N
+
+ // Merge product instance
+ final Product managedProduct = this.getEntityManager().merge(foundProduct);
+
+ // Copy all
+ Products.copyAll(detachedProduct, managedProduct);
+
+ // Trace message
+ this.getLoggerBeanLocal().logTrace(MessageFormat.format("mergeProductData: detachedProduct={0} - EXIT!", managedProduct)); //NOI18N
+
+ // Return detached product
+ return managedProduct;
+ }
+
}
import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
import org.mxchange.jfinancials.database.product.BaseFinancialsProductDatabaseBean;
import org.mxchange.jproduct.exceptions.product.ProductAlreadyAddedException;
+import org.mxchange.jproduct.exceptions.product.ProductNotFoundException;
import org.mxchange.jproduct.model.category.Category;
/**
return product;
}
+ @Override
+ public Product updateProductData (final Product product) throws ProductNotFoundException {
+ // Log trace message
+ this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.updateProductData: product={1} - CALLED!", this.getClass().getSimpleName(), product)); //NOI18N
+
+ // The product instance must be valid
+ if (null == product) {
+ // Throw NPE again
+ throw new NullPointerException("product is null"); //NOI18N
+ } else if (product.getProductId() == null) {
+ // Throw NPE again
+ throw new NullPointerException("product.productId is null"); //NOI18N
+ } else if (product.getProductId() < 1) {
+ // Not valid
+ throw new IllegalStateException(MessageFormat.format("product.productId={0} is not valid.", product.getProductId())); //NOI18N
+ } else if (!this.isProductCreated(product)) {
+ // No not found
+ throw new ProductNotFoundException(product.getProductId());
+ }
+
+ // Merge data
+ final Product detachedProduct = this.mergeProductData(product);
+
+ // Trace message
+ this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.updateProductData: detachedProduct={1} - EXIT!", this.getClass().getSimpleName(), detachedProduct)); //NOI18N
+
+ // Return it
+ return detachedProduct;
+ }
+
/**
* Checks if given product is already added by it's title.
* <p>
* @return Whether it has been found
*/
private boolean isProductCreated (final Product product) {
- // Validate parameter
- if (null == product) {
- // Throw NPE
- throw new NullPointerException("product is null"); //NOI18N
- } else if (product.getProductI18nKey() == null) {
- // Throw it again
- throw new NullPointerException("product.productI18nKey is null"); //NOI18N
- } else if (product.getProductI18nKey().isEmpty()) {
- // Throw it again
- throw new IllegalArgumentException("product.productI18nKey is empty"); //NOI18N
- } else if (product.getProductId() != null) {
- // Throw IAE
- throw new IllegalArgumentException(MessageFormat.format("product.productId={0} is not expected.", product.getProductId())); //NOI18N
- }
-
// Default is not found
boolean isFound = false;
// Check each entry
for (final Product createdProduct : list) {
- // Is same name?
- if (Objects.equals(createdProduct.getProductI18nKey(), product.getProductI18nKey())) {
- // Found it, then stop here
+ // Is same id or name?
+ if (Objects.equals(product.getProductId(), createdProduct.getProductId())) {
+ // Found by id
+ isFound = true;
+ break;
+ } else if (Objects.equals(createdProduct.getProductI18nKey(), product.getProductI18nKey())) {
+ // Found by i18n key, then stop here
isFound = true;
break;
}