/**
* Most of the code in the Qalingo project is copyrighted Hoteia and licensed
* under the Apache License Version 2.0 (release version 0.8.0)
* http://www.apache.org/licenses/LICENSE-2.0
*
* Copyright (c) Hoteia, 2012-2014
* http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
*
*/
package org.hoteia.qalingo.core.dao;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.Query;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.Subqueries;
import org.hibernate.sql.JoinType;
import org.hoteia.qalingo.core.domain.Asset;
import org.hoteia.qalingo.core.domain.ProductBrand;
import org.hoteia.qalingo.core.domain.ProductMarketing;
import org.hoteia.qalingo.core.domain.ProductMarketingCustomerComment;
import org.hoteia.qalingo.core.domain.ProductMarketingCustomerRate;
import org.hoteia.qalingo.core.domain.ProductSku;
import org.hoteia.qalingo.core.domain.ProductSkuOptionDefinition;
import org.hoteia.qalingo.core.fetchplan.FetchPlan;
import org.hoteia.qalingo.core.fetchplan.catalog.FetchPlanGraphProduct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
@Repository("productDao")
public class ProductDao extends AbstractGenericDao {
private final Logger logger = LoggerFactory.getLogger(getClass());
// PRODUCT MARKETING
public ProductMarketing getProductMarketingById(final Long productMarketingId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
FetchPlan fetchPlan = handleSpecificProductMarketingFetchMode(criteria, params);
criteria.add(Restrictions.eq("id", productMarketingId));
ProductMarketing productMarketing = (ProductMarketing) criteria.uniqueResult();
if(productMarketing != null){
productMarketing.setFetchPlan(fetchPlan);
}
return productMarketing;
}
public ProductMarketing getProductMarketingByCode(final String productMarketingCode, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
FetchPlan fetchPlan = handleSpecificProductMarketingFetchMode(criteria, params);
criteria.add(Restrictions.eq("code", handleCodeValue(productMarketingCode)));
ProductMarketing productMarketing = (ProductMarketing) criteria.uniqueResult();
if(productMarketing != null){
productMarketing.setFetchPlan(fetchPlan);
}
return productMarketing;
}
public List<ProductMarketing> findProductMarketings(Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductMarketing> productMarketings = criteria.list();
return productMarketings;
}
public List<ProductMarketing> findProductMarketingByRandom(int maxResults, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.add(Restrictions.sqlRestriction("1=1 ORDER BY RAND(123)"));
criteria.setMaxResults(maxResults);
@SuppressWarnings("unchecked")
List<ProductMarketing> productMarketings = criteria.list();
return productMarketings;
}
public List<ProductMarketing> findProductMarketings(final String text, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.add(Restrictions.or(Restrictions.like("code", text, MatchMode.ANYWHERE), Restrictions.like("name", text, MatchMode.ANYWHERE), Restrictions.like("description", text, MatchMode.ANYWHERE)));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductMarketing> productMarketings = criteria.list();
return productMarketings;
}
public List<ProductMarketing> findProductMarketingsByBrandId(final Long brandId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.setFetchMode("productBrand", FetchMode.JOIN);
criteria.createAlias("productBrand", "productBrand", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("productBrand.id", brandId));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductMarketing> productMarketings = criteria.list();
return productMarketings;
}
public List<ProductMarketing> findProductMarketingsByBrandCode(final String brandCode, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.setFetchMode("productBrand", FetchMode.JOIN);
criteria.createAlias("productBrand", "productBrand", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("productBrand.code", handleCodeValue(brandCode)));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductMarketing> productMarketings = criteria.list();
return productMarketings;
}
public List<ProductMarketing> findProductMarketingsByMasterCatalogCategoryId(final Long categoryId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.createAlias("productSkus", "productSku", JoinType.LEFT_OUTER_JOIN);
criteria.createAlias("productSku.catalogCategoryMasterProductSkuRels", "catalogCategoryProductSkuRel", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("catalogCategoryProductSkuRel.pk.catalogCategoryMaster.id", categoryId));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductMarketing> productMarketings = criteria.list();
return productMarketings;
}
public List<ProductMarketing> findProductMarketingsNotInThisMasterCatalogCategoryId(final Long categoryId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.createAlias("productSkus", "productSku", JoinType.LEFT_OUTER_JOIN);
criteria.createAlias("productSku.catalogCategoryMasterProductSkuRels", "catalogCategoryProductSkuRel", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.ne("catalogCategoryProductSkuRel.pk.catalogCategoryMaster.id", categoryId));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductMarketing> productMarketings = criteria.list();
return productMarketings;
}
public List<ProductMarketing> findProductMarketingsByVirtualCatalogCategoryId(final Long categoryId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.createAlias("productSkus", "productSku", JoinType.LEFT_OUTER_JOIN);
criteria.createAlias("productSku.catalogCategoryVirtualProductSkuRels", "catalogCategoryProductSkuRel", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("catalogCategoryProductSkuRel.pk.catalogCategoryVirtual.id", categoryId));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductMarketing> productMarketings = criteria.list();
return productMarketings;
}
public List<ProductMarketing> findProductMarketingsNotInThisVirtualCatalogCategoryId(final Long categoryId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketing.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.createAlias("productSkus", "productSku", JoinType.LEFT_OUTER_JOIN);
criteria.createAlias("productSku.catalogCategoryVirtualProductSkuRels", "catalogCategoryProductSkuRel", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.ne("catalogCategoryProductSkuRel.pk.catalogCategoryVirtual.id", categoryId));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductMarketing> productMarketings = criteria.list();
return productMarketings;
}
public ProductMarketing saveOrUpdateProductMarketing(final ProductMarketing productMarketing) {
if(productMarketing.getDateCreate() == null){
productMarketing.setDateCreate(new Date());
}
productMarketing.setDateUpdate(new Date());
if (productMarketing.getId() != null) {
if(em.contains(productMarketing)){
em.refresh(productMarketing);
}
ProductMarketing mergedProductMarketing = em.merge(productMarketing);
em.flush();
return mergedProductMarketing;
} else {
em.persist(productMarketing);
return productMarketing;
}
}
public void deleteProductMarketing(final ProductMarketing productMarketing) {
em.remove(productMarketing);
}
// PRODUCT MARKETING COMMENT/RATE
@SuppressWarnings("unchecked")
public List<ProductMarketingCustomerComment> findProductMarketingCustomerCommentsByProductCode(final Long productMarketingId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketingCustomerComment.class);
criteria.add(Restrictions.eq("productMarketingId", productMarketingId));
return criteria.list();
}
@SuppressWarnings("unchecked")
public List<ProductMarketingCustomerRate> findProductMarketingCustomerRatesByProductCode(final Long productMarketingId, final String type, Object... params) {
Criteria criteria = createDefaultCriteria(ProductMarketingCustomerRate.class);
criteria.add(Restrictions.eq("productMarketingId", productMarketingId));
criteria.add(Restrictions.eq("type", type));
return criteria.list();
}
public Float calculateProductMarketingCustomerRatesByProductId(final Long productMarketingId) {
String sql = "select avg(rate) from ProductMarketingCustomerRate where productMarketingId=:productMarketingId";
Query query = getSession().createQuery(sql);
query.setLong("productMarketingId", productMarketingId);
Double value = (Double) query.uniqueResult();
if(value != null){
return value.floatValue();
}
return 0F;
}
public ProductMarketingCustomerRate saveOrUpdateProductMarketingCustomerRate(final ProductMarketingCustomerRate productMarketingCustomerRate) {
if(productMarketingCustomerRate.getDateCreate() == null){
productMarketingCustomerRate.setDateCreate(new Date());
}
productMarketingCustomerRate.setDateUpdate(new Date());
if (productMarketingCustomerRate.getId() != null) {
if(em.contains(productMarketingCustomerRate)){
em.refresh(productMarketingCustomerRate);
}
ProductMarketingCustomerRate mergedProductMarketingCustomerRate = em.merge(productMarketingCustomerRate);
em.flush();
return mergedProductMarketingCustomerRate;
} else {
em.persist(productMarketingCustomerRate);
return productMarketingCustomerRate;
}
}
public void deleteProductMarketingCustomerRate(final ProductMarketingCustomerRate productMarketingCustomerRate) {
em.remove(productMarketingCustomerRate);
}
public ProductMarketingCustomerComment saveOrUpdateProductMarketingCustomerComment(final ProductMarketingCustomerComment productMarketingCustomerComment) {
if(productMarketingCustomerComment.getDateCreate() == null){
productMarketingCustomerComment.setDateCreate(new Date());
}
productMarketingCustomerComment.setDateUpdate(new Date());
if (productMarketingCustomerComment.getId() != null) {
if(em.contains(productMarketingCustomerComment)){
em.refresh(productMarketingCustomerComment);
}
ProductMarketingCustomerComment mergedProductMarketingCustomerComment = em.merge(productMarketingCustomerComment);
em.flush();
return mergedProductMarketingCustomerComment;
} else {
em.persist(productMarketingCustomerComment);
return productMarketingCustomerComment;
}
}
public void deleteProductMarketingCustomerComment(final ProductMarketingCustomerComment productMarketingCustomerComment) {
em.remove(productMarketingCustomerComment);
}
// PRODUCT MARKETING ASSET
public Asset getProductMarketingAssetById(final Long productMarketingAssetId, Object... params) {
Criteria criteria = createDefaultCriteria(Asset.class);
criteria.add(Restrictions.eq("id", productMarketingAssetId));
Asset productMarketingAsset = (Asset) criteria.uniqueResult();
return productMarketingAsset;
}
public Asset saveOrUpdateProductMarketingAsset(final Asset productMarketingAsset) {
if(productMarketingAsset.getDateCreate() == null){
productMarketingAsset.setDateCreate(new Date());
}
productMarketingAsset.setDateUpdate(new Date());
if (productMarketingAsset.getId() != null) {
if(em.contains(productMarketingAsset)){
em.refresh(productMarketingAsset);
}
Asset mergedAsset = em.merge(productMarketingAsset);
em.flush();
return mergedAsset;
} else {
em.persist(productMarketingAsset);
return productMarketingAsset;
}
}
public void deleteProductMarketingAsset(final Asset productMarketingAsset) {
em.remove(productMarketingAsset);
}
protected FetchPlan handleSpecificProductMarketingFetchMode(Criteria criteria, Object... params) {
if (params != null && params.length > 0) {
return super.handleSpecificFetchMode(criteria, params);
} else {
return super.handleSpecificFetchMode(criteria, FetchPlanGraphProduct.productMarketingDefaultFetchPlan());
}
}
// PRODUCT SKU
public ProductSku getProductSkuById(final Long productSkuId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductSku.class);
FetchPlan fetchPlan = handleSpecificProductSkuFetchMode(criteria, params);
criteria.add(Restrictions.eq("id", productSkuId));
ProductSku productSku = (ProductSku) criteria.uniqueResult();
if(productSku != null){
productSku.setFetchPlan(fetchPlan);
}
return productSku;
}
public ProductSku getProductSkuByCode(final String skuCode, Object... params) {
Criteria criteria = createDefaultCriteria(ProductSku.class);
FetchPlan fetchPlan = handleSpecificProductSkuFetchMode(criteria, params);
criteria.add(Restrictions.eq("code", handleCodeValue(skuCode)));
ProductSku productSku = (ProductSku) criteria.uniqueResult();
if(productSku != null){
productSku.setFetchPlan(fetchPlan);
}
return productSku;
}
public List<ProductSku> findProductSkusByproductMarketingId(final Long productMarketing, Object... params) {
Criteria criteria = createDefaultCriteria(ProductSku.class);
handleSpecificProductSkuFetchMode(criteria, params);
criteria.add(Restrictions.eq("productMarketing", productMarketing));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductSku> productSkus = criteria.list();
return productSkus;
}
public List<ProductSku> findProductSkus(final String text, Object... params) {
Criteria criteria = createDefaultCriteria(ProductSku.class);
handleSpecificProductSkuFetchMode(criteria, params);
criteria.add(Restrictions.or(Restrictions.eq("code", "%" + text + "%")));
criteria.add(Restrictions.or(Restrictions.eq("name", "%" + text + "%")));
criteria.add(Restrictions.or(Restrictions.eq("description", "%" + text + "%")));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductSku> productSkus = criteria.list();
return productSkus;
}
public List<ProductSku> findProductSkusByMasterCatalogCategoryId(final Long categoryId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductSku.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.createAlias("catalogCategoryMasterProductSkuRels", "catalogCategoryProductSkuRel", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("catalogCategoryProductSkuRel.pk.catalogCategoryMaster.id", categoryId));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductSku> productSkus = criteria.list();
return productSkus;
}
public List<ProductSku> findProductSkusNotInThisMasterCatalogCategoryId(final Long categoryId, Object... params) {
DetachedCriteria subquery = DetachedCriteria.forClass(ProductSku.class);
subquery.createAlias("catalogCategoryMasterProductSkuRels", "catalogCategoryProductSkuRel", JoinType.LEFT_OUTER_JOIN);
subquery.add(Restrictions.eq("catalogCategoryProductSkuRel.pk.catalogCategoryMaster.id", categoryId));
subquery.setProjection(Projections.property("id"));
Criteria criteria = createDefaultCriteria(ProductSku.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.add(Subqueries.notIn("id", subquery));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductSku> productSkus = criteria.list();
return productSkus;
}
public List<ProductSku> findProductSkusByVirtualCatalogCategoryId(final Long categoryId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductSku.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.createAlias("catalogCategoryVirtualProductSkuRels", "catalogCategoryProductSkuRel", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("catalogCategoryProductSkuRel.pk.catalogCategoryVirtual.id", categoryId));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductSku> productSkus = criteria.list();
return productSkus;
}
public List<ProductSku> findProductSkusNotInThisVirtualCatalogCategoryId(final Long categoryId, Object... params) {
Criteria criteriaSubListId = createDefaultCriteria(ProductSku.class);
criteriaSubListId.createAlias("catalogCategoryVirtualProductSkuRels", "catalogCategoryProductSkuRel", JoinType.LEFT_OUTER_JOIN);
criteriaSubListId.add(Restrictions.eq("catalogCategoryProductSkuRel.pk.catalogCategoryVirtual.id", categoryId));
// criteriaSubListId.setProjection(Projections.property("id"));
@SuppressWarnings("unchecked")
List<ProductSku> subProductSkus = criteriaSubListId.list();
List<Long> productSkuIds = new ArrayList<Long>();
for (Iterator<ProductSku> iterator = subProductSkus.iterator(); iterator.hasNext();) {
ProductSku productSku = (ProductSku) iterator.next();
productSkuIds.add(productSku.getId());
}
Criteria criteria = createDefaultCriteria(ProductSku.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.add(Restrictions.not(Restrictions.in("id", productSkuIds)));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductSku> productSkus = criteria.list();
return productSkus;
}
public List<ProductSku> findProductSkusByStoreId(final Long storeId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductSku.class);
handleSpecificProductMarketingFetchMode(criteria, params);
criteria.createAlias("stores", "stores", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("stores.id", storeId));
criteria.addOrder(Order.asc("id"));
@SuppressWarnings("unchecked")
List<ProductSku> productSkus = criteria.list();
return productSkus;
}
public ProductSku saveOrUpdateProductSku(final ProductSku productSku) {
if(productSku.getDateCreate() == null){
productSku.setDateCreate(new Date());
}
productSku.setDateUpdate(new Date());
if (productSku.getId() != null) {
if(em.contains(productSku)){
em.refresh(productSku);
}
ProductSku mergedProductSku = em.merge(productSku);
em.flush();
return mergedProductSku;
} else {
em.persist(productSku);
return productSku;
}
}
public void deleteProductSku(final ProductSku productSku) {
em.remove(productSku);
}
protected FetchPlan handleSpecificProductSkuFetchMode(Criteria criteria, Object... params) {
if (params != null && params.length > 0) {
return super.handleSpecificFetchMode(criteria, params);
} else {
return super.handleSpecificFetchMode(criteria, FetchPlanGraphProduct.productSkuDefaultFetchPlan());
}
}
// ASSET
public Asset getProductSkuAssetById(final Long productSkuAssetId, Object... params) {
Criteria criteria = createDefaultCriteria(Asset.class);
criteria.add(Restrictions.eq("id", productSkuAssetId));
Asset productSkuAsset = (Asset) criteria.uniqueResult();
return productSkuAsset;
}
public Asset saveOrUpdateProductSkuAsset(final Asset productSkuAsset) {
if(productSkuAsset.getDateCreate() == null){
productSkuAsset.setDateCreate(new Date());
}
productSkuAsset.setDateUpdate(new Date());
if (productSkuAsset.getId() != null) {
if(em.contains(productSkuAsset)){
em.refresh(productSkuAsset);
}
Asset mergedAsset = em.merge(productSkuAsset);
em.flush();
return mergedAsset;
} else {
em.persist(productSkuAsset);
return productSkuAsset;
}
}
public void deleteProductSkuAsset(final Asset productSkuAsset) {
em.remove(productSkuAsset);
}
// PRODUCT SKU OPTION
public ProductSkuOptionDefinition getProductSkuOptionDefinitionById(final Long productSkuOptionDefinitionId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductSkuOptionDefinition.class);
FetchPlan fetchPlan = handleSpecificProductSkuOptionDefinitionFetchMode(criteria, params);
criteria.add(Restrictions.eq("id", productSkuOptionDefinitionId));
ProductSkuOptionDefinition productSkuOptionDefinition = (ProductSkuOptionDefinition) criteria.uniqueResult();
if(productSkuOptionDefinition != null){
productSkuOptionDefinition.setFetchPlan(fetchPlan);
}
return productSkuOptionDefinition;
}
public ProductSkuOptionDefinition getProductSkuOptionDefinitionByCode(final String productSkuOptionDefinitionCode, Object... params) {
Criteria criteria = createDefaultCriteria(ProductSkuOptionDefinition.class);
FetchPlan fetchPlan = handleSpecificProductSkuOptionDefinitionFetchMode(criteria, params);
criteria.add(Restrictions.eq("code", handleCodeValue(productSkuOptionDefinitionCode)));
ProductSkuOptionDefinition productSkuOptionDefinition = (ProductSkuOptionDefinition) criteria.uniqueResult();
if(productSkuOptionDefinition != null){
productSkuOptionDefinition.setFetchPlan(fetchPlan);
}
return productSkuOptionDefinition;
}
public List<ProductSkuOptionDefinition> findAllProductSkuOptionDefinitions(Object... params) {
Criteria criteria = getSession().createCriteria(ProductSkuOptionDefinition.class);
handleSpecificProductSkuOptionDefinitionFetchMode(criteria, params);
@SuppressWarnings("unchecked")
List<ProductSkuOptionDefinition> productSkuOptionDefinitions = criteria.list();
return productSkuOptionDefinitions;
}
public ProductSkuOptionDefinition saveOrUpdateProductSkuOptionDefinition(final ProductSkuOptionDefinition productSkuOptionDefinition) {
if(productSkuOptionDefinition.getDateCreate() == null){
productSkuOptionDefinition.setDateCreate(new Date());
}
productSkuOptionDefinition.setDateUpdate(new Date());
if (productSkuOptionDefinition.getId() != null) {
if(em.contains(productSkuOptionDefinition)){
em.refresh(productSkuOptionDefinition);
}
ProductSkuOptionDefinition mergedProductSkuOptionDefinition = em.merge(productSkuOptionDefinition);
em.flush();
return mergedProductSkuOptionDefinition;
} else {
em.persist(productSkuOptionDefinition);
return productSkuOptionDefinition;
}
}
public void deleteProductSkuOptionDefinition(final ProductSkuOptionDefinition productSkuOptionDefinition) {
em.remove(productSkuOptionDefinition);
}
protected FetchPlan handleSpecificProductSkuOptionDefinitionFetchMode(Criteria criteria, Object... params) {
if (params != null && params.length > 0) {
return super.handleSpecificFetchMode(criteria, params);
} else {
return super.handleSpecificFetchMode(criteria, FetchPlanGraphProduct.productSkuOptionDefinitionDefaultFetchPlan());
}
}
// PRODUCT BRAND
public ProductBrand getProductBrandById(final Long productBrandId, Object... params) {
Criteria criteria = createDefaultCriteria(ProductBrand.class);
FetchPlan fetchPlan = handleSpecificProductBrandFetchMode(criteria, params);
criteria.add(Restrictions.eq("id", productBrandId));
ProductBrand productBrand = (ProductBrand) criteria.uniqueResult();
if(productBrand != null){
productBrand.setFetchPlan(fetchPlan);
}
return productBrand;
}
public ProductBrand getProductBrandByCode(final String productBrandCode, Object... params) {
Criteria criteria = createDefaultCriteria(ProductBrand.class);
FetchPlan fetchPlan = handleSpecificProductBrandFetchMode(criteria, params);
criteria.add(Restrictions.eq("code", handleCodeValue(productBrandCode)));
ProductBrand productBrand = (ProductBrand) criteria.uniqueResult();
if(productBrand != null){
productBrand.setFetchPlan(fetchPlan);
}
return productBrand;
}
public List<ProductBrand> findAllProductBrands(Object... params) {
Criteria criteria = getSession().createCriteria(ProductBrand.class);
handleSpecificProductBrandFetchMode(criteria, params);
@SuppressWarnings("unchecked")
List<ProductBrand> productBrands = criteria.list();
return productBrands;
}
public List<ProductBrand> findProductBrandsByCatalogCategoryCode(final String categoryCode, Object... params) {
Criteria criteria = getSession().createCriteria(ProductBrand.class);
handleSpecificProductBrandFetchMode(criteria, params);
criteria.createAlias("productMarketings", "productMarketing", JoinType.LEFT_OUTER_JOIN);
criteria.createAlias("productMarketing.productSkus", "productSku", JoinType.LEFT_OUTER_JOIN);
criteria.setFetchMode("productSku.defaultCatalogCategory", FetchMode.JOIN);
criteria.createAlias("productSku.defaultCatalogCategory", "defaultCatalogCategory", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("defaultCatalogCategory.code", handleCodeValue(categoryCode)));
@SuppressWarnings("unchecked")
List<ProductBrand> productBrands = criteria.list();
return productBrands;
}
public List<ProductBrand> findProductBrandsByText(String text, Object... params) {
Criteria criteria = createDefaultCriteria(ProductBrand.class);
handleSpecificProductBrandFetchMode(criteria, params);
criteria.add(Restrictions.or(Restrictions.like("name", text, MatchMode.ANYWHERE), Restrictions.like("description", text, MatchMode.ANYWHERE)));
@SuppressWarnings("unchecked")
List<ProductBrand> productBrands = criteria.list();
return productBrands;
}
public ProductBrand saveOrUpdateProductBrand(final ProductBrand productBrand) {
if(productBrand.getDateCreate() == null){
productBrand.setDateCreate(new Date());
}
productBrand.setDateUpdate(new Date());
if (productBrand.getId() != null) {
if(em.contains(productBrand)){
em.refresh(productBrand);
}
ProductBrand mergedProductBrand = em.merge(productBrand);
em.flush();
return mergedProductBrand;
} else {
em.persist(productBrand);
return productBrand;
}
}
public void deleteProductBrand(final ProductBrand productBrand) {
em.remove(productBrand);
}
protected FetchPlan handleSpecificProductBrandFetchMode(Criteria criteria, Object... params) {
if (params != null && params.length > 0) {
return super.handleSpecificFetchMode(criteria, params);
} else {
return super.handleSpecificFetchMode(criteria, FetchPlanGraphProduct.productBrandDefaultFetchPlan());
}
}
}