shopizer-memoizeit
Changes
README.md 2(+1 -1)
shopizer/sm-core/.classpath 178(+178 -0)
shopizer/sm-core/.project 64(+30 -34)
shopizer/sm-core/pom.xml 59(+22 -37)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/category/dao/CategoryDaoImpl.java 6(+3 -3)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/dao/manufacturer/ManufacturerDao.java 2(+2 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/dao/manufacturer/ManufacturerDaoImpl.java 17(+17 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/service/manufacturer/ManufacturerService.java 2(+2 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/service/manufacturer/ManufacturerServiceImpl.java 5(+5 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/dao/ShippingOriginDAO.java 13(+13 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/dao/ShippingOriginDAOImpl.java 50(+50 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingOriginService.java 20(+20 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingOriginServiceImpl.java 35(+35 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingServiceImpl.java 52(+46 -6)
shopizer/sm-core/src/main/java/com/salesmanager/core/business/shoppingcart/service/ShoppingCartServiceImpl.java 1(+1 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CanadaPostShippingQuote.java 4(+3 -1)
shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CustomShippingQuoteRules.java 159(+159 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CustomWeightBasedShippingQuote.java 5(+4 -1)
shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/ShippingDecisionPreProcessorImpl.java 159(+159 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/ShippingInputParameters.java 76(+76 -0)
shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/UPSShippingQuote.java 5(+4 -1)
shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/USPSShippingQuote.java 5(+4 -1)
shopizer/sm-core/src/main/resources/spring/processors/shopizer-core-shipping-processors.xml 23(+23 -0)
shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/CatalogSalesManagerTestCase.java 4(+4 -0)
shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/SearchByProductAttributeTestCase.java 3(+2 -1)
shopizer/sm-core/src/test/java/com/salesmanager/test/core/AbstractSalesManagerCoreTestCase.java 11(+0 -11)
shopizer/sm-core/src/test/java/com/salesmanager/test/manufacturer/ManufacturerTestCase.java 4(+3 -1)
shopizer/sm-core/src/test/java/com/salesmanager/test/shipping/ShippingMethodDecisionTestCase.java 94(+94 -0)
shopizer/sm-core/src/test/java/com/salesmanager/test/shoppingcart/ShoppingCartTestCase.java 2(+2 -0)
shopizer/sm-core-model/.classpath 93(+93 -0)
shopizer/sm-core-model/.project 59(+25 -34)
shopizer/sm-core-model/pom.xml 6(+3 -3)
shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/catalog/category/model/Category.java 2(+1 -1)
shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/catalog/product/model/manufacturer/Manufacturer.java 19(+18 -1)
shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/common/model/Delivery.java 1(+0 -1)
shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingOrigin.java 149(+149 -0)
shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingProduct.java 12(+12 -0)
shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingQuote.java 27(+21 -6)
shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/system/model/IntegrationConfiguration.java 14(+13 -1)
shopizer/sm-core-modules/.classpath 87(+87 -0)
shopizer/sm-core-modules/.project 61(+27 -34)
shopizer/sm-core-modules/pom.xml 5(+1 -4)
shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/constants/Constants.java 7(+7 -0)
shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/integration/shipping/model/ShippingQuoteModule.java 4(+3 -1)
shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/integration/shipping/model/ShippingQuotePreProcessModule.java 37(+37 -0)
shopizer/sm-shop/.classpath 202(+202 -0)
shopizer/sm-shop/.project 72(+39 -33)
shopizer/sm-shop/pom.xml 41(+23 -18)
shopizer/sm-shop/src/main/java/com/salesmanager/web/admin/controller/products/ManufacturerController.java 69(+69 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/admin/controller/shipping/ShippingOriginController.java 171(+171 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/CategoryEntity.java 14(+7 -7)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/PersistableCategory.java 9(+9 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/ReadableCategory.java 17(+14 -3)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/manufacturer/Manufacturer.java 7(+7 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/manufacturer/ManufacturerEntity.java 1(+1 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOption.java 7(+7 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionEntity.java 9(+2 -7)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionValue.java 7(+7 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionValueEntity.java 9(+2 -7)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/ProductPriceEntity.java 55(+55 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/ReadableProduct.java 3(+1 -2)
shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/PersistableCategoryPopulator.java 24(+20 -4)
shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/PersistableProductPopulator.java 39(+35 -4)
shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableCategoryPopulator.java 4(+3 -1)
shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableFinalPricePopulator.java 58(+58 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableProductPopulator.java 8(+8 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableProductPricePopulator.java 17(+11 -6)
shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/manufacturer/PersistableManufacturerPopulator.java 1(+1 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/manufacturer/ReadableManufacturerPopulator.java 1(+1 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/services/controller/product/ShopProductRESTController.java 18(+12 -6)
shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/category/facade/CategoryFacade.java 21(+21 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/category/facade/CategoryFacadeImpl.java 62(+62 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/facade/ProductFacade.java 11(+11 -0)
shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/facade/ProductFacadeImpl.java 71(+71 -0)
Details
README.md 2(+1 -1)
diff --git a/README.md b/README.md
index 2970edc..fed25e2 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-Official Shopizer 2.0.1
+Official Shopizer 2.0.2
-------------------
Java open source e-commerce software
shopizer/sm-core/.classpath 178(+178 -0)
diff --git a/shopizer/sm-core/.classpath b/shopizer/sm-core/.classpath
new file mode 100644
index 0000000..1487e67
--- /dev/null
+++ b/shopizer/sm-core/.classpath
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry excluding="**/*.java" including="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry excluding="**/*.java" including="**/*.java" kind="src" path="src/main/resources"/>
+ <classpathentry kind="var" path="M2_REPO/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar" sourcepath="M2_REPO/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" sourcepath="M2_REPO/javax/inject/javax.inject/1/javax.inject-1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/jstl/1.2/jstl-1.2.jar" sourcepath="M2_REPO/javax/servlet/jstl/1.2/jstl-1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar" sourcepath="M2_REPO/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar" sourcepath="M2_REPO/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar" sourcepath="M2_REPO/javax/activation/activation/1.1/activation-1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar" sourcepath="M2_REPO/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4.5/mail-1.4.5.jar" sourcepath="M2_REPO/javax/mail/mail/1.4.5/mail-1.4.5-sources.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" path="/sm-core-model"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6.jar" sourcepath="M2_REPO/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.6.6/slf4j-api-1.6.6.jar" sourcepath="M2_REPO/org/slf4j/slf4j-api/1.6.6/slf4j-api-1.6.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16.jar" sourcepath="M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/cglib/cglib/2.2/cglib-2.2.jar" sourcepath="M2_REPO/cglib/cglib/2.2/cglib-2.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/asm/asm/3.1/asm-3.1.jar" sourcepath="M2_REPO/asm/asm/3.1/asm-3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/4.1.2/hibernate-core-4.1.2.jar" sourcepath="M2_REPO/org/hibernate/hibernate-core/4.1.2/hibernate-core-4.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging/3.1.0.GA/jboss-logging-3.1.0.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging/3.1.0.GA/jboss-logging-3.1.0.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/spec/javax/transaction/jboss-transaction-api_1.1_spec/1.0.0.Final/jboss-transaction-api_1.1_spec-1.0.0.Final.jar" sourcepath="M2_REPO/org/jboss/spec/javax/transaction/jboss-transaction-api_1.1_spec/1.0.0.Final/jboss-transaction-api_1.1_spec-1.0.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final.jar" sourcepath="M2_REPO/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/common/hibernate-commons-annotations/4.0.1.Final/hibernate-commons-annotations-4.0.1.Final.jar" sourcepath="M2_REPO/org/hibernate/common/hibernate-commons-annotations/4.0.1.Final/hibernate-commons-annotations-4.0.1.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/4.1.2/hibernate-entitymanager-4.1.2.jar" sourcepath="M2_REPO/org/hibernate/hibernate-entitymanager/4.1.2/hibernate-entitymanager-4.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-ehcache/3.5.1-Final/hibernate-ehcache-3.5.1-Final.jar" sourcepath="M2_REPO/org/hibernate/hibernate-ehcache/3.5.1-Final/hibernate-ehcache-3.5.1-Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/ehcache/ehcache/1.5.0/ehcache-1.5.0.jar" sourcepath="M2_REPO/net/sf/ehcache/ehcache/1.5.0/ehcache-1.5.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar" sourcepath="M2_REPO/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar" sourcepath="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar" sourcepath="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/jsr107cache/jsr107cache/1.0/jsr107cache-1.0.jar" sourcepath="M2_REPO/net/sf/jsr107cache/jsr107cache/1.0/jsr107cache-1.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.3/javassist-3.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-core/3.4.2/querydsl-core-3.4.2.jar" sourcepath="M2_REPO/com/mysema/querydsl/querydsl-core/3.4.2/querydsl-core-3.4.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/guava/guava/14.0/guava-14.0.jar" sourcepath="M2_REPO/com/google/guava/guava/14.0/guava-14.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/commons/mysema-commons-lang/0.2.4/mysema-commons-lang-0.2.4.jar" sourcepath="M2_REPO/com/mysema/commons/mysema-commons-lang/0.2.4/mysema-commons-lang-0.2.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/infradna/tool/bridge-method-annotation/1.11/bridge-method-annotation-1.11.jar" sourcepath="M2_REPO/com/infradna/tool/bridge-method-annotation/1.11/bridge-method-annotation-1.11-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-jpa/3.4.2/querydsl-jpa-3.4.2.jar" sourcepath="M2_REPO/com/mysema/querydsl/querydsl-jpa/3.4.2/querydsl-jpa-3.4.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-aop/3.1.0.RELEASE/spring-aop-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-aop/3.1.0.RELEASE/spring-aop-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-asm/3.1.0.RELEASE/spring-asm-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-asm/3.1.0.RELEASE/spring-asm-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-beans/3.1.0.RELEASE/spring-beans-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-beans/3.1.0.RELEASE/spring-beans-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-core/3.1.0.RELEASE/spring-core-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-core/3.1.0.RELEASE/spring-core-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-aspects/3.1.0.RELEASE/spring-aspects-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-aspects/3.1.0.RELEASE/spring-aspects-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-context/3.1.0.RELEASE/spring-context-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-context/3.1.0.RELEASE/spring-context-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-expression/3.1.0.RELEASE/spring-expression-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-expression/3.1.0.RELEASE/spring-expression-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-context-support/3.1.0.RELEASE/spring-context-support-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-context-support/3.1.0.RELEASE/spring-context-support-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-test/3.1.0.RELEASE/spring-test-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-test/3.1.0.RELEASE/spring-test-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-orm/3.1.0.RELEASE/spring-orm-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-orm/3.1.0.RELEASE/spring-orm-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-jdbc/3.1.0.RELEASE/spring-jdbc-3.1.0.RELEASE.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-tx/3.1.0.RELEASE/spring-tx-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-tx/3.1.0.RELEASE/spring-tx-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-web/3.1.0.RELEASE/spring-web-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-web/3.1.0.RELEASE/spring-web-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/4.3.0.Final/hibernate-validator-4.3.0.Final.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar" sourcepath="M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar" sourcepath="M2_REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar" sourcepath="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.9/junit-4.9.jar" sourcepath="M2_REPO/junit/junit/4.9/junit-4.9-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-lang3/3.0/commons-lang3-3.0.jar" sourcepath="M2_REPO/org/apache/commons/commons-lang3/3.0/commons-lang3-3.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0.jar" sourcepath="M2_REPO/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar" sourcepath="M2_REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-digester/commons-digester/1.8/commons-digester-1.8.jar" sourcepath="M2_REPO/commons-digester/commons-digester/1.8/commons-digester-1.8-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.6/commons-lang-2.6.jar" sourcepath="M2_REPO/commons-lang/commons-lang/2.6/commons-lang-2.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/2.0/joda-time-2.0.jar" sourcepath="M2_REPO/joda-time/joda-time/2.0/joda-time-2.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jadira/usertype/usertype.core/3.0.0.CR1/usertype.core-3.0.0.CR1.jar" sourcepath="M2_REPO/org/jadira/usertype/usertype.core/3.0.0.CR1/usertype.core-3.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/joda/joda-money/0.6/joda-money-0.6.jar" sourcepath="M2_REPO/org/joda/joda-money/0.6/joda-money-0.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jadira/usertype/usertype.spi/3.0.0.CR1/usertype.spi-3.0.0.CR1.jar" sourcepath="M2_REPO/org/jadira/usertype/usertype.spi/3.0.0.CR1/usertype.spi-3.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.19/freemarker-2.3.19.jar" sourcepath="M2_REPO/org/freemarker/freemarker/2.3.19/freemarker-2.3.19-sources.jar"/>
+ <classpathentry kind="src" path="/sm-core-modules"/>
+ <classpathentry kind="var" path="M2_REPO/com/shopizer/sm-search/0.0.4/sm-search-0.0.4.jar" sourcepath="M2_REPO/com/shopizer/sm-search/0.0.4/sm-search-0.0.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/jcl-over-slf4j/1.6.6/jcl-over-slf4j-1.6.6.jar" sourcepath="M2_REPO/org/slf4j/jcl-over-slf4j/1.6.6/jcl-over-slf4j-1.6.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.3/jaxb-impl-2.1.3.jar" sourcepath="M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.3/jaxb-impl-2.1.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-fileupload/commons-fileupload/1.2.2/commons-fileupload-1.2.2.jar" sourcepath="M2_REPO/commons-fileupload/commons-fileupload/1.2.2/commons-fileupload-1.2.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/2.0.1/commons-io-2.0.1.jar" sourcepath="M2_REPO/commons-io/commons-io/2.0.1/commons-io-2.0.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-configuration/commons-configuration/1.6/commons-configuration-1.6.jar" sourcepath="M2_REPO/commons-configuration/commons-configuration/1.6/commons-configuration-1.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/elasticsearch/elasticsearch/0.90.2/elasticsearch-0.90.2.jar" sourcepath="M2_REPO/org/elasticsearch/elasticsearch/0.90.2/elasticsearch-0.90.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/4.3.1/lucene-core-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-core/4.3.1/lucene-core-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-analyzers-common/4.3.1/lucene-analyzers-common-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-analyzers-common/4.3.1/lucene-analyzers-common-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-codecs/4.3.1/lucene-codecs-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-codecs/4.3.1/lucene-codecs-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-queries/4.3.1/lucene-queries-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-queries/4.3.1/lucene-queries-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-memory/4.3.1/lucene-memory-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-memory/4.3.1/lucene-memory-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-highlighter/4.3.1/lucene-highlighter-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-highlighter/4.3.1/lucene-highlighter-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-queryparser/4.3.1/lucene-queryparser-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-queryparser/4.3.1/lucene-queryparser-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-sandbox/4.3.1/lucene-sandbox-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-sandbox/4.3.1/lucene-sandbox-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-suggest/4.3.1/lucene-suggest-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-suggest/4.3.1/lucene-suggest-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-join/4.3.1/lucene-join-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-join/4.3.1/lucene-join-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-grouping/4.3.1/lucene-grouping-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-grouping/4.3.1/lucene-grouping-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-spatial/4.3.1/lucene-spatial-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-spatial/4.3.1/lucene-spatial-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/spatial4j/spatial4j/0.3/spatial4j-0.3.jar" sourcepath="M2_REPO/com/spatial4j/spatial4j/0.3/spatial4j-0.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpclient/4.4/httpclient-4.4.jar" sourcepath="M2_REPO/org/apache/httpcomponents/httpclient/4.4/httpclient-4.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpcore/4.4/httpcore-4.4.jar" sourcepath="M2_REPO/org/apache/httpcomponents/httpcore/4.4/httpcore-4.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.2/commons-codec-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/maps/google-maps-services/0.1.6/google-maps-services-0.1.6.jar" sourcepath="M2_REPO/com/google/maps/google-maps-services/0.1.6/google-maps-services-0.1.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar" sourcepath="M2_REPO/com/google/code/gson/gson/2.3.1/gson-2.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/squareup/okhttp/okhttp/2.0.0/okhttp-2.0.0.jar" sourcepath="M2_REPO/com/squareup/okhttp/okhttp/2.0.0/okhttp-2.0.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/squareup/okio/okio/1.0.0/okio-1.0.0.jar" sourcepath="M2_REPO/com/squareup/okio/okio/1.0.0/okio-1.0.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-spring/5.6.0.Final/drools-spring-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/drools-spring/5.6.0.Final/drools-spring-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/knowledge-api/5.6.0.Final/knowledge-api-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/knowledge-api/5.6.0.Final/knowledge-api-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.6.0.Final/drools-core-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/drools-core/5.6.0.Final/drools-core-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.1.8.Final/mvel2-2.1.8.Final.jar" sourcepath="M2_REPO/org/mvel/mvel2/2.1.8.Final/mvel2-2.1.8.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/knowledge-internal-api/5.6.0.Final/knowledge-internal-api-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/knowledge-internal-api/5.6.0.Final/knowledge-internal-api-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.6.0.Final/drools-compiler-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.6.0.Final/drools-compiler-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.3/antlr-runtime-3.3.jar" sourcepath="M2_REPO/org/antlr/antlr-runtime/3.3/antlr-runtime-3.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.3/antlr-3.3.jar" sourcepath="M2_REPO/org/antlr/antlr/3.3/antlr-3.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.jar" sourcepath="M2_REPO/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/compiler/ecj/3.5.1/ecj-3.5.1.jar" sourcepath="M2_REPO/org/eclipse/jdt/core/compiler/ecj/3.5.1/ecj-3.5.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.4.1/xstream-1.4.1.jar" sourcepath="M2_REPO/com/thoughtworks/xstream/xstream/1.4.1/xstream-1.4.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar" sourcepath="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-decisiontables/5.6.0.Final/drools-decisiontables-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/drools-decisiontables/5.6.0.Final/drools-decisiontables-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-templates/5.6.0.Final/drools-templates-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/drools-templates/5.6.0.Final/drools-templates-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/poi/poi-ooxml/3.9/poi-ooxml-3.9.jar" sourcepath="M2_REPO/org/apache/poi/poi-ooxml/3.9/poi-ooxml-3.9-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/poi/poi/3.9/poi-3.9.jar" sourcepath="M2_REPO/org/apache/poi/poi/3.9/poi-3.9-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/poi/poi-ooxml-schemas/3.9/poi-ooxml-schemas-3.9.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/xmlbeans/xmlbeans/2.3.0/xmlbeans-2.3.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0.1/stax-api-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/sun/jersey/jersey-bundle/1.19/jersey-bundle-1.19.jar" sourcepath="M2_REPO/com/sun/jersey/jersey-bundle/1.19/jersey-bundle-1.19-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-apt/3.4.2/querydsl-apt-3.4.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-codegen/3.4.2/querydsl-codegen-3.4.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/codegen/codegen/0.6.2/codegen-0.6.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2.jar" sourcepath="M2_REPO/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/mysql/mysql-connector-java/5.1.31/mysql-connector-java-5.1.31.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.3.152/h2-1.3.152.jar" sourcepath="M2_REPO/com/h2database/h2/1.3.152/h2-1.3.152-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar" sourcepath="M2_REPO/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/infinispan/infinispan-core/5.1.6.FINAL/infinispan-core-5.1.6.FINAL.jar" sourcepath="M2_REPO/org/infinispan/infinispan-core/5.1.6.FINAL/infinispan-core-5.1.6.FINAL-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jgroups/jgroups/3.0.11.Final/jgroups-3.0.11.Final.jar" sourcepath="M2_REPO/org/jgroups/jgroups/3.0.11.Final/jgroups-3.0.11.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/marshalling/jboss-marshalling-river/1.3.11.GA/jboss-marshalling-river-1.3.11.GA.jar" sourcepath="M2_REPO/org/jboss/marshalling/jboss-marshalling-river/1.3.11.GA/jboss-marshalling-river-1.3.11.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/marshalling/jboss-marshalling/1.3.11.GA/jboss-marshalling-1.3.11.GA.jar" sourcepath="M2_REPO/org/jboss/marshalling/jboss-marshalling/1.3.11.GA/jboss-marshalling-1.3.11.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/woodstox/woodstox-core-asl/4.1.1/woodstox-core-asl-4.1.1.jar" sourcepath="M2_REPO/org/codehaus/woodstox/woodstox-core-asl/4.1.1/woodstox-core-asl-4.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/woodstox/stax2-api/3.1.1/stax2-api-3.1.1.jar" sourcepath="M2_REPO/org/codehaus/woodstox/stax2-api/3.1.1/stax2-api-3.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/rhq/helpers/rhq-pluginAnnotations/3.0.4/rhq-pluginAnnotations-3.0.4.jar" sourcepath="M2_REPO/org/rhq/helpers/rhq-pluginAnnotations/3.0.4/rhq-pluginAnnotations-3.0.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/infinispan/infinispan-cachestore-jdbc/5.1.4.FINAL/infinispan-cachestore-jdbc-5.1.4.FINAL.jar" sourcepath="M2_REPO/org/infinispan/infinispan-cachestore-jdbc/5.1.4.FINAL/infinispan-cachestore-jdbc-5.1.4.FINAL-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/infinispan/infinispan-tree/5.1.6.FINAL/infinispan-tree-5.1.6.FINAL.jar" sourcepath="M2_REPO/org/infinispan/infinispan-tree/5.1.6.FINAL/infinispan-tree-5.1.6.FINAL-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jopendocument/jOpenDocument/1.3b1/jOpenDocument-1.3b1.jar" sourcepath="M2_REPO/org/jopendocument/jOpenDocument/1.3b1/jOpenDocument-1.3b1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/lowagie/itext/4.2.1/itext-4.2.1.jar" sourcepath="M2_REPO/com/lowagie/itext/4.2.1/itext-4.2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/bouncycastle/bctsp-jdk14/1.38/bctsp-jdk14-1.38.jar" sourcepath="M2_REPO/org/bouncycastle/bctsp-jdk14/1.38/bctsp-jdk14-1.38-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/bouncycastle/bcprov-jdk14/1.38/bcprov-jdk14-1.38.jar" sourcepath="M2_REPO/org/bouncycastle/bcprov-jdk14/1.38/bcprov-jdk14-1.38-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/bouncycastle/bcmail-jdk14/1.38/bcmail-jdk14-1.38.jar" sourcepath="M2_REPO/org/bouncycastle/bcmail-jdk14/1.38/bcmail-jdk14-1.38-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jfree/jfreechart/1.0.12/jfreechart-1.0.12.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jfree/jcommon/1.0.15/jcommon-1.0.15.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/swinglabs/pdf-renderer/1.0.5/pdf-renderer-1.0.5.jar" sourcepath="M2_REPO/org/swinglabs/pdf-renderer/1.0.5/pdf-renderer-1.0.5-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/paypal/sdk/merchantsdk/2.6.109/merchantsdk-2.6.109.jar" sourcepath="M2_REPO/com/paypal/sdk/merchantsdk/2.6.109/merchantsdk-2.6.109-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/paypal/sdk/paypal-core/1.5.1/paypal-core-1.5.1.jar" sourcepath="M2_REPO/com/paypal/sdk/paypal-core/1.5.1/paypal-core-1.5.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/maxmind/geoip2/geoip2/0.7.0/geoip2-0.7.0.jar" sourcepath="M2_REPO/com/maxmind/geoip2/geoip2/0.7.0/geoip2-0.7.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/maxmind/db/maxmind-db/0.3.1/maxmind-db-0.3.1.jar" sourcepath="M2_REPO/com/maxmind/db/maxmind-db/0.3.1/maxmind-db-0.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.2.3/jackson-databind-2.2.3.jar" sourcepath="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.2.3/jackson-databind-2.2.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.2.3/jackson-annotations-2.2.3.jar" sourcepath="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.2.3/jackson-annotations-2.2.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.2.3/jackson-core-2.2.3.jar" sourcepath="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.2.3/jackson-core-2.2.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/http-client/google-http-client/1.17.0-rc/google-http-client-1.17.0-rc.jar" sourcepath="M2_REPO/com/google/http-client/google-http-client/1.17.0-rc/google-http-client-1.17.0-rc-sources.jar"/>
+ <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ <attribute name="org.eclipse.jst.component.nondependency" value=""/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
shopizer/sm-core/.project 64(+30 -34)
diff --git a/shopizer/sm-core/.project b/shopizer/sm-core/.project
index 1d0c253..236a85b 100644
--- a/shopizer/sm-core/.project
+++ b/shopizer/sm-core/.project
@@ -1,36 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>sm-core</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.wst.common.project.facet.core.builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.m2e.core.maven2Builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.wst.validation.validationbuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
- <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.m2e.core.maven2Nature</nature>
- <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
- </natures>
-</projectDescription>
+ <name>sm-core</name>
+ <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+ <projects>
+ <project>sm-core-model</project>
+ <project>sm-core-modules</project>
+ <project>shopizer-shipping-distance-processor</project>
+ <project>shopizer-shipping-canadapost-module</project>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
shopizer/sm-core/pom.xml 59(+22 -37)
diff --git a/shopizer/sm-core/pom.xml b/shopizer/sm-core/pom.xml
index f02bb45..e80f718 100755
--- a/shopizer/sm-core/pom.xml
+++ b/shopizer/sm-core/pom.xml
@@ -6,25 +6,22 @@
<parent>
<groupId>com.shopizer</groupId>
<artifactId>shopizer</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>2.0.2-SNAPSHOT</version>
</parent>
<artifactId>sm-core</artifactId>
- <version>2.0.1-SNAPSHOT</version>
+ <!--<version>${sm-core.version}</version>-->
<packaging>jar</packaging>
<name>sm-core</name>
<url>http://www.shopizer.com</url>
<properties>
+
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>1.6</jdk.version>
-
- <sm-core-model.version>2.0.1-SNAPSHOT</sm-core-model.version>
- <sm-core-modules.version>2.0.1-SNAPSHOT</sm-core-modules.version>
- <sm-search.version>0.0.3</sm-search.version>
-
-
+
<jackson-version>1.9.13</jackson-version>
<axis-version>1.4</axis-version>
<jaxws.api.version>2.1</jaxws.api.version>
@@ -37,6 +34,7 @@
<freemarker.version>2.3.19</freemarker.version>
<org.slf4j-version>1.6.6</org.slf4j-version>
<hibernate.ehcache.version>3.5.1-Final</hibernate.ehcache.version>
+ <sm-core.drools.version>5.6.0.Final</sm-core.drools.version>
<sm-core.hibernate-entitymanager-version>4.1.2</sm-core.hibernate-entitymanager-version>
<sm-core.hibernate-jpamodelgen.version>1.1.1.Final</sm-core.hibernate-jpamodelgen.version>
<sm-core.aspectj.version>1.5.4</sm-core.aspectj.version>
@@ -52,11 +50,6 @@
<dependencies>
- <!--<dependency>
- <groupId>com.shopizer</groupId>
- <artifactId>com.shopizer.authorizenet</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </dependency>-->
<!-- sm-core-model -->
<dependency>
@@ -78,7 +71,13 @@
<artifactId>sm-search</artifactId>
<version>${sm-search.version}</version>
</dependency>
-
+
+ <!-- canadapost -->
+ <dependency>
+ <groupId>com.shopizer</groupId>
+ <artifactId>shopizer-shipping-canadapost-module</artifactId>
+ <version>0.0.1</version>
+ </dependency>
<!-- Loggers -->
<dependency>
@@ -178,13 +177,6 @@
</dependency>
<!-- Spring -->
- <!--
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-asm</artifactId>
- <version>${sm-core.org.springframework-security.version}</version>
- </dependency>
- -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
@@ -308,13 +300,13 @@
<version>1.4.0</version>
</dependency>
- <!--
+ <!-- Rules engine -->
<dependency>
- <groupId>org.jboss.cache</groupId>
- <artifactId>jbosscache-core</artifactId>
- <version>3.2.5.GA</version>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-spring</artifactId>
+ <version>${sm-core.drools.version}</version>
</dependency>
- -->
+
<dependency>
<groupId>commons-lang</groupId>
@@ -351,13 +343,6 @@
<version>5.1.6.FINAL</version>
</dependency>
- <!-- TO REMOVE -->
- <dependency>
- <groupId>org.infinispan</groupId>
- <artifactId>infinispan-cachestore-bdbje</artifactId>
- <version>5.1.4.FINAL</version>
- </dependency>
-
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-cachestore-jdbc</artifactId>
@@ -389,10 +374,10 @@
<version>1.3b1</version>
</dependency>
- <dependency>
- <groupId>com.lowagie</groupId>
- <artifactId>itext</artifactId>
- <version>4.2.1</version>
+ <dependency>
+ <groupId>com.itextpdf</groupId>
+ <artifactId>itextpdf</artifactId>
+ <version>5.5.6</version>
</dependency>
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/category/dao/CategoryDaoImpl.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/category/dao/CategoryDaoImpl.java
index a5f86a7..b87439e 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/category/dao/CategoryDaoImpl.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/category/dao/CategoryDaoImpl.java
@@ -227,7 +227,7 @@ public class CategoryDaoImpl extends SalesManagerEntityDaoImpl<Long, Category> i
query.from(qCategory)
.leftJoin(qCategory.descriptions, qDescription).fetch()
.leftJoin(qCategory.merchantStore).fetch()
- .where(qCategory.depth.eq(depth)
+ .where(qCategory.depth.between(0, depth)
.and(qCategory.merchantStore.id.eq(store.getId())))
.orderBy(qCategory.sortOrder.asc(), qCategory.lineage.asc(), qCategory.lineage.asc(), qCategory.depth.asc(), qDescription.language.id.desc());
@@ -245,7 +245,7 @@ public class CategoryDaoImpl extends SalesManagerEntityDaoImpl<Long, Category> i
query.from(qCategory)
.leftJoin(qCategory.descriptions, qDescription).fetch()
.leftJoin(qCategory.merchantStore).fetch()
- .where(qCategory.depth.eq(depth)
+ .where(qCategory.depth.between(0, depth)
.and(qCategory.merchantStore.id.eq(store.getId()))
.and(qDescription.language.id.eq(language.getId())))
.orderBy(qCategory.sortOrder.asc(), qCategory.lineage.asc(), qCategory.lineage.asc(), qCategory.depth.asc(), qDescription.language.id.desc());
@@ -374,4 +374,4 @@ public class CategoryDaoImpl extends SalesManagerEntityDaoImpl<Long, Category> i
return query.distinct().list(qCategory);
//listDistinct(qCategory);
}
-}
+}
\ No newline at end of file
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/dao/manufacturer/ManufacturerDao.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/dao/manufacturer/ManufacturerDao.java
index c61da63..f7aefca 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/dao/manufacturer/ManufacturerDao.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/dao/manufacturer/ManufacturerDao.java
@@ -17,5 +17,7 @@ public interface ManufacturerDao extends SalesManagerEntityDao<Long, Manufacture
List<Manufacturer> listByProductsByCategoriesId(MerchantStore store,
List<Long> ids, Language language);
+
+ Manufacturer getByCode(MerchantStore store, String code);
}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/dao/manufacturer/ManufacturerDaoImpl.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/dao/manufacturer/ManufacturerDaoImpl.java
index 9f72490..35e4fda 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/dao/manufacturer/ManufacturerDaoImpl.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/dao/manufacturer/ManufacturerDaoImpl.java
@@ -112,6 +112,23 @@ public class ManufacturerDaoImpl extends SalesManagerEntityDaoImpl<Long, Manufac
}
+ @Override
+ public Manufacturer getByCode(MerchantStore store, String code) {
+ QManufacturer qManufacturer = QManufacturer.manufacturer;
+ QManufacturerDescription qManufacturerDescription = QManufacturerDescription.manufacturerDescription;
+
+ JPQLQuery query = new JPAQuery (getEntityManager());
+
+ query.from(qManufacturer)
+ .leftJoin(qManufacturer.descriptions, qManufacturerDescription).fetch()
+ .leftJoin(qManufacturer.merchantStore).fetch()
+ .where(qManufacturer.merchantStore.id.eq(store.getId())
+ .and(qManufacturer.code.eq(code)));
+
+
+ return query.uniqueResult(qManufacturer);
+ }
+
}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/service/manufacturer/ManufacturerService.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/service/manufacturer/ManufacturerService.java
index be7c120..d2642f0 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/service/manufacturer/ManufacturerService.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/service/manufacturer/ManufacturerService.java
@@ -23,6 +23,8 @@ public interface ManufacturerService extends SalesManagerEntityService<Long, Man
int getCountManufAttachedProducts( Manufacturer manufacturer ) throws ServiceException;
void delete(Manufacturer manufacturer) throws ServiceException;
+
+ Manufacturer getByCode(MerchantStore store, String code);
/**
* List manufacturers by products from a given list of categories
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/service/manufacturer/ManufacturerServiceImpl.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/service/manufacturer/ManufacturerServiceImpl.java
index 77a1905..9481782 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/service/manufacturer/ManufacturerServiceImpl.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/catalog/product/service/manufacturer/ManufacturerServiceImpl.java
@@ -95,4 +95,9 @@ public class ManufacturerServiceImpl extends
}
}
+
+ @Override
+ public Manufacturer getByCode(MerchantStore store, String code) {
+ return manufacturerDao.getByCode(store, code);
+ }
}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/dao/ShippingOriginDAO.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/dao/ShippingOriginDAO.java
new file mode 100755
index 0000000..319aa99
--- /dev/null
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/dao/ShippingOriginDAO.java
@@ -0,0 +1,13 @@
+package com.salesmanager.core.business.shipping.dao;
+
+import com.salesmanager.core.business.generic.dao.SalesManagerEntityDao;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+
+public interface ShippingOriginDAO extends SalesManagerEntityDao<Long, ShippingOrigin> {
+
+ ShippingOrigin getByStore(MerchantStore store);
+
+
+
+}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/dao/ShippingOriginDAOImpl.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/dao/ShippingOriginDAOImpl.java
new file mode 100755
index 0000000..8352b86
--- /dev/null
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/dao/ShippingOriginDAOImpl.java
@@ -0,0 +1,50 @@
+package com.salesmanager.core.business.shipping.dao;
+
+import java.util.List;
+
+import javax.persistence.NonUniqueResultException;
+import javax.persistence.Query;
+
+import org.springframework.stereotype.Repository;
+
+import com.salesmanager.core.business.generic.dao.SalesManagerEntityDaoImpl;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+
+@Repository("shippingOriginDao")
+public class ShippingOriginDAOImpl extends SalesManagerEntityDaoImpl<Long, ShippingOrigin> implements ShippingOriginDAO {
+
+ public ShippingOriginDAOImpl() {
+ super();
+ }
+
+
+
+
+ @Override
+ public ShippingOrigin getByStore(MerchantStore store) {
+
+ StringBuilder qs = new StringBuilder();
+ qs.append("select s from ShippingOrigin as s ");
+ qs.append("join fetch s.merchantStore sm ");
+ qs.append("where sm.id=:sid");
+
+
+
+ String hql = qs.toString();
+ Query q = super.getEntityManager().createQuery(hql);
+
+
+ q.setParameter("sid", store.getId());
+ @SuppressWarnings("unchecked")
+ List<ShippingOrigin> results = (List<ShippingOrigin>)q.getResultList();
+
+
+ if (results.isEmpty()) return null;
+
+ else if (results.size() == 1) return results.get(0);
+ throw new NonUniqueResultException();
+
+ }
+
+}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingOriginService.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingOriginService.java
new file mode 100755
index 0000000..419901f
--- /dev/null
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingOriginService.java
@@ -0,0 +1,20 @@
+package com.salesmanager.core.business.shipping.service;
+
+
+import com.salesmanager.core.business.generic.service.SalesManagerEntityService;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+
+/**
+ * ShippingOrigin object if different from MerchantStore address.
+ * Can be managed through this service.
+ * @author carlsamson
+ *
+ */
+public interface ShippingOriginService extends SalesManagerEntityService<Long, ShippingOrigin> {
+
+ ShippingOrigin getByStore(MerchantStore store);
+
+
+
+}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingOriginServiceImpl.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingOriginServiceImpl.java
new file mode 100755
index 0000000..87732a5
--- /dev/null
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingOriginServiceImpl.java
@@ -0,0 +1,35 @@
+package com.salesmanager.core.business.shipping.service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.salesmanager.core.business.generic.service.SalesManagerEntityServiceImpl;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.shipping.dao.ShippingOriginDAO;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+
+@Service("shippingOriginService")
+public class ShippingOriginServiceImpl extends SalesManagerEntityServiceImpl<Long, ShippingOrigin> implements ShippingOriginService {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ShippingOriginServiceImpl.class);
+
+ private ShippingOriginDAO shippingOriginDAO;
+
+
+ @Autowired
+ public ShippingOriginServiceImpl(ShippingOriginDAO shippingOriginDAO) {
+ super(shippingOriginDAO);
+ this.shippingOriginDAO = shippingOriginDAO;
+ }
+
+
+ @Override
+ public ShippingOrigin getByStore(MerchantStore store) {
+ // TODO Auto-generated method stub
+ return shippingOriginDAO.getByStore(store);
+ }
+
+
+}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingServiceImpl.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingServiceImpl.java
index cca2e23..062d3de 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingServiceImpl.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shipping/service/ShippingServiceImpl.java
@@ -7,10 +7,10 @@ import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Set;
import javax.annotation.Resource;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.codehaus.jackson.map.ObjectMapper;
@@ -22,7 +22,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.salesmanager.core.business.catalog.product.model.Product;
-import com.salesmanager.core.business.catalog.product.model.price.FinalPrice;
import com.salesmanager.core.business.catalog.product.service.PricingService;
import com.salesmanager.core.business.common.model.Delivery;
import com.salesmanager.core.business.generic.exception.ServiceException;
@@ -35,6 +34,7 @@ import com.salesmanager.core.business.shipping.model.PackageDetails;
import com.salesmanager.core.business.shipping.model.ShippingConfiguration;
import com.salesmanager.core.business.shipping.model.ShippingOption;
import com.salesmanager.core.business.shipping.model.ShippingOptionPriceType;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
import com.salesmanager.core.business.shipping.model.ShippingPackageType;
import com.salesmanager.core.business.shipping.model.ShippingProduct;
import com.salesmanager.core.business.shipping.model.ShippingQuote;
@@ -53,6 +53,7 @@ import com.salesmanager.core.constants.ShippingConstants;
import com.salesmanager.core.modules.integration.IntegrationException;
import com.salesmanager.core.modules.integration.shipping.model.Packaging;
import com.salesmanager.core.modules.integration.shipping.model.ShippingQuoteModule;
+import com.salesmanager.core.modules.integration.shipping.model.ShippingQuotePreProcessModule;
import com.salesmanager.core.modules.utils.Encryption;
import com.salesmanager.core.utils.reference.ConfigurationModulesLoader;
@@ -91,9 +92,17 @@ public class ShippingServiceImpl implements ShippingService {
private MerchantLogService merchantLogService;
@Autowired
+ private ShippingOriginService shippingOriginService;
+
+ @Autowired
@Resource(name="shippingModules")
private Map<String,ShippingQuoteModule> shippingModules;
+ //shipping pre-processors
+ @Autowired
+ @Resource(name="shippingModulePreProcessors")
+ private List<ShippingQuotePreProcessModule> shippingModulePreProcessors;
+
@Override
public ShippingConfiguration getShippingConfiguration(MerchantStore store) throws ServiceException {
@@ -353,6 +362,13 @@ public class ShippingServiceImpl implements ShippingService {
@Override
public ShippingQuote getShippingQuote(MerchantStore store, Delivery delivery, List<ShippingProduct> products, Language language) throws ServiceException {
+
+ Validate.notNull(store,"MerchantStore must not be null");
+ Validate.notNull(delivery,"Delivery must not be null");
+ Validate.notEmpty(products,"products must not be empty");
+ Validate.notNull(language,"Language must not be null");
+
+
ShippingQuote shippingQuote = new ShippingQuote();
ShippingQuoteModule shippingQuoteModule = null;
@@ -362,6 +378,19 @@ public class ShippingServiceImpl implements ShippingService {
ShippingConfiguration shippingConfiguration = getShippingConfiguration(store);
ShippingType shippingType = ShippingType.INTERNATIONAL;
+ /** get shipping origin **/
+ ShippingOrigin shippingOrigin = shippingOriginService.getByStore(store);
+ if(shippingOrigin == null || !shippingOrigin.isActive()) {
+ shippingOrigin = new ShippingOrigin();
+ shippingOrigin.setAddress(store.getStoreaddress());
+ shippingOrigin.setCity(store.getStorecity());
+ shippingOrigin.setCountry(store.getCountry());
+ shippingOrigin.setPostalCode(store.getStorepostalcode());
+ shippingOrigin.setState(store.getStorestateprovince());
+ shippingOrigin.setZone(store.getZone());
+ }
+
+
if(shippingConfiguration==null) {
shippingConfiguration = new ShippingConfiguration();
}
@@ -475,12 +504,25 @@ public class ShippingServiceImpl implements ShippingService {
Locale locale = languageService.toLocale(language);
+
+ //invoke pre processors
+ if(!CollectionUtils.isEmpty(shippingModulePreProcessors)) {
+ for(ShippingQuotePreProcessModule preProcessor : shippingModulePreProcessors) {
+ preProcessor.preProcessShippingQuotes(shippingQuote, packages, orderTotal, delivery, shippingOrigin, store, configuration, shippingModule, shippingConfiguration, shippingMethods, locale);
+ //TODO switch module if required
+ if(shippingQuote.getCurrentShippingModule()!=null && !shippingQuote.getCurrentShippingModule().getCode().equals(shippingModule.getCode())) {
+ shippingModule = shippingQuote.getCurrentShippingModule();
+ shippingQuoteModule = this.shippingModules.get(shippingModule.getCode());
+ configuration = modules.get(shippingModule.getCode());
+ }
+ }
+ }
//invoke module
List<ShippingOption> shippingOptions = null;
try {
- shippingOptions = shippingQuoteModule.getShippingQuotes(packages, orderTotal, delivery, store, configuration, shippingModule, shippingConfiguration, locale);
+ shippingOptions = shippingQuoteModule.getShippingQuotes(shippingQuote, packages, orderTotal, delivery, shippingOrigin, store, configuration, shippingModule, shippingConfiguration, locale);
} catch(Exception e) {
LOGGER.error("Error while calculating shipping", e);
merchantLogService.save(
@@ -688,9 +730,7 @@ public class ShippingServiceImpl implements ShippingService {
BigDecimal total = new BigDecimal(0);
for(ShippingProduct shippingProduct : products) {
- FinalPrice price = pricingService.calculateProductPrice(shippingProduct.getProduct());
-
- BigDecimal currentPrice = price.getFinalPrice();
+ BigDecimal currentPrice = shippingProduct.getFinalPrice().getFinalPrice();
currentPrice = currentPrice.multiply(new BigDecimal(shippingProduct.getQuantity()));
total = total.add(currentPrice);
}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shoppingcart/service/ShoppingCartServiceImpl.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shoppingcart/service/ShoppingCartServiceImpl.java
index bfdf486..8f4e078 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shoppingcart/service/ShoppingCartServiceImpl.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/business/shoppingcart/service/ShoppingCartServiceImpl.java
@@ -378,6 +378,7 @@ public class ShoppingCartServiceImpl extends SalesManagerEntityServiceImpl<Long,
}
ShippingProduct shippingProduct = new ShippingProduct(product);
shippingProduct.setQuantity(item.getQuantity());
+ shippingProduct.setFinalPrice(item.getFinalPrice());
shippingProducts.add(shippingProduct);
}
}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CanadaPostShippingQuote.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CanadaPostShippingQuote.java
index 3eeabea..50ae130 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CanadaPostShippingQuote.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CanadaPostShippingQuote.java
@@ -25,6 +25,8 @@ import com.salesmanager.core.business.reference.country.model.Country;
import com.salesmanager.core.business.shipping.model.PackageDetails;
import com.salesmanager.core.business.shipping.model.ShippingConfiguration;
import com.salesmanager.core.business.shipping.model.ShippingOption;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+import com.salesmanager.core.business.shipping.model.ShippingQuote;
import com.salesmanager.core.business.system.model.CustomIntegrationConfiguration;
import com.salesmanager.core.business.system.model.IntegrationConfiguration;
import com.salesmanager.core.business.system.model.IntegrationModule;
@@ -98,7 +100,7 @@ public class CanadaPostShippingQuote implements ShippingQuoteModule {
}
@Override
- public List<ShippingOption> getShippingQuotes(List<PackageDetails> packages, BigDecimal orderTotal, Delivery delivery, MerchantStore store, IntegrationConfiguration configuration, IntegrationModule module, ShippingConfiguration shippingConfiguration, Locale locale) throws IntegrationException {
+ public List<ShippingOption> getShippingQuotes(ShippingQuote quote, List<PackageDetails> packages, BigDecimal orderTotal, Delivery delivery, ShippingOrigin origin, MerchantStore store, IntegrationConfiguration configuration, IntegrationModule module, ShippingConfiguration shippingConfiguration, Locale locale) throws IntegrationException {
BigDecimal total = orderTotal;
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CustomShippingQuoteRules.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CustomShippingQuoteRules.java
new file mode 100644
index 0000000..2f0b219
--- /dev/null
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CustomShippingQuoteRules.java
@@ -0,0 +1,159 @@
+package com.salesmanager.core.modules.integration.shipping.impl;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.commons.lang.Validate;
+import org.drools.KnowledgeBase;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.salesmanager.core.business.common.model.Delivery;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.shipping.model.PackageDetails;
+import com.salesmanager.core.business.shipping.model.ShippingConfiguration;
+import com.salesmanager.core.business.shipping.model.ShippingOption;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+import com.salesmanager.core.business.shipping.model.ShippingQuote;
+import com.salesmanager.core.business.system.model.CustomIntegrationConfiguration;
+import com.salesmanager.core.business.system.model.IntegrationConfiguration;
+import com.salesmanager.core.business.system.model.IntegrationModule;
+import com.salesmanager.core.modules.constants.Constants;
+import com.salesmanager.core.modules.integration.IntegrationException;
+import com.salesmanager.core.modules.integration.shipping.model.ShippingQuoteModule;
+
+import edu.emory.mathcs.backport.java.util.Collections;
+
+public class CustomShippingQuoteRules implements ShippingQuoteModule {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(CustomShippingQuoteRules.class);
+
+
+ private StatelessKnowledgeSession shippingPriceRule;
+
+ private KnowledgeBase kbase;
+
+ @Override
+ public void validateModuleConfiguration(
+ IntegrationConfiguration integrationConfiguration,
+ MerchantStore store) throws IntegrationException {
+ // Not used
+
+ }
+
+ @Override
+ public CustomIntegrationConfiguration getCustomModuleConfiguration(
+ MerchantStore store) throws IntegrationException {
+ // Not used
+ return null;
+ }
+
+ @Override
+ public List<ShippingOption> getShippingQuotes(ShippingQuote quote,
+ List<PackageDetails> packages, BigDecimal orderTotal,
+ Delivery delivery, ShippingOrigin origin, MerchantStore store,
+ IntegrationConfiguration configuration, IntegrationModule module,
+ ShippingConfiguration shippingConfiguration, Locale locale)
+ throws IntegrationException {
+
+
+
+ Validate.notNull(delivery, "Delivery cannot be null");
+ Validate.notNull(delivery.getCountry(), "Delivery.country cannot be null");
+ Validate.notNull(packages, "packages cannot be null");
+ Validate.notEmpty(packages, "packages cannot be empty");
+
+ Long distance = null;
+
+ if(quote!=null) {
+ //look if distance has been calculated
+ if(quote.getQuoteInformations()!=null) {
+ if(quote.getQuoteInformations().containsKey(Constants.DISTANCE_KEY)) {
+ distance = (Long)quote.getQuoteInformations().get(Constants.DISTANCE_KEY);
+ }
+ }
+ }
+
+ //calculate volume (L x W x H)
+ Double volume = null;
+ Double weight = 0D;
+ Double size = null;
+ //calculate weight
+ for(PackageDetails pack : packages) {
+ weight = weight + pack.getShippingWeight();
+ Double tmpVolume = pack.getShippingHeight() * pack.getShippingLength() * pack.getShippingWidth();
+ if(volume == null || tmpVolume.doubleValue() > volume.doubleValue()) { //take the largest volume
+ volume = tmpVolume;
+ }
+ //largest size
+ List<Double> sizeList = new ArrayList<Double>();
+ sizeList.add(pack.getShippingHeight());
+ sizeList.add(pack.getShippingWeight());
+ sizeList.add(pack.getShippingLength());
+ Double maxSize = (Double)Collections.max(sizeList);
+ if(size==null || maxSize.doubleValue() > size.doubleValue()) {
+ size = maxSize.doubleValue();
+ }
+ }
+
+ //Build a ShippingInputParameters
+ ShippingInputParameters inputParameters = new ShippingInputParameters();
+
+ inputParameters.setWeight((long)weight.doubleValue());
+ inputParameters.setCountry(delivery.getCountry().getIsoCode());
+ inputParameters.setProvince("*");
+ inputParameters.setModuleName(module.getCode());
+
+ if(delivery.getZone().getCode()!=null) {
+ inputParameters.setProvince(delivery.getZone().getCode());
+ }
+
+ if(distance!=null) {
+ inputParameters.setDistance(distance);
+ }
+
+ if(volume!=null) {
+ inputParameters.setVolume((long)volume.doubleValue());
+ }
+
+ ShippingOption option = new ShippingOption();
+
+ LOGGER.debug("Setting input parameters " + inputParameters.toString());
+
+ shippingPriceRule.execute(Arrays.asList(new Object[] { inputParameters }));
+
+ List<ShippingOption> options = null;
+
+
+ if(inputParameters.getPriceQuote() != null) {
+ options = new ArrayList<ShippingOption>();
+ options.add(option);
+ }
+
+
+ return options;
+
+
+ }
+
+ public StatelessKnowledgeSession getShippingPriceRule() {
+ return shippingPriceRule;
+ }
+
+ public void setShippingPriceRule(StatelessKnowledgeSession shippingPriceRule) {
+ this.shippingPriceRule = shippingPriceRule;
+ }
+
+ public KnowledgeBase getKbase() {
+ return kbase;
+ }
+
+ public void setKbase(KnowledgeBase kbase) {
+ this.kbase = kbase;
+ }
+
+}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CustomWeightBasedShippingQuote.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CustomWeightBasedShippingQuote.java
index e80cf72..2bb824f 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CustomWeightBasedShippingQuote.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/CustomWeightBasedShippingQuote.java
@@ -15,6 +15,8 @@ import com.salesmanager.core.business.shipping.model.PackageDetails;
import com.salesmanager.core.business.shipping.model.ShippingBasisType;
import com.salesmanager.core.business.shipping.model.ShippingConfiguration;
import com.salesmanager.core.business.shipping.model.ShippingOption;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+import com.salesmanager.core.business.shipping.model.ShippingQuote;
import com.salesmanager.core.business.system.model.CustomIntegrationConfiguration;
import com.salesmanager.core.business.system.model.IntegrationConfiguration;
import com.salesmanager.core.business.system.model.IntegrationModule;
@@ -83,8 +85,9 @@ public class CustomWeightBasedShippingQuote implements ShippingQuoteModule {
@Override
public List<ShippingOption> getShippingQuotes(
+ ShippingQuote shippingQuote,
List<PackageDetails> packages, BigDecimal orderTotal,
- Delivery delivery, MerchantStore store,
+ Delivery delivery, ShippingOrigin origin, MerchantStore store,
IntegrationConfiguration configuration, IntegrationModule module,
ShippingConfiguration shippingConfiguration, Locale locale)
throws IntegrationException {
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/ShippingDecisionPreProcessorImpl.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/ShippingDecisionPreProcessorImpl.java
new file mode 100644
index 0000000..941bce0
--- /dev/null
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/ShippingDecisionPreProcessorImpl.java
@@ -0,0 +1,159 @@
+package com.salesmanager.core.modules.integration.shipping.impl;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.commons.lang.Validate;
+import org.apache.commons.lang3.StringUtils;
+import org.drools.KnowledgeBase;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.salesmanager.core.business.common.model.Delivery;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.shipping.model.PackageDetails;
+import com.salesmanager.core.business.shipping.model.ShippingConfiguration;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+import com.salesmanager.core.business.shipping.model.ShippingQuote;
+import com.salesmanager.core.business.system.model.IntegrationConfiguration;
+import com.salesmanager.core.business.system.model.IntegrationModule;
+import com.salesmanager.core.modules.constants.Constants;
+import com.salesmanager.core.modules.integration.IntegrationException;
+import com.salesmanager.core.modules.integration.shipping.model.ShippingQuotePreProcessModule;
+
+import edu.emory.mathcs.backport.java.util.Collections;
+
+/**
+ * Decides which shipping method is going to be used based on a decision table
+ * @author carlsamson
+ *
+ */
+public class ShippingDecisionPreProcessorImpl implements ShippingQuotePreProcessModule {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ShippingDecisionPreProcessorImpl.class);
+
+ private StatelessKnowledgeSession shippingMethodDecision;
+
+ private KnowledgeBase kbase;
+
+ @Override
+ public void preProcessShippingQuotes(ShippingQuote quote,
+ List<PackageDetails> packages, BigDecimal orderTotal,
+ Delivery delivery, ShippingOrigin origin, MerchantStore store,
+ IntegrationConfiguration globalShippingConfiguration,
+ IntegrationModule currentModule,
+ ShippingConfiguration shippingConfiguration,
+ List<IntegrationModule> allModules, Locale locale)
+ throws IntegrationException {
+
+
+ Validate.notNull(delivery, "Delivery cannot be null");
+ Validate.notNull(currentModule, "IntegrationModule cannot be null");
+ Validate.notNull(delivery.getCountry(), "Delivery.country cannot be null");
+ Validate.notNull(allModules, "List<IntegrationModule> cannot be null");
+ Validate.notNull(packages, "packages cannot be null");
+ Validate.notEmpty(packages, "packages cannot be empty");
+
+ Long distance = null;
+
+ if(quote!=null) {
+ //look if distance has been calculated
+ if(quote.getQuoteInformations()!=null) {
+ if(quote.getQuoteInformations().containsKey(Constants.DISTANCE_KEY)) {
+ distance = (Long)quote.getQuoteInformations().get(Constants.DISTANCE_KEY);
+ }
+ }
+ }
+
+ //calculate volume (L x W x H)
+ Double volume = null;
+ Double weight = 0D;
+ Double size = null;
+ //calculate weight, volume and largest size
+ for(PackageDetails pack : packages) {
+ weight = weight + pack.getShippingWeight();
+ Double tmpVolume = pack.getShippingHeight() * pack.getShippingLength() * pack.getShippingWidth();
+ if(volume == null || tmpVolume.doubleValue() > volume.doubleValue()) { //take the largest volume
+ volume = tmpVolume;
+ }
+ //largest size
+ List<Double> sizeList = new ArrayList<Double>();
+ sizeList.add(pack.getShippingHeight());
+ sizeList.add(pack.getShippingLength());
+ sizeList.add(pack.getShippingWidth());
+ Double maxSize = (Double)Collections.max(sizeList);
+ if(size==null || maxSize.doubleValue() > size.doubleValue()) {
+ size = maxSize.doubleValue();
+ }
+ }
+
+ //Build a ShippingInputParameters
+ ShippingInputParameters inputParameters = new ShippingInputParameters();
+
+ inputParameters.setWeight((long)weight.doubleValue());
+ inputParameters.setCountry(delivery.getCountry().getIsoCode());
+ inputParameters.setProvince(delivery.getZone().getCode());
+ //inputParameters.setModuleName(currentModule.getCode());
+
+ if(delivery.getZone().getCode()!=null) {
+ inputParameters.setProvince(delivery.getZone().getCode());
+ }
+
+ if(size!=null) {
+ inputParameters.setSize((long)size.doubleValue());
+ }
+
+ if(distance!=null) {
+ inputParameters.setDistance(distance);
+ }
+
+ if(volume!=null) {
+ inputParameters.setVolume((long)volume.doubleValue());
+ }
+
+ LOGGER.debug("Setting input parameters " + inputParameters.toString());
+ System.out.println(inputParameters.toString());
+
+ shippingMethodDecision.execute(Arrays.asList(new Object[] { inputParameters }));
+
+ LOGGER.debug("Using shipping nodule " + inputParameters.getModuleName());
+
+ if(!StringUtils.isBlank(inputParameters.getModuleName())) {
+ for(IntegrationModule toBeUsed : allModules) {
+ if(toBeUsed.getCode().equals(inputParameters.getModuleName())) {
+ quote.setCurrentShippingModule(toBeUsed);
+ break;
+ }
+ }
+ }
+
+ }
+
+ public StatelessKnowledgeSession getShippingMethodDecision() {
+ return shippingMethodDecision;
+ }
+
+ public void setShippingMethodDecision(StatelessKnowledgeSession shippingMethodDecision) {
+ this.shippingMethodDecision = shippingMethodDecision;
+ }
+
+ public KnowledgeBase getKbase() {
+ return kbase;
+ }
+
+ public void setKbase(KnowledgeBase kbase) {
+ this.kbase = kbase;
+ }
+
+
+
+
+
+
+
+
+}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/ShippingInputParameters.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/ShippingInputParameters.java
new file mode 100644
index 0000000..4d4032c
--- /dev/null
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/ShippingInputParameters.java
@@ -0,0 +1,76 @@
+package com.salesmanager.core.modules.integration.shipping.impl;
+
+public class ShippingInputParameters {
+
+ private String moduleName;
+ private long weight;
+ private long volume;
+ private String country;
+ private String province;
+ private long distance;
+ private long size;
+ private String priceQuote;
+
+ public String getModuleName() {
+ return moduleName;
+ }
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+ public long getWeight() {
+ return weight;
+ }
+ public void setWeight(long weight) {
+ this.weight = weight;
+ }
+ public long getVolume() {
+ return volume;
+ }
+ public void setVolume(long volume) {
+ this.volume = volume;
+ }
+ public String getCountry() {
+ return country;
+ }
+ public void setCountry(String country) {
+ this.country = country;
+ }
+ public String getProvince() {
+ return province;
+ }
+ public void setProvince(String province) {
+ this.province = province;
+ }
+ public long getDistance() {
+ return distance;
+ }
+ public void setDistance(long distance) {
+ this.distance = distance;
+ }
+ public String getPriceQuote() {
+ return priceQuote;
+ }
+ public void setPriceQuote(String priceQuote) {
+ this.priceQuote = priceQuote;
+ }
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(" weight : ").append(this.getWeight());
+ sb.append(" volume : ").append(this.getVolume())
+ .append(" size : ").append(this.getSize())
+ .append(" distance : ").append(this.getDistance())
+ .append(" province : ").append(this.getProvince())
+ .append(" country : ").append(this.getCountry());
+ return sb.toString();
+
+ }
+ public long getSize() {
+ return size;
+ }
+ public void setSize(long size) {
+ this.size = size;
+ }
+
+
+}
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/UPSShippingQuote.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/UPSShippingQuote.java
index 89cec30..765acd6 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/UPSShippingQuote.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/UPSShippingQuote.java
@@ -25,6 +25,8 @@ import com.salesmanager.core.business.reference.country.model.Country;
import com.salesmanager.core.business.shipping.model.PackageDetails;
import com.salesmanager.core.business.shipping.model.ShippingConfiguration;
import com.salesmanager.core.business.shipping.model.ShippingOption;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+import com.salesmanager.core.business.shipping.model.ShippingQuote;
import com.salesmanager.core.business.system.model.CustomIntegrationConfiguration;
import com.salesmanager.core.business.system.model.IntegrationConfiguration;
import com.salesmanager.core.business.system.model.IntegrationModule;
@@ -111,8 +113,9 @@ public class UPSShippingQuote implements ShippingQuoteModule {
@Override
public List<ShippingOption> getShippingQuotes(
+ ShippingQuote shippingQuote,
List<PackageDetails> packages, BigDecimal orderTotal,
- Delivery delivery, MerchantStore store,
+ Delivery delivery, ShippingOrigin origin, MerchantStore store,
IntegrationConfiguration configuration, IntegrationModule module,
ShippingConfiguration shippingConfiguration, Locale locale)
throws IntegrationException {
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/USPSShippingQuote.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/USPSShippingQuote.java
index 9cedbb4..b87ea35 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/USPSShippingQuote.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/integration/shipping/impl/USPSShippingQuote.java
@@ -27,6 +27,8 @@ import com.salesmanager.core.business.reference.language.model.Language;
import com.salesmanager.core.business.shipping.model.PackageDetails;
import com.salesmanager.core.business.shipping.model.ShippingConfiguration;
import com.salesmanager.core.business.shipping.model.ShippingOption;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+import com.salesmanager.core.business.shipping.model.ShippingQuote;
import com.salesmanager.core.business.system.model.CustomIntegrationConfiguration;
import com.salesmanager.core.business.system.model.IntegrationConfiguration;
import com.salesmanager.core.business.system.model.IntegrationModule;
@@ -115,8 +117,9 @@ public class USPSShippingQuote implements ShippingQuoteModule {
@Override
public List<ShippingOption> getShippingQuotes(
+ ShippingQuote shippingQuote,
List<PackageDetails> packages, BigDecimal orderTotal,
- Delivery delivery, MerchantStore store,
+ Delivery delivery, ShippingOrigin origin, MerchantStore store,
IntegrationConfiguration configuration, IntegrationModule module,
ShippingConfiguration shippingConfiguration, Locale locale)
throws IntegrationException {
diff --git a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/order/ODSInvoiceModule.java b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/order/ODSInvoiceModule.java
index bc33e98..88ccc5d 100755
--- a/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/order/ODSInvoiceModule.java
+++ b/shopizer/sm-core/src/main/java/com/salesmanager/core/modules/order/ODSInvoiceModule.java
@@ -22,13 +22,13 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import com.lowagie.text.Document;
-import com.lowagie.text.PageSize;
-import com.lowagie.text.Rectangle;
-import com.lowagie.text.pdf.PdfContentByte;
-import com.lowagie.text.pdf.PdfDocument;
-import com.lowagie.text.pdf.PdfTemplate;
-import com.lowagie.text.pdf.PdfWriter;
+import com.itextpdf.text.Document;
+import com.itextpdf.text.PageSize;
+import com.itextpdf.text.Rectangle;
+import com.itextpdf.text.pdf.PdfContentByte;
+import com.itextpdf.text.pdf.PdfDocument;
+import com.itextpdf.text.pdf.PdfTemplate;
+import com.itextpdf.text.pdf.PdfWriter;
import com.salesmanager.core.business.merchant.model.MerchantStore;
import com.salesmanager.core.business.order.model.Order;
import com.salesmanager.core.business.order.model.OrderTotal;
diff --git a/shopizer/sm-core/src/main/resources/META-INF/sm-persistence.xml b/shopizer/sm-core/src/main/resources/META-INF/sm-persistence.xml
index e81c1f3..cdf8150 100755
--- a/shopizer/sm-core/src/main/resources/META-INF/sm-persistence.xml
+++ b/shopizer/sm-core/src/main/resources/META-INF/sm-persistence.xml
@@ -78,6 +78,7 @@
<class>com.salesmanager.core.business.shoppingcart.model.ShoppingCartItem</class>
<class>com.salesmanager.core.business.payments.model.Transaction</class>
+ <class>com.salesmanager.core.business.shipping.model.ShippingOrigin</class>
</persistence-unit>
diff --git a/shopizer/sm-core/src/main/resources/reference/integrationmodules.json b/shopizer/sm-core/src/main/resources/reference/integrationmodules.json
index cffa8e5..b015062 100755
--- a/shopizer/sm-core/src/main/resources/reference/integrationmodules.json
+++ b/shopizer/sm-core/src/main/resources/reference/integrationmodules.json
@@ -10,6 +10,15 @@
},
{
"module": "SHIPPING",
+ "code": "canadapost",
+ "version":"",
+ "regions": ["CA"],
+ "image":"canadapost.jpg",
+ "configuration":[{"env":"TEST","scheme":"https","host":"ct.soa-gw.canadapost.ca","port":"443","uri":"/rs/ship/price"},{"env":"PROD","scheme":"https","host":"soa-gw.canadapost.ca","port":"443","uri":"/rs/ship/price"}]
+
+ },
+ {
+ "module": "SHIPPING",
"code": "ups",
"version":"",
"regions": ["US","CA","FR","GB"],
@@ -26,6 +35,12 @@
"regions": ["*"]
},
{
+ "module": "SHIPPING",
+ "code": "customQuotesRules",
+ "version":"1.0",
+ "regions": ["*"]
+ },
+ {
"module": "PAYMENT",
"code": "moneyorder",
"type":"moneyorder",
diff --git a/shopizer/sm-core/src/main/resources/rules/shipping-custom-rules.xls b/shopizer/sm-core/src/main/resources/rules/shipping-custom-rules.xls
new file mode 100755
index 0000000..14e7580
Binary files /dev/null and b/shopizer/sm-core/src/main/resources/rules/shipping-custom-rules.xls differ
diff --git a/shopizer/sm-core/src/main/resources/rules/shipping-decision-rules.xls b/shopizer/sm-core/src/main/resources/rules/shipping-decision-rules.xls
new file mode 100644
index 0000000..2aa3073
Binary files /dev/null and b/shopizer/sm-core/src/main/resources/rules/shipping-decision-rules.xls differ
diff --git a/shopizer/sm-core/src/main/resources/spring/processors/shopizer-core-shipping-processors.xml b/shopizer/sm-core/src/main/resources/spring/processors/shopizer-core-shipping-processors.xml
new file mode 100755
index 0000000..e80bbe9
--- /dev/null
+++ b/shopizer/sm-core/src/main/resources/spring/processors/shopizer-core-shipping-processors.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
+
+ <!-- Shipping pre-processors -->
+ <util:list id="shippingModulePreProcessors" value-type="com.salesmanager.core.modules.integration.shipping.model.ShippingQuotePreProcessModule">
+ <!-- From rules -->
+ <!-- disabled shipping pre-processing rule
+ That pre-processor uses drules to decide
+ which shipping method should be used based
+ on shipping criteria. It overwrites the default
+ merchant settings
+ <ref bean="shippingMethodDecisionProcess"/>
+ -->
+ </util:list>
+
+
+</beans>
\ No newline at end of file
diff --git a/shopizer/sm-core/src/main/resources/spring/shopizer-core-modules.xml b/shopizer/sm-core/src/main/resources/spring/shopizer-core-modules.xml
index 3a3dfd6..77149d1 100755
--- a/shopizer/sm-core/src/main/resources/spring/shopizer-core-modules.xml
+++ b/shopizer/sm-core/src/main/resources/spring/shopizer-core-modules.xml
@@ -17,6 +17,7 @@
<entry key="usps" value-ref="usps"/>
<entry key="ups" value-ref="ups"/>
<entry key="weightBased" value-ref="weightBased"/>
+ <entry key="customQuotesRules" value-ref="customShippingPriceModule"/><!-- as defined in shopizer-core-rules -->
</util:map>
<!-- Payment integration modules -->
@@ -29,7 +30,7 @@
<!-- Shipping -->
<bean id="canadapost"
- class="com.salesmanager.core.modules.integration.shipping.impl.CanadaPostShippingQuote"/>
+ class="com.shopizer.modules.shipping.canadapost.CanadaPostQuoteModule"/><!-- shopizer-shipping-canadapost-module -->
<bean id="usps"
class="com.salesmanager.core.modules.integration.shipping.impl.USPSShippingQuote"/>
<bean id="ups"
diff --git a/shopizer/sm-core/src/main/resources/spring/shopizer-core-rules.xml b/shopizer/sm-core/src/main/resources/spring/shopizer-core-rules.xml
new file mode 100755
index 0000000..fbdb545
--- /dev/null
+++ b/shopizer/sm-core/src/main/resources/spring/shopizer-core-rules.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:drools="http://drools.org/schema/drools-spring"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
+ http://drools.org/schema/drools-spring http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring-1.0.0.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
+
+ <!-- Decision table for the the selection of a shipping shipping method -->
+ <!-- from shopizer-shipping-decision-table-module -->
+ <drools:kbase id="shippingMethodDecisionBase">
+ <drools:resources>
+ <drools:resource type="DTABLE" source="classpath:rules/shipping-custom-rules.xls"/>
+ </drools:resources>
+ </drools:kbase>
+
+ <drools:ksession id="shippingMethodDecision" name="shippingMethodDecision" type="stateless" kbase="shippingMethodDecisionBase"/>
+
+ <!-- concrete module for the above kbase -->
+ <bean id="shippingMethodDecisionProcess" class="com.salesmanager.core.modules.integration.shipping.impl.ShippingDecisionPreProcessorImpl">
+ <property name="shippingMethodDecision" ref="shippingMethodDecision" />
+ <property name="kbase" ref="shippingMethodDecisionBase" />
+ </bean>
+
+ <!-- Basic custom shipping rules -->
+ <drools:kbase id="shippingPriceDecisionBase">
+ <drools:resources>
+ <drools:resource type="DTABLE" source="classpath:rules/shipping-decision-rules.xls"/>
+ </drools:resources>
+ </drools:kbase>
+
+ <drools:ksession id="shippingPriceRule" name="shippingPriceRule" type="stateless" kbase="shippingPriceDecisionBase"/>
+
+ <!-- concrete module for the above kbase -->
+ <bean id="customShippingPriceModule" class="com.salesmanager.core.modules.integration.shipping.impl.CustomShippingQuoteRules">
+ <property name="shippingPriceRule" ref="shippingPriceRule" />
+ <property name="kbase" ref="shippingPriceDecisionBase" />
+ </bean>
+
+</beans>
\ No newline at end of file
diff --git a/shopizer/sm-core/src/main/resources/spring/spring-context.xml b/shopizer/sm-core/src/main/resources/spring/spring-context.xml
index bc05b2a..8edcd48 100755
--- a/shopizer/sm-core/src/main/resources/spring/spring-context.xml
+++ b/shopizer/sm-core/src/main/resources/spring/spring-context.xml
@@ -14,6 +14,7 @@
<context:component-scan base-package="com.salesmanager.core.business" />
<context:component-scan base-package="com.salesmanager.core.utils" />
<context:component-scan base-package="com.salesmanager.core.modules" />
+ <context:component-scan base-package="com.shopizer.modules" /><!-- external modules -->
<!-- datasource -->
<import resource="classpath:/spring/datasource-c3p0.xml" />
@@ -23,6 +24,10 @@
<import resource="classpath:/spring/shopizer-core-config.xml" />
<!-- modules -->
<import resource="classpath:/spring/shopizer-core-modules.xml" />
+ <!-- shipping pre processors -->
+ <import resource="classpath:/spring/processors/shopizer-core-shipping-processors.xml" />
+ <!-- rules -->
+ <import resource="classpath:/spring/shopizer-core-rules.xml" />
<!-- search -->
<import resource="classpath:/spring/shopizer-search.xml" />
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/CatalogSalesManagerTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/CatalogSalesManagerTestCase.java
index 32cb331..74e708a 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/CatalogSalesManagerTestCase.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/CatalogSalesManagerTestCase.java
@@ -169,6 +169,7 @@ public class CatalogSalesManagerTestCase extends AbstractSalesManagerCoreTestCas
Manufacturer oreilley = new Manufacturer();
oreilley.setMerchantStore(store);
+ oreilley.setCode("oreilley");
ManufacturerDescription oreilleyd = new ManufacturerDescription();
oreilleyd.setLanguage(en);
@@ -180,6 +181,7 @@ public class CatalogSalesManagerTestCase extends AbstractSalesManagerCoreTestCas
Manufacturer packed = new Manufacturer();
packed.setMerchantStore(store);
+ packed.setCode("packed");
ManufacturerDescription packedd = new ManufacturerDescription();
packedd.setLanguage(en);
@@ -191,6 +193,7 @@ public class CatalogSalesManagerTestCase extends AbstractSalesManagerCoreTestCas
Manufacturer novells = new Manufacturer();
novells.setMerchantStore(store);
+ novells.setCode("novells");
ManufacturerDescription novellsd = new ManufacturerDescription();
novellsd.setLanguage(en);
@@ -566,6 +569,7 @@ public class CatalogSalesManagerTestCase extends AbstractSalesManagerCoreTestCas
*/
Manufacturer packed = new Manufacturer();
packed.setMerchantStore(store);
+ packed.setCode("packed");
ManufacturerDescription packedd = new ManufacturerDescription();
packedd.setLanguage(en);
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/ProductImagesTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/ProductImagesTestCase.java
index 46eb244..0f25a91 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/ProductImagesTestCase.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/ProductImagesTestCase.java
@@ -89,6 +89,7 @@ public class ProductImagesTestCase extends AbstractSalesManagerCoreTestCase {
*/
Manufacturer packed = new Manufacturer();
packed.setMerchantStore(store);
+ packed.setCode("packt");
ManufacturerDescription packedd = new ManufacturerDescription();
packedd.setLanguage(en);
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/SearchByProductAttributeTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/SearchByProductAttributeTestCase.java
index b0ccfff..1d902d0 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/SearchByProductAttributeTestCase.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/catalog/SearchByProductAttributeTestCase.java
@@ -107,6 +107,7 @@ public class SearchByProductAttributeTestCase extends AbstractSalesManagerCoreTe
Manufacturer novells = new Manufacturer();
novells.setMerchantStore(store);
+ novells.setCode("novells");
ManufacturerDescription novellsd = new ManufacturerDescription();
novellsd.setLanguage(en);
@@ -119,6 +120,7 @@ public class SearchByProductAttributeTestCase extends AbstractSalesManagerCoreTe
Manufacturer manning = new Manufacturer();
manning.setMerchantStore(store);
+ manning.setCode("manning");
ManufacturerDescription manningd = new ManufacturerDescription();
manningd.setLanguage(en);
@@ -209,7 +211,6 @@ public class SearchByProductAttributeTestCase extends AbstractSalesManagerCoreTe
description.setProduct(product);
product.getDescriptions().add(description);
-
product.getCategories().add(tech);
productService.create(product);
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/core/AbstractSalesManagerCoreTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/core/AbstractSalesManagerCoreTestCase.java
index 08fbc81..b93eae4 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/core/AbstractSalesManagerCoreTestCase.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/core/AbstractSalesManagerCoreTestCase.java
@@ -1,8 +1,5 @@
package com.salesmanager.test.core;
-import java.math.BigDecimal;
-import java.util.Date;
-
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
@@ -13,12 +10,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import com.salesmanager.core.business.catalog.category.service.CategoryService;
-import com.salesmanager.core.business.catalog.product.model.Product;
-import com.salesmanager.core.business.catalog.product.model.availability.ProductAvailability;
-import com.salesmanager.core.business.catalog.product.model.description.ProductDescription;
-import com.salesmanager.core.business.catalog.product.model.price.ProductPrice;
-import com.salesmanager.core.business.catalog.product.model.price.ProductPriceDescription;
-import com.salesmanager.core.business.catalog.product.model.type.ProductType;
import com.salesmanager.core.business.catalog.product.service.ProductService;
import com.salesmanager.core.business.catalog.product.service.attribute.ProductAttributeService;
import com.salesmanager.core.business.catalog.product.service.attribute.ProductOptionService;
@@ -35,14 +26,12 @@ import com.salesmanager.core.business.customer.service.attribute.CustomerOptionS
import com.salesmanager.core.business.customer.service.attribute.CustomerOptionValueService;
import com.salesmanager.core.business.generic.exception.ServiceException;
import com.salesmanager.core.business.generic.util.EntityManagerUtils;
-import com.salesmanager.core.business.merchant.model.MerchantStore;
import com.salesmanager.core.business.merchant.service.MerchantStoreService;
import com.salesmanager.core.business.order.service.OrderService;
import com.salesmanager.core.business.payments.service.PaymentService;
import com.salesmanager.core.business.reference.country.service.CountryService;
import com.salesmanager.core.business.reference.currency.service.CurrencyService;
import com.salesmanager.core.business.reference.init.service.InitializationDatabase;
-import com.salesmanager.core.business.reference.language.model.Language;
import com.salesmanager.core.business.reference.language.service.LanguageService;
import com.salesmanager.core.business.reference.zone.service.ZoneService;
import com.salesmanager.core.business.shoppingcart.service.ShoppingCartService;
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/email/EmailTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/email/EmailTestCase.java
index 500d211..1d6c77d 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/email/EmailTestCase.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/email/EmailTestCase.java
@@ -4,11 +4,26 @@ import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import com.salesmanager.core.business.merchant.model.MerchantStore;
import com.salesmanager.core.modules.email.Email;
import com.salesmanager.test.core.AbstractSalesManagerCoreTestCase;
+import com.salesmanager.test.core.SalesManagerCoreTestExecutionListener;
+
+@ContextConfiguration(locations = {
+ "classpath:spring/test-spring-context.xml"
+})
+@RunWith(SpringJUnit4ClassRunner.class)
+@TestExecutionListeners({
+ DependencyInjectionTestExecutionListener.class,
+ SalesManagerCoreTestExecutionListener.class
+})
public class EmailTestCase extends AbstractSalesManagerCoreTestCase {
@Test
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/isolated/IsolatedTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/isolated/IsolatedTestCase.java
index 6967f23..f547a28 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/isolated/IsolatedTestCase.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/isolated/IsolatedTestCase.java
@@ -590,10 +590,11 @@ public class IsolatedTestCase
// Add products
// ProductType generalType = productTypeService.
- final Manufacturer oreilley = new Manufacturer();
+ Manufacturer oreilley = new Manufacturer();
oreilley.setMerchantStore( store );
+ oreilley.setCode("oreilley");
- final ManufacturerDescription oreilleyd = new ManufacturerDescription();
+ ManufacturerDescription oreilleyd = new ManufacturerDescription();
oreilleyd.setLanguage( en );
oreilleyd.setName( "O\'reilley" );
oreilleyd.setManufacturer( oreilley );
@@ -601,10 +602,11 @@ public class IsolatedTestCase
manufacturerService.create( oreilley );
- final Manufacturer packed = new Manufacturer();
+ Manufacturer packed = new Manufacturer();
packed.setMerchantStore( store );
+ packed.setCode("packed");
- final ManufacturerDescription packedd = new ManufacturerDescription();
+ ManufacturerDescription packedd = new ManufacturerDescription();
packedd.setLanguage( en );
packedd.setManufacturer( packed );
packedd.setName( "Packed publishing" );
@@ -612,10 +614,11 @@ public class IsolatedTestCase
manufacturerService.create( packed );
- final Manufacturer novells = new Manufacturer();
+ Manufacturer novells = new Manufacturer();
novells.setMerchantStore( store );
+ novells.setCode("novells");
- final ManufacturerDescription novellsd = new ManufacturerDescription();
+ ManufacturerDescription novellsd = new ManufacturerDescription();
novellsd.setLanguage( en );
novellsd.setManufacturer( novells );
novellsd.setName( "Novells publishing" );
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/manufacturer/ManufacturerTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/manufacturer/ManufacturerTestCase.java
index f8e5a9d..8b634af 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/manufacturer/ManufacturerTestCase.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/manufacturer/ManufacturerTestCase.java
@@ -23,6 +23,7 @@ public class ManufacturerTestCase extends AbstractSalesManagerCoreTestCase {
+ @SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testCreateManufacturerService() throws ServiceException {
@@ -48,6 +49,7 @@ public class ManufacturerTestCase extends AbstractSalesManagerCoreTestCase {
Manufacturer manufacturer = new Manufacturer();
manufacturer.setMerchantStore(store);
+ manufacturer.setCode("testmanufacturer");
ManufacturerDescription fd = new ManufacturerDescription();
fd.setLanguage(FRENCH);
@@ -69,7 +71,7 @@ public class ManufacturerTestCase extends AbstractSalesManagerCoreTestCase {
manufacturerService.create(manufacturer);
manufacturerService.delete(manufacturer);
- //merchantService.delete(store);
+
}
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/order/InvoiceTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/order/InvoiceTestCase.java
index a001e95..9bed711 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/order/InvoiceTestCase.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/order/InvoiceTestCase.java
@@ -23,13 +23,13 @@ import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import com.lowagie.text.Document;
-import com.lowagie.text.PageSize;
-import com.lowagie.text.Rectangle;
-import com.lowagie.text.pdf.PdfContentByte;
-import com.lowagie.text.pdf.PdfDocument;
-import com.lowagie.text.pdf.PdfTemplate;
-import com.lowagie.text.pdf.PdfWriter;
+import com.itextpdf.text.Document;
+import com.itextpdf.text.PageSize;
+import com.itextpdf.text.Rectangle;
+import com.itextpdf.text.pdf.PdfContentByte;
+import com.itextpdf.text.pdf.PdfDocument;
+import com.itextpdf.text.pdf.PdfTemplate;
+import com.itextpdf.text.pdf.PdfWriter;
import com.salesmanager.core.business.catalog.product.model.Product;
import com.salesmanager.core.business.catalog.product.model.attribute.ProductAttribute;
import com.salesmanager.core.business.catalog.product.model.attribute.ProductOption;
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/search/IndexProductTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/search/IndexProductTestCase.java
index d189d5c..ea3dfe1 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/search/IndexProductTestCase.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/search/IndexProductTestCase.java
@@ -74,6 +74,7 @@ public class IndexProductTestCase extends AbstractSalesManagerCoreTestCase {
*/
Manufacturer packed = new Manufacturer();
packed.setMerchantStore(store);
+ packed.setCode("packed");
ManufacturerDescription packedd = new ManufacturerDescription();
packedd.setLanguage(en);
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/shipping/ShippingMethodDecisionTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/shipping/ShippingMethodDecisionTestCase.java
new file mode 100755
index 0000000..92167bc
--- /dev/null
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/shipping/ShippingMethodDecisionTestCase.java
@@ -0,0 +1,94 @@
+package com.salesmanager.test.shipping;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
+
+import com.salesmanager.core.business.common.model.Delivery;
+import com.salesmanager.core.business.reference.country.model.Country;
+import com.salesmanager.core.business.reference.zone.model.Zone;
+import com.salesmanager.core.business.shipping.model.PackageDetails;
+import com.salesmanager.core.business.shipping.model.ShippingQuote;
+import com.salesmanager.core.business.system.model.IntegrationModule;
+import com.salesmanager.core.modules.integration.shipping.impl.ShippingDecisionPreProcessorImpl;
+
+@ContextConfiguration(locations = {
+ "classpath:spring/test-spring-context.xml"
+})
+@RunWith(SpringJUnit4ClassRunner.class)
+@TestExecutionListeners({
+ DependencyInjectionTestExecutionListener.class
+})
+public class ShippingMethodDecisionTestCase {
+
+ @Autowired
+ ShippingDecisionPreProcessorImpl shippingMethodDecisionProcess;
+
+ @Test
+ public void validateShippingMethod() throws Exception {
+
+ ShippingQuote quote = new ShippingQuote();
+ PackageDetails pDetail = new PackageDetails();
+ pDetail.setShippingHeight(20);
+ pDetail.setShippingLength(10);
+ pDetail.setShippingWeight(70);
+ pDetail.setShippingWidth(78);
+ List<PackageDetails> details = new ArrayList<PackageDetails>();
+ details.add(pDetail);
+
+ Delivery delivery = new Delivery();
+ delivery.setAddress("358 Du Languedoc");
+ delivery.setCity("Boucherville");
+ delivery.setPostalCode("J4B 8J9");
+
+ Country country = new Country();
+ country.setIsoCode("CA");
+ country.setName("Canada");
+
+ //country.setIsoCode("US");
+ //country.setName("United States");
+
+ delivery.setCountry(country);
+
+ Zone zone = new Zone();
+ zone.setCode("QC");
+ zone.setName("Quebec");
+
+ //zone.setCode("NY");
+ //zone.setName("New York");
+
+ delivery.setZone(zone);
+
+ IntegrationModule currentModule = new IntegrationModule();
+ currentModule.setCode("canadapost");
+ quote.setCurrentShippingModule(currentModule);
+ quote.setShippingModuleCode(currentModule.getCode());
+
+ IntegrationModule canadapost = new IntegrationModule();
+ canadapost.setCode("canadapost");
+
+ IntegrationModule ups = new IntegrationModule();
+ ups.setCode("ups");
+
+ IntegrationModule inhouse = new IntegrationModule();
+ inhouse.setCode("customQuotesRules");
+
+ List<IntegrationModule> allModules = new ArrayList<IntegrationModule>();
+ allModules.add(canadapost);
+ allModules.add(ups);
+ allModules.add(inhouse);
+
+ shippingMethodDecisionProcess.preProcessShippingQuotes(quote, details, null, delivery, null, null, null, currentModule, null, allModules, Locale.CANADA);
+
+ System.out.println("Done : " + quote.getCurrentShippingModule()!=null ? quote.getCurrentShippingModule().getCode() : currentModule.getCode());
+
+ }
+}
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/shoppingcart/ShoppingCartTestCase.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/shoppingcart/ShoppingCartTestCase.java
index a67a394..5e21402 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/shoppingcart/ShoppingCartTestCase.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/shoppingcart/ShoppingCartTestCase.java
@@ -91,6 +91,7 @@ public class ShoppingCartTestCase extends AbstractSalesManagerCoreTestCase {
*/
Manufacturer addidas = new Manufacturer();
addidas.setMerchantStore(store);
+ addidas.setCode("addidas");
ManufacturerDescription addidasDesc = new ManufacturerDescription();
addidasDesc.setLanguage(en);
@@ -296,6 +297,7 @@ public class ShoppingCartTestCase extends AbstractSalesManagerCoreTestCase {
*/
Manufacturer addidas = new Manufacturer();
addidas.setMerchantStore(store);
+ addidas.setCode("addidas");
ManufacturerDescription addidasDesc = new ManufacturerDescription();
addidasDesc.setLanguage(en);
diff --git a/shopizer/sm-core/src/test/java/com/salesmanager/test/utils/ImportIntegrationModule.java b/shopizer/sm-core/src/test/java/com/salesmanager/test/utils/ImportIntegrationModule.java
index 1e388bc..47d9b9f 100755
--- a/shopizer/sm-core/src/test/java/com/salesmanager/test/utils/ImportIntegrationModule.java
+++ b/shopizer/sm-core/src/test/java/com/salesmanager/test/utils/ImportIntegrationModule.java
@@ -36,29 +36,25 @@ public class ImportIntegrationModule {
private ModuleConfigurationService moduleCongigurationService;
/**
- * Import an integration module
+ * Import a specific integration module. Will delete and recreate the module
+ * if it already exists
* @throws Exception
*/
@Ignore
- public void importIntegrationModule() throws Exception {
+ //@Test
+ public void importSpecificIntegrationModule() throws Exception {
ObjectMapper mapper = new ObjectMapper();
- File file = new File("/Users/csamson777/Documents/workspace2/sm-core/src/main/resources/reference/integrationmodules.json");
+ File file = new File(" /Users/carlsamson/Documents/dev/workspaces/shopizer-master/shopizer/sm-core/src/main/resources/reference/integrationmodules.json");
InputStream in = null;
try {
-
-
-
in = new FileInputStream(file);
- if(in==null) {
- throw new Exception("File not found");
- }
@SuppressWarnings("rawtypes")
Map[] objects = mapper.readValue(in, Map[].class);
@@ -93,9 +89,60 @@ public class ImportIntegrationModule {
} catch(Exception ignore) {}
}
}
+
+ }
+
+ /**
+ * Import all non existing modules
+ * @throws Exception
+ */
+ @Ignore
+ //@Test
+ public void importNonExistingIntegrationModule() throws Exception {
+
+ ObjectMapper mapper = new ObjectMapper();
+ File file = new File("/Users/carlsamson/Documents/dev/workspaces/shopizer-master/shopizer/sm-core/src/main/resources/reference/integrationmodules.json");
+
+ InputStream in = null;
+
+
+ try {
+
+ in = new FileInputStream(file);
-
+ @SuppressWarnings("rawtypes")
+ Map[] objects = mapper.readValue(in, Map[].class);
+
+
+ //get the module to be loaded
+ for(int i = 0; i < objects.length; i++) {
+ @SuppressWarnings("rawtypes")
+ Map o = objects[i];
+ //get module object
+ IntegrationModule module = integrationModulesLoader.loadModule(o);
+
+ if(module!=null) {
+ IntegrationModule m = moduleCongigurationService.getByCode(module.getCode());
+ if(m==null) {
+ moduleCongigurationService.create(module);
+ }
+ }
+
+ }
+
+
+
+ } catch (Exception e) {
+ throw new ServiceException(e);
+ } finally {
+ if(in !=null) {
+ try {
+ in.close();
+ } catch(Exception ignore) {}
+ }
+ }
+
}
}
diff --git a/shopizer/sm-core/src/test/resources/database.properties b/shopizer/sm-core/src/test/resources/database.properties
index fe9bb00..1526c38 100755
--- a/shopizer/sm-core/src/test/resources/database.properties
+++ b/shopizer/sm-core/src/test/resources/database.properties
@@ -1,20 +1,23 @@
##
## db configuration for test
##
-db.jdbcUrl=jdbc\:h2\:file\:SALESMANAGER-TEST;AUTOCOMMIT=OFF;INIT\=RUNSCRIPT FROM 'src/test/resources/sql/create_schema.sql'
-db.user=test
-db.password=password
-db.driverClass=org.h2.Driver
-#hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
-hibernate.dialect=org.hibernate.dialect.H2Dialect
-#db.jdbcUrl=jdbc:mysql://localhost:3306/SALESMANAGER?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
-#db.user=username
+#db.jdbcUrl=jdbc\:h2\:file\:SALESMANAGER-TEST;AUTOCOMMIT=OFF;INIT\=RUNSCRIPT FROM 'src/test/resources/sql/create_schema.sql'
+#db.user=test
#db.password=password
-#hibernate.hbm2ddl.auto=create
-#db.driverClass=com.mysql.jdbc.Driver
-#hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
+#db.driverClass=org.h2.Driver
+#hibernate.dialect=org.hibernate.dialect.H2Dialect
+
+db.jdbcUrl=jdbc:mysql://localhost:3306/SALESMANAGER?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
+db.user=carlito
+db.password=password
+hibernate.hbm2ddl.auto=create
+db.driverClass=com.mysql.jdbc.Driver
+hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
db.preferredTestQuery=SELECT 1
+
+
+
db.schema=SALESMANAGER
hibernate.hbm2ddl.auto=update
shopizer/sm-core-model/.classpath 93(+93 -0)
diff --git a/shopizer/sm-core-model/.classpath b/shopizer/sm-core-model/.classpath
new file mode 100644
index 0000000..56f9ca1
--- /dev/null
+++ b/shopizer/sm-core-model/.classpath
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry including="**/*.java" kind="src" path="target/generated-sources/apt"/>
+ <classpathentry including="**/*.java" kind="src" path="target/generated-sources/querydsl"/>
+ <classpathentry kind="var" path="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" sourcepath="M2_REPO/javax/inject/javax.inject/1/javax.inject-1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar" sourcepath="M2_REPO/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-sources.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6.jar" sourcepath="M2_REPO/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.6.6/slf4j-api-1.6.6.jar" sourcepath="M2_REPO/org/slf4j/slf4j-api/1.6.6/slf4j-api-1.6.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17.jar"/>
+ <classpathentry kind="var" path="M2_REPO/cglib/cglib/2.2/cglib-2.2.jar" sourcepath="M2_REPO/cglib/cglib/2.2/cglib-2.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/asm/asm/3.1/asm-3.1.jar" sourcepath="M2_REPO/asm/asm/3.1/asm-3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/4.1.2/hibernate-core-4.1.2.jar" sourcepath="M2_REPO/org/hibernate/hibernate-core/4.1.2/hibernate-core-4.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging/3.1.0.GA/jboss-logging-3.1.0.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging/3.1.0.GA/jboss-logging-3.1.0.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/spec/javax/transaction/jboss-transaction-api_1.1_spec/1.0.0.Final/jboss-transaction-api_1.1_spec-1.0.0.Final.jar" sourcepath="M2_REPO/org/jboss/spec/javax/transaction/jboss-transaction-api_1.1_spec/1.0.0.Final/jboss-transaction-api_1.1_spec-1.0.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final.jar" sourcepath="M2_REPO/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/common/hibernate-commons-annotations/4.0.1.Final/hibernate-commons-annotations-4.0.1.Final.jar" sourcepath="M2_REPO/org/hibernate/common/hibernate-commons-annotations/4.0.1.Final/hibernate-commons-annotations-4.0.1.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/4.1.2/hibernate-entitymanager-4.1.2.jar" sourcepath="M2_REPO/org/hibernate/hibernate-entitymanager/4.1.2/hibernate-entitymanager-4.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-ehcache/3.5.1-Final/hibernate-ehcache-3.5.1-Final.jar" sourcepath="M2_REPO/org/hibernate/hibernate-ehcache/3.5.1-Final/hibernate-ehcache-3.5.1-Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/ehcache/ehcache/1.5.0/ehcache-1.5.0.jar" sourcepath="M2_REPO/net/sf/ehcache/ehcache/1.5.0/ehcache-1.5.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar" sourcepath="M2_REPO/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar" sourcepath="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar" sourcepath="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/jsr107cache/jsr107cache/1.0/jsr107cache-1.0.jar" sourcepath="M2_REPO/net/sf/jsr107cache/jsr107cache/1.0/jsr107cache-1.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.3/javassist-3.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-apt/3.4.2/querydsl-apt-3.4.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-codegen/3.4.2/querydsl-codegen-3.4.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-core/3.4.2/querydsl-core-3.4.2.jar" sourcepath="M2_REPO/com/mysema/querydsl/querydsl-core/3.4.2/querydsl-core-3.4.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/guava/guava/14.0/guava-14.0.jar" sourcepath="M2_REPO/com/google/guava/guava/14.0/guava-14.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/commons/mysema-commons-lang/0.2.4/mysema-commons-lang-0.2.4.jar" sourcepath="M2_REPO/com/mysema/commons/mysema-commons-lang/0.2.4/mysema-commons-lang-0.2.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/infradna/tool/bridge-method-annotation/1.11/bridge-method-annotation-1.11.jar" sourcepath="M2_REPO/com/infradna/tool/bridge-method-annotation/1.11/bridge-method-annotation-1.11-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/codegen/codegen/0.6.2/codegen-0.6.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/compiler/ecj/3.7.2/ecj-3.7.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-jpa/3.4.2/querydsl-jpa-3.4.2.jar" sourcepath="M2_REPO/com/mysema/querydsl/querydsl-jpa/3.4.2/querydsl-jpa-3.4.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-aop/3.1.0.RELEASE/spring-aop-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-aop/3.1.0.RELEASE/spring-aop-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-asm/3.1.0.RELEASE/spring-asm-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-asm/3.1.0.RELEASE/spring-asm-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-beans/3.1.0.RELEASE/spring-beans-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-beans/3.1.0.RELEASE/spring-beans-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-core/3.1.0.RELEASE/spring-core-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-core/3.1.0.RELEASE/spring-core-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-aspects/3.1.0.RELEASE/spring-aspects-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-aspects/3.1.0.RELEASE/spring-aspects-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-context/3.1.0.RELEASE/spring-context-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-context/3.1.0.RELEASE/spring-context-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-expression/3.1.0.RELEASE/spring-expression-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-expression/3.1.0.RELEASE/spring-expression-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-context-support/3.1.0.RELEASE/spring-context-support-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-context-support/3.1.0.RELEASE/spring-context-support-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-test/3.1.0.RELEASE/spring-test-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-test/3.1.0.RELEASE/spring-test-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-orm/3.1.0.RELEASE/spring-orm-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-orm/3.1.0.RELEASE/spring-orm-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-jdbc/3.1.0.RELEASE/spring-jdbc-3.1.0.RELEASE.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-tx/3.1.0.RELEASE/spring-tx-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-tx/3.1.0.RELEASE/spring-tx-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-web/3.1.0.RELEASE/spring-web-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-web/3.1.0.RELEASE/spring-web-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/4.3.0.Final/hibernate-validator-4.3.0.Final.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar" sourcepath="M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar" sourcepath="M2_REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar" sourcepath="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.9/junit-4.9.jar" sourcepath="M2_REPO/junit/junit/4.9/junit-4.9-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-lang3/3.0/commons-lang3-3.0.jar" sourcepath="M2_REPO/org/apache/commons/commons-lang3/3.0/commons-lang3-3.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0.jar" sourcepath="M2_REPO/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar" sourcepath="M2_REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-digester/commons-digester/1.8/commons-digester-1.8.jar" sourcepath="M2_REPO/commons-digester/commons-digester/1.8/commons-digester-1.8-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.6/commons-lang-2.6.jar" sourcepath="M2_REPO/commons-lang/commons-lang/2.6/commons-lang-2.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/2.0/joda-time-2.0.jar" sourcepath="M2_REPO/joda-time/joda-time/2.0/joda-time-2.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jadira/usertype/usertype.core/3.0.0.CR1/usertype.core-3.0.0.CR1.jar" sourcepath="M2_REPO/org/jadira/usertype/usertype.core/3.0.0.CR1/usertype.core-3.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/joda/joda-money/0.6/joda-money-0.6.jar" sourcepath="M2_REPO/org/joda/joda-money/0.6/joda-money-0.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jadira/usertype/usertype.spi/3.0.0.CR1/usertype.spi-3.0.0.CR1.jar" sourcepath="M2_REPO/org/jadira/usertype/usertype.spi/3.0.0.CR1/usertype.spi-3.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.19/freemarker-2.3.19.jar" sourcepath="M2_REPO/org/freemarker/freemarker/2.3.19/freemarker-2.3.19-sources.jar"/>
+ <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ <attribute name="org.eclipse.jst.component.nondependency" value=""/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
shopizer/sm-core-model/.project 59(+25 -34)
diff --git a/shopizer/sm-core-model/.project b/shopizer/sm-core-model/.project
index ed32e16..c4907d8 100644
--- a/shopizer/sm-core-model/.project
+++ b/shopizer/sm-core-model/.project
@@ -1,36 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>sm-core-model</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.wst.common.project.facet.core.builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.m2e.core.maven2Builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.wst.validation.validationbuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
- <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.m2e.core.maven2Nature</nature>
- <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
- </natures>
-</projectDescription>
+ <name>sm-core-model</name>
+ <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
shopizer/sm-core-model/pom.xml 6(+3 -3)
diff --git a/shopizer/sm-core-model/pom.xml b/shopizer/sm-core-model/pom.xml
index e84bece..40c4597 100755
--- a/shopizer/sm-core-model/pom.xml
+++ b/shopizer/sm-core-model/pom.xml
@@ -7,21 +7,21 @@
<parent>
<groupId>com.shopizer</groupId>
<artifactId>shopizer</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>2.0.2-SNAPSHOT</version>
</parent>
<artifactId>sm-core-model</artifactId>
- <version>2.0.1-SNAPSHOT</version>
+ <!--<version>${sm-core-model.version}</version>-->
<packaging>jar</packaging>
<name>sm-core-model</name>
<url>http://www.shopizer.com</url>
<properties>
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>1.6</jdk.version>
-
<jackson-version>1.9.13</jackson-version>
<axis-version>1.4</axis-version>
<jaxws.api.version>2.1</jaxws.api.version>
diff --git a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/catalog/category/model/Category.java b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/catalog/category/model/Category.java
index 4c4e889..5f8f8c9 100755
--- a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/catalog/category/model/Category.java
+++ b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/catalog/category/model/Category.java
@@ -210,4 +210,4 @@ public class Category extends SalesManagerEntity<Long, Category> implements Audi
return null;
}
-}
+}
\ No newline at end of file
diff --git a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/catalog/product/model/manufacturer/Manufacturer.java b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/catalog/product/model/manufacturer/Manufacturer.java
index 7e79634..bc49804 100755
--- a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/catalog/product/model/manufacturer/Manufacturer.java
+++ b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/catalog/product/model/manufacturer/Manufacturer.java
@@ -17,16 +17,21 @@ import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.validator.constraints.NotEmpty;
import com.salesmanager.core.business.common.model.audit.AuditListener;
import com.salesmanager.core.business.common.model.audit.AuditSection;
import com.salesmanager.core.business.common.model.audit.Auditable;
import com.salesmanager.core.business.generic.model.SalesManagerEntity;
import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.constants.SchemaConstant;
@Entity
@EntityListeners(value = AuditListener.class)
-@Table(name = "MANUFACTURER", schema="SALESMANAGER")
+@Table(name = "MANUFACTURER", schema=SchemaConstant.SALESMANAGER_SCHEMA, uniqueConstraints=
+@UniqueConstraint(columnNames = {"MERCHANT_ID", "CODE"}) )
public class Manufacturer extends SalesManagerEntity<Long, Manufacturer> implements Auditable {
private static final long serialVersionUID = 80693964563570099L;
@@ -51,6 +56,10 @@ public class Manufacturer extends SalesManagerEntity<Long, Manufacturer> impleme
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="MERCHANT_ID", nullable=false)
private MerchantStore merchantStore;
+
+ @NotEmpty
+ @Column(name="CODE", length=100, nullable=false)
+ private String code;
public Manufacturer() {
}
@@ -109,5 +118,13 @@ public class Manufacturer extends SalesManagerEntity<Long, Manufacturer> impleme
return order;
}
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
}
diff --git a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/common/model/Delivery.java b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/common/model/Delivery.java
index 5c3faf9..cdcc6a6 100755
--- a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/common/model/Delivery.java
+++ b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/common/model/Delivery.java
@@ -5,7 +5,6 @@ import javax.persistence.Embeddable;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
-import javax.persistence.OneToOne;
import com.salesmanager.core.business.reference.country.model.Country;
import com.salesmanager.core.business.reference.zone.model.Zone;
diff --git a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingOrigin.java b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingOrigin.java
new file mode 100644
index 0000000..176d7cf
--- /dev/null
+++ b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingOrigin.java
@@ -0,0 +1,149 @@
+package com.salesmanager.core.business.shipping.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+
+import org.hibernate.validator.constraints.NotEmpty;
+
+import com.salesmanager.core.business.generic.model.SalesManagerEntity;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.reference.country.model.Country;
+import com.salesmanager.core.business.reference.zone.model.Zone;
+import com.salesmanager.core.constants.SchemaConstant;
+
+@Entity
+@Table(name = "SHIPING_ORIGIN", schema=SchemaConstant.SALESMANAGER_SCHEMA)
+public class ShippingOrigin extends SalesManagerEntity<Long, ShippingOrigin> {
+
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1172536723717691214L;
+
+
+ @Id
+ @Column(name = "SHIP_ORIGIN_ID", unique=true, nullable=false)
+ @TableGenerator(name = "TABLE_GEN", table = "SM_SEQUENCER", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT",
+ pkColumnValue = "SHP_ORIG_SEQ_NEXT_VAL")
+ @GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN")
+ private Long id;
+
+ @Column(name = "ACTIVE")
+ private boolean active;
+
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name="MERCHANT_ID", nullable=false)
+ private MerchantStore merchantStore;
+
+ @NotEmpty
+ @Column (name ="STREET_ADDRESS", length=256)
+ private String address;
+
+
+ @NotEmpty
+ @Column (name ="CITY", length=100)
+ private String city;
+
+ @NotEmpty
+ @Column (name ="POSTCODE", length=20)
+ private String postalCode;
+
+ @Column (name ="STATE", length=100)
+ private String state;
+
+ @ManyToOne(fetch = FetchType.EAGER, targetEntity = Country.class)
+ @JoinColumn(name="COUNTRY_ID", nullable=true)
+ private Country country;
+
+ @ManyToOne(fetch = FetchType.EAGER, targetEntity = Zone.class)
+ @JoinColumn(name="ZONE_ID", nullable=true)
+ private Zone zone;
+
+ @Override
+ public Long getId() {
+ return this.id;
+ }
+
+ @Override
+ public void setId(Long id) {
+ this.id = id;
+
+ }
+
+ public MerchantStore getMerchantStore() {
+ return merchantStore;
+ }
+
+ public void setMerchantStore(MerchantStore merchantStore) {
+ this.merchantStore = merchantStore;
+ }
+
+ public boolean isActive() {
+ return active;
+ }
+
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ public String getPostalCode() {
+ return postalCode;
+ }
+
+ public void setPostalCode(String postalCode) {
+ this.postalCode = postalCode;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public Country getCountry() {
+ return country;
+ }
+
+ public void setCountry(Country country) {
+ this.country = country;
+ }
+
+ public Zone getZone() {
+ return zone;
+ }
+
+ public void setZone(Zone zone) {
+ this.zone = zone;
+ }
+
+
+
+}
diff --git a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingProduct.java b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingProduct.java
index f7c6b42..e5c360b 100755
--- a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingProduct.java
+++ b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingProduct.java
@@ -1,6 +1,7 @@
package com.salesmanager.core.business.shipping.model;
import com.salesmanager.core.business.catalog.product.model.Product;
+import com.salesmanager.core.business.catalog.product.model.price.FinalPrice;
public class ShippingProduct {
@@ -11,6 +12,11 @@ public class ShippingProduct {
private int quantity = 1;
private Product product;
+
+ private FinalPrice finalPrice;
+
+
+
public void setQuantity(int quantity) {
this.quantity = quantity;
}
@@ -23,5 +29,11 @@ public class ShippingProduct {
public Product getProduct() {
return product;
}
+ public FinalPrice getFinalPrice() {
+ return finalPrice;
+ }
+ public void setFinalPrice(FinalPrice finalPrice) {
+ this.finalPrice = finalPrice;
+ }
}
diff --git a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingQuote.java b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingQuote.java
index 2e70b13..6f4dd9a 100755
--- a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingQuote.java
+++ b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/shipping/model/ShippingQuote.java
@@ -2,15 +2,13 @@ package com.salesmanager.core.business.shipping.model;
import java.io.Serializable;
import java.math.BigDecimal;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
-public class ShippingQuote implements Serializable {
-
-
-
-
-
+import com.salesmanager.core.business.system.model.IntegrationModule;
+public class ShippingQuote implements Serializable {
/**
*
@@ -35,8 +33,13 @@ public class ShippingQuote implements Serializable {
private ShippingOption selectedShippingOption = null;
+ private IntegrationModule currentShippingModule;
+
private String quoteError = null;
+ /** additinal shipping information **/
+ private Map<String,Object> quoteInformations = new HashMap<String,Object>();
+
public void setShippingOptions(List<ShippingOption> shippingOptions) {
@@ -93,6 +96,18 @@ public class ShippingQuote implements Serializable {
public void setQuoteError(String quoteError) {
this.quoteError = quoteError;
}
+ public Map<String,Object> getQuoteInformations() {
+ return quoteInformations;
+ }
+ public void setQuoteInformations(Map<String,Object> quoteInformations) {
+ this.quoteInformations = quoteInformations;
+ }
+ public IntegrationModule getCurrentShippingModule() {
+ return currentShippingModule;
+ }
+ public void setCurrentShippingModule(IntegrationModule currentShippingModule) {
+ this.currentShippingModule = currentShippingModule;
+ }
diff --git a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/system/model/IntegrationConfiguration.java b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/system/model/IntegrationConfiguration.java
index 25e57a6..1f12b64 100755
--- a/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/system/model/IntegrationConfiguration.java
+++ b/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/system/model/IntegrationConfiguration.java
@@ -103,9 +103,21 @@ public class IntegrationConfiguration implements JSONAware {
StringBuilder optionDataEntries = new StringBuilder();
Set<String> keys = this.getIntegrationOptions().keySet();
int countOptions = 0;
+ int keySize = 0;
+
+ for(String key : keys) {
+ List<String> values = this.getIntegrationOptions().get(key);
+ if(values!=null) {
+ keySize ++;
+ }
+ }
+
for(String key : keys) {
List<String> values = this.getIntegrationOptions().get(key);
+ if(values==null) {
+ continue;
+ }
StringBuilder optionsEntries = new StringBuilder();
StringBuilder dataEntries = new StringBuilder();
@@ -123,7 +135,7 @@ public class IntegrationConfiguration implements JSONAware {
optionDataEntries.append("\"").append(key).append("\":").append(optionsEntries.toString());
- if(countOptions<keys.size()-1) {
+ if(countOptions<keySize-1) {
optionDataEntries.append(",");
}
countOptions ++;
shopizer/sm-core-modules/.classpath 87(+87 -0)
diff --git a/shopizer/sm-core-modules/.classpath b/shopizer/sm-core-modules/.classpath
new file mode 100644
index 0000000..3b3e52b
--- /dev/null
+++ b/shopizer/sm-core-modules/.classpath
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="var" path="M2_REPO/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar" sourcepath="M2_REPO/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-sources.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" path="/sm-core-model"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6.jar" sourcepath="M2_REPO/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.6.6/slf4j-api-1.6.6.jar" sourcepath="M2_REPO/org/slf4j/slf4j-api/1.6.6/slf4j-api-1.6.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17.jar"/>
+ <classpathentry kind="var" path="M2_REPO/cglib/cglib/2.2/cglib-2.2.jar" sourcepath="M2_REPO/cglib/cglib/2.2/cglib-2.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/asm/asm/3.1/asm-3.1.jar" sourcepath="M2_REPO/asm/asm/3.1/asm-3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/4.1.2/hibernate-core-4.1.2.jar" sourcepath="M2_REPO/org/hibernate/hibernate-core/4.1.2/hibernate-core-4.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging/3.1.0.GA/jboss-logging-3.1.0.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging/3.1.0.GA/jboss-logging-3.1.0.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/spec/javax/transaction/jboss-transaction-api_1.1_spec/1.0.0.Final/jboss-transaction-api_1.1_spec-1.0.0.Final.jar" sourcepath="M2_REPO/org/jboss/spec/javax/transaction/jboss-transaction-api_1.1_spec/1.0.0.Final/jboss-transaction-api_1.1_spec-1.0.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final.jar" sourcepath="M2_REPO/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/common/hibernate-commons-annotations/4.0.1.Final/hibernate-commons-annotations-4.0.1.Final.jar" sourcepath="M2_REPO/org/hibernate/common/hibernate-commons-annotations/4.0.1.Final/hibernate-commons-annotations-4.0.1.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/4.1.2/hibernate-entitymanager-4.1.2.jar" sourcepath="M2_REPO/org/hibernate/hibernate-entitymanager/4.1.2/hibernate-entitymanager-4.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-ehcache/3.5.1-Final/hibernate-ehcache-3.5.1-Final.jar" sourcepath="M2_REPO/org/hibernate/hibernate-ehcache/3.5.1-Final/hibernate-ehcache-3.5.1-Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/ehcache/ehcache/1.5.0/ehcache-1.5.0.jar" sourcepath="M2_REPO/net/sf/ehcache/ehcache/1.5.0/ehcache-1.5.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar" sourcepath="M2_REPO/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar" sourcepath="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar" sourcepath="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/jsr107cache/jsr107cache/1.0/jsr107cache-1.0.jar" sourcepath="M2_REPO/net/sf/jsr107cache/jsr107cache/1.0/jsr107cache-1.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.3/javassist-3.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-core/3.4.2/querydsl-core-3.4.2.jar" sourcepath="M2_REPO/com/mysema/querydsl/querydsl-core/3.4.2/querydsl-core-3.4.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/guava/guava/14.0/guava-14.0.jar" sourcepath="M2_REPO/com/google/guava/guava/14.0/guava-14.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/commons/mysema-commons-lang/0.2.4/mysema-commons-lang-0.2.4.jar" sourcepath="M2_REPO/com/mysema/commons/mysema-commons-lang/0.2.4/mysema-commons-lang-0.2.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/infradna/tool/bridge-method-annotation/1.11/bridge-method-annotation-1.11.jar" sourcepath="M2_REPO/com/infradna/tool/bridge-method-annotation/1.11/bridge-method-annotation-1.11-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-jpa/3.4.2/querydsl-jpa-3.4.2.jar" sourcepath="M2_REPO/com/mysema/querydsl/querydsl-jpa/3.4.2/querydsl-jpa-3.4.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-aop/3.1.0.RELEASE/spring-aop-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-aop/3.1.0.RELEASE/spring-aop-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-asm/3.1.0.RELEASE/spring-asm-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-asm/3.1.0.RELEASE/spring-asm-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-beans/3.1.0.RELEASE/spring-beans-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-beans/3.1.0.RELEASE/spring-beans-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-core/3.1.0.RELEASE/spring-core-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-core/3.1.0.RELEASE/spring-core-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-aspects/3.1.0.RELEASE/spring-aspects-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-aspects/3.1.0.RELEASE/spring-aspects-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-context/3.1.0.RELEASE/spring-context-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-context/3.1.0.RELEASE/spring-context-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-expression/3.1.0.RELEASE/spring-expression-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-expression/3.1.0.RELEASE/spring-expression-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-context-support/3.1.0.RELEASE/spring-context-support-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-context-support/3.1.0.RELEASE/spring-context-support-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-test/3.1.0.RELEASE/spring-test-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-test/3.1.0.RELEASE/spring-test-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-orm/3.1.0.RELEASE/spring-orm-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-orm/3.1.0.RELEASE/spring-orm-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-jdbc/3.1.0.RELEASE/spring-jdbc-3.1.0.RELEASE.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-tx/3.1.0.RELEASE/spring-tx-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-tx/3.1.0.RELEASE/spring-tx-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-web/3.1.0.RELEASE/spring-web-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-web/3.1.0.RELEASE/spring-web-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/4.3.0.Final/hibernate-validator-4.3.0.Final.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar" sourcepath="M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar" sourcepath="M2_REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar" sourcepath="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.10/junit-4.10.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-lang3/3.0/commons-lang3-3.0.jar" sourcepath="M2_REPO/org/apache/commons/commons-lang3/3.0/commons-lang3-3.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0.jar" sourcepath="M2_REPO/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar" sourcepath="M2_REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-digester/commons-digester/1.8/commons-digester-1.8.jar" sourcepath="M2_REPO/commons-digester/commons-digester/1.8/commons-digester-1.8-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.6/commons-lang-2.6.jar" sourcepath="M2_REPO/commons-lang/commons-lang/2.6/commons-lang-2.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/2.0/joda-time-2.0.jar" sourcepath="M2_REPO/joda-time/joda-time/2.0/joda-time-2.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jadira/usertype/usertype.core/3.0.0.CR1/usertype.core-3.0.0.CR1.jar" sourcepath="M2_REPO/org/jadira/usertype/usertype.core/3.0.0.CR1/usertype.core-3.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/joda/joda-money/0.6/joda-money-0.6.jar" sourcepath="M2_REPO/org/joda/joda-money/0.6/joda-money-0.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jadira/usertype/usertype.spi/3.0.0.CR1/usertype.spi-3.0.0.CR1.jar" sourcepath="M2_REPO/org/jadira/usertype/usertype.spi/3.0.0.CR1/usertype.spi-3.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.19/freemarker-2.3.19.jar" sourcepath="M2_REPO/org/freemarker/freemarker/2.3.19/freemarker-2.3.19-sources.jar"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ <attribute name="org.eclipse.jst.component.nondependency" value=""/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
shopizer/sm-core-modules/.project 61(+27 -34)
diff --git a/shopizer/sm-core-modules/.project b/shopizer/sm-core-modules/.project
index b75f0fe..b1e6043 100644
--- a/shopizer/sm-core-modules/.project
+++ b/shopizer/sm-core-modules/.project
@@ -1,36 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>sm-core-modules</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.wst.common.project.facet.core.builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.m2e.core.maven2Builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.wst.validation.validationbuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
- <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.m2e.core.maven2Nature</nature>
- <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
- </natures>
-</projectDescription>
+ <name>sm-core-modules</name>
+ <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+ <projects>
+ <project>sm-core-model</project>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
shopizer/sm-core-modules/pom.xml 5(+1 -4)
diff --git a/shopizer/sm-core-modules/pom.xml b/shopizer/sm-core-modules/pom.xml
index 0e798e4..389e547 100755
--- a/shopizer/sm-core-modules/pom.xml
+++ b/shopizer/sm-core-modules/pom.xml
@@ -6,11 +6,10 @@
<parent>
<groupId>com.shopizer</groupId>
<artifactId>shopizer</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>2.0.2-SNAPSHOT</version>
</parent>
<artifactId>sm-core-modules</artifactId>
- <version>2.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sm-core-modules</name>
@@ -19,8 +18,6 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>1.6</jdk.version>
-
- <sm-core-model.version>2.0.1-SNAPSHOT</sm-core-model.version>
</properties>
diff --git a/shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/constants/Constants.java b/shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/constants/Constants.java
new file mode 100644
index 0000000..db477a2
--- /dev/null
+++ b/shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/constants/Constants.java
@@ -0,0 +1,7 @@
+package com.salesmanager.core.modules.constants;
+
+public class Constants {
+
+ public final static String DISTANCE_KEY = "DISTANCE_KEY";
+
+}
diff --git a/shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/integration/shipping/model/ShippingQuoteModule.java b/shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/integration/shipping/model/ShippingQuoteModule.java
index 691a722..f8f789b 100755
--- a/shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/integration/shipping/model/ShippingQuoteModule.java
+++ b/shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/integration/shipping/model/ShippingQuoteModule.java
@@ -9,6 +9,8 @@ import com.salesmanager.core.business.merchant.model.MerchantStore;
import com.salesmanager.core.business.shipping.model.PackageDetails;
import com.salesmanager.core.business.shipping.model.ShippingConfiguration;
import com.salesmanager.core.business.shipping.model.ShippingOption;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+import com.salesmanager.core.business.shipping.model.ShippingQuote;
import com.salesmanager.core.business.system.model.CustomIntegrationConfiguration;
import com.salesmanager.core.business.system.model.IntegrationConfiguration;
import com.salesmanager.core.business.system.model.IntegrationModule;
@@ -19,6 +21,6 @@ public interface ShippingQuoteModule {
public void validateModuleConfiguration(IntegrationConfiguration integrationConfiguration, MerchantStore store) throws IntegrationException;
public CustomIntegrationConfiguration getCustomModuleConfiguration(MerchantStore store) throws IntegrationException;
- public List<ShippingOption> getShippingQuotes(List<PackageDetails> packages, BigDecimal orderTotal, Delivery delivery, MerchantStore store, IntegrationConfiguration configuration, IntegrationModule module, ShippingConfiguration shippingConfiguration, Locale locale) throws IntegrationException;
+ public List<ShippingOption> getShippingQuotes(ShippingQuote quote, List<PackageDetails> packages, BigDecimal orderTotal, Delivery delivery, ShippingOrigin origin, MerchantStore store, IntegrationConfiguration configuration, IntegrationModule module, ShippingConfiguration shippingConfiguration, Locale locale) throws IntegrationException;
}
diff --git a/shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/integration/shipping/model/ShippingQuotePreProcessModule.java b/shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/integration/shipping/model/ShippingQuotePreProcessModule.java
new file mode 100644
index 0000000..29bc9c0
--- /dev/null
+++ b/shopizer/sm-core-modules/src/main/java/com/salesmanager/core/modules/integration/shipping/model/ShippingQuotePreProcessModule.java
@@ -0,0 +1,37 @@
+package com.salesmanager.core.modules.integration.shipping.model;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Locale;
+
+import com.salesmanager.core.business.common.model.Delivery;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.shipping.model.PackageDetails;
+import com.salesmanager.core.business.shipping.model.ShippingConfiguration;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+import com.salesmanager.core.business.shipping.model.ShippingQuote;
+import com.salesmanager.core.business.system.model.IntegrationConfiguration;
+import com.salesmanager.core.business.system.model.IntegrationModule;
+import com.salesmanager.core.modules.integration.IntegrationException;
+
+/**
+ * Invoked before quote processing
+ * @author carlsamson
+ *
+ */
+public interface ShippingQuotePreProcessModule {
+
+
+ public void preProcessShippingQuotes(
+ ShippingQuote quote,
+ List<PackageDetails> packages,
+ BigDecimal orderTotal,
+ Delivery delivery,
+ ShippingOrigin origin,
+ MerchantStore store,
+ IntegrationConfiguration globalShippingConfiguration,
+ IntegrationModule currentModule,
+ ShippingConfiguration shippingConfiguration,
+ List<IntegrationModule> allModules, Locale locale) throws IntegrationException;
+
+}
shopizer/sm-shop/.classpath 202(+202 -0)
diff --git a/shopizer/sm-shop/.classpath b/shopizer/sm-shop/.classpath
new file mode 100644
index 0000000..036b1df
--- /dev/null
+++ b/shopizer/sm-shop/.classpath
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry excluding="**/*.java" including="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry excluding="**/*.java" including="**/*.java" kind="src" path="src/main/resources"/>
+ <classpathentry kind="var" path="M2_REPO/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar" sourcepath="M2_REPO/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" sourcepath="M2_REPO/javax/inject/javax.inject/1/javax.inject-1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/jstl/1.2/jstl-1.2.jar" sourcepath="M2_REPO/javax/servlet/jstl/1.2/jstl-1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar" sourcepath="M2_REPO/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar" sourcepath="M2_REPO/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar" sourcepath="M2_REPO/javax/activation/activation/1.1/activation-1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar" sourcepath="M2_REPO/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4.5/mail-1.4.5.jar" sourcepath="M2_REPO/javax/mail/mail/1.4.5/mail-1.4.5-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" sourcepath="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.jar" sourcepath="M2_REPO/javax/transaction/jta/1.1/jta-1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar" sourcepath="M2_REPO/javax/servlet/servlet-api/2.5/servlet-api-2.5-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1.jar" sourcepath="M2_REPO/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/jsp/jstl/jstl-api/1.2/jstl-api-1.2.jar" sourcepath="M2_REPO/javax/servlet/jsp/jstl/jstl-api/1.2/jstl-api-1.2-sources.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" path="/sm-core"/>
+ <classpathentry kind="src" path="/sm-core-model"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6.jar" sourcepath="M2_REPO/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.6.6/slf4j-api-1.6.6.jar" sourcepath="M2_REPO/org/slf4j/slf4j-api/1.6.6/slf4j-api-1.6.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16.jar" sourcepath="M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/cglib/cglib/2.2/cglib-2.2.jar" sourcepath="M2_REPO/cglib/cglib/2.2/cglib-2.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/asm/asm/3.1/asm-3.1.jar" sourcepath="M2_REPO/asm/asm/3.1/asm-3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/4.1.2/hibernate-core-4.1.2.jar" sourcepath="M2_REPO/org/hibernate/hibernate-core/4.1.2/hibernate-core-4.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging/3.1.0.GA/jboss-logging-3.1.0.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging/3.1.0.GA/jboss-logging-3.1.0.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/spec/javax/transaction/jboss-transaction-api_1.1_spec/1.0.0.Final/jboss-transaction-api_1.1_spec-1.0.0.Final.jar" sourcepath="M2_REPO/org/jboss/spec/javax/transaction/jboss-transaction-api_1.1_spec/1.0.0.Final/jboss-transaction-api_1.1_spec-1.0.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final.jar" sourcepath="M2_REPO/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/common/hibernate-commons-annotations/4.0.1.Final/hibernate-commons-annotations-4.0.1.Final.jar" sourcepath="M2_REPO/org/hibernate/common/hibernate-commons-annotations/4.0.1.Final/hibernate-commons-annotations-4.0.1.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/4.1.2/hibernate-entitymanager-4.1.2.jar" sourcepath="M2_REPO/org/hibernate/hibernate-entitymanager/4.1.2/hibernate-entitymanager-4.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-ehcache/3.5.1-Final/hibernate-ehcache-3.5.1-Final.jar" sourcepath="M2_REPO/org/hibernate/hibernate-ehcache/3.5.1-Final/hibernate-ehcache-3.5.1-Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/ehcache/ehcache/1.5.0/ehcache-1.5.0.jar" sourcepath="M2_REPO/net/sf/ehcache/ehcache/1.5.0/ehcache-1.5.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar" sourcepath="M2_REPO/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar" sourcepath="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar" sourcepath="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/jsr107cache/jsr107cache/1.0/jsr107cache-1.0.jar" sourcepath="M2_REPO/net/sf/jsr107cache/jsr107cache/1.0/jsr107cache-1.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.3/javassist-3.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-core/3.4.2/querydsl-core-3.4.2.jar" sourcepath="M2_REPO/com/mysema/querydsl/querydsl-core/3.4.2/querydsl-core-3.4.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/guava/guava/14.0/guava-14.0.jar" sourcepath="M2_REPO/com/google/guava/guava/14.0/guava-14.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/commons/mysema-commons-lang/0.2.4/mysema-commons-lang-0.2.4.jar" sourcepath="M2_REPO/com/mysema/commons/mysema-commons-lang/0.2.4/mysema-commons-lang-0.2.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/infradna/tool/bridge-method-annotation/1.11/bridge-method-annotation-1.11.jar" sourcepath="M2_REPO/com/infradna/tool/bridge-method-annotation/1.11/bridge-method-annotation-1.11-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-jpa/3.4.2/querydsl-jpa-3.4.2.jar" sourcepath="M2_REPO/com/mysema/querydsl/querydsl-jpa/3.4.2/querydsl-jpa-3.4.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-aop/3.1.0.RELEASE/spring-aop-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-aop/3.1.0.RELEASE/spring-aop-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-asm/3.1.0.RELEASE/spring-asm-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-asm/3.1.0.RELEASE/spring-asm-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-beans/3.1.0.RELEASE/spring-beans-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-beans/3.1.0.RELEASE/spring-beans-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-core/3.1.0.RELEASE/spring-core-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-core/3.1.0.RELEASE/spring-core-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-aspects/3.1.0.RELEASE/spring-aspects-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-aspects/3.1.0.RELEASE/spring-aspects-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-context/3.1.0.RELEASE/spring-context-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-context/3.1.0.RELEASE/spring-context-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-expression/3.1.0.RELEASE/spring-expression-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-expression/3.1.0.RELEASE/spring-expression-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-context-support/3.1.0.RELEASE/spring-context-support-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-context-support/3.1.0.RELEASE/spring-context-support-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-test/3.1.0.RELEASE/spring-test-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-test/3.1.0.RELEASE/spring-test-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-orm/3.1.0.RELEASE/spring-orm-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-orm/3.1.0.RELEASE/spring-orm-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-jdbc/3.0.7.RELEASE/spring-jdbc-3.0.7.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-jdbc/3.0.7.RELEASE/spring-jdbc-3.0.7.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-tx/3.1.0.RELEASE/spring-tx-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-tx/3.1.0.RELEASE/spring-tx-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-web/3.1.0.RELEASE/spring-web-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-web/3.1.0.RELEASE/spring-web-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/4.1.0.Final/hibernate-validator-4.1.0.Final.jar" sourcepath="M2_REPO/org/hibernate/hibernate-validator/4.1.0.Final/hibernate-validator-4.1.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/aspectj/aspectjrt/1.6.10/aspectjrt-1.6.10.jar" sourcepath="M2_REPO/org/aspectj/aspectjrt/1.6.10/aspectjrt-1.6.10-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar" sourcepath="M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar" sourcepath="M2_REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar" sourcepath="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.8.2/junit-4.8.2.jar" sourcepath="M2_REPO/junit/junit/4.8.2/junit-4.8.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-lang3/3.0/commons-lang3-3.0.jar" sourcepath="M2_REPO/org/apache/commons/commons-lang3/3.0/commons-lang3-3.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0.jar" sourcepath="M2_REPO/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar" sourcepath="M2_REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-digester/commons-digester/1.8/commons-digester-1.8.jar" sourcepath="M2_REPO/commons-digester/commons-digester/1.8/commons-digester-1.8-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.6/commons-lang-2.6.jar" sourcepath="M2_REPO/commons-lang/commons-lang/2.6/commons-lang-2.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/2.0/joda-time-2.0.jar" sourcepath="M2_REPO/joda-time/joda-time/2.0/joda-time-2.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jadira/usertype/usertype.core/3.0.0.CR1/usertype.core-3.0.0.CR1.jar" sourcepath="M2_REPO/org/jadira/usertype/usertype.core/3.0.0.CR1/usertype.core-3.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/joda/joda-money/0.6/joda-money-0.6.jar" sourcepath="M2_REPO/org/joda/joda-money/0.6/joda-money-0.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jadira/usertype/usertype.spi/3.0.0.CR1/usertype.spi-3.0.0.CR1.jar" sourcepath="M2_REPO/org/jadira/usertype/usertype.spi/3.0.0.CR1/usertype.spi-3.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.19/freemarker-2.3.19.jar" sourcepath="M2_REPO/org/freemarker/freemarker/2.3.19/freemarker-2.3.19-sources.jar"/>
+ <classpathentry kind="src" path="/sm-core-modules"/>
+ <classpathentry kind="var" path="M2_REPO/com/shopizer/sm-search/0.0.4/sm-search-0.0.4.jar" sourcepath="M2_REPO/com/shopizer/sm-search/0.0.4/sm-search-0.0.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/jcl-over-slf4j/1.6.6/jcl-over-slf4j-1.6.6.jar" sourcepath="M2_REPO/org/slf4j/jcl-over-slf4j/1.6.6/jcl-over-slf4j-1.6.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.3/jaxb-impl-2.1.3.jar" sourcepath="M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.3/jaxb-impl-2.1.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-fileupload/commons-fileupload/1.2.2/commons-fileupload-1.2.2.jar" sourcepath="M2_REPO/commons-fileupload/commons-fileupload/1.2.2/commons-fileupload-1.2.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/2.0.1/commons-io-2.0.1.jar" sourcepath="M2_REPO/commons-io/commons-io/2.0.1/commons-io-2.0.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-configuration/commons-configuration/1.6/commons-configuration-1.6.jar" sourcepath="M2_REPO/commons-configuration/commons-configuration/1.6/commons-configuration-1.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/elasticsearch/elasticsearch/0.90.2/elasticsearch-0.90.2.jar" sourcepath="M2_REPO/org/elasticsearch/elasticsearch/0.90.2/elasticsearch-0.90.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/4.3.1/lucene-core-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-core/4.3.1/lucene-core-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-analyzers-common/4.3.1/lucene-analyzers-common-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-analyzers-common/4.3.1/lucene-analyzers-common-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-codecs/4.3.1/lucene-codecs-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-codecs/4.3.1/lucene-codecs-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-queries/4.3.1/lucene-queries-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-queries/4.3.1/lucene-queries-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-memory/4.3.1/lucene-memory-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-memory/4.3.1/lucene-memory-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-highlighter/4.3.1/lucene-highlighter-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-highlighter/4.3.1/lucene-highlighter-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-queryparser/4.3.1/lucene-queryparser-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-queryparser/4.3.1/lucene-queryparser-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-sandbox/4.3.1/lucene-sandbox-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-sandbox/4.3.1/lucene-sandbox-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-suggest/4.3.1/lucene-suggest-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-suggest/4.3.1/lucene-suggest-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-join/4.3.1/lucene-join-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-join/4.3.1/lucene-join-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-grouping/4.3.1/lucene-grouping-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-grouping/4.3.1/lucene-grouping-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-spatial/4.3.1/lucene-spatial-4.3.1.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-spatial/4.3.1/lucene-spatial-4.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/spatial4j/spatial4j/0.3/spatial4j-0.3.jar" sourcepath="M2_REPO/com/spatial4j/spatial4j/0.3/spatial4j-0.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpclient/4.4/httpclient-4.4.jar" sourcepath="M2_REPO/org/apache/httpcomponents/httpclient/4.4/httpclient-4.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpcore/4.4/httpcore-4.4.jar" sourcepath="M2_REPO/org/apache/httpcomponents/httpcore/4.4/httpcore-4.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.2/commons-codec-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/maps/google-maps-services/0.1.6/google-maps-services-0.1.6.jar" sourcepath="M2_REPO/com/google/maps/google-maps-services/0.1.6/google-maps-services-0.1.6-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar" sourcepath="M2_REPO/com/google/code/gson/gson/2.3.1/gson-2.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/squareup/okhttp/okhttp/2.0.0/okhttp-2.0.0.jar" sourcepath="M2_REPO/com/squareup/okhttp/okhttp/2.0.0/okhttp-2.0.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/squareup/okio/okio/1.0.0/okio-1.0.0.jar" sourcepath="M2_REPO/com/squareup/okio/okio/1.0.0/okio-1.0.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-spring/5.6.0.Final/drools-spring-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/drools-spring/5.6.0.Final/drools-spring-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/knowledge-api/5.6.0.Final/knowledge-api-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/knowledge-api/5.6.0.Final/knowledge-api-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.6.0.Final/drools-core-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/drools-core/5.6.0.Final/drools-core-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.1.8.Final/mvel2-2.1.8.Final.jar" sourcepath="M2_REPO/org/mvel/mvel2/2.1.8.Final/mvel2-2.1.8.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/knowledge-internal-api/5.6.0.Final/knowledge-internal-api-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/knowledge-internal-api/5.6.0.Final/knowledge-internal-api-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.6.0.Final/drools-compiler-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.6.0.Final/drools-compiler-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.3/antlr-runtime-3.3.jar" sourcepath="M2_REPO/org/antlr/antlr-runtime/3.3/antlr-runtime-3.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.3/antlr-3.3.jar" sourcepath="M2_REPO/org/antlr/antlr/3.3/antlr-3.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.jar" sourcepath="M2_REPO/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/compiler/ecj/3.5.1/ecj-3.5.1.jar" sourcepath="M2_REPO/org/eclipse/jdt/core/compiler/ecj/3.5.1/ecj-3.5.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.4.1/xstream-1.4.1.jar" sourcepath="M2_REPO/com/thoughtworks/xstream/xstream/1.4.1/xstream-1.4.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar" sourcepath="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-decisiontables/5.6.0.Final/drools-decisiontables-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/drools-decisiontables/5.6.0.Final/drools-decisiontables-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-templates/5.6.0.Final/drools-templates-5.6.0.Final.jar" sourcepath="M2_REPO/org/drools/drools-templates/5.6.0.Final/drools-templates-5.6.0.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/poi/poi-ooxml/3.9/poi-ooxml-3.9.jar" sourcepath="M2_REPO/org/apache/poi/poi-ooxml/3.9/poi-ooxml-3.9-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/poi/poi/3.9/poi-3.9.jar" sourcepath="M2_REPO/org/apache/poi/poi/3.9/poi-3.9-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/poi/poi-ooxml-schemas/3.9/poi-ooxml-schemas-3.9.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/xmlbeans/xmlbeans/2.3.0/xmlbeans-2.3.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0.1/stax-api-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/sun/jersey/jersey-bundle/1.19/jersey-bundle-1.19.jar" sourcepath="M2_REPO/com/sun/jersey/jersey-bundle/1.19/jersey-bundle-1.19-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2.jar" sourcepath="M2_REPO/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/mysql/mysql-connector-java/5.1.31/mysql-connector-java-5.1.31.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.3.152/h2-1.3.152.jar" sourcepath="M2_REPO/com/h2database/h2/1.3.152/h2-1.3.152-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar" sourcepath="M2_REPO/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/infinispan/infinispan-core/5.1.6.FINAL/infinispan-core-5.1.6.FINAL.jar" sourcepath="M2_REPO/org/infinispan/infinispan-core/5.1.6.FINAL/infinispan-core-5.1.6.FINAL-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jgroups/jgroups/3.0.11.Final/jgroups-3.0.11.Final.jar" sourcepath="M2_REPO/org/jgroups/jgroups/3.0.11.Final/jgroups-3.0.11.Final-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/marshalling/jboss-marshalling-river/1.3.11.GA/jboss-marshalling-river-1.3.11.GA.jar" sourcepath="M2_REPO/org/jboss/marshalling/jboss-marshalling-river/1.3.11.GA/jboss-marshalling-river-1.3.11.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/marshalling/jboss-marshalling/1.3.11.GA/jboss-marshalling-1.3.11.GA.jar" sourcepath="M2_REPO/org/jboss/marshalling/jboss-marshalling/1.3.11.GA/jboss-marshalling-1.3.11.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/woodstox/woodstox-core-asl/4.1.1/woodstox-core-asl-4.1.1.jar" sourcepath="M2_REPO/org/codehaus/woodstox/woodstox-core-asl/4.1.1/woodstox-core-asl-4.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/woodstox/stax2-api/3.1.1/stax2-api-3.1.1.jar" sourcepath="M2_REPO/org/codehaus/woodstox/stax2-api/3.1.1/stax2-api-3.1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/rhq/helpers/rhq-pluginAnnotations/3.0.4/rhq-pluginAnnotations-3.0.4.jar" sourcepath="M2_REPO/org/rhq/helpers/rhq-pluginAnnotations/3.0.4/rhq-pluginAnnotations-3.0.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/infinispan/infinispan-cachestore-jdbc/5.1.4.FINAL/infinispan-cachestore-jdbc-5.1.4.FINAL.jar" sourcepath="M2_REPO/org/infinispan/infinispan-cachestore-jdbc/5.1.4.FINAL/infinispan-cachestore-jdbc-5.1.4.FINAL-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/infinispan/infinispan-tree/5.1.6.FINAL/infinispan-tree-5.1.6.FINAL.jar" sourcepath="M2_REPO/org/infinispan/infinispan-tree/5.1.6.FINAL/infinispan-tree-5.1.6.FINAL-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jopendocument/jOpenDocument/1.3b1/jOpenDocument-1.3b1.jar" sourcepath="M2_REPO/org/jopendocument/jOpenDocument/1.3b1/jOpenDocument-1.3b1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/lowagie/itext/4.2.1/itext-4.2.1.jar" sourcepath="M2_REPO/com/lowagie/itext/4.2.1/itext-4.2.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/bouncycastle/bctsp-jdk14/1.38/bctsp-jdk14-1.38.jar" sourcepath="M2_REPO/org/bouncycastle/bctsp-jdk14/1.38/bctsp-jdk14-1.38-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/bouncycastle/bcprov-jdk14/1.38/bcprov-jdk14-1.38.jar" sourcepath="M2_REPO/org/bouncycastle/bcprov-jdk14/1.38/bcprov-jdk14-1.38-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/bouncycastle/bcmail-jdk14/1.38/bcmail-jdk14-1.38.jar" sourcepath="M2_REPO/org/bouncycastle/bcmail-jdk14/1.38/bcmail-jdk14-1.38-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jfree/jfreechart/1.0.12/jfreechart-1.0.12.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jfree/jcommon/1.0.15/jcommon-1.0.15.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/swinglabs/pdf-renderer/1.0.5/pdf-renderer-1.0.5.jar" sourcepath="M2_REPO/org/swinglabs/pdf-renderer/1.0.5/pdf-renderer-1.0.5-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/paypal/sdk/merchantsdk/2.6.109/merchantsdk-2.6.109.jar" sourcepath="M2_REPO/com/paypal/sdk/merchantsdk/2.6.109/merchantsdk-2.6.109-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/paypal/sdk/paypal-core/1.5.1/paypal-core-1.5.1.jar" sourcepath="M2_REPO/com/paypal/sdk/paypal-core/1.5.1/paypal-core-1.5.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/maxmind/geoip2/geoip2/0.7.0/geoip2-0.7.0.jar" sourcepath="M2_REPO/com/maxmind/geoip2/geoip2/0.7.0/geoip2-0.7.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/maxmind/db/maxmind-db/0.3.1/maxmind-db-0.3.1.jar" sourcepath="M2_REPO/com/maxmind/db/maxmind-db/0.3.1/maxmind-db-0.3.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.2.3/jackson-databind-2.2.3.jar" sourcepath="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.2.3/jackson-databind-2.2.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.2.3/jackson-annotations-2.2.3.jar" sourcepath="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.2.3/jackson-annotations-2.2.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.2.3/jackson-core-2.2.3.jar" sourcepath="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.2.3/jackson-core-2.2.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/http-client/google-http-client/1.17.0-rc/google-http-client-1.17.0-rc.jar" sourcepath="M2_REPO/com/google/http-client/google-http-client/1.17.0-rc/google-http-client-1.17.0-rc-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-webmvc/3.1.0.RELEASE/spring-webmvc-3.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-webmvc/3.1.0.RELEASE/spring-webmvc-3.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/mobile/spring-mobile-device/1.1.0.RELEASE/spring-mobile-device-1.1.0.RELEASE.jar" sourcepath="M2_REPO/org/springframework/mobile/spring-mobile-device/1.1.0.RELEASE/spring-mobile-device-1.1.0.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/security/spring-security-core/3.1.4.RELEASE/spring-security-core-3.1.4.RELEASE.jar" sourcepath="M2_REPO/org/springframework/security/spring-security-core/3.1.4.RELEASE/spring-security-core-3.1.4.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/security/spring-security-web/3.1.4.RELEASE/spring-security-web-3.1.4.RELEASE.jar" sourcepath="M2_REPO/org/springframework/security/spring-security-web/3.1.4.RELEASE/spring-security-web-3.1.4.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/security/spring-security-config/3.1.4.RELEASE/spring-security-config-3.1.4.RELEASE.jar" sourcepath="M2_REPO/org/springframework/security/spring-security-config/3.1.4.RELEASE/spring-security-config-3.1.4.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/security/spring-security-taglibs/3.1.4.RELEASE/spring-security-taglibs-3.1.4.RELEASE.jar" sourcepath="M2_REPO/org/springframework/security/spring-security-taglibs/3.1.4.RELEASE/spring-security-taglibs-3.1.4.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/security/spring-security-acl/3.1.4.RELEASE/spring-security-acl-3.1.4.RELEASE.jar" sourcepath="M2_REPO/org/springframework/security/spring-security-acl/3.1.4.RELEASE/spring-security-acl-3.1.4.RELEASE-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/glassfish/web/jstl-impl/1.2/jstl-impl-1.2.jar" sourcepath="M2_REPO/org/glassfish/web/jstl-impl/1.2/jstl-impl-1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/java/dev/rome/rome/1.0.0/rome-1.0.0.jar" sourcepath="M2_REPO/net/java/dev/rome/rome/1.0.0/rome-1.0.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jdom/jdom/1.0/jdom-1.0.jar" sourcepath="M2_REPO/jdom/jdom/1.0/jdom-1.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/tiles/tiles-core/2.1.2/tiles-core-2.1.2.jar" sourcepath="M2_REPO/org/apache/tiles/tiles-core/2.1.2/tiles-core-2.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/tiles/tiles-api/2.1.2/tiles-api-2.1.2.jar" sourcepath="M2_REPO/org/apache/tiles/tiles-api/2.1.2/tiles-api-2.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/tiles/tiles-servlet/2.1.2/tiles-servlet-2.1.2.jar" sourcepath="M2_REPO/org/apache/tiles/tiles-servlet/2.1.2/tiles-servlet-2.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/tiles/tiles-jsp/2.1.2/tiles-jsp-2.1.2.jar" sourcepath="M2_REPO/org/apache/tiles/tiles-jsp/2.1.2/tiles-jsp-2.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/cache/jbosscache-core/3.2.5.GA/jbosscache-core-3.2.5.GA.jar" sourcepath="M2_REPO/org/jboss/cache/jbosscache-core/3.2.5.GA/jbosscache-core-3.2.5.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jgroups/jgroups/2.6.13.GA/jgroups-2.6.13.GA.jar" sourcepath="M2_REPO/jgroups/jgroups/2.6.13.GA/jgroups-2.6.13.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/javaee/jboss-transaction-api/1.0.1.GA/jboss-transaction-api-1.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/javaee/jboss-transaction-api/1.0.1.GA/jboss-transaction-api-1.0.1.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.14.GA/jboss-common-core-2.2.14.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.14.GA/jboss-common-core-2.2.14.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar" sourcepath="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/tanesha/recaptcha4j/recaptcha4j/0.0.7/recaptcha4j-0.0.7.jar" sourcepath="M2_REPO/net/tanesha/recaptcha4j/recaptcha4j/0.0.7/recaptcha4j-0.0.7-sources.jar"/>
+ <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
shopizer/sm-shop/.project 72(+39 -33)
diff --git a/shopizer/sm-shop/.project b/shopizer/sm-shop/.project
index 198eecf..e217d9a 100644
--- a/shopizer/sm-shop/.project
+++ b/shopizer/sm-shop/.project
@@ -1,35 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>sm-shop</name>
- <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
- <projects>
- <project>sm-core</project>
- <project>sm-core-model</project>
- <project>sm-core-modules</project>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.wst.common.project.facet.core.builder</name>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.wst.validation.validationbuilder</name>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.m2e.core.maven2Builder</name>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
- <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.m2e.core.maven2Nature</nature>
- <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
- <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
- </natures>
-</projectDescription>
\ No newline at end of file
+ <name>sm-shop</name>
+ <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+ <projects>
+ <project>shopizer-shipping-canadapost-module</project>
+ <project>shopizer-shipping-distance-processor</project>
+ <project>sm-core</project>
+ <project>sm-core-model</project>
+ <project>sm-core-modules</project>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ </natures>
+</projectDescription>
shopizer/sm-shop/pom.xml 41(+23 -18)
diff --git a/shopizer/sm-shop/pom.xml b/shopizer/sm-shop/pom.xml
index 679de0f..8861f39 100755
--- a/shopizer/sm-shop/pom.xml
+++ b/shopizer/sm-shop/pom.xml
@@ -3,26 +3,26 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>com.shopizer</groupId>
- <artifactId>shopizer</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </parent>
+ <parent>
+ <groupId>com.shopizer</groupId>
+ <artifactId>shopizer</artifactId>
+ <version>2.0.2-SNAPSHOT</version>
+ </parent>
+
+
<groupId>com.salesmanager</groupId>
<artifactId>sm-shop</artifactId>
<name>sm-shop</name>
<packaging>war</packaging>
- <version>2.0.1-SNAPSHOT</version>
+
+
<properties>
- <java-version>1.6</java-version>
- <jackson-version>1.9.13</jackson-version>
-
- <sm-core.version>2.0.1-SNAPSHOT</sm-core.version>
- <sm-core-model.version>2.0.1-SNAPSHOT</sm-core-model.version>
- <sm-core-modules.version>2.0.1-SNAPSHOT</sm-core-modules.version>
- <sm-search.version>0.0.3</sm-search.version>
-
+
+
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <jdk.version>1.6</jdk.version>
+ <jackson-version>1.9.13</jackson-version>
<fasterxml-version>2.2.3</fasterxml-version>
<org.springframework-version>3.1.0.RELEASE</org.springframework-version>
<org.springframework-security-version>3.1.4.RELEASE</org.springframework-security-version>
@@ -64,7 +64,12 @@
<version>${sm-search.version}</version>
</dependency>
-
+ <!-- canadapost -->
+ <dependency>
+ <groupId>com.shopizer</groupId>
+ <artifactId>shopizer-shipping-canadapost-module</artifactId>
+ <version>${shopizer-canadapost.version}</version>
+ </dependency>
<!-- Spring -->
<dependency>
@@ -331,9 +336,9 @@
</dependency>
<dependency>
- <groupId>com.lowagie</groupId>
- <artifactId>itext</artifactId>
- <version>4.2.1</version>
+ <groupId>com.itextpdf</groupId>
+ <artifactId>itextpdf</artifactId>
+ <version>5.5.6</version>
</dependency>
<dependency>
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/admin/controller/products/ManufacturerController.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/admin/controller/products/ManufacturerController.java
index ab20582..6c8ea3e 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/admin/controller/products/ManufacturerController.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/admin/controller/products/ManufacturerController.java
@@ -29,6 +29,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
+import com.salesmanager.core.business.catalog.category.model.Category;
import com.salesmanager.core.business.catalog.product.model.manufacturer.Manufacturer;
import com.salesmanager.core.business.catalog.product.model.manufacturer.ManufacturerDescription;
import com.salesmanager.core.business.catalog.product.service.manufacturer.ManufacturerService;
@@ -411,6 +412,74 @@ public class ManufacturerController {
}
+
+ @PreAuthorize("hasRole('PRODUCTS')")
+ @RequestMapping(value="/admin/manufacturer/checkCode.html", method=RequestMethod.POST, produces="application/json")
+ public @ResponseBody String checkCode(HttpServletRequest request, HttpServletResponse response, Locale locale) {
+ String code = request.getParameter("code");
+ String id = request.getParameter("id");
+
+
+ MerchantStore store = (MerchantStore)request.getAttribute(Constants.ADMIN_STORE);
+
+
+ AjaxResponse resp = new AjaxResponse();
+
+ if(StringUtils.isBlank(code)) {
+ resp.setStatus(AjaxResponse.CODE_ALREADY_EXIST);
+ return resp.toJSONString();
+ }
+
+
+ try {
+
+ Manufacturer manufacturer = manufacturerService.getByCode(store, code);
+
+ if(manufacturer!=null && StringUtils.isBlank(id)) {
+ resp.setStatus(AjaxResponse.CODE_ALREADY_EXIST);
+ return resp.toJSONString();
+ }
+
+
+ if(manufacturer!=null && !StringUtils.isBlank(id)) {
+ try {
+ Long lid = Long.parseLong(id);
+
+ if(manufacturer.getCode().equals(code) && manufacturer.getId().longValue()==lid) {
+ resp.setStatus(AjaxResponse.CODE_ALREADY_EXIST);
+ return resp.toJSONString();
+ }
+ } catch (Exception e) {
+ resp.setStatus(AjaxResponse.CODE_ALREADY_EXIST);
+ return resp.toJSONString();
+ }
+
+ }
+
+
+
+
+
+
+
+
+
+
+ resp.setStatus(AjaxResponse.RESPONSE_OPERATION_COMPLETED);
+
+ } catch (Exception e) {
+ LOGGER.error("Error while getting category", e);
+ resp.setStatus(AjaxResponse.RESPONSE_STATUS_FAIURE);
+ resp.setErrorMessage(e);
+ }
+
+ String returnString = resp.toJSONString();
+
+ return returnString;
+ }
+
+
+
private void setMenu(Model model, HttpServletRequest request) throws Exception {
//display menu
Map<String,String> activeMenus = new HashMap<String,String>();
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/admin/controller/shipping/ShippingOriginController.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/admin/controller/shipping/ShippingOriginController.java
new file mode 100644
index 0000000..8eafcb2
--- /dev/null
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/admin/controller/shipping/ShippingOriginController.java
@@ -0,0 +1,171 @@
+package com.salesmanager.web.admin.controller.shipping;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.reference.country.model.Country;
+import com.salesmanager.core.business.reference.country.service.CountryService;
+import com.salesmanager.core.business.reference.language.model.Language;
+import com.salesmanager.core.business.reference.zone.model.Zone;
+import com.salesmanager.core.business.reference.zone.service.ZoneService;
+import com.salesmanager.core.business.shipping.model.ShippingOrigin;
+import com.salesmanager.core.business.shipping.service.ShippingOriginService;
+import com.salesmanager.web.admin.entity.web.Menu;
+import com.salesmanager.web.constants.Constants;
+
+
+@Controller
+public class ShippingOriginController {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ShippingOriginController.class);
+
+
+ @Autowired
+ private ShippingOriginService shippingOriginService;
+
+ @Autowired
+ private CountryService countryService;
+
+ @Autowired
+ private ZoneService zoneService;
+
+ /**
+ * Configures the shipping mode, shows shipping countries
+ * @param request
+ * @param response
+ * @param locale
+ * @return
+ * @throws Exception
+ */
+ @PreAuthorize("hasRole('SHIPPING')")
+ @RequestMapping(value="/admin/shipping/origin/get.html", method=RequestMethod.GET)
+ public String displayShippingOrigin(Model model, HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+ this.setMenu(model, request);
+
+ MerchantStore store = (MerchantStore)request.getAttribute(Constants.ADMIN_STORE);
+ Language language = (Language)request.getAttribute("LANGUAGE");
+
+ ShippingOrigin shippingOrigin = shippingOriginService.getByStore(store);
+
+ List<Country> countries = countryService.getCountries(language);
+
+ if(shippingOrigin==null) {
+ shippingOrigin = new ShippingOrigin();
+ shippingOrigin.setCountry(store.getCountry());
+ shippingOrigin.setState(store.getStorestateprovince());
+ shippingOrigin.setZone(store.getZone());
+ }
+
+ model.addAttribute("countries", countries);
+ model.addAttribute("origin", shippingOrigin);
+ return "shipping-origin";
+
+
+ }
+
+ @PreAuthorize("hasRole('SHIPPING')")
+ @RequestMapping(value="/admin/shipping/origin/post.html", method=RequestMethod.POST)
+ public String saveShippingOrigin(@Valid @ModelAttribute("origin") ShippingOrigin origin, Model model, HttpServletRequest request, HttpServletResponse response, Locale locale) throws Exception {
+
+ this.setMenu(model, request);
+ MerchantStore store = (MerchantStore)request.getAttribute(Constants.ADMIN_STORE);
+
+ Language language = (Language)request.getAttribute("LANGUAGE");
+ List<Country> countries = countryService.getCountries(language);
+
+ ShippingOrigin shippingOrigin = shippingOriginService.getByStore(store);
+ if(shippingOrigin!=null) {
+ origin.setId(shippingOrigin.getId());
+ }
+
+ origin.setMerchantStore(store);
+
+ Country country = countryService.getByCode(origin.getCountry().getIsoCode());
+ origin.setCountry(country);
+
+ if(origin.getZone() !=null) {
+ Zone zone = zoneService.getByCode(origin.getZone().getCode());
+ origin.setZone(zone);
+ }
+
+ if(shippingOrigin!=null) {
+ shippingOriginService.update(origin);
+ } else {
+ shippingOriginService.save(origin);
+ }
+
+ model.addAttribute("countries", countries);
+ model.addAttribute("origin", origin);
+ model.addAttribute("success","success");
+ return "shipping-origin";
+
+ }
+
+ @PreAuthorize("hasRole('SHIPPING')")
+ @RequestMapping(value="/admin/shipping/origin/delete.html", method=RequestMethod.POST)
+ public String deleteShippingOrigin(@ModelAttribute("origin") ShippingOrigin origin, Model model, HttpServletRequest request, HttpServletResponse response, Locale locale) throws Exception {
+
+ this.setMenu(model, request);
+ MerchantStore store = (MerchantStore)request.getAttribute(Constants.ADMIN_STORE);
+
+ ShippingOrigin shippingOrigin = shippingOriginService.getByStore(store);
+
+ Language language = (Language)request.getAttribute("LANGUAGE");
+ List<Country> countries = countryService.getCountries(language);
+
+
+ if(shippingOrigin!=null && origin !=null) {
+ if(shippingOrigin.getId().longValue() == origin.getId().longValue()) {
+ shippingOriginService.delete(shippingOrigin);
+ model.addAttribute("success","success");
+ } else {
+ return "redirect:/admin/shipping/origin/get.html";
+ }
+ } else {
+ return "redirect:/admin/shipping/origin/get.html";
+ }
+
+ model.addAttribute("countries", countries);
+ model.addAttribute("origin", null);
+ model.addAttribute("success","success");
+ return "shipping-origin";
+
+ }
+
+ private void setMenu(Model model, HttpServletRequest request) throws Exception {
+
+ //display menu
+ Map<String,String> activeMenus = new HashMap<String,String>();
+ activeMenus.put("shipping", "shipping");
+ activeMenus.put("shipping-origin", "shipping-origin");
+
+ @SuppressWarnings("unchecked")
+ Map<String, Menu> menus = (Map<String, Menu>)request.getAttribute("MENUMAP");
+
+ Menu currentMenu = (Menu)menus.get("shipping");
+ model.addAttribute("currentMenu",currentMenu);
+ model.addAttribute("activeMenus",activeMenus);
+ //
+
+ }
+
+
+}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/Category.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/Category.java
index 5b1a201..894e028 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/Category.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/Category.java
@@ -10,5 +10,12 @@ public class Category extends Entity implements Serializable {
*
*/
private static final long serialVersionUID = 1L;
-
+ private String code;
+ public String getCode() {
+ return code;
+ }
+ public void setCode(String code) {
+ this.code = code;
+ }
+
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/CategoryEntity.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/CategoryEntity.java
index 2798a72..d600f8f 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/CategoryEntity.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/CategoryEntity.java
@@ -14,8 +14,8 @@ public class CategoryEntity extends Category implements Serializable {
private int sortOrder;
private boolean visible;
- private String code;
private String lineage;
+ private int depth;
public int getSortOrder() {
@@ -30,17 +30,17 @@ public class CategoryEntity extends Category implements Serializable {
public void setVisible(boolean visible) {
this.visible = visible;
}
- public String getCode() {
- return code;
- }
- public void setCode(String code) {
- this.code = code;
- }
public String getLineage() {
return lineage;
}
public void setLineage(String lineage) {
this.lineage = lineage;
}
+ public int getDepth() {
+ return depth;
+ }
+ public void setDepth(int depth) {
+ this.depth = depth;
+ }
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/PersistableCategory.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/PersistableCategory.java
index 71bff4a..7a9ed81 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/PersistableCategory.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/PersistableCategory.java
@@ -1,6 +1,7 @@
package com.salesmanager.web.entity.catalog.category;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.List;
public class PersistableCategory extends CategoryEntity implements Serializable {
@@ -11,6 +12,8 @@ public class PersistableCategory extends CategoryEntity implements Serializable
private static final long serialVersionUID = 1L;
private List<CategoryDescription> descriptions;//always persist description
private Category parent;//saves a reference
+ private List<PersistableCategory> children = new ArrayList<PersistableCategory>();
+
public List<CategoryDescription> getDescriptions() {
return descriptions;
}
@@ -23,5 +26,11 @@ public class PersistableCategory extends CategoryEntity implements Serializable
public Category getParent() {
return parent;
}
+ public List<PersistableCategory> getChildren() {
+ return children;
+ }
+ public void setChildren(List<PersistableCategory> children) {
+ this.children = children;
+ }
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/ReadableCategory.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/ReadableCategory.java
index 888896c..5d3a334 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/ReadableCategory.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/category/ReadableCategory.java
@@ -1,6 +1,8 @@
package com.salesmanager.web.entity.catalog.category;
import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
public class ReadableCategory extends CategoryEntity implements Serializable {
@@ -9,18 +11,21 @@ public class ReadableCategory extends CategoryEntity implements Serializable {
*/
private static final long serialVersionUID = 1L;
private CategoryDescription description;//one category based on language
- private CategoryEntity parent;
+ private ReadableCategory parent;
private int productCount;
+ private List<ReadableCategory> children = new ArrayList<ReadableCategory>();
+
+
public void setDescription(CategoryDescription description) {
this.description = description;
}
public CategoryDescription getDescription() {
return description;
}
- public void setParent(CategoryEntity parent) {
+ public void setParent(ReadableCategory parent) {
this.parent = parent;
}
- public CategoryEntity getParent() {
+ public ReadableCategory getParent() {
return parent;
}
public int getProductCount() {
@@ -29,5 +34,11 @@ public class ReadableCategory extends CategoryEntity implements Serializable {
public void setProductCount(int productCount) {
this.productCount = productCount;
}
+ public List<ReadableCategory> getChildren() {
+ return children;
+ }
+ public void setChildren(List<ReadableCategory> children) {
+ this.children = children;
+ }
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/manufacturer/Manufacturer.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/manufacturer/Manufacturer.java
index d03d80e..ce78cab 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/manufacturer/Manufacturer.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/manufacturer/Manufacturer.java
@@ -10,5 +10,12 @@ public class Manufacturer extends Entity implements Serializable {
*
*/
private static final long serialVersionUID = 1L;
+ private String code;
+ public String getCode() {
+ return code;
+ }
+ public void setCode(String code) {
+ this.code = code;
+ }
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/manufacturer/ManufacturerEntity.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/manufacturer/ManufacturerEntity.java
index 27f2ddc..fd87699 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/manufacturer/ManufacturerEntity.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/manufacturer/ManufacturerEntity.java
@@ -19,4 +19,5 @@ public class ManufacturerEntity extends Manufacturer implements Serializable {
return order;
}
+
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOption.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOption.java
index a10cd4b..84e7404 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOption.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOption.java
@@ -10,5 +10,12 @@ public class ProductOption extends Entity implements Serializable {
*
*/
private static final long serialVersionUID = 1L;
+ private String code;
+ public String getCode() {
+ return code;
+ }
+ public void setCode(String code) {
+ this.code = code;
+ }
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionEntity.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionEntity.java
index fc8b384..0fb12a0 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionEntity.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionEntity.java
@@ -9,7 +9,7 @@ public class ProductOptionEntity extends ProductOption implements Serializable {
*/
private static final long serialVersionUID = 1L;
private int order;
- private String code;
+
private String type;
public void setOrder(int order) {
this.order = order;
@@ -17,12 +17,7 @@ public class ProductOptionEntity extends ProductOption implements Serializable {
public int getOrder() {
return order;
}
- public void setCode(String code) {
- this.code = code;
- }
- public String getCode() {
- return code;
- }
+
public void setType(String type) {
this.type = type;
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionValue.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionValue.java
index 29245b7..78cc7be 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionValue.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionValue.java
@@ -10,5 +10,12 @@ public class ProductOptionValue extends Entity implements Serializable {
*
*/
private static final long serialVersionUID = 1L;
+ private String code;
+ public String getCode() {
+ return code;
+ }
+ public void setCode(String code) {
+ this.code = code;
+ }
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionValueEntity.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionValueEntity.java
index 9b91f4b..1c69a7d 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionValueEntity.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/attribute/ProductOptionValueEntity.java
@@ -9,18 +9,13 @@ public class ProductOptionValueEntity extends ProductOptionValue implements Seri
*/
private static final long serialVersionUID = 1L;
private int order;
- private String code;
+
public void setOrder(int order) {
this.order = order;
}
public int getOrder() {
return order;
}
- public void setCode(String code) {
- this.code = code;
- }
- public String getCode() {
- return code;
- }
+
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/ProductPriceEntity.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/ProductPriceEntity.java
new file mode 100644
index 0000000..6afe193
--- /dev/null
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/ProductPriceEntity.java
@@ -0,0 +1,55 @@
+package com.salesmanager.web.entity.catalog.product;
+
+import java.io.Serializable;
+
+import com.salesmanager.web.entity.Entity;
+
+
+/**
+ * A product entity is used by services API
+ * to populate or retrieve a Product price entity
+ * @author Carl Samson
+ *
+ */
+public class ProductPriceEntity extends Entity implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private boolean discounted = false;
+ private String discountStatrDate;
+ private String discountEndDate;
+ private boolean defaultPrice = false;
+
+ public boolean isDiscounted() {
+ return discounted;
+ }
+ public void setDiscounted(boolean discounted) {
+ this.discounted = discounted;
+ }
+ public String getDiscountStatrDate() {
+ return discountStatrDate;
+ }
+ public void setDiscountStatrDate(String discountStatrDate) {
+ this.discountStatrDate = discountStatrDate;
+ }
+ public String getDiscountEndDate() {
+ return discountEndDate;
+ }
+ public void setDiscountEndDate(String discountEndDate) {
+ this.discountEndDate = discountEndDate;
+ }
+ public boolean isDefaultPrice() {
+ return defaultPrice;
+ }
+ public void setDefaultPrice(boolean defaultPrice) {
+ this.defaultPrice = defaultPrice;
+ }
+
+
+
+
+
+
+}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/ReadableProduct.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/ReadableProduct.java
index 81ed590..91bf615 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/ReadableProduct.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/entity/catalog/product/ReadableProduct.java
@@ -22,8 +22,7 @@ public class ReadableProduct extends ProductEntity implements Serializable {
private ReadableManufacturer manufacturer;
private List<ReadableProductAttribute> attributes;
-
-
+
public ProductDescription getDescription() {
return description;
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/filter/StoreFilter.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/filter/StoreFilter.java
index 20a5535..1fc9711 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/filter/StoreFilter.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/filter/StoreFilter.java
@@ -42,20 +42,19 @@ import com.salesmanager.core.business.system.model.MerchantConfigurationType;
import com.salesmanager.core.business.system.service.MerchantConfigurationService;
import com.salesmanager.core.utils.CacheUtils;
import com.salesmanager.web.constants.Constants;
+import com.salesmanager.web.entity.catalog.category.ReadableCategory;
import com.salesmanager.web.entity.customer.Address;
import com.salesmanager.web.entity.customer.AnonymousCustomer;
import com.salesmanager.web.entity.shop.Breadcrumb;
import com.salesmanager.web.entity.shop.BreadcrumbItem;
import com.salesmanager.web.entity.shop.BreadcrumbItemType;
import com.salesmanager.web.entity.shop.PageInformation;
+import com.salesmanager.web.populator.catalog.ReadableCategoryPopulator;
+import com.salesmanager.web.shop.controller.category.facade.CategoryFacade;
import com.salesmanager.web.utils.GeoLocationUtils;
import com.salesmanager.web.utils.LabelUtils;
import com.salesmanager.web.utils.LanguageUtils;
-
-
-
-
-
+import com.salesmanager.web.utils.WebApplicationCacheUtils;
/**
* Servlet Filter implementation class StoreFilter
@@ -98,6 +97,12 @@ public class StoreFilter extends HandlerInterceptorAdapter {
@Autowired
private CacheUtils cache;
+ @Autowired
+ private WebApplicationCacheUtils webApplicationCache;
+
+ @Autowired
+ private CategoryFacade categoryFacade;
+
private final static String SERVICES_URL_PATTERN = "/services";
private final static String REFERENCE_URL_PATTERN = "/reference";
@@ -132,7 +137,7 @@ public class StoreFilter extends HandlerInterceptorAdapter {
/*****
* where is my stuff
*/
- String currentPath = System.getProperty("user.dir");
+ //String currentPath = System.getProperty("user.dir");
//System.out.println("*** user.dir ***" + currentPath);
//LOGGER.debug("*** user.dir ***" + currentPath);
@@ -227,14 +232,14 @@ public class StoreFilter extends HandlerInterceptorAdapter {
/** language & locale **/
- Language language = languageUtils.getRequestLanguage(request);
+ Language language = languageUtils.getRequestLanguage(request, response);
+ request.setAttribute(Constants.LANGUAGE, language);
-
-
- request.setAttribute(Constants.LANGUAGE, language);
- //Locale locale = request.getLocale();
- Locale locale = LocaleContextHolder.getLocale();
+ Locale locale = languageService.toLocale(language);
+
+ //Locale locale = LocaleContextHolder.getLocale();
+ LocaleContextHolder.setLocale(locale);
/** Breadcrumbs **/
setBreadcrumb(request,locale);
@@ -282,7 +287,8 @@ public class StoreFilter extends HandlerInterceptorAdapter {
this.getContentPageNames(store, language, request);
/******* Top Categories ********/
- this.getTopCategories(store, language, request);
+ //this.getTopCategories(store, language, request);
+ this.setTopCategories(store, language, request);
/******* Default metatags *******/
@@ -556,24 +562,69 @@ public class StoreFilter extends HandlerInterceptorAdapter {
}
-
+
@SuppressWarnings("unchecked")
+ private void setTopCategories(MerchantStore store, Language language, HttpServletRequest request) throws Exception {
+
+ StringBuilder categoriesKey = new StringBuilder();
+ categoriesKey
+ .append(store.getId())
+ .append("_")
+ .append(Constants.CATEGORIES_CACHE_KEY)
+ .append("-")
+ .append(language.getCode());
+
+ StringBuilder categoriesKeyMissed = new StringBuilder();
+ categoriesKeyMissed
+ .append(categoriesKey.toString())
+ .append(Constants.MISSED_CACHE_KEY);
+
+
+ //language code - List of category
+ Map<String, List<ReadableCategory>> objects = null;
+ List<ReadableCategory> loadedCategories = null;
+
+ if(store.isUseCache()) {
+ objects = (Map<String, List<ReadableCategory>>) webApplicationCache.getFromCache(categoriesKey.toString());
+
+ if(objects==null) {
+ //load categories
+ loadedCategories = categoryFacade.getCategoryHierarchy(store, 3, language);
+ objects = new ConcurrentHashMap<String, List<ReadableCategory>>();
+ objects.put(language.getCode(), loadedCategories);
+ webApplicationCache.putInCache(categoriesKey.toString(), objects);
+
+ } else {
+ loadedCategories = objects.get(language.getCode());
+ }
+
+ } else {
+ loadedCategories = categoryFacade.getCategoryHierarchy(store, 3, language);
+ }
+
+ if(loadedCategories!=null) {
+ request.setAttribute(Constants.REQUEST_TOP_CATEGORIES, loadedCategories);
+ }
+
+ }
+
+ /*@SuppressWarnings("unchecked")
private void getTopCategories(MerchantStore store, Language language, HttpServletRequest request) throws Exception {
- /**
+ *//**
* Top categories
* Top categories are implemented as Category entity
* CategoryDescription will provide attributes name for the
* label to be displayed and seUrl for the friendly url page
- */
+ *//*
//build the key
- /**
+ *//**
* The categories is kept as a Map<String,Object>
* The key is <MERCHANT_ID>_CATEGORYLOCALE
* The value is a List of Category object
- */
+ *//*
StringBuilder categoriesKey = new StringBuilder();
categoriesKey
@@ -588,12 +639,14 @@ public class StoreFilter extends HandlerInterceptorAdapter {
.append(categoriesKey.toString())
.append(Constants.MISSED_CACHE_KEY);
- Map<String, List<Category>> objects = null;
+ //Map<String, List<Category>> objects = null;
+ Map<String, List<ReadableCategory>> objects = null;
if(store.isUseCache()) {
//get from the cache
- objects = (Map<String, List<Category>>) cache.getFromCache(categoriesKey.toString());
+ //objects = (Map<String, List<Category>>) cache.getFromCache(categoriesKey.toString());
+ objects = (Map<String, List<ReadableCategory>>) cache.getFromCache(categoriesKey.toString());
if(objects==null) {
@@ -622,7 +675,8 @@ public class StoreFilter extends HandlerInterceptorAdapter {
if(objects!=null && objects.size()>0) {
- List<Category> categories = objects.get(categoriesKey.toString());
+ //List<Category> categories = objects.get(categoriesKey.toString());
+ List<ReadableCategory> categories = objects.get(categoriesKey.toString());
if(categories!=null) {
request.setAttribute(Constants.REQUEST_TOP_CATEGORIES, categories);
@@ -632,7 +686,7 @@ public class StoreFilter extends HandlerInterceptorAdapter {
}
}
-
+*/
private Map<String, List<ContentDescription>> getContentPagesNames(MerchantStore store, Language language) throws Exception {
@@ -729,45 +783,78 @@ public class StoreFilter extends HandlerInterceptorAdapter {
return contents;
}
- private Map<String, List<Category>> getCategories(MerchantStore store, Language language) throws Exception {
+ /**
+ *
+ * @param store
+ * @param language
+ * @return
+ * @throws Exception
+ */
+ //private Map<String, List<Category>> getCategories(MerchantStore store, Language language) throws Exception {
+ private Map<String, List<ReadableCategory>> getCategories(MerchantStore store, Language language) throws Exception {
- Map<String, List<Category>> objects = new ConcurrentHashMap<String, List<Category>>();
+ //Map<String, List<Category>> objects = new ConcurrentHashMap<String, List<Category>>();
+ Map<String, List<ReadableCategory>> objects = new ConcurrentHashMap<String, List<ReadableCategory>>();
-
+ /** returns categories with required depth, 0 = root category, 1 = root + 1 layer child ...) **/
List<Category> categories = categoryService.listByDepth(store, 0, language);
+ ReadableCategoryPopulator readableCategoryPopulator = new ReadableCategoryPopulator();
+
+
+ Map<String,ReadableCategory> subs = new ConcurrentHashMap<String,ReadableCategory>();
+
if(categories!=null && categories.size()>0) {
//create a Map<String,List<Content>
for(Category category : categories) {
if(category.isVisible()) {
- List<CategoryDescription> descriptions = category.getDescriptions();
- for(CategoryDescription description : descriptions) {
- Language lang = description.getLanguage();
- String key = new StringBuilder()
- .append(store.getId())
- .append("_")
- .append(Constants.CATEGORIES_CACHE_KEY)
- .append("-")
- .append(lang.getCode()).toString();
+ //if(category.getDepth().intValue()==0) {
+ //ReadableCategory readableCategory = new ReadableCategory();
+ //readableCategoryPopulator.populate(category, readableCategory, store, language);
- List<Category> cacheCategories = null;
- if(objects==null || objects.size()==0) {
- objects = new HashMap<String, List<Category>>();
- }
- if(!objects.containsKey(key)) {
- cacheCategories = new ArrayList<Category>();
-
- objects.put(key, cacheCategories);
- } else {
- cacheCategories = objects.get(key.toString());
- if(cacheCategories==null) {
- LOGGER.error("Cannot find categories key in cache " + key);
- continue;
+ List<CategoryDescription> descriptions = category.getDescriptions();
+ for(CategoryDescription description : descriptions) {
+
+ Language lang = description.getLanguage();
+
+ ReadableCategory readableCategory = new ReadableCategory();
+ readableCategoryPopulator.populate(category, readableCategory, store, language);
+
+ String key = new StringBuilder()
+ .append(store.getId())
+ .append("_")
+ .append(Constants.CATEGORIES_CACHE_KEY)
+ .append("-")
+ .append(lang.getCode()).toString();
+
+ if(category.getDepth().intValue() == 0) {
+
+ //List<Category> cacheCategories = null;
+ List<ReadableCategory> cacheCategories = null;
+ if(objects==null || objects.size()==0) {
+ //objects = new HashMap<String, List<Category>>();
+ objects = new HashMap<String, List<ReadableCategory>>();
+ }
+ if(!objects.containsKey(key)) {
+ //cacheCategories = new ArrayList<Category>();
+ cacheCategories = new ArrayList<ReadableCategory>();
+
+ objects.put(key, cacheCategories);
+ } else {
+ cacheCategories = objects.get(key.toString());
+ if(cacheCategories==null) {
+ LOGGER.error("Cannot find categories key in cache " + key);
+ continue;
+ }
+ }
+ //cacheCategories.add(category);
+ cacheCategories.add(readableCategory);
+
+ } else {
+ subs.put(lang.getCode(), readableCategory);
}
}
- cacheCategories.add(category);
- }
}
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/init/data/InitStoreData.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/init/data/InitStoreData.java
index 886a6d4..35968d1 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/init/data/InitStoreData.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/init/data/InitStoreData.java
@@ -352,6 +352,7 @@ public class InitStoreData implements InitData {
Manufacturer oreilley = new Manufacturer();
oreilley.setMerchantStore(store);
+ oreilley.setCode("oreilley");
ManufacturerDescription oreilleyd = new ManufacturerDescription();
oreilleyd.setLanguage(en);
@@ -364,6 +365,7 @@ public class InitStoreData implements InitData {
Manufacturer sams = new Manufacturer();
sams.setMerchantStore(store);
+ sams.setCode("sams");
ManufacturerDescription samsd = new ManufacturerDescription();
samsd.setLanguage(en);
@@ -375,6 +377,7 @@ public class InitStoreData implements InitData {
Manufacturer packt = new Manufacturer();
packt.setMerchantStore(store);
+ packt.setCode("packt");
ManufacturerDescription packtd = new ManufacturerDescription();
packtd.setLanguage(en);
@@ -386,6 +389,7 @@ public class InitStoreData implements InitData {
Manufacturer manning = new Manufacturer();
manning.setMerchantStore(store);
+ manning.setCode("manning");
ManufacturerDescription manningd = new ManufacturerDescription();
manningd.setLanguage(en);
@@ -397,6 +401,7 @@ public class InitStoreData implements InitData {
Manufacturer novells = new Manufacturer();
novells.setMerchantStore(store);
+ novells.setCode("novells");
ManufacturerDescription novellsd = new ManufacturerDescription();
novellsd.setLanguage(en);
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/PersistableCategoryPopulator.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/PersistableCategoryPopulator.java
index 6069f94..68225aa 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/PersistableCategoryPopulator.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/PersistableCategoryPopulator.java
@@ -5,6 +5,7 @@ import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.Validate;
+import org.apache.commons.lang3.StringUtils;
import com.salesmanager.core.business.catalog.category.model.Category;
import com.salesmanager.core.business.catalog.category.service.CategoryService;
@@ -66,8 +67,14 @@ public class PersistableCategoryPopulator extends
target.setDepth(0);
} else {
-
- Category parent = categoryService.getById(source.getParent().getId());
+ Category parent = null;
+ if(!StringUtils.isBlank(source.getParent().getCode())) {
+ parent = categoryService.getByCode(store.getCode(), source.getParent().getCode());
+ } else if(source.getParent().getId()!=null) {
+ parent = categoryService.getById(source.getParent().getId());
+ } else {
+ throw new ConversionException("Category parent needs at least an id or a code for reference");
+ }
if(parent.getMerchantStore().getId().intValue()!=store.getId().intValue()) {
throw new ConversionException("Store id does not belong to specified parent id");
}
@@ -79,11 +86,20 @@ public class PersistableCategoryPopulator extends
target.setDepth(depth+1);
target.setLineage(new StringBuilder().append(lineage).append(parent.getId()).append("/").toString());
+
+ }
+
+
+ if(!CollectionUtils.isEmpty(source.getChildren())) {
-
+ for(PersistableCategory cat : source.getChildren()) {
+
+ Category persistCategory = this.populate(cat, new Category(), store, language);
+ target.getCategories().add(persistCategory);
+
+ }
}
-
if(!CollectionUtils.isEmpty(source.getDescriptions())) {
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/PersistableProductPopulator.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/PersistableProductPopulator.java
index 382d169..572cbe4 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/PersistableProductPopulator.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/PersistableProductPopulator.java
@@ -71,7 +71,15 @@ public class PersistableProductPopulator extends
}
if(source.getManufacturer()!=null) {
- Manufacturer manuf = manufacturerService.getById(source.getManufacturer().getId());
+
+ Manufacturer manuf = null;
+ if(!StringUtils.isBlank(source.getManufacturer().getCode())) {
+ manuf = manufacturerService.getByCode(store, source.getManufacturer().getCode());
+ } else {
+ Validate.notNull(source.getManufacturer().getId(), "Requires to set manufacturer id");
+ manuf = manufacturerService.getById(source.getManufacturer().getId());
+ }
+
if(manuf==null) {
throw new ConversionException("Invalid manufacturer id");
}
@@ -156,12 +164,27 @@ public class PersistableProductPopulator extends
if(source.getAttributes()!=null) {
for(com.salesmanager.web.entity.catalog.product.attribute.ProductAttributeEntity attr : source.getAttributes()) {
- ProductOption productOption = productOptionService.getById(attr.getOption().getId());
+ ProductOption productOption = null;
+
+ if(!StringUtils.isBlank(attr.getOption().getCode())) {
+ productOption = productOptionService.getByCode(store, attr.getOption().getCode());
+ } else {
+ Validate.notNull(attr.getOption().getId(),"Product option id is null");
+ productOption = productOptionService.getById(attr.getOption().getId());
+ }
+
if(productOption==null) {
throw new ConversionException("Product option id " + attr.getOption().getId() + " does not exist");
}
- ProductOptionValue productOptionValue = productOptionValueService.getById(attr.getOptionValue().getId());
+ ProductOptionValue productOptionValue = null;
+
+ if(!StringUtils.isBlank(attr.getOptionValue().getCode())) {
+ productOptionValue = productOptionValueService.getByCode(store, attr.getOptionValue().getCode());
+ } else {
+ productOptionValue = productOptionValueService.getById(attr.getOptionValue().getId());
+ }
+
if(productOptionValue==null) {
throw new ConversionException("Product option value id " + attr.getOptionValue().getId() + " does not exist");
}
@@ -190,7 +213,15 @@ public class PersistableProductPopulator extends
//categories
if(!CollectionUtils.isEmpty(source.getCategories())) {
for(com.salesmanager.web.entity.catalog.category.Category categ : source.getCategories()) {
- Category c = categoryService.getById(categ.getId());
+
+ Category c = null;
+ if(!StringUtils.isBlank(categ.getCode())) {
+ c = categoryService.getByCode(store, categ.getCode());
+ } else {
+ Validate.notNull(categ.getId(), "Category id nust not be null");
+ c = categoryService.getById(categ.getId());
+ }
+
if(c==null) {
throw new ConversionException("Category id " + categ.getId() + " does not exist");
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableCategoryPopulator.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableCategoryPopulator.java
index 07d81b2..7a0e3b9 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableCategoryPopulator.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableCategoryPopulator.java
@@ -46,10 +46,12 @@ public class ReadableCategoryPopulator extends
}
+
target.setCode(source.getCode());
target.setId(source.getId());
-
+ target.setDepth(source.getDepth());
+
return target;
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableFinalPricePopulator.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableFinalPricePopulator.java
new file mode 100755
index 0000000..c62b0b1
--- /dev/null
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableFinalPricePopulator.java
@@ -0,0 +1,58 @@
+package com.salesmanager.web.populator.catalog;
+
+import org.apache.commons.lang.Validate;
+
+import com.salesmanager.core.business.catalog.product.model.price.FinalPrice;
+import com.salesmanager.core.business.catalog.product.service.PricingService;
+import com.salesmanager.core.business.generic.exception.ConversionException;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.reference.language.model.Language;
+import com.salesmanager.core.utils.AbstractDataPopulator;
+import com.salesmanager.web.entity.catalog.product.ReadableProductPrice;
+
+public class ReadableFinalPricePopulator extends
+ AbstractDataPopulator<FinalPrice, ReadableProductPrice> {
+
+
+ private PricingService pricingService;
+
+ public PricingService getPricingService() {
+ return pricingService;
+ }
+
+ public void setPricingService(PricingService pricingService) {
+ this.pricingService = pricingService;
+ }
+
+ @Override
+ public ReadableProductPrice populate(FinalPrice source,
+ ReadableProductPrice target, MerchantStore store, Language language)
+ throws ConversionException {
+ Validate.notNull(pricingService,"pricingService must be set");
+
+ try {
+
+ target.setOriginalPrice(pricingService.getDisplayAmount(source.getOriginalPrice(), store));
+ if(source.isDiscounted()) {
+ target.setDiscounted(true);
+ target.setFinalPrice(pricingService.getDisplayAmount(source.getDiscountedPrice(), store));
+ } else {
+ target.setFinalPrice(pricingService.getDisplayAmount(source.getFinalPrice(), store));
+ }
+
+ } catch(Exception e) {
+ throw new ConversionException("Exception while converting to ReadableProductPrice",e);
+ }
+
+
+
+ return target;
+ }
+
+ @Override
+ protected ReadableProductPrice createTarget() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableProductPopulator.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableProductPopulator.java
index fad0f81..0632973 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableProductPopulator.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableProductPopulator.java
@@ -13,6 +13,7 @@ import com.salesmanager.core.business.catalog.product.model.description.ProductD
import com.salesmanager.core.business.catalog.product.model.image.ProductImage;
import com.salesmanager.core.business.catalog.product.model.manufacturer.ManufacturerDescription;
import com.salesmanager.core.business.catalog.product.model.price.FinalPrice;
+import com.salesmanager.core.business.catalog.product.model.price.ProductPrice;
import com.salesmanager.core.business.catalog.product.service.PricingService;
import com.salesmanager.core.business.generic.exception.ConversionException;
import com.salesmanager.core.business.merchant.model.MerchantStore;
@@ -88,6 +89,7 @@ public class ReadableProductPopulator extends
manufacturerEntity.setDescription(d);
manufacturerEntity.setId(manufacturer.getId());
manufacturerEntity.setOrder(source.getManufacturer().getOrder());
+ manufacturerEntity.setCode(source.getManufacturer().getCode());
target.setManufacturer(manufacturerEntity);
}
@@ -136,6 +138,12 @@ public class ReadableProductPopulator extends
target.setQuantity(availability.getProductQuantity());
target.setQuantityOrderMaximum(availability.getProductQuantityOrderMax());
target.setQuantityOrderMinimum(availability.getProductQuantityOrderMin());
+ Set<ProductPrice> prices = availability.getPrices();
+ if(prices != null) {
+ for(ProductPrice productPrice : prices) {
+
+ }
+ }
}
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableProductPricePopulator.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableProductPricePopulator.java
old mode 100755
new mode 100644
index 8d382df..1327452
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableProductPricePopulator.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/catalog/ReadableProductPricePopulator.java
@@ -3,6 +3,7 @@ package com.salesmanager.web.populator.catalog;
import org.apache.commons.lang.Validate;
import com.salesmanager.core.business.catalog.product.model.price.FinalPrice;
+import com.salesmanager.core.business.catalog.product.model.price.ProductPrice;
import com.salesmanager.core.business.catalog.product.service.PricingService;
import com.salesmanager.core.business.generic.exception.ConversionException;
import com.salesmanager.core.business.merchant.model.MerchantStore;
@@ -11,7 +12,7 @@ import com.salesmanager.core.utils.AbstractDataPopulator;
import com.salesmanager.web.entity.catalog.product.ReadableProductPrice;
public class ReadableProductPricePopulator extends
- AbstractDataPopulator<FinalPrice, ReadableProductPrice> {
+ AbstractDataPopulator<ProductPrice, ReadableProductPrice> {
private PricingService pricingService;
@@ -25,19 +26,23 @@ public class ReadableProductPricePopulator extends
}
@Override
- public ReadableProductPrice populate(FinalPrice source,
+ public ReadableProductPrice populate(ProductPrice source,
ReadableProductPrice target, MerchantStore store, Language language)
throws ConversionException {
Validate.notNull(pricingService,"pricingService must be set");
+ Validate.notNull(source.getProductAvailability(),"productPrice.availability cannot be null");
+ Validate.notNull(source.getProductAvailability().getProduct(),"productPrice.availability.product cannot be null");
try {
- target.setOriginalPrice(pricingService.getDisplayAmount(source.getOriginalPrice(), store));
- if(source.isDiscounted()) {
+ FinalPrice finalPrice = pricingService.calculateProductPrice(source.getProductAvailability().getProduct());
+
+ target.setOriginalPrice(pricingService.getDisplayAmount(source.getProductPriceAmount(), store));
+ if(finalPrice.isDiscounted()) {
target.setDiscounted(true);
- target.setFinalPrice(pricingService.getDisplayAmount(source.getDiscountedPrice(), store));
+ target.setFinalPrice(pricingService.getDisplayAmount(source.getProductPriceSpecialAmount(), store));
} else {
- target.setFinalPrice(pricingService.getDisplayAmount(source.getFinalPrice(), store));
+ target.setFinalPrice(pricingService.getDisplayAmount(finalPrice.getOriginalPrice(), store));
}
} catch(Exception e) {
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/manufacturer/PersistableManufacturerPopulator.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/manufacturer/PersistableManufacturerPopulator.java
index c545256..8735d6b 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/manufacturer/PersistableManufacturerPopulator.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/manufacturer/PersistableManufacturerPopulator.java
@@ -39,6 +39,7 @@ public class PersistableManufacturerPopulator extends AbstractDataPopulator<Pers
try {
target.setMerchantStore(store);
+ target.setCode(source.getCode());
if(!CollectionUtils.isEmpty(source.getDescriptions())) {
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/manufacturer/ReadableManufacturerPopulator.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/manufacturer/ReadableManufacturerPopulator.java
index 7890a15..c5770c3 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/manufacturer/ReadableManufacturerPopulator.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/populator/manufacturer/ReadableManufacturerPopulator.java
@@ -33,6 +33,7 @@ public class ReadableManufacturerPopulator extends AbstractDataPopulator<com.sal
target.setOrder(source.getOrder());
target.setId(source.getId());
+ target.setCode(source.getCode());
if (description != null) {
com.salesmanager.web.entity.catalog.manufacturer.ManufacturerDescription d = new com.salesmanager.web.entity.catalog.manufacturer.ManufacturerDescription();
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/reference/ReferenceController.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/reference/ReferenceController.java
index 0b4dabd..ad6ee0f 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/reference/ReferenceController.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/reference/ReferenceController.java
@@ -128,10 +128,10 @@ public class ReferenceController {
}
@RequestMapping(value="/shop/reference/countryName")
- public @ResponseBody String countryName(@RequestParam String countryCode, HttpServletRequest request) {
+ public @ResponseBody String countryName(@RequestParam String countryCode, HttpServletRequest request, HttpServletResponse response) {
try {
- Language language = languageUtils.getRequestLanguage(request);
+ Language language = languageUtils.getRequestLanguage(request, response);
if(language==null) {
return countryCode;
}
@@ -150,10 +150,10 @@ public class ReferenceController {
}
@RequestMapping(value="/shop/reference/zoneName")
- public @ResponseBody String zoneName(@RequestParam String zoneCode, HttpServletRequest request) {
+ public @ResponseBody String zoneName(@RequestParam String zoneCode, HttpServletRequest request, HttpServletResponse response) {
try {
- Language language = languageUtils.getRequestLanguage(request);
+ Language language = languageUtils.getRequestLanguage(request, response);
if(language==null) {
return zoneCode;
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/services/controller/product/ShopProductRESTController.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/services/controller/product/ShopProductRESTController.java
index c2935e0..d5dd1fb 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/services/controller/product/ShopProductRESTController.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/services/controller/product/ShopProductRESTController.java
@@ -53,6 +53,7 @@ import com.salesmanager.web.populator.catalog.PersistableProductPopulator;
import com.salesmanager.web.populator.catalog.PersistableProductReviewPopulator;
import com.salesmanager.web.populator.catalog.ReadableProductPopulator;
import com.salesmanager.web.populator.manufacturer.PersistableManufacturerPopulator;
+import com.salesmanager.web.shop.controller.product.facade.ProductFacade;
import com.salesmanager.web.shop.model.filter.QueryFilter;
import com.salesmanager.web.shop.model.filter.QueryFilterType;
@@ -78,6 +79,9 @@ public class ShopProductRESTController {
private ProductService productService;
@Autowired
+ private ProductFacade productFacade;
+
+ @Autowired
private ProductReviewService productReviewService;
@Autowired
@@ -104,7 +108,7 @@ public class ShopProductRESTController {
/**
* Create new product for a given MerchantStore
*/
- @RequestMapping( value="/private/product/{store}", method=RequestMethod.POST)
+ @RequestMapping( value="/private/{store}/product", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public PersistableProduct createProduct(@PathVariable final String store, @Valid @RequestBody PersistableProduct product, HttpServletRequest request, HttpServletResponse response) throws Exception {
@@ -128,6 +132,8 @@ public class ShopProductRESTController {
response.sendError(503, "Merchant store is null for code " + store);
return null;
}
+
+ productFacade.saveProduct(merchantStore, product, merchantStore.getDefaultLanguage());
PersistableProductPopulator populator = new PersistableProductPopulator();
populator.setCategoryService(categoryService);
@@ -158,7 +164,7 @@ public class ShopProductRESTController {
}
- @RequestMapping( value="/private/product/{store}/{id}", method=RequestMethod.DELETE)
+ @RequestMapping( value="/private/{store}/product/{id}", method=RequestMethod.DELETE)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteProduct(@PathVariable final String store, @PathVariable Long id, HttpServletRequest request, HttpServletResponse response) throws Exception {
Product product = productService.getById(id);
@@ -179,7 +185,7 @@ public class ShopProductRESTController {
* @return
* @throws Exception
*/
- @RequestMapping( value="/private/manufacturer/{store}", method=RequestMethod.POST)
+ @RequestMapping( value="/private/{store}/manufacturer", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public PersistableManufacturer createManufacturer(@PathVariable final String store, @Valid @RequestBody PersistableManufacturer manufacturer, HttpServletRequest request, HttpServletResponse response) throws Exception {
@@ -230,7 +236,7 @@ public class ShopProductRESTController {
}
- @RequestMapping( value="/private/product/optionValue/{store}", method=RequestMethod.POST)
+ @RequestMapping( value="/private/{store}/product/optionValue", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public PersistableProductOptionValue createProductOptionValue(@PathVariable final String store, @Valid @RequestBody PersistableProductOptionValue optionValue, HttpServletRequest request, HttpServletResponse response) throws Exception {
@@ -280,7 +286,7 @@ public class ShopProductRESTController {
}
- @RequestMapping( value="/private/product/option/{store}", method=RequestMethod.POST)
+ @RequestMapping( value="/private/{store}/product/option", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public PersistableProductOption createProductOption(@PathVariable final String store, @Valid @RequestBody PersistableProductOption option, HttpServletRequest request, HttpServletResponse response) throws Exception {
@@ -329,7 +335,7 @@ public class ShopProductRESTController {
}
- @RequestMapping( value="/private/product/review/{store}", method=RequestMethod.POST)
+ @RequestMapping( value="/private/{store}/product/review", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public PersistableProductReview createProductReview(@PathVariable final String store, @Valid @RequestBody PersistableProductReview review, HttpServletRequest request, HttpServletResponse response) throws Exception {
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/category/facade/CategoryFacade.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/category/facade/CategoryFacade.java
new file mode 100644
index 0000000..9e5bc5e
--- /dev/null
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/category/facade/CategoryFacade.java
@@ -0,0 +1,21 @@
+package com.salesmanager.web.shop.controller.category.facade;
+
+import java.util.List;
+
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.reference.language.model.Language;
+import com.salesmanager.web.entity.catalog.category.ReadableCategory;
+
+public interface CategoryFacade {
+
+ /**
+ * Returns a list of ReadableCategory ordered and built according to a given depth
+ * @param store
+ * @param depth
+ * @param language
+ * @return
+ * @throws Exception
+ */
+ List<ReadableCategory> getCategoryHierarchy(MerchantStore store, int depth, Language language) throws Exception;
+
+}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/category/facade/CategoryFacadeImpl.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/category/facade/CategoryFacadeImpl.java
new file mode 100644
index 0000000..a25b26d
--- /dev/null
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/category/facade/CategoryFacadeImpl.java
@@ -0,0 +1,62 @@
+package com.salesmanager.web.shop.controller.category.facade;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.salesmanager.core.business.catalog.category.model.Category;
+import com.salesmanager.core.business.catalog.category.service.CategoryService;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.reference.language.model.Language;
+import com.salesmanager.web.entity.catalog.category.ReadableCategory;
+import com.salesmanager.web.populator.catalog.ReadableCategoryPopulator;
+
+
+@Service( value = "categoryFacade" )
+public class CategoryFacadeImpl implements CategoryFacade {
+
+ @Autowired
+ private CategoryService categoryService;
+
+ @Override
+ public List<ReadableCategory> getCategoryHierarchy(MerchantStore store,
+ int depth, Language language) throws Exception {
+
+ List<Category> categories = categoryService.listByDepth(store, 2, language);
+ List<ReadableCategory> returnValues = new ArrayList<ReadableCategory>();
+
+ Map<Long, ReadableCategory> categoryMap = new ConcurrentHashMap<Long, ReadableCategory>();
+
+ ReadableCategoryPopulator categoryPopulator = new ReadableCategoryPopulator();
+
+ for(Category category : categories) {
+
+ ReadableCategory readableCategory = new ReadableCategory();
+ categoryPopulator.populate(category, readableCategory, store, language);
+
+ //if(category.getParent()!=null) {
+ if(category.getParent()!=null) {
+ ReadableCategory parentCategory = categoryMap.get(category.getParent().getId());
+ if(parentCategory!=null) {
+ parentCategory.getChildren().add(readableCategory);
+ }
+ }
+ categoryMap.put(category.getId(), readableCategory);
+ }
+
+ for(Object obj : categoryMap.values()) {
+
+ ReadableCategory readableCategory = (ReadableCategory)obj;
+ if(readableCategory.getDepth()==0) {//only from root
+ returnValues.add(readableCategory);
+ }
+ }
+
+ return returnValues;
+ }
+
+}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/facade/ProductFacade.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/facade/ProductFacade.java
new file mode 100644
index 0000000..2a86416
--- /dev/null
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/facade/ProductFacade.java
@@ -0,0 +1,11 @@
+package com.salesmanager.web.shop.controller.product.facade;
+
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.reference.language.model.Language;
+import com.salesmanager.web.entity.catalog.product.PersistableProduct;
+
+public interface ProductFacade {
+
+ PersistableProduct saveProduct(MerchantStore store, PersistableProduct product, Language language) throws Exception;
+
+}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/facade/ProductFacadeImpl.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/facade/ProductFacadeImpl.java
new file mode 100644
index 0000000..267273f
--- /dev/null
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/facade/ProductFacadeImpl.java
@@ -0,0 +1,71 @@
+package com.salesmanager.web.shop.controller.product.facade;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.salesmanager.core.business.catalog.category.service.CategoryService;
+import com.salesmanager.core.business.catalog.product.model.Product;
+import com.salesmanager.core.business.catalog.product.service.ProductService;
+import com.salesmanager.core.business.catalog.product.service.attribute.ProductOptionService;
+import com.salesmanager.core.business.catalog.product.service.attribute.ProductOptionValueService;
+import com.salesmanager.core.business.catalog.product.service.manufacturer.ManufacturerService;
+import com.salesmanager.core.business.merchant.model.MerchantStore;
+import com.salesmanager.core.business.reference.language.model.Language;
+import com.salesmanager.core.business.reference.language.service.LanguageService;
+import com.salesmanager.core.business.tax.service.TaxClassService;
+import com.salesmanager.core.business.tax.service.TaxService;
+import com.salesmanager.web.entity.catalog.product.PersistableProduct;
+import com.salesmanager.web.populator.catalog.PersistableProductPopulator;
+
+@Service("productFacade")
+public class ProductFacadeImpl implements ProductFacade {
+
+ @Autowired
+ private CategoryService categoryService;
+
+ @Autowired
+ private ManufacturerService manufacturerService;
+
+ @Autowired
+ private LanguageService languageService;
+
+ @Autowired
+ private ProductOptionService productOptionService;
+
+ @Autowired
+ private ProductOptionValueService productOptionValueService;
+
+ @Autowired
+ private TaxClassService taxClassService;
+
+ @Autowired
+ private ProductService productService;
+
+ @Override
+ public PersistableProduct saveProduct(MerchantStore store, PersistableProduct product, Language language)
+ throws Exception {
+
+
+ PersistableProductPopulator persistableProductPopulator = new PersistableProductPopulator();
+
+ persistableProductPopulator.setCategoryService(categoryService);
+ persistableProductPopulator.setManufacturerService(manufacturerService);
+ persistableProductPopulator.setLanguageService(languageService);
+ persistableProductPopulator.setProductOptionService(productOptionService);
+ persistableProductPopulator.setProductOptionValueService(productOptionValueService);
+ persistableProductPopulator.setTaxClassService(taxClassService);
+
+ Product target = new Product();
+
+ persistableProductPopulator.populate(product, target, store, language);
+
+ productService.saveOrUpdate(target);
+
+ product.setId(target.getId());
+
+ return product;
+
+
+ }
+
+}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/ShopProductController.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/ShopProductController.java
index 9fdd35d..6319585 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/ShopProductController.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/shop/controller/product/ShopProductController.java
@@ -49,7 +49,7 @@ import com.salesmanager.web.entity.catalog.product.ReadableProductReview;
import com.salesmanager.web.entity.shop.Breadcrumb;
import com.salesmanager.web.entity.shop.PageInformation;
import com.salesmanager.web.populator.catalog.ReadableProductPopulator;
-import com.salesmanager.web.populator.catalog.ReadableProductPricePopulator;
+import com.salesmanager.web.populator.catalog.ReadableFinalPricePopulator;
import com.salesmanager.web.populator.catalog.ReadableProductReviewPopulator;
import com.salesmanager.web.shop.controller.ControllerConstants;
import com.salesmanager.web.shop.model.catalog.Attribute;
@@ -339,7 +339,7 @@ public class ShopProductController {
FinalPrice price = pricingService.calculateProductPrice(product, attributes);
ReadableProductPrice readablePrice = new ReadableProductPrice();
- ReadableProductPricePopulator populator = new ReadableProductPricePopulator();
+ ReadableFinalPricePopulator populator = new ReadableFinalPricePopulator();
populator.setPricingService(pricingService);
populator.populate(price, readablePrice, store, language);
return readablePrice;
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/tags/StoreFooterlTag.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/tags/StoreFooterlTag.java
index f2eae0d..c650aa7 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/tags/StoreFooterlTag.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/tags/StoreFooterlTag.java
@@ -22,8 +22,7 @@ public class StoreFooterlTag extends TagSupport {
private static final long serialVersionUID = 6319855234657139862L;
private static final Logger LOGGER = LoggerFactory.getLogger(StoreFooterlTag.class);
- /** \u00a9 **/
- private final static String COPY = "©";
+ private final static String COPY = "�";
public int doStartTag() throws JspException {
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/utils/LanguageUtils.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/utils/LanguageUtils.java
index 83d8d3a..f6a5be6 100755
--- a/shopizer/sm-shop/src/main/java/com/salesmanager/web/utils/LanguageUtils.java
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/utils/LanguageUtils.java
@@ -4,9 +4,12 @@ import java.util.Locale;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.support.RequestContextUtils;
import com.salesmanager.core.business.merchant.model.MerchantStore;
import com.salesmanager.core.business.reference.language.model.Language;
@@ -24,27 +27,35 @@ public class LanguageUtils {
* @param request
* @return
*/
- public Language getRequestLanguage(HttpServletRequest request) {
+ public Language getRequestLanguage(HttpServletRequest request, HttpServletResponse response) {
+
+ Locale locale = null;
Language language = (Language) request.getSession().getAttribute(Constants.LANGUAGE);
if(language==null) {
try {
- Locale locale = LocaleContextHolder.getLocale();
- if(locale!=null) {
- language = languageService.toLanguage(locale);
- }
+ locale = LocaleContextHolder.getLocale();//should be browser locale
+
- if(language==null) {
MerchantStore store = (MerchantStore)request.getSession().getAttribute(Constants.MERCHANT_STORE);
if(store!=null) {
language = store.getDefaultLanguage();
+ if(language!=null) {
+ locale = languageService.toLocale(language);
+ if(locale!=null) {
+ LocaleContextHolder.setLocale(locale);
+ }
+ request.getSession().setAttribute(Constants.LANGUAGE, language);
+ }
+
+ if(language==null) {
+ language = languageService.toLanguage(locale);
+ request.getSession().setAttribute(Constants.LANGUAGE, language);
}
- }
- if(language!=null) {
- request.getSession().setAttribute(Constants.LANGUAGE, language);
}
+
} catch(Exception e) {
if(language==null) {
try {
@@ -54,6 +65,14 @@ public class LanguageUtils {
}
}
+ locale = languageService.toLocale(language);
+
+ LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
+ if(localeResolver!=null) {
+ localeResolver.setLocale(request, response, locale);
+ }
+ response.setLocale(locale);
+
return language;
}
diff --git a/shopizer/sm-shop/src/main/java/com/salesmanager/web/utils/WebApplicationCacheUtils.java b/shopizer/sm-shop/src/main/java/com/salesmanager/web/utils/WebApplicationCacheUtils.java
new file mode 100644
index 0000000..e90d3a5
--- /dev/null
+++ b/shopizer/sm-shop/src/main/java/com/salesmanager/web/utils/WebApplicationCacheUtils.java
@@ -0,0 +1,22 @@
+package com.salesmanager.web.utils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.salesmanager.core.utils.CacheUtils;
+
+@Component
+public class WebApplicationCacheUtils {
+
+ @Autowired
+ private CacheUtils cache;
+
+ public Object getFromCache(String key) throws Exception {
+ return cache.getFromCache(key);
+ }
+
+ public void putInCache(String key, Object object) throws Exception {
+ cache.putInCache(object, key);
+ }
+
+}
diff --git a/shopizer/sm-shop/src/main/resources/admin/menu.json b/shopizer/sm-shop/src/main/resources/admin/menu.json
index a38f5c9..23fae73 100755
--- a/shopizer/sm-shop/src/main/resources/admin/menu.json
+++ b/shopizer/sm-shop/src/main/resources/admin/menu.json
@@ -191,9 +191,10 @@
"order":5,
"menus":[
{"menu":{"code":"shipping-configs","url":"","role":"SHIPPING","order":0}},
- {"menu":{"code":"shipping-methods","url":"","role":"SHIPPING","order":0}},
- {"menu":{"code":"shipping-options","url":"","role":"SHIPPING","order":0}},
- {"menu":{"code":"shipping-packages","url":"","role":"SHIPPING","order":0}}
+ {"menu":{"code":"shipping-methods","url":"","role":"SHIPPING","order":2}},
+ {"menu":{"code":"shipping-origin","url":"","role":"SHIPPING","order":3}},
+ {"menu":{"code":"shipping-options","url":"","role":"SHIPPING","order":4}},
+ {"menu":{"code":"shipping-packages","url":"","role":"SHIPPING","order":6}}
]
}},
{
diff --git a/shopizer/sm-shop/src/main/resources/bundles/messages.properties b/shopizer/sm-shop/src/main/resources/bundles/messages.properties
index a28de9a..42ec803 100755
--- a/shopizer/sm-shop/src/main/resources/bundles/messages.properties
+++ b/shopizer/sm-shop/src/main/resources/bundles/messages.properties
@@ -9,6 +9,7 @@ message.username.password=Login Failed. Username or Password is incorrect.
message.resource.notfound=The requested page does not exist.
message.fielderror=Field error
message.timeout=The session timed out.
+message.error.shipping=An error occurred while estimating shipping costs
NotEmpty=Field required
currentpassword.not.empty=Current password should not be empty
password.notequal=New password and check password should be equals
@@ -40,6 +41,11 @@ NotEmpty.customer.stateProvince=State / Province is required
NotEmpty.customer.phone=Phone number is required
NotEmpty.customer.city=City is required
+NotEmpty.origin.address=Street address is required
+NotEmpty.origin.postalCode=Postal code is required
+NotEmpty.origin.city=City is required
+NotEmpty.origin.country=Country is required
+
NotEmpty.customer.emailAddress=Email address is required
Email.customer.emailAddress=Email address is invalid
NotEmpty.customer.billing.phone=Phone number is required
diff --git a/shopizer/sm-shop/src/main/resources/bundles/messages_fr.properties b/shopizer/sm-shop/src/main/resources/bundles/messages_fr.properties
index 454d4c8..7c2e42e 100755
--- a/shopizer/sm-shop/src/main/resources/bundles/messages_fr.properties
+++ b/shopizer/sm-shop/src/main/resources/bundles/messages_fr.properties
@@ -2,18 +2,19 @@ message.success=Requête compétée avec succès
message.error=Une erreur est survenue avec cette requête
message.email.success=Votre message a été envoyé avec succès
message.productreview.created=Votre avez créé une revue de produit avec succès
-message.email.error=Une erreur est survenue avec l'encoi du meesge, veuillez essayer plus tard
+message.email.error=Une erreur est survenue avec l''envoi du message, veuillez essayer plus tard
message.error.shoppingcart.update=Une erreur est survenue pendant la mise à jour du panier d'achat
message.access.denied=Accès refusé
-message.username.password=Authentication échouée. Le nom d'usager ou le mot de passe est invalide.
+message.username.password=Authentication échouée. Le nom d\\'usager ou le mot de passe est invalide.
message.resource.notfound=La page demandée n'existe pas
message.fielderror=Entrée erronnée
message.timeout=La session est expirée.
+message.error.shipping=Une erreur est survenue lors du calcul des coûts d'expédition
NotEmpty=Champs requis
currentpassword.not.empty=Le mot de passe courant ne doit pas être vide
password.notequal=Le nouveau mot de passe et le mot de passe de vérification doivent être identiques
-newpassword.not.empty=Le nouveau mot de passe ne doit pas être vide et doit être d'au moins 6 caractères
-repeatpassword.not.empty=Le mot de passe de vérification ne doit pas être vide et doit être d'au moins 6 caractères
+newpassword.not.empty=Le nouveau mot de passe ne doit pas être vide et doit être d''au moins 6 caractères
+repeatpassword.not.empty=Le mot de passe de vérification ne doit pas être vide et doit être d''au moins 6 caractères
NotEmpty.store.storename=Le nom de la boutique ne doit pas être vide
NotEmpty.store.storeEmailAddress=Le email de la boutique ne doit pas être vide
@@ -31,15 +32,20 @@ NotEmpty.option.code=Le code ne doit pas être vide
NotEmpty.keyword.keyword=Le mot clé ne doit pas être vide
NotEmpty.review.description=Votre opinion est requise
-NotEmpty.customer.userName=Un nom d'usager est requis
+NotEmpty.customer.userName=Un nom d''usager est requis
NotEmpty.customer.firstName=Le prénom est requis
NotEmpty.customer.lastName=Le nom est requis
-NotEmpty.customer.address=L'addresse est requise
+NotEmpty.customer.address=L''addresse est requise
NotEmpty.customer.postalCode=Le code postal est requis
-NotEmpty.customer.stateProvince=L'état / province est requis
+NotEmpty.customer.stateProvince=L''état / province est requis
NotEmpty.customer.phone=Le téléphone est requis
NotEmpty.customer.city=La ville est requise
+NotEmpty.origin.address=L'addresse est requise
+NotEmpty.origin.postalCode=Le code postal est requis
+NotEmpty.origin.city=La ville est requise
+NotEmpty.origin.country=Le pays est requis
+
NotEmpty.customer.emailAddress=L'adresse couriel est requise
Email.customer.emailAddress=L'adresse couriel est invalide
@@ -183,7 +189,7 @@ User.resetPassword.Error=Une erreur s'est produite, contactez l'administrateur
validaion.recaptcha.not.matched=Saisie du champs 'captcha' invalide
registration.username.not.empty=Veuillez fournir un nom d'usager
registration.password.not.empty=Veuillez fournir un mot de passe valide
-registration.username.length.invalid=Le nom d'usager doit contenir au moins 6 caractères
+registration.username.length.invalid=Le nom d\\'usager doit contenir au moins 6 caractères
registration.firstName.invalid=Le prénom est obligatoire
registration.lastName.invalid=Le nom est obligatoire
messages.invalid.email=Veuillez fournir une adress courriel valide
diff --git a/shopizer/sm-shop/src/main/resources/bundles/shipping.properties b/shopizer/sm-shop/src/main/resources/bundles/shipping.properties
index 63d6d48..15f76b8 100755
--- a/shopizer/sm-shop/src/main/resources/bundles/shipping.properties
+++ b/shopizer/sm-shop/src/main/resources/bundles/shipping.properties
@@ -3,15 +3,52 @@ module.shipping.ups=UPS
module.shipping.usps=United States Postal Service
module.shipping.fedex=Fedex
module.shipping.weightBased=Weight based shipping price
+module.shipping.customQuotesRules=Rules based shipping price
+
+module.shipping.canada=Canada
+module.shipping.usa=United states
+module.shipping.international=International
#Canada Post
module.shipping.canadapost.identifier=Canada Post identifier (CPC number)
-module.shipping.canadapost.username=Canada Post user name
-module.shipping.canadapost.password=Canada Post password
+module.shipping.canadapost.username=Canada Post user name (first part of the API key before semi column)
+module.shipping.canadapost.password=Canada Post password (second part of the API key after semi column)
+module.shipping.canadapost.apikey=Canada Post API key
module.shipping.canadapost.packages=Package type
+module.shipping.canadapost.services=Services to be rated
module.shipping.canadapost.message.identifier=Canada Post identifier required
-module.shipping.canadapost.message.username=Canada Post username required
+module.shipping.canadapost.message.username=Canada Post user name required
module.shipping.canadapost.message.password=Canada Post password required
+module.shipping.canadapost.message.apikey=Canada Post API key required
+
+module.shipping.canadapost.DOM.RP=Regular Parcel
+module.shipping.canadapost.DOM.EP=Expedited Parcel
+module.shipping.canadapost.DOM.XP=Xpresspost
+module.shipping.canadapost.DOM.XP.CERT=Xpresspost Certified
+module.shipping.canadapost.DOM.PC=Priority
+module.shipping.canadapost.DOM.DT=Delivered Tonight
+module.shipping.canadapost.DOM.LIB=Library Books
+
+module.shipping.canadapost.USA.EP=Expedited Parcel USA
+module.shipping.canadapost.USA.PW.ENV=Priority Worldwide Envelope USA
+module.shipping.canadapost.USA.PW.PAK=Priority Worldwide pak USA
+module.shipping.canadapost.USA.PW.PARCEL=Priority Worldwide Parcel USA
+module.shipping.canadapost.USA.SP.AIR=Small Packet USA Air
+module.shipping.canadapost.USA.TP=Tracked Packet - USA
+module.shipping.canadapost.USA.TP.LVM=Tracked Packet - USA - (LVM - large volume mailers)
+module.shipping.canadapost.USA.XP=Xpresspost USA
+
+
+module.shipping.canadapost.INT.XP=Xpresspost International
+module.shipping.canadapost.INT.IP.AIR=International Parcel Air
+module.shipping.canadapost.INT.IP.SURF=International Parcel Surface
+module.shipping.canadapost.INT.PW.ENV=Priority Worldwide Envelope International
+module.shipping.canadapost.INT.PW.PAK=Priority Worldwide pak International
+module.shipping.canadapost.INT.PW.PARCEL=Priority Worldwide parcel International
+module.shipping.canadapost.INT.SP.AIR=Small Packet International Air
+module.shipping.canadapost.INT.SP.SURF=Small Packet International Surface
+module.shipping.canadapost.INT.TP=Tracked Packet - International
+
#USPS
module.shipping.usps.identifier=USPS account identifier
@@ -83,3 +120,7 @@ module.shipping.ups.method.65=UPS Saver
module.shipping.ups.method=UPS shipping methods
module.shipping.ups.method.select=Select a specific UPS shipping method
module.shipping.ups.method.unselect=Let UPS propose all available shipping methods
+
+#custom
+module.shipping.customQuotesRules.title=Create your own shipping quotes rules
+module.shipping.customQuotesRules.text=Use the rule system to create your own shipping rate decision table. The custom shipping rate decision table can be edited in sm-core/src/main/resources/rules/shipping-custom-rules.xls
diff --git a/shopizer/sm-shop/src/main/resources/bundles/shipping_fr.properties b/shopizer/sm-shop/src/main/resources/bundles/shipping_fr.properties
index 0ae1760..f839cea 100755
--- a/shopizer/sm-shop/src/main/resources/bundles/shipping_fr.properties
+++ b/shopizer/sm-shop/src/main/resources/bundles/shipping_fr.properties
@@ -3,15 +3,50 @@ module.shipping.ups=UPS
module.shipping.usps=United States Postal Service
module.shipping.fedex=Fedex
module.shipping.weightBased=Prix d'expédition basé sur le poids
+module.shipping.customQuotesRules=Prix d'expédition basé sur des règles d'affaire
+module.shipping.canada=Canada
+module.shipping.usa=États-Unis
+module.shipping.international=International
+
#Canada Post
-module.shipping.canadapost.identifier=Identifiant Postes Canada
-module.shipping.canadapost.username=Nom d'usager Postes Canada
-module.shipping.canadapost.password=Mot de passe Postes Canada
+module.shipping.canadapost.identifier=Identifiant Postes Canada (numéro CPC)
+module.shipping.canadapost.username=Nom d'usager Postes Canada (première partie de la clé API avant les 2 points :)
+module.shipping.canadapost.password=Mot de passe Postes Canada (deuxième partie de la clé API après les 2 points :)
+module.shipping.canadapost.apikey=Clé API Postes Canada
+module.shipping.canadapost.services=Services de postage à calculer
module.shipping.canadapost.packages=Type d'emballage
module.shipping.canadapost.message.identifier=Identifiant Postes Canada requis
module.shipping.canadapost.message.packages=Au moins un type d'emballage
+module.shipping.canadapost.message.apikey=Clé API requise
+
+module.shipping.canadapost.DOM.RP=Colis standard
+module.shipping.canadapost.DOM.EP=Colis accélérés
+module.shipping.canadapost.DOM.XP=Xpresspost
+module.shipping.canadapost.DOM.XP.CERT=Xpresspost certifié
+module.shipping.canadapost.DOM.PC=Priorité
+module.shipping.canadapost.DOM.DT=Service Livré ce soir
+module.shipping.canadapost.DOM.LIB=Livres de bibliothèque
+
+module.shipping.canadapost.USA.EP=Colis accélérés É.-U.
+module.shipping.canadapost.USA.PW.ENV=Enveloppe Priorité Mondial – É.-U.
+module.shipping.canadapost.USA.PW.PAK=Paquet Priorité Mondial – É.-U.
+module.shipping.canadapost.USA.PW.PARCEL=Colis Priorité Mondial – É.-U.
+module.shipping.canadapost.USA.SP.AIR=Petits paquets-avion à destination des É.-U.
+module.shipping.canadapost.USA.TP=Paquet repérable – É.-U.
+module.shipping.canadapost.USA.TP.LVM=Paquet repérable – É.-U. (GEC - gros expéditeur de courrier)
+module.shipping.canadapost.USA.XP=Xpresspost É.-U.
+
+module.shipping.canadapost.INT.XP=Xpresspost International
+module.shipping.canadapost.INT.IP.AIR=Colis-avion du régime international
+module.shipping.canadapost.INT.IP.SURF=Colis de surface du régime international
+module.shipping.canadapost.INT.PW.ENV=Enveloppe Priorité Mondial – International
+module.shipping.canadapost.INT.PW.PAK=Paquet Priorité Mondial – International
+module.shipping.canadapost.INT.PW.PARCEL=Colis Prioritié Mondial – International
+module.shipping.canadapost.INT.SP.AIR=Petits paquets-avion du régime international
+module.shipping.canadapost.INT.SP.SURF=Petits paquets de surface du régime international
+module.shipping.canadapost.INT.TP=Paquet repérable – International
#USPS
module.shipping.usps.identifier=Numéro de compte USPS
@@ -40,3 +75,7 @@ module.shipping.usps.method.06=BPM
module.shipping.usps.method.07=Parcel Post
module.shipping.canadapost.packages.package=Paquet
module.shipping.canadapost.packages.envelope=Enveloppe
+
+#custom
+module.shipping.customQuotesRules.title=Vous pouvez produire vos propre règles de coûts d'expédition
+module.shipping.customQuotesRules.text=Utilisez le système de règles d'affaires afin de créer votre propre table de décision des coûts d'expédition. Le fichier de règles d'affaires des coûts d'expédition peut être édité sous sm-core/src/main/resources/rules/shipping-custom-rules.xls
diff --git a/shopizer/sm-shop/src/main/resources/bundles/shopizer.properties b/shopizer/sm-shop/src/main/resources/bundles/shopizer.properties
index 82a37cd..c340077 100755
--- a/shopizer/sm-shop/src/main/resources/bundles/shopizer.properties
+++ b/shopizer/sm-shop/src/main/resources/bundles/shopizer.properties
@@ -1,5 +1,9 @@
label.quantity=Quantity
+label.defaultlanguage=Default language
+lang.en=English
+lang.fr=French
+
label.entity.id=Id
label.entity.name=Name
label.entity.code=Code
@@ -14,12 +18,15 @@ label.entity.order=Order
label.entity.status=Status
label.generic.all=All
label.generic.email=Email address
+label.generic.address=Address
+label.generic.city=City
label.generic.country=Country
label.generic.price=Price
label.generic.phone=Phone number
label.generic.back=Back
label.generic.country.code=Country code
label.generic.stateprovince=State / province
+label.generic.postalcode=Postal code
label.generic.item=item
label.generic.item.title=Item
label.generic.items=items
@@ -440,6 +447,8 @@ label.shipping.fees=Shipping fees
label.shipping.freeshipping=Free shipping!
label.shipping.freeshipping.over=Free shipping for orders over
label.shipping.freeshippingandhandling=Free shipping and handling
+label.shipping.origin.title=Shipping address origin
+label.shipping.origin.description=Shipping origin will help calculate the distance between the origin to the destination of the delivery. If the origin is not set the system will use the merchant store address as the shipping origin.
#order
label.order.title=Orders
@@ -673,6 +682,7 @@ menu.shipping-configs=Shipping configurations
menu.shipping-methods=Shipping methods
menu.shipping-options=Shipping options
menu.shipping-packages=Packaging
+menu.shipping-origin=Shipping origin
menu.configuration=Configurations
menu.cache=Cache management
menu.customer-list=List of customers
diff --git a/shopizer/sm-shop/src/main/resources/bundles/shopizer_fr.properties b/shopizer/sm-shop/src/main/resources/bundles/shopizer_fr.properties
index 7d4f3c9..a80d2ce 100755
--- a/shopizer/sm-shop/src/main/resources/bundles/shopizer_fr.properties
+++ b/shopizer/sm-shop/src/main/resources/bundles/shopizer_fr.properties
@@ -1,5 +1,9 @@
label.quantity=Quantité
+label.defaultlanguage=Langue par défaut
+lang.en=Anglais
+lang.fr=Français
+
label.entity.id=Identifiant
label.entity.name=Nom
@@ -14,12 +18,15 @@ label.entity.order=Ordre
label.entity.status=Status
label.generic.all=Tout
label.generic.email=Adresse courriel
+label.generic.address=Adresse
+label.generic.city=Ville
label.generic.country=Pays
label.generic.price=Prix
label.generic.phone=Téléphone
label.generic.back=Retour
label.generic.country.code=Code du pays
label.generic.stateprovince=État / province
+label.generic.postalcode=Code postal
label.generic.item=article
label.generic.item.title=Article
label.generic.items=articles
@@ -439,6 +446,9 @@ label.shipping.fees=Frais de livraison
label.shipping.freeshipping=Livraison gratuite !
label.shipping.freeshipping.over=Livraison gratuite pour les commandes dont le montant est supérieur à
label.shipping.freeshippingandhandling=Livraison et manutention gratuits
+label.shipping.origin.title=Adresse source de la livraison
+label.shipping.origin.description=L'adresse source de la livraison sert à calculer la distance entre l'origine et la destination d'une livraison. Si elle n'est pas populée, le système utilisera l'adresse de la boutique comme adresse d'origine.
+
#order
label.order.title=Commandes
@@ -668,6 +678,7 @@ menu.shipping-configs=Configurations de l'expédition
menu.shipping-methods=Méthodes d'expédition
menu.shipping-options=Options d'expédition
menu.shipping-packages=Emballage
+menu.shipping-origin=Adresse d'origine de la livraison
menu.cache=Gestion de la cache
menu.configuration=Configurations
menu.customer-list=Liste des clients
diff --git a/shopizer/sm-shop/src/main/resources/database.properties b/shopizer/sm-shop/src/main/resources/database.properties
index 4f91037..abc3a68 100755
--- a/shopizer/sm-shop/src/main/resources/database.properties
+++ b/shopizer/sm-shop/src/main/resources/database.properties
@@ -5,7 +5,7 @@
#MYSQL
db.jdbcUrl=jdbc:mysql://localhost:3306/SALESMANAGER?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
-db.user=carlito
+db.user=username
db.password=password
hibernate.hbm2ddl.auto=update
db.driverClass=com.mysql.jdbc.Driver
diff --git a/shopizer/sm-shop/src/main/webapp/layout/admin/layout.jsp b/shopizer/sm-shop/src/main/webapp/layout/admin/layout.jsp
index dd8b6ca..d6e1232 100755
--- a/shopizer/sm-shop/src/main/webapp/layout/admin/layout.jsp
+++ b/shopizer/sm-shop/src/main/webapp/layout/admin/layout.jsp
@@ -1,4 +1,5 @@
<%
+request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
@@ -12,10 +13,9 @@ response.setDateHeader ("Expires", -1);
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>
<%@ page import="java.util.Calendar" %>
-<%@page contentType="text/html"%>
+<%@page contentType="text/html; charset=UTF-8"%>
<%@page pageEncoding="UTF-8"%>
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
@@ -30,6 +30,7 @@ response.setDateHeader ("Expires", -1);
<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title><s:message code="label.storeadministration" text="Store administration" /></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -61,16 +62,11 @@ response.setDateHeader ("Expires", -1);
<div class="span4"><a class="brand" href="#"><img src="<c:url value="/resources/img/shopizer_small.jpg" />"/></a></div>
<div class="span4 offset4">
-
-
-
-
-
-
-
<div class="btn-group pull-right">
<div class="nav-collapse">
+
+
<ul class="nav pull-right" style="z-index:500000;position:relative">
<li class="dropdown">
@@ -82,7 +78,6 @@ response.setDateHeader ("Expires", -1);
<ul class="dropdown-menu">
<li><a href="<c:url value="/admin/users/displayUser.html" />"><s:message code="label.my.profile" text="My profile" /></a></li>
- <!--<li><a href="javascript:;">TODO //Language</a></li>-->
<li class="divider"></li>
<li>
<c:url value="/admin/j_spring_security_logout" var="logoutUrl"/>
@@ -91,8 +86,27 @@ response.setDateHeader ("Expires", -1);
</ul>
</li>
- </ul>
-
+ </ul>
+
+ <c:if test="${fn:length(requestScope.ADMIN_STORE.languages)>1}">
+ <ul class="nav pull-right" style="z-index:500000;position:relative">
+ <li class="dropdown">
+
+ <a data-toggle="dropdown" class="dropdown-toggle" href="#">
+ <i class="icon-globe"></i>
+ <s:message code="label.generic.language" text="Language"/>
+ <b class="caret"></b>
+ </a>
+
+ <ul class="dropdown-menu">
+ <c:forEach items="${requestScope.ADMIN_STORE.languages}" var="lang">
+ <li><a href="<c:url value="/admin?locale=${lang.code}" />"><s:message code="${lang.code}" text="${lang.code}" /></a></li>
+ </c:forEach>
+ </ul>
+
+ </li>
+ </ul>
+ </c:if>
</div><!--/.nav-collapse -->
@@ -322,6 +336,9 @@ response.setDateHeader ("Expires", -1);
$("#shipping-options-link").click(function() {
window.location='<c:url value="/admin/shipping/shippingOptions.html" />';
});
+ $("#shipping-origin-link").click(function() {
+ window.location='<c:url value="/admin/shipping/origin/get.html" />';
+ });
$("#shipping-packages-link").click(function() {
window.location='<c:url value="/admin/shipping/shippingPackaging.html" />';
});
diff --git a/shopizer/sm-shop/src/main/webapp/pages/admin/products/manufacturer.jsp b/shopizer/sm-shop/src/main/webapp/pages/admin/products/manufacturer.jsp
index 397bbac..d190792 100755
--- a/shopizer/sm-shop/src/main/webapp/pages/admin/products/manufacturer.jsp
+++ b/shopizer/sm-shop/src/main/webapp/pages/admin/products/manufacturer.jsp
@@ -56,6 +56,36 @@
}
+
+ function validateCode() {
+ $('#checkCodeStatus').html('<img src="<c:url value="/resources/img/ajax-loader.gif" />');
+ $('#checkCodeStatus').show();
+ var code = $("#code").val();
+ var id = $("#id").val();
+ checkCode(code,id,'<c:url value="/admin/manufacturer/checkCode.html" />');
+ }
+
+ function callBackCheckCode(msg,code) {
+ console.log(code);
+ if(code==0) {
+ $('.btn').removeClass('disabled');
+ }
+ if(code==9999) {
+
+ $('#checkCodeStatus').html('<font color="green"><s:message code="message.code.available" text="This code is available"/></font>');
+ $('#checkCodeStatus').show();
+ $('.btn').removeClass('disabled');
+ }
+ if(code==9998) {
+
+ $('#checkCodeStatus').html('<font color="red"><s:message code="message.code.exist" text="This code already exist"/></font>');
+ $('#checkCodeStatus').show();
+ $('.btn').addClass('disabled');
+ }
+
+ }
+
+
</script>
<div class="tabbable">
@@ -99,6 +129,15 @@
<span class="help-inline"><form:errors path="descriptions[${counter.index}].name" cssClass="error" /></span>
</div>
</div>
+
+ <div class="control-group">
+ <label><s:message code="label.entity.code" text="Code"/></label>
+ <div class="controls">
+ <form:input cssClass="input-large highlight" path="code" onblur="validateCode()"/>
+ <span class="help-inline"><div id="checkCodeStatus" style="display:none;"></div><form:errors path="code" cssClass="error" /></span>
+ </div>
+ </div>
+
<div class="control-group">
<label><s:message code="label.manufactureredit.manufacturertitle" text="Manufacturer Title"/> (<c:out value="${description.language.code}"/>)</label>
diff --git a/shopizer/sm-shop/src/main/webapp/pages/admin/shipping/canadapost.jsp b/shopizer/sm-shop/src/main/webapp/pages/admin/shipping/canadapost.jsp
index 6f85fa5..c43d60e 100755
--- a/shopizer/sm-shop/src/main/webapp/pages/admin/shipping/canadapost.jsp
+++ b/shopizer/sm-shop/src/main/webapp/pages/admin/shipping/canadapost.jsp
@@ -37,27 +37,65 @@
<form:input cssClass="input-large highlight" path="integrationKeys['password']" />
</div>
<span class="help-inline">
- <c:if test="${username!=null}">
+ <c:if test="${password!=null}">
<span id="identifiererrors" class="error"><s:message code="module.shipping.canadapost.message.password" text="Field in error"/></span>
</c:if>
</span>
</div>
- <div class="control-group">
- <label class="required"><s:message code="module.shipping.canadapost.packages" text="Packaging"/></label>
+ <div class="control-group">
+ <label class="required"><s:message code="module.shipping.canadapost.apikey" text="API key"/></label>
<div class="controls">
- <form:radiobutton cssClass="input-large highlight" path="integrationOptions['packages']" value="PACKAGE" /> <s:message code="module.shipping.canadapost.packages.package" text="Package" /><br/>
- <form:radiobutton cssClass="input-large highlight" path="integrationOptions['packages']" value="ENVELOPE" /> <s:message code="module.shipping.canadapost.packages.envelope" text="Envelope" /></br>
+ <form:input cssClass="input-large highlight" path="integrationKeys['apikey']" />
</div>
<span class="help-inline">
- <c:if test="${packages!=null}">
- <span id="packageserrors" class="error"><s:message code="module.shipping.canadapost.message.packages" text="Field in error"/></span>
+ <c:if test="${apikey!=null}">
+ <span id="identifiererrors" class="error"><s:message code="module.shipping.canadapost.message.apikey" text="Field in error"/></span>
</c:if>
</span>
</div>
+
+ <div class="control-group">
+ <label class="required"><strong><s:message code="module.shipping.canadapost.services" text="Services"/> - <s:message code="module.shipping.canada" text="Canada"/></strong></label>
+ <div class="controls">
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-domestic']" value="DOM.RP" /> <s:message code="module.shipping.canadapost.DOM.RP" text="DOM.RP" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-domestic']" value="DOM.EP" /> <s:message code="module.shipping.canadapost.DOM.EP" text="DOM.EP" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-domestic']" value="DOM.XP" /> <s:message code="module.shipping.canadapost.DOM.XP" text="DOM.XP" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-domestic']" value="DOM.XP.CERT" /> <s:message code="module.shipping.canadapost.DOM.XP.CERT" text="DOM.XP.CERT" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-domestic']" value="DOM.PC" /> <s:message code="module.shipping.canadapost.DOM.PC" text="DOM.PC" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-domestic']" value="DOM.DT" /> <s:message code="module.shipping.canadapost.DOM.DT" text="DOM.DT" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-domestic']" value="DOM.LIB" /> <s:message code="module.shipping.canadapost.DOM.LIB" text="DOM.LIB" /><br/>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="required"><strong><s:message code="module.shipping.canadapost.services" text="Services"/> - <s:message code="module.shipping.usa" text="United states"/></strong></label>
+ <div class="controls">
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-usa']" value="USA.EP" /> <s:message code="module.shipping.canadapost.USA.EP" text="USA.EP" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-usa']" value="USA.PW.ENV" /> <s:message code="module.shipping.canadapost.USA.PW.ENV" text="USA.PW.ENV" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-usa']" value="USA.PW.PAK" /> <s:message code="module.shipping.canadapost.USA.PW.PAK" text="USA.PW.PAK" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-usa']" value="USA.PW.PARCEL" /> <s:message code="module.shipping.canadapost.USA.PW.PARCEL" text="USA.PW.PARCEL" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-usa']" value="USA.SP.AIR" /> <s:message code="module.shipping.canadapost.USA.SP.AIR" text="SA.SP.AIR" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-usa']" value="USA.TP" /> <s:message code="module.shipping.canadapost.USA.TP" text="USA.TP" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-usa']" value="USA.TP.LVM" /> <s:message code="module.shipping.canadapost.USA.TP.LVW" text="USA.TP.LVW" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-usa']" value="USA.XP" /> <s:message code="module.shipping.canadapost.USA.XP" text="USA.XP" /><br/>
+ </div>
+ </div>
-
+ <div class="control-group">
+ <label class="required"><strong><s:message code="module.shipping.canadapost.services" text="Services"/> - <s:message code="module.shipping.intl" text="International"/></strong></label>
+ <div class="controls">
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-intl']" value="INT.XP" /> <s:message code="module.shipping.canadapost.INT.XP" text="INT.XP" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-intl']" value="INT.IP.AIR" /> <s:message code="module.shipping.canadapost.USA.PW.ENV" text="INT.IP.AIR" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-intl']" value="INT.IP.SURF" /> <s:message code="module.shipping.canadapost.INT.IP.SURF" text="INT.IP.SURF" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-intl']" value="INT.PW.ENV" /> <s:message code="module.shipping.canadapost.INT.PW.ENV" text="INT.PW.ENV" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-intl']" value="INT.PW.PAK" /> <s:message code="module.shipping.canadapost.INT.PW.PAK" text="INT.PW.PAK" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-intl']" value="INT.PW.PARCEL" /> <s:message code="module.shipping.canadapost.INT.PW.PARCEL" text="INT.PW.PARCEL" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-intl']" value="INT.SP.AIR" /> <s:message code="module.shipping.canadapost.INT.SP.AIR" text="INT.SP.AIR" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-intl']" value="INT.SP.SURF" /> <s:message code="module.shipping.canadapost.INT.SP.SURF" text="INT.SP.SURF" /><br/>
+ <form:checkbox cssClass="input-large highlight" path="integrationOptions['services-intl']" value="INT.TP" /> <s:message code="module.shipping.canadapost.INT.TP" text="INT.TP" /><br/>
+ </div>
+ </div>
diff --git a/shopizer/sm-shop/src/main/webapp/pages/admin/shipping/customQuotesRules.jsp b/shopizer/sm-shop/src/main/webapp/pages/admin/shipping/customQuotesRules.jsp
new file mode 100644
index 0000000..3f60e9a
--- /dev/null
+++ b/shopizer/sm-shop/src/main/webapp/pages/admin/shipping/customQuotesRules.jsp
@@ -0,0 +1,17 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
+<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
+<%@ page session="false" %>
+
+
+
+
+ <div class="control-group">
+ <label class="required"><s:message code="module.shipping.customQuotesRules.title" text="Create your own shipping rules"/></label>
+ <div class="controls">
+ <p>
+ <s:message code="module.shipping.customQuotesRules.text" text="Use the decision table xls file"/>
+ </p>
+ </div>
+ </div>
\ No newline at end of file
diff --git a/shopizer/sm-shop/src/main/webapp/pages/admin/shipping/shippingOrigin.jsp b/shopizer/sm-shop/src/main/webapp/pages/admin/shipping/shippingOrigin.jsp
new file mode 100755
index 0000000..7c82960
--- /dev/null
+++ b/shopizer/sm-shop/src/main/webapp/pages/admin/shipping/shippingOrigin.jsp
@@ -0,0 +1,199 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
+<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
+
+<%@ page session="false" %>
+
+
+<script>
+
+
+$(document).ready(function() {
+
+
+
+ <c:choose>
+ <c:when test="${origin.state!=null && origin.state!=''}">
+ $('.zone-list').hide();
+ $('#stateprovince').show();
+ $('#stateprovince').val('<c:out value="${origin.state}"/>');
+ </c:when>
+ <c:otherwise>
+ $('.zone-list').show();
+ $('#stateprovince').hide();
+ getZones('<c:out value="${origin.country.isoCode}" />');
+ </c:otherwise>
+ </c:choose>
+
+ $(".country-list").change(function() {
+ getZones($(this).val());
+ })
+
+
+});
+
+$.fn.addItems = function(data) {
+ $(".zone-list > option").remove();
+ return this.each(function() {
+ var list = this;
+ $.each(data, function(index, itemData) {
+ var option = new Option(itemData.name, itemData.code);
+ list.add(option);
+ });
+ });
+};
+
+function getZones(countryCode){
+ $.ajax({
+ type: 'POST',
+ url: '<c:url value="/admin/reference/provinces.html"/>',
+ data: 'countryCode=' + countryCode,
+ dataType: 'json',
+ success: function(response){
+
+ var status = isc.XMLTools.selectObjects(response, "/response/status");
+ if(status==0 || status ==9999) {
+
+ var data = isc.XMLTools.selectObjects(response, "/response/data");
+ if(data && data.length>0) {
+
+ $('.zone-list').show();
+ $('#stateprovince').hide();
+ $(".zone-list").addItems(data);
+ <c:if test="${origin.zone!=null}">
+ $('.zone-list').val('<c:out value="${origin.zone.code}"/>');
+ $('#stateprovince').val('');
+ </c:if>
+ } else {
+ $('.zone-list').hide();
+ $('#stateprovince').show();
+ <c:if test="${origin.merchantStore!=null}">
+ $('#stateprovince').val('<c:out value="${origin.state}"/>');
+ </c:if>
+ }
+ } else {
+ $('.zone-list').hide();
+ $('#stateprovince').show();
+ }
+
+
+ },
+ error: function(xhr, textStatus, errorThrown) {
+ alert('error ' + errorThrown);
+ }
+
+ });
+}
+
+
+
+</script>
+
+
+<div class="tabbable">
+
+
+ <jsp:include page="/common/adminTabs.jsp" />
+
+ <h3><s:message code="label.shipping.origin.title" text="Shipping address origin" /></h3>
+ <br/>
+ <p>
+ <s:message code="label.shipping.origin.description" text="Used for the calculation of the distance between the origin and the destination of a delivery" />
+ </p>
+
+ <c:url var="origin" value="/admin/shipping/origin/post.html"/>
+
+
+ <form:form method="POST" commandName="origin" action="${origin}">
+
+ <form:errors path="*" cssClass="alert alert-error" element="div" />
+ <div id="store.success" class="alert alert-success" style="<c:choose><c:when test="${success!=null}">display:block;</c:when><c:otherwise>display:none;</c:otherwise></c:choose>"><s:message code="message.success" text="Request successfull"/></div>
+
+ <div class="control-group">
+ <label><s:message code="label.entity.active" text="Active"/></label>
+ <div class="controls">
+ <form:checkbox path="active" />
+
+ </div>
+ </div>
+
+
+ <div class="control-group">
+ <label><s:message code="label.generic.address" text="Address"/></label>
+ <div class="controls">
+ <form:input cssClass="input-large highlight" path="address" />
+ <span class="help-inline"><form:errors path="address" cssClass="error" /></span>
+ </div>
+ </div>
+
+
+ <div class="control-group">
+ <label><s:message code="label.generic.city" text="City"/></label>
+ <div class="controls">
+ <form:input cssClass="input-large highlight" path="city" />
+ <span class="help-inline"><form:errors path="city" cssClass="error" /></span>
+ </div>
+ </div>
+
+ <div class="control-group">
+ <label><s:message code="label.generic.country" text="Country"/></label>
+ <div class="controls">
+
+ <form:select cssClass="country-list highlight" path="country.isoCode">
+ <form:options items="${countries}" itemValue="isoCode" itemLabel="name"/>
+ </form:select>
+ <span class="help-inline"><form:errors path="country" cssClass="error" /></span>
+ </div>
+ </div>
+
+
+ <div class="control-group">
+ <label><s:message code="label.generic.stateprovince" text="State / province"/></label>
+ <div class="controls">
+ <form:select cssClass="zone-list highlight" path="zone.code"/>
+ <input type="text" class="input-large highlight" id="stateprovince" name="state" />
+ <span class="help-inline"><form:errors path="zone.code" cssClass="error" /></span>
+ </div>
+ </div>
+
+ <div class="control-group">
+ <label><s:message code="label.generic.postalcode" text="Postal code"/></label>
+ <div class="controls">
+ <form:input cssClass="input-large highlight" path="postalCode" />
+ <span class="help-inline"><form:errors path="postalCode" cssClass="error" /></span>
+ </div>
+ </div>
+
+ <div class="form-actions">
+ <div class="pull-right">
+ <button type="submit" class="btn btn-success"><s:message code="button.label.submit2" text="Submit"/></button>
+ </div>
+ </div>
+
+
+
+ </form:form>
+
+ <c:if test="origin!=null">
+ <br/><br/>
+ <c:url var="removeOrigin" value="/admin/shipping/origin/delete.html"/>
+ <form:form method="POST" enctype="multipart/form-data" commandName="origin" action="${removeOrigin}">
+ <input type="hidden" name="id" value="${origin.id}" />
+ <div class="form-actions">
+ <div class="pull-right">
+ <button type="submit" class="btn-danger"><i class="icon-trash icon-large"></i><s:message code="label.generic.remove" text="Remove"/></button>
+ </div>
+ </div>
+
+ </form:form>
+ </c:if>
+
+
+
+
+
+
+
+
+</div>
\ No newline at end of file
diff --git a/shopizer/sm-shop/src/main/webapp/pages/shop/common/checkout/checkout.jsp b/shopizer/sm-shop/src/main/webapp/pages/shop/common/checkout/checkout.jsp
index cebe3f8..8bfa676 100755
--- a/shopizer/sm-shop/src/main/webapp/pages/shop/common/checkout/checkout.jsp
+++ b/shopizer/sm-shop/src/main/webapp/pages/shop/common/checkout/checkout.jsp
@@ -915,7 +915,7 @@ $(document).ready(function() {
<!-- Shipping box -->
<c:if test="${shippingQuote!=null}">
- <br/>
+ <br/>
<!-- Shipping -->
<div class="box">
<span class="box-title">
@@ -949,10 +949,10 @@ $(document).ready(function() {
</c:when>
<c:otherwise>
<c:choose>
- <c:when test="${shippingQuote.quoteError!=null}">
+ <c:when test="${shippingQuote.shippingReturnCode=='ERROR'}">
<font color="red"><c:out value="${shippingQuote.quoteError}" /></font>
- </c:when>
- <c:otherwise>
+ </c:when>
+ <c:otherwise>
<c:choose>
<c:when test="${shippingQuote.shippingReturnCode=='NO_SHIPPING_MODULE_CONFIGURED'}">
<font color="red"><s:message code="message.noshipping.configured" text="No shipping method configured"/></font>
@@ -961,7 +961,7 @@ $(document).ready(function() {
<strong><s:message code="label.shipping.freeshipping" text="Free shipping!"/></strong>
</c:otherwise>
</c:choose>
- </c:otherwise>
+ </c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
diff --git a/shopizer/sm-shop/src/main/webapp/pages/shop/common/customer/dashboard.jsp b/shopizer/sm-shop/src/main/webapp/pages/shop/common/customer/dashboard.jsp
index e3f6246..64facdd 100755
--- a/shopizer/sm-shop/src/main/webapp/pages/shop/common/customer/dashboard.jsp
+++ b/shopizer/sm-shop/src/main/webapp/pages/shop/common/customer/dashboard.jsp
@@ -73,7 +73,7 @@ $(document).ready(function() {
<div id="attributesBox" class="box">
<span class="box-title">
<p class="p-title"><s:message code="label.customer.moredetails" text="More details"/></font></p>
- </span
+ </span>
diff --git a/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap/sections/navbar.jsp b/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap/sections/navbar.jsp
index bbdf7e6..e8bd11f 100755
--- a/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap/sections/navbar.jsp
+++ b/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap/sections/navbar.jsp
@@ -93,9 +93,9 @@ $(document).ready(function() {
<c:forEach items="${requestScope.TOP_CATEGORIES}" var="category">
<li class="">
- <a href="<c:url value="/shop/category/${category.description.seUrl}.html"/><sm:breadcrumbParam categoryId="${category.id}"/>" class="current">
+ <a href="<c:url value="/shop/category/${category.description.friendlyUrl}.html"/><sm:breadcrumbParam categoryId="${category.id}"/>" class="current">
<span class="name">${category.description.name}</span>
- <span class="desc">${category.description.categoryHighlight}</span>
+ <span class="desc">${category.description.highlights}</span>
</a>
</li>
</c:forEach>
diff --git a/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap/sections/productBox.jsp b/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap/sections/productBox.jsp
index 37c7397..21539d6 100755
--- a/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap/sections/productBox.jsp
+++ b/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap/sections/productBox.jsp
@@ -13,7 +13,6 @@ response.setDateHeader ("Expires", -1);
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
-
<c:forEach items="${requestScope.ITEMS}" var="product">
<li class="span3" data-id="${product.id}" item-price="${product.price}" item-name="${product.description.name}" item-order="${product.sortOrder}">
<div class="product-box">
diff --git a/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/pages/product.jsp b/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/pages/product.jsp
index d2a9766..2b1b617 100755
--- a/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/pages/product.jsp
+++ b/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/pages/product.jsp
@@ -30,7 +30,7 @@ response.setDateHeader ("Expires", -1);
<h1>${product.description.name}</h1>
</header>
- <div itemscope class="col-sm-12 col-md-12" itemtype="http://data-vocabulary.org/Product">
+ <div itemscope class="col-sm-12 col-md-12 mainProductColumn" itemtype="http://data-vocabulary.org/Product">
<!-- Image column -->
<div id="img" class="col-sm-6 col-md-6 productMainImage">
<c:if test="${product.image!=null}">
diff --git a/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/sections/footer.jsp b/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/sections/footer.jsp
index d4990ea..fc01d18 100755
--- a/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/sections/footer.jsp
+++ b/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/sections/footer.jsp
@@ -74,7 +74,7 @@ response.setDateHeader ("Expires", -1);
<ul>
<c:forEach items="${requestScope.TOP_CATEGORIES}" var="category">
<li>
- <a href="<c:url value="/shop/category/${category.description.seUrl}.html"/><sm:breadcrumbParam categoryId="${category.id}"/>" class="current">
+ <a href="<c:url value="/shop/category/${category.description.friendlyUrl}.html"/><sm:breadcrumbParam categoryId="${category.id}"/>" class="current">
<span class="name">${category.description.name}</span>
</a>
</li>
diff --git a/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/sections/navbar.jsp b/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/sections/navbar.jsp
index 3fb6137..5e8f552 100755
--- a/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/sections/navbar.jsp
+++ b/shopizer/sm-shop/src/main/webapp/pages/shop/templates/bootstrap3/sections/navbar.jsp
@@ -105,8 +105,8 @@ $(document).ready(function() {
</li>
<c:forEach items="${requestScope.TOP_CATEGORIES}" var="category">
- <li class="<sm:activeLink linkCode="${category.description.seUrl}" activeReturnCode="active"/>">
- <a class="dropdown-toggle" href="<c:url value="/shop/category/${category.description.seUrl}.html"/><sm:breadcrumbParam categoryId="${category.id}"/>" class="current">
+ <li class="<sm:activeLink linkCode="${category.description.friendlyUrl}" activeReturnCode="active"/>">
+ <a class="dropdown-toggle" href="<c:url value="/shop/category/${category.description.friendlyUrl}.html"/><sm:breadcrumbParam categoryId="${category.id}"/>" class="current">
<span class="name">${category.description.name}</span>
</a>
</li>
@@ -119,5 +119,10 @@ $(document).ready(function() {
</div>
<!-- /NAVIGATION MENU -->
</div>
- </div>
+ </div>
+
+ <form id="hiddenSearchForm" method="post" action="<c:url value="/shop/search/search.html"/>">
+ <input type="hidden" id="hiddenQuery" name="q">
+ </form>
+
</section>
\ No newline at end of file
diff --git a/shopizer/sm-shop/src/main/webapp/resources/templates/bootstrap3/css/theme.css b/shopizer/sm-shop/src/main/webapp/resources/templates/bootstrap3/css/theme.css
index b2e9b84..f6397d3 100755
--- a/shopizer/sm-shop/src/main/webapp/resources/templates/bootstrap3/css/theme.css
+++ b/shopizer/sm-shop/src/main/webapp/resources/templates/bootstrap3/css/theme.css
@@ -399,7 +399,7 @@ a, a:hover, a:active,
#miniCart {
padding-left:5px;
- width:90px;
+ width:100px;
}
#minicartComponent {
@@ -572,6 +572,10 @@ a, a:hover, a:active,
float:right;
}
+.mainProductColumn {
+ margin-bottom:20px;
+}
+
/**Store bar **/
#storeBar {
display: block;
diff --git a/shopizer/sm-shop/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml b/shopizer/sm-shop/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
index 77d3178..8b932d9 100755
--- a/shopizer/sm-shop/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
+++ b/shopizer/sm-shop/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
@@ -71,16 +71,16 @@
<beans:property name="defaultLocale" value="en"></beans:property>
</beans:bean>
- <beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
+ <beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<beans:property name="basenames">
<beans:list>
- <beans:value>bundles/shopizer</beans:value>
- <beans:value>bundles/messages</beans:value>
- <beans:value>bundles/shipping</beans:value>
- <beans:value>bundles/payment</beans:value>
+ <beans:value>classpath:bundles/shopizer</beans:value>
+ <beans:value>classpath:bundles/messages</beans:value>
+ <beans:value>classpath:bundles/shipping</beans:value>
+ <beans:value>classpath:bundles/payment</beans:value>
</beans:list>
</beans:property>
- <!--<beans:property name="defaultEncoding" value="UTF-8"/>-->
+ <beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
diff --git a/shopizer/sm-shop/src/main/webapp/WEB-INF/tiles/tiles-admin.xml b/shopizer/sm-shop/src/main/webapp/WEB-INF/tiles/tiles-admin.xml
index 57c95b2..bf39eba 100755
--- a/shopizer/sm-shop/src/main/webapp/WEB-INF/tiles/tiles-admin.xml
+++ b/shopizer/sm-shop/src/main/webapp/WEB-INF/tiles/tiles-admin.xml
@@ -217,6 +217,10 @@
<put-attribute name="body" value="/pages/admin/shipping/shippingMethod.jsp" />
</definition>
+ <definition name="shipping-origin" template="/layout/admin/layout.jsp">
+ <put-attribute name="body" value="/pages/admin/shipping/shippingOrigin.jsp" />
+ </definition>
+
<definition name="payment-methods" template="/layout/admin/layout.jsp">
<put-attribute name="body" value="/pages/admin/payment/paymentMethods.jsp" />
</definition>
diff --git a/shopizer/sm-shop/src/test/java/com/salesmanager/test/shop/controller/product/rest/ProductManagementAPITest.java b/shopizer/sm-shop/src/test/java/com/salesmanager/test/shop/controller/product/rest/ProductManagementAPITest.java
index 286b376..7abb543 100755
--- a/shopizer/sm-shop/src/test/java/com/salesmanager/test/shop/controller/product/rest/ProductManagementAPITest.java
+++ b/shopizer/sm-shop/src/test/java/com/salesmanager/test/shop/controller/product/rest/ProductManagementAPITest.java
@@ -97,7 +97,7 @@ public class ProductManagementAPITest {
HttpEntity<String> entity = new HttpEntity<String>(json, getHeader());
- ResponseEntity response = restTemplate.postForEntity("http://localhost:8080/sm-shop/shop/services/private/manufacturer/DEFAULT", entity, PersistableManufacturer.class);
+ ResponseEntity response = restTemplate.postForEntity("http://localhost:8080/sm-shop/shop/services/private/DEFAULT/manufacturer", entity, PersistableManufacturer.class);
PersistableManufacturer manuf = (PersistableManufacturer) response.getBody();
System.out.println("New Manufacturer ID : " + manuf.getId());
@@ -146,7 +146,7 @@ public class ProductManagementAPITest {
HttpEntity<String> entity = new HttpEntity<String>(json, getHeader());
- ResponseEntity response = restTemplate.postForEntity("http://localhost:8080/sm-shop/shop/services/private/product/review/DEFAULT", entity, PersistableProductReview.class);
+ ResponseEntity response = restTemplate.postForEntity("http://localhost:8080/sm-shop/shop/services/private//DEFAULT/product/review", entity, PersistableProductReview.class);
PersistableProductReview rev = (PersistableProductReview) response.getBody();
System.out.println("New ProductReview ID : " + rev.getId());
@@ -204,7 +204,7 @@ public class ProductManagementAPITest {
HttpEntity<String> entity = new HttpEntity<String>(json, getHeader());
- ResponseEntity response = restTemplate.postForEntity("http://localhost:8080/sm-shop/shop/services/private/product/optionValue/DEFAULT", entity, PersistableProductOptionValue.class);
+ ResponseEntity response = restTemplate.postForEntity("http://localhost:8080/sm-shop/shop/services/private/DEFAULT/product/optionValue", entity, PersistableProductOptionValue.class);
PersistableProductOptionValue opt = (PersistableProductOptionValue) response.getBody();
System.out.println("New optionValue ID : " + opt.getId());
@@ -262,7 +262,7 @@ public class ProductManagementAPITest {
HttpEntity<String> entity = new HttpEntity<String>(json, getHeader());
- ResponseEntity response = restTemplate.postForEntity("http://localhost:8080/sm-shop/shop/services/private/product/option/DEFAULT", entity, PersistableProductOption.class);
+ ResponseEntity response = restTemplate.postForEntity("http://localhost:8080/sm-shop/shop/services/private/DEFAULT/product/option", entity, PersistableProductOption.class);
PersistableProductOption opt = (PersistableProductOption) response.getBody();
System.out.println("New option ID : " + opt.getId());