shopizer-developers
Changes
.classpath 5(+0 -5)
pom.xml 4(+2 -2)
shopizer-canadapost/.classpath 5(+5 -0)
sm-core/src/main/java/com/salesmanager/core/business/services/reference/language/LanguageService.java 2(+2 -0)
sm-core/src/main/java/com/salesmanager/core/business/services/reference/language/LanguageServiceImpl.java 5(+5 -0)
sm-shop/pom.xml 9(+2 -7)
sm-shop/SALESMANAGER.h2.db 0(+0 -0)
sm-shop/SALESMANAGER.lock.db 4(+2 -2)
sm-shop/src/main/java/com/salesmanager/shop/store/controller/items/facade/ProductItemsFacade.java 14(+14 -0)
sm-shop/src/main/java/com/salesmanager/shop/store/controller/items/facade/ProductItemsFacadeImpl.java 36(+36 -0)
Details
.classpath 5(+0 -5)
diff --git a/.classpath b/.classpath
index 5e66601..b3f4cb2 100644
--- a/.classpath
+++ b/.classpath
@@ -17,11 +17,6 @@
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
- <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v7.0">
- <attributes>
- <attribute name="owner.project.facets" value="jst.web"/>
- </attributes>
- </classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="output" path="bin"/>
pom.xml 4(+2 -2)
diff --git a/pom.xml b/pom.xml
index f0e4b9e..de4c89e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,11 +43,11 @@
<dependencies>
- <dependency>
+<!-- <dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>${javax.el.version}</version>
- </dependency>
+ </dependency> -->
<!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
<dependency>
shopizer-canadapost/.classpath 5(+5 -0)
diff --git a/shopizer-canadapost/.classpath b/shopizer-canadapost/.classpath
index c30f415..ce530e7 100644
--- a/shopizer-canadapost/.classpath
+++ b/shopizer-canadapost/.classpath
@@ -28,5 +28,10 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
diff --git a/shopizer-shipping-distance-module/.classpath b/shopizer-shipping-distance-module/.classpath
index c30f415..ce530e7 100644
--- a/shopizer-shipping-distance-module/.classpath
+++ b/shopizer-shipping-distance-module/.classpath
@@ -28,5 +28,10 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
diff --git a/sm-core/src/main/java/com/salesmanager/core/business/services/reference/language/LanguageService.java b/sm-core/src/main/java/com/salesmanager/core/business/services/reference/language/LanguageService.java
index 8ec2f68..f3c844a 100644
--- a/sm-core/src/main/java/com/salesmanager/core/business/services/reference/language/LanguageService.java
+++ b/sm-core/src/main/java/com/salesmanager/core/business/services/reference/language/LanguageService.java
@@ -19,4 +19,6 @@ public interface LanguageService extends SalesManagerEntityService<Integer, Lang
Locale toLocale(Language language);
Language toLanguage(Locale locale);
+
+ Language defaultLanguage();
}
diff --git a/sm-core/src/main/java/com/salesmanager/core/business/services/reference/language/LanguageServiceImpl.java b/sm-core/src/main/java/com/salesmanager/core/business/services/reference/language/LanguageServiceImpl.java
index 017c558..8b72793 100644
--- a/sm-core/src/main/java/com/salesmanager/core/business/services/reference/language/LanguageServiceImpl.java
+++ b/sm-core/src/main/java/com/salesmanager/core/business/services/reference/language/LanguageServiceImpl.java
@@ -102,5 +102,10 @@ public class LanguageServiceImpl extends SalesManagerEntityServiceImpl<Integer,
return langs;
}
+
+ @Override
+ public Language defaultLanguage() {
+ return toLanguage(Locale.ENGLISH);
+ }
}
diff --git a/sm-shop/.settings/org.eclipse.wst.common.component b/sm-shop/.settings/org.eclipse.wst.common.component
index b7e7066..725eca1 100644
--- a/sm-shop/.settings/org.eclipse.wst.common.component
+++ b/sm-shop/.settings/org.eclipse.wst.common.component
@@ -13,7 +13,7 @@
<dependent-module archiveName="shopizer-shipping-distance-processor-2.0.5-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/shopizer-shipping-distance-processor/shopizer-shipping-distance-processor">
<dependency-type>uses</dependency-type>
</dependent-module>
- <dependent-module archiveName="shopizer-shipping-canadapost-module-2.0.5-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/shopizer-shipping-canadapost-module/shopizer-shipping-canadapost-module">
+ <dependent-module archiveName="shopizer-shipping-canadapost-module-2.0.5-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/shopizer-canadapost/shopizer-canadapost">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="sm-core-model-2.0.5-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/sm-core-model/sm-core-model">
diff --git a/sm-shop/files/store/StoreRepository.dat b/sm-shop/files/store/StoreRepository.dat
index f448230..02fa490 100644
Binary files a/sm-shop/files/store/StoreRepository.dat and b/sm-shop/files/store/StoreRepository.dat differ
sm-shop/pom.xml 9(+2 -7)
diff --git a/sm-shop/pom.xml b/sm-shop/pom.xml
index 8d2c783..cdca6be 100644
--- a/sm-shop/pom.xml
+++ b/sm-shop/pom.xml
@@ -69,15 +69,10 @@
<scope>provided</scope>
</dependency>
-
- <!-- ... -->
- <!--<dependency>
+ <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
-
- </dependency>-->
- <!-- ... -->
-
+ </dependency>
<dependency>
<groupId>org.springframework.mobile</groupId>
sm-shop/SALESMANAGER.h2.db 0(+0 -0)
diff --git a/sm-shop/SALESMANAGER.h2.db b/sm-shop/SALESMANAGER.h2.db
index d72a99a..a43d833 100644
Binary files a/sm-shop/SALESMANAGER.h2.db and b/sm-shop/SALESMANAGER.h2.db differ
sm-shop/SALESMANAGER.lock.db 4(+2 -2)
diff --git a/sm-shop/SALESMANAGER.lock.db b/sm-shop/SALESMANAGER.lock.db
index 64f3cf0..391217a 100644
--- a/sm-shop/SALESMANAGER.lock.db
+++ b/sm-shop/SALESMANAGER.lock.db
@@ -1,4 +1,4 @@
#FileLock
-#Tue Jan 24 09:55:15 EST 2017
-id=159d0f940cfe8e170eaeb477c167cff8f72abedebfe
+#Thu Jan 26 12:48:39 EST 2017
+id=159dbe4bc4864a9cf8a250fbf96f4a9c0596967b14e
method=file
diff --git a/sm-shop/src/main/java/com/salesmanager/shop/controller/FilesController.java b/sm-shop/src/main/java/com/salesmanager/shop/controller/FilesController.java
index 1d24606..177221c 100644
--- a/sm-shop/src/main/java/com/salesmanager/shop/controller/FilesController.java
+++ b/sm-shop/src/main/java/com/salesmanager/shop/controller/FilesController.java
@@ -38,7 +38,7 @@ public class FilesController extends AbstractController {
* @throws IOException
* @throws ServiceException
*/
- @RequestMapping("/files/{storeCode}/{fileName}.{extension}")
+ @RequestMapping("/static/files/{storeCode}/{fileName}.{extension}")
public @ResponseBody byte[] downloadFile(@PathVariable final String storeCode, @PathVariable final String fileName, @PathVariable final String extension, HttpServletRequest request, HttpServletResponse response) throws IOException, ServiceException {
// example -> /files/<store code>/myfile.css
diff --git a/sm-shop/src/main/java/com/salesmanager/shop/store/controller/items/facade/ProductItemsFacade.java b/sm-shop/src/main/java/com/salesmanager/shop/store/controller/items/facade/ProductItemsFacade.java
index eb76427..5b43b4d 100644
--- a/sm-shop/src/main/java/com/salesmanager/shop/store/controller/items/facade/ProductItemsFacade.java
+++ b/sm-shop/src/main/java/com/salesmanager/shop/store/controller/items/facade/ProductItemsFacade.java
@@ -1,5 +1,7 @@
package com.salesmanager.shop.store.controller.items.facade;
+import java.util.List;
+
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.language.Language;
import com.salesmanager.shop.model.catalog.product.ReadableProductList;
@@ -14,4 +16,16 @@ public interface ProductItemsFacade {
*/
ReadableProductList listItemsByManufacturer(MerchantStore store, Language language, Long manufacturerId, int startCount, int maxCount) throws Exception;
+ /**
+ * List product items by id
+ * @param store
+ * @param language
+ * @param ids
+ * @param startCount
+ * @param maxCount
+ * @return
+ * @throws Exception
+ */
+ ReadableProductList listItemsByIds(MerchantStore store, Language language, List<Long> ids, int startCount, int maxCount) throws Exception;
+
}
diff --git a/sm-shop/src/main/java/com/salesmanager/shop/store/controller/items/facade/ProductItemsFacadeImpl.java b/sm-shop/src/main/java/com/salesmanager/shop/store/controller/items/facade/ProductItemsFacadeImpl.java
index bf99eaf..46e44b9 100644
--- a/sm-shop/src/main/java/com/salesmanager/shop/store/controller/items/facade/ProductItemsFacadeImpl.java
+++ b/sm-shop/src/main/java/com/salesmanager/shop/store/controller/items/facade/ProductItemsFacadeImpl.java
@@ -13,6 +13,8 @@ import com.salesmanager.shop.utils.ImageFilePath;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
+import java.util.List;
+
import javax.inject.Inject;
@Component
@@ -62,5 +64,39 @@ public class ProductItemsFacadeImpl implements ProductItemsFacade {
return productList;
}
+
+ @Override
+ public ReadableProductList listItemsByIds(MerchantStore store, Language language, List<Long> ids, int startCount,
+ int maxCount) throws Exception {
+
+
+ ProductCriteria productCriteria = new ProductCriteria();
+ productCriteria.setMaxCount(maxCount);
+ productCriteria.setStartIndex(startCount);
+ productCriteria.setProductIds(ids);
+
+
+ com.salesmanager.core.model.catalog.product.ProductList products = productService.listByStore(store, language, productCriteria);
+
+
+ ReadableProductPopulator populator = new ReadableProductPopulator();
+ populator.setPricingService(pricingService);
+ populator.setimageUtils(imageUtils);
+
+
+ ReadableProductList productList = new ReadableProductList();
+ for(Product product : products.getProducts()) {
+
+ //create new proxy product
+ ReadableProduct readProduct = populator.populate(product, new ReadableProduct(), store, language);
+ productList.getProducts().add(readProduct);
+
+ }
+
+ productList.setTotalCount(products.getTotalCount());
+
+
+ return productList;
+ }
}
diff --git a/sm-shop/src/main/java/com/salesmanager/shop/store/services/product/ProductItemsRESTController.java b/sm-shop/src/main/java/com/salesmanager/shop/store/services/product/ProductItemsRESTController.java
index 76a72ef..58c0f12 100644
--- a/sm-shop/src/main/java/com/salesmanager/shop/store/services/product/ProductItemsRESTController.java
+++ b/sm-shop/src/main/java/com/salesmanager/shop/store/services/product/ProductItemsRESTController.java
@@ -6,11 +6,14 @@ import com.salesmanager.core.business.services.catalog.product.ProductService;
import com.salesmanager.core.business.services.catalog.product.attribute.ProductOptionService;
import com.salesmanager.core.business.services.catalog.product.attribute.ProductOptionValueService;
import com.salesmanager.core.business.services.catalog.product.manufacturer.ManufacturerService;
+import com.salesmanager.core.business.services.catalog.product.relationship.ProductRelationshipService;
import com.salesmanager.core.business.services.catalog.product.review.ProductReviewService;
import com.salesmanager.core.business.services.customer.CustomerService;
import com.salesmanager.core.business.services.merchant.MerchantStoreService;
import com.salesmanager.core.business.services.reference.language.LanguageService;
import com.salesmanager.core.business.services.tax.TaxClassService;
+import com.salesmanager.core.model.catalog.product.Product;
+import com.salesmanager.core.model.catalog.product.relationship.ProductRelationship;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.language.Language;
import com.salesmanager.shop.constants.Constants;
@@ -18,6 +21,8 @@ import com.salesmanager.shop.model.catalog.product.ReadableProductList;
import com.salesmanager.shop.store.controller.items.facade.ProductItemsFacade;
import com.salesmanager.shop.store.controller.product.facade.ProductFacade;
import com.salesmanager.shop.utils.ImageFilePath;
+import com.salesmanager.shop.utils.LanguageUtils;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,6 +36,9 @@ import org.springframework.web.bind.annotation.ResponseBody;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
/**
@@ -43,49 +51,55 @@ import java.util.Map;
@RequestMapping("/services")
public class ProductItemsRESTController {
- @Autowired
+ @Inject
private MerchantStoreService merchantStoreService;
- @Autowired
+ @Inject
private CategoryService categoryService;
- @Autowired
+ @Inject
private CustomerService customerService;
- @Autowired
+ @Inject
private ProductService productService;
- @Autowired
+ @Inject
private ProductFacade productFacade;
@Inject
private ProductItemsFacade productItemsFacade;
- @Autowired
+ @Inject
private ProductReviewService productReviewService;
- @Autowired
+ @Inject
private PricingService pricingService;
- @Autowired
+ @Inject
private ProductOptionService productOptionService;
- @Autowired
+ @Inject
private ProductOptionValueService productOptionValueService;
- @Autowired
+ @Inject
private TaxClassService taxClassService;
- @Autowired
+ @Inject
private ManufacturerService manufacturerService;
- @Autowired
+ @Inject
private LanguageService languageService;
- @Autowired
+ @Inject
@Qualifier("img")
private ImageFilePath imageUtils;
+ @Inject
+ private LanguageUtils languageUtils;
+
+ @Inject
+ private ProductRelationshipService productRelationshipService;
+
private static final Logger LOGGER = LoggerFactory.getLogger(ProductItemsRESTController.class);
@@ -166,6 +180,73 @@ public class ProductItemsRESTController {
}
+ /**
+ * Query for a product group
+ * public/products/{store code}/products/group/{id}?lang=fr|en
+ * no lang it will take session lang or default store lang
+ * @param store
+ * @param language
+ * @param groupCode
+ * @param request
+ * @param response
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/public/{store}/products/group/{code}")
+ @ResponseBody
+ public ReadableProductList getProductItemsByGroup(@PathVariable String store, @PathVariable final String code, HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+ try {
+
+ MerchantStore merchantStore = (MerchantStore)request.getAttribute(Constants.MERCHANT_STORE);
+
+
+ if(merchantStore!=null) {
+ if(!merchantStore.getCode().equals(store)) {
+ merchantStore = null; //reset for the current request
+ }
+ }
+
+ if(merchantStore== null) {
+ merchantStore = merchantStoreService.getByCode(store);
+ }
+
+ if(merchantStore==null) {
+ LOGGER.error("Merchant store is null for code " + store);
+ response.sendError(503, "Merchant store is null for code " + store);//TODO localized message
+ return null;
+ }
+
+
+
+ Language lang = languageUtils.getRESTLanguage(request, merchantStore);
+
+ //get product group
+ List<ProductRelationship> group = productRelationshipService.getByGroup(merchantStore, code, lang);
+
+ if(group!=null) {
+ List<Long> ids = new ArrayList<Long>();
+ for(ProductRelationship relationship : group) {
+ Product product = relationship.getRelatedProduct();
+ ids.add(product.getId());
+ }
+
+ ReadableProductList list = productItemsFacade.listItemsByIds(merchantStore, lang, ids, 0, 0);
+ return list;
+ }
+
+
+
+ } catch (Exception e) {
+ LOGGER.error("Error while getting products",e);
+ response.sendError(503, "An error occured while retrieving products " + e.getMessage());
+ }
+
+ return null;
+
+ }
+
+
diff --git a/sm-shop/src/main/java/com/salesmanager/shop/utils/AbstractimageFilePath.java b/sm-shop/src/main/java/com/salesmanager/shop/utils/AbstractimageFilePath.java
index 65f35b1..15a7f38 100644
--- a/sm-shop/src/main/java/com/salesmanager/shop/utils/AbstractimageFilePath.java
+++ b/sm-shop/src/main/java/com/salesmanager/shop/utils/AbstractimageFilePath.java
@@ -156,8 +156,7 @@ public abstract class AbstractimageFilePath implements ImageFilePath {
* @return
*/
public String buildStaticContentFilePath(MerchantStore store, String fileName) {
- return new StringBuilder().append(getBasePath()).append(Constants.FILES_URI).append(Constants.SLASH).append(store.getCode()).append(Constants.SLASH).append(FileContentType.STATIC_FILE).append(Constants.SLASH)
- .append(fileName).toString();
+ return new StringBuilder().append(getBasePath()).append(Constants.FILES_URI).append(Constants.SLASH).append(store.getCode()).append(Constants.SLASH).append(fileName).toString();
}
diff --git a/sm-shop/src/main/java/com/salesmanager/shop/utils/LanguageUtils.java b/sm-shop/src/main/java/com/salesmanager/shop/utils/LanguageUtils.java
index da77924..17cb38c 100644
--- a/sm-shop/src/main/java/com/salesmanager/shop/utils/LanguageUtils.java
+++ b/sm-shop/src/main/java/com/salesmanager/shop/utils/LanguageUtils.java
@@ -4,6 +4,9 @@ import com.salesmanager.core.business.services.reference.language.LanguageServic
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.language.Language;
import com.salesmanager.shop.constants.Constants;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.Validate;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.LocaleResolver;
@@ -88,5 +91,49 @@ public class LanguageUtils {
return language;
}
+
+ /**
+ * Should be used by rest web services
+ * @param request
+ * @param store
+ * @return
+ * @throws Exception
+ */
+ public Language getRESTLanguage(HttpServletRequest request, MerchantStore store) throws Exception {
+
+ Validate.notNull(request,"HttpServletRequest must not be null");
+ Validate.notNull(store,"MerchantStore must not be null");
+
+ Language language = null;
+
+
+ String lang = request.getParameter(Constants.LANG);
+
+ if(StringUtils.isBlank(lang)) {
+ //try with HttpSession
+ language = (Language) request.getSession().getAttribute(Constants.LANGUAGE);
+ if(language==null) {
+ language = store.getDefaultLanguage();
+ }
+
+ if(language==null) {
+ language = languageService.defaultLanguage();
+ }
+ } else {
+ language = languageService.getByCode(lang);
+ if(language==null) {
+ language = (Language) request.getSession().getAttribute(Constants.LANGUAGE);
+ if(language==null) {
+ language = store.getDefaultLanguage();
+ }
+
+ if(language==null) {
+ language = languageService.defaultLanguage();
+ }
+ }
+ }
+
+ return language;
+ }
}