shopizer-developers

Fixed file uploads

1/26/2017 6:21:15 PM

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>
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>
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
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;
+	}
 
 }