public void update(Product product) throws EntityDoesNotExistException, InvalidEntityException
{
this.dao.begin();
Product originalProduct = this.findBySlug(product.getSlug(), product.getParentId());
if (originalProduct == null) {
this.dao.commit();
throw new EntityDoesNotExistException();
}
if (!product.getAddons().isLoaded()) {
product.setAddons(originalProduct.getAddons().get());
}
getObservationManager().notify(new EntityUpdatingEvent(), product);
product.setId(originalProduct.getId());
Integer updatedRows = this.dao.updateProduct(product);
this.dao.createOrUpdateAddons(product);
if (product.getLocalizedVersions() != null && !product.getLocalizedVersions().isEmpty()) {
Map<Locale, Map<String, Object>> localizedVersions = product.getLocalizedVersions();
for (Locale locale : localizedVersions.keySet()) {
this.dao.createOrUpdateTranslation(product.getId(), locale, localizedVersions.get(locale));
}
}
this.dao.commit();
if (updatedRows <= 0) {
throw new StoreException("No rows was updated when updating product");
}
getObservationManager().notify(new EntityUpdatedEvent(), product);
}