use of com.salesmanager.core.model.catalog.product.attribute.ProductOption in project shopizer by shopizer-ecommerce.
the class CategoryFacadeImpl method categoryProductVariants.
@Override
public List<ReadableProductVariant> categoryProductVariants(Long categoryId, MerchantStore store, Language language) {
Category category = categoryService.getById(categoryId, store.getId());
List<ReadableProductVariant> variants = new ArrayList<ReadableProductVariant>();
if (category == null) {
throw new ResourceNotFoundException("Category [" + categoryId + "] not found");
}
try {
List<ProductAttribute> attributes = productAttributeService.getProductAttributesByCategoryLineage(store, category.getLineage(), language);
/**
* Option NAME OptionValueName OptionValueName
*/
Map<String, List<com.salesmanager.shop.model.catalog.product.attribute.ProductOptionValue>> rawFacet = new HashMap<String, List<com.salesmanager.shop.model.catalog.product.attribute.ProductOptionValue>>();
Map<String, ProductOption> references = new HashMap<String, ProductOption>();
for (ProductAttribute attr : attributes) {
references.put(attr.getProductOption().getCode(), attr.getProductOption());
List<com.salesmanager.shop.model.catalog.product.attribute.ProductOptionValue> values = rawFacet.get(attr.getProductOption().getCode());
if (values == null) {
values = new ArrayList<com.salesmanager.shop.model.catalog.product.attribute.ProductOptionValue>();
rawFacet.put(attr.getProductOption().getCode(), values);
}
if (attr.getProductOptionValue() != null) {
Optional<ProductOptionValueDescription> desc = attr.getProductOptionValue().getDescriptions().stream().filter(o -> o.getLanguage().getId() == language.getId()).findFirst();
com.salesmanager.shop.model.catalog.product.attribute.ProductOptionValue val = new com.salesmanager.shop.model.catalog.product.attribute.ProductOptionValue();
val.setCode(attr.getProductOption().getCode());
String order = attr.getAttributeSortOrder();
val.setSortOrder(order == null ? attr.getId().intValue() : Integer.parseInt(attr.getAttributeSortOrder()));
if (desc.isPresent()) {
val.setName(desc.get().getName());
} else {
val.setName(attr.getProductOption().getCode());
}
values.add(val);
}
}
// for each reference set Option
Iterator<Entry<String, ProductOption>> it = references.entrySet().iterator();
while (it.hasNext()) {
@SuppressWarnings("rawtypes") Map.Entry pair = (Map.Entry) it.next();
ProductOption option = (ProductOption) pair.getValue();
List<com.salesmanager.shop.model.catalog.product.attribute.ProductOptionValue> values = rawFacet.get(option.getCode());
ReadableProductVariant productVariant = new ReadableProductVariant();
Optional<ProductOptionDescription> optionDescription = option.getDescriptions().stream().filter(o -> o.getLanguage().getId() == language.getId()).findFirst();
if (optionDescription.isPresent()) {
productVariant.setName(optionDescription.get().getName());
productVariant.setId(optionDescription.get().getId());
productVariant.setCode(optionDescription.get().getProductOption().getCode());
List<ReadableProductVariantValue> optionValues = new ArrayList<ReadableProductVariantValue>();
for (com.salesmanager.shop.model.catalog.product.attribute.ProductOptionValue value : values) {
ReadableProductVariantValue v = new ReadableProductVariantValue();
v.setCode(value.getCode());
v.setName(value.getName());
v.setDescription(value.getName());
v.setOption(option.getId());
v.setValue(value.getId());
v.setOrder(option.getProductOptionSortOrder());
optionValues.add(v);
}
Comparator<ReadableProductVariantValue> orderComparator = Comparator.comparingInt(ReadableProductVariantValue::getOrder);
// Arrays.sort(employees, employeeSalaryComparator);
List<ReadableProductVariantValue> readableValues = optionValues.stream().sorted(orderComparator).collect(Collectors.toList());
// sort by name
// remove duplicates
readableValues = optionValues.stream().distinct().collect(Collectors.toList());
readableValues.sort(Comparator.comparing(ReadableProductVariantValue::getName));
productVariant.setOptions(readableValues);
variants.add(productVariant);
}
}
return variants;
} catch (Exception e) {
throw new ServiceRuntimeException("An error occured while retrieving ProductAttributes", e);
}
}
use of com.salesmanager.core.model.catalog.product.attribute.ProductOption in project shopizer by shopizer-ecommerce.
the class ProductOptionServiceImpl method delete.
@Override
public void delete(ProductOption entity) throws ServiceException {
// remove all attributes having this option
List<ProductAttribute> attributes = productAttributeService.getByOptionId(entity.getMerchantStore(), entity.getId());
for (ProductAttribute attribute : attributes) {
productAttributeService.delete(attribute);
}
ProductOption option = this.getById(entity.getId());
// remove option
super.delete(option);
}
use of com.salesmanager.core.model.catalog.product.attribute.ProductOption in project shopizer by shopizer-ecommerce.
the class ProductOptionFacadeImpl method options.
@Override
public ReadableProductOptionList options(MerchantStore store, Language language, String name, int page, int count) {
Validate.notNull(store, "MerchantStore should not be null");
Page<ProductOption> options = productOptionService.getByMerchant(store, null, name, page, count);
ReadableProductOptionList valueList = new ReadableProductOptionList();
valueList.setTotalPages(options.getTotalPages());
valueList.setRecordsTotal(options.getTotalElements());
valueList.setNumber(options.getNumber());
List<ReadableProductOptionEntity> values = options.getContent().stream().map(option -> readableMapper.convert(option, store, null)).collect(Collectors.toList());
valueList.setOptions(values);
return valueList;
}
use of com.salesmanager.core.model.catalog.product.attribute.ProductOption in project shopizer by shopizer-ecommerce.
the class ProductOptionFacadeImpl method getOption.
@Override
public ReadableProductOptionEntity getOption(Long optionId, MerchantStore store, Language language) {
Validate.notNull(optionId, "Option id cannot be null");
Validate.notNull(store, "Store cannot be null");
ProductOption option = productOptionService.getById(store, optionId);
if (option == null) {
throw new ResourceNotFoundException("Option id [" + optionId + "] not found");
}
return readableMapper.convert(option, store, language);
}
use of com.salesmanager.core.model.catalog.product.attribute.ProductOption in project shopizer by shopizer-ecommerce.
the class ProductOptionFacadeImpl method saveOption.
@Override
public ReadableProductOptionEntity saveOption(PersistableProductOptionEntity option, MerchantStore store, Language language) {
Validate.notNull(option, "ProductOption cannot be null");
Validate.notNull(store, "MerchantStore cannot be null");
ProductOption optionModel = new ProductOption();
if (option.getId() != null && option.getId().longValue() > 0) {
optionModel = productOptionService.getById(store, option.getId());
if (optionModel == null) {
throw new ResourceNotFoundException("ProductOption not found for if [" + option.getId() + "] and store [" + store.getCode() + "]");
}
}
optionModel = persistableeMapper.merge(option, optionModel, store, language);
try {
productOptionService.saveOrUpdate(optionModel);
} catch (ServiceException e) {
throw new ServiceRuntimeException("An exception occured while saving ProductOption", e);
}
optionModel = productOptionService.getById(store, optionModel.getId());
ReadableProductOptionEntity readable = readableMapper.convert(optionModel, store, language);
return readable;
}
Aggregations