shopizer-developers

Details

diff --git a/sm-shop/src/main/java/com/salesmanager/shop/admin/model/permission/Permissions.java b/sm-shop/src/main/java/com/salesmanager/shop/admin/model/permission/Permissions.java
new file mode 100755
index 0000000..1130241
--- /dev/null
+++ b/sm-shop/src/main/java/com/salesmanager/shop/admin/model/permission/Permissions.java
@@ -0,0 +1,49 @@
+
+package com.salesmanager.shop.admin.model.permission;
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({
+    "permission"
+})
+public class Permissions implements Serializable
+{
+
+    @JsonProperty("permission")
+    private List<ShopPermission> shopPermission = null;
+    @JsonIgnore
+    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
+    private final static long serialVersionUID = 8484447758224382575L;
+
+    @JsonProperty("permission")
+    public List<ShopPermission> getShopPermission() {
+        return shopPermission;
+    }
+
+    @JsonProperty("permission")
+    public void setShopPermission(List<ShopPermission> shopPermission) {
+        this.shopPermission = shopPermission;
+    }
+
+    @JsonAnyGetter
+    public Map<String, Object> getAdditionalProperties() {
+        return this.additionalProperties;
+    }
+
+    @JsonAnySetter
+    public void setAdditionalProperty(String name, Object value) {
+        this.additionalProperties.put(name, value);
+    }
+
+}
diff --git a/sm-shop/src/main/java/com/salesmanager/shop/admin/model/permission/ShopGroup.java b/sm-shop/src/main/java/com/salesmanager/shop/admin/model/permission/ShopGroup.java
new file mode 100755
index 0000000..73201a7
--- /dev/null
+++ b/sm-shop/src/main/java/com/salesmanager/shop/admin/model/permission/ShopGroup.java
@@ -0,0 +1,49 @@
+
+package com.salesmanager.shop.admin.model.permission;
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({
+    "name"
+})
+public class ShopGroup implements Serializable
+{
+
+    @JsonProperty("name")
+    private List<String> name = null;
+    @JsonIgnore
+    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
+    private final static long serialVersionUID = 8390421982207090115L;
+
+    @JsonProperty("name")
+    public List<String> getName() {
+        return name;
+    }
+
+    @JsonProperty("name")
+    public void setName(List<String> name) {
+        this.name = name;
+    }
+
+    @JsonAnyGetter
+    public Map<String, Object> getAdditionalProperties() {
+        return this.additionalProperties;
+    }
+
+    @JsonAnySetter
+    public void setAdditionalProperty(String name, Object value) {
+        this.additionalProperties.put(name, value);
+    }
+
+}
diff --git a/sm-shop/src/main/java/com/salesmanager/shop/admin/model/permission/ShopPermission.java b/sm-shop/src/main/java/com/salesmanager/shop/admin/model/permission/ShopPermission.java
new file mode 100755
index 0000000..db23a04
--- /dev/null
+++ b/sm-shop/src/main/java/com/salesmanager/shop/admin/model/permission/ShopPermission.java
@@ -0,0 +1,61 @@
+
+package com.salesmanager.shop.admin.model.permission;
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({
+    "type",
+    "group"
+})
+public class ShopPermission implements Serializable
+{
+
+    @JsonProperty("type")
+    private String type;
+    @JsonProperty("group")
+    private ShopGroup shopGroup;
+    @JsonIgnore
+    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
+    private final static long serialVersionUID = -7938476709520334066L;
+
+    @JsonProperty("type")
+    public String getType() {
+        return type;
+    }
+
+    @JsonProperty("type")
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    @JsonProperty("group")
+    public ShopGroup getShopGroup() {
+        return shopGroup;
+    }
+
+    @JsonProperty("group")
+    public void setShopGroup(ShopGroup shopGroup) {
+        this.shopGroup = shopGroup;
+    }
+
+    @JsonAnyGetter
+    public Map<String, Object> getAdditionalProperties() {
+        return this.additionalProperties;
+    }
+
+    @JsonAnySetter
+    public void setAdditionalProperty(String name, Object value) {
+        this.additionalProperties.put(name, value);
+    }
+
+}
diff --git a/sm-shop/src/main/java/com/salesmanager/shop/init/data/InitializationLoader.java b/sm-shop/src/main/java/com/salesmanager/shop/init/data/InitializationLoader.java
index 85a3e07..b08372b 100644
--- a/sm-shop/src/main/java/com/salesmanager/shop/init/data/InitializationLoader.java
+++ b/sm-shop/src/main/java/com/salesmanager/shop/init/data/InitializationLoader.java
@@ -1,13 +1,6 @@
 package com.salesmanager.shop.init.data;
 
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.salesmanager.core.business.constants.SystemConstants;
 import com.salesmanager.core.business.exception.ServiceException;
 import com.salesmanager.core.business.services.merchant.MerchantStoreService;
@@ -23,9 +16,25 @@ import com.salesmanager.core.model.system.SystemConfiguration;
 import com.salesmanager.core.model.user.Group;
 import com.salesmanager.core.model.user.GroupType;
 import com.salesmanager.core.model.user.Permission;
+import com.salesmanager.shop.admin.model.permission.Permissions;
+import com.salesmanager.shop.admin.model.permission.ShopPermission;
 import com.salesmanager.shop.admin.security.WebUserServices;
 import com.salesmanager.shop.constants.ApplicationConstants;
 
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.xml.transform.stream.StreamSource;
 
 
 @Component
@@ -42,14 +51,14 @@ public class InitializationLoader {
 	private InitializationDatabase initializationDatabase;
 	
 	@Inject
-	private com.salesmanager.shop.init.data.InitData initData;
+	private InitData initData;
 	
 	@Inject
 	private SystemConfigurationService systemConfigurationService;
 	
 	@Inject
 	private WebUserServices userDetailsService;
-	
+
 	@Inject
 	protected PermissionService  permissionService;
 	
@@ -61,6 +70,12 @@ public class InitializationLoader {
 	
 	@Inject
 	protected MerchantStoreService merchantService;
+
+    @Inject
+    private ObjectMapper jacksonObjectMapper;
+
+    @Inject
+    private ResourceLoader resourceLoader;
 	
 	@PostConstruct
 	public void init() {
@@ -68,8 +83,13 @@ public class InitializationLoader {
 		try {
 			
 			if (initializationDatabase.isEmpty()) {
-				
-				
+
+                File permissionXML=resourceLoader.getResource("classpath:/permission/permission.json").getFile();
+                StreamSource xmlSource = new StreamSource(permissionXML);
+                //Permissions permissions= (Permissions) jaxb2Marshaller.unmarshal(xmlSource);
+
+                Permissions permissions= jacksonObjectMapper.readValue(permissionXML,Permissions.class);
+
 				//All default data to be created
 				
 				LOGGER.info(String.format("%s : Shopizer database is empty, populate it....", "sm-shop"));
@@ -80,124 +100,33 @@ public class InitializationLoader {
 				
 				 //security groups and permissions
 
-				  Group gsuperadmin = new Group("SUPERADMIN");
-				  gsuperadmin.setGroupType(GroupType.ADMIN);
-				  
-				  Group gadmin = new Group("ADMIN");
-				  gadmin.setGroupType(GroupType.ADMIN);
-				  
-				  Group gcatalogue = new Group("ADMIN_CATALOGUE");
-				  gcatalogue.setGroupType(GroupType.ADMIN);
-				 
-				  Group gstore = new Group("ADMIN_STORE");
-				  gstore.setGroupType(GroupType.ADMIN);
-				 
-				  Group gorder = new Group("ADMIN_ORDER");
-				  gorder.setGroupType(GroupType.ADMIN);
-				  
-				  Group gcontent = new Group("ADMIN_CONTENT");
-				  gcontent.setGroupType(GroupType.ADMIN);
-
-				  groupService.create(gsuperadmin);
-				  groupService.create(gadmin);
-				  groupService.create(gcatalogue);
-				  groupService.create(gstore);
-				  groupService.create(gorder);
-				  groupService.create(gcontent);
-				  
-				  Permission storeadmin = new Permission("STORE_ADMIN");//Administrator of the store
-				  storeadmin.getGroups().add(gsuperadmin);
-				  storeadmin.getGroups().add(gadmin);
-				  permissionService.create(storeadmin);
-				  
-				  Permission superadmin = new Permission("SUPERADMIN");
-				  superadmin.getGroups().add(gsuperadmin);
-				  permissionService.create(superadmin);
-				  
-				  Permission admin = new Permission("ADMIN");
-				  admin.getGroups().add(gsuperadmin);
-				  admin.getGroups().add(gadmin);
-				  permissionService.create(admin);
-				  
-				  Permission auth = new Permission("AUTH");//Authenticated
-				  auth.getGroups().add(gsuperadmin);
-				  auth.getGroups().add(gadmin);
-				  auth.getGroups().add(gcatalogue);
-				  auth.getGroups().add(gstore);
-				  auth.getGroups().add(gorder);
-				  permissionService.create(auth);
+                Map<String, Group> groupMap = new HashMap<String,Group>();
+                if(CollectionUtils.isNotEmpty(permissions.getShopPermission())){
 
-				  
-				  Permission products = new Permission("PRODUCTS");
-				  products.getGroups().add(gsuperadmin);
-				  products.getGroups().add(gadmin);
-				  products.getGroups().add(gcatalogue);
-				  permissionService.create(products);
+                    for(ShopPermission shopPermission : permissions.getShopPermission()){
 
-				  
-				  Permission order = new Permission("ORDER");
-				  order.getGroups().add(gsuperadmin);
-				  order.getGroups().add(gorder);
-				  order.getGroups().add(gadmin);
-				  permissionService.create(order);
-				  
-				  Permission content = new Permission("CONTENT");
-				  content.getGroups().add(gsuperadmin);
-				  content.getGroups().add(gadmin);
-				  content.getGroups().add(gcontent);
-				  permissionService.create(content);
-				  
-				  
-				  
-				  Permission pstore = new Permission("STORE");
-				  pstore.getGroups().add(gsuperadmin);
-				  pstore.getGroups().add(gstore);
-				  pstore.getGroups().add(gadmin);
-				  permissionService.create(pstore);
-				  
-				  Permission tax = new Permission("TAX");
-				  tax.getGroups().add(gsuperadmin);
-				  tax.getGroups().add(gstore);
-				  tax.getGroups().add(gadmin);
-				  permissionService.create(tax);
-				  
-				  
-				  Permission payment = new Permission("PAYMENT");
-				  payment.getGroups().add(gsuperadmin);
-				  payment.getGroups().add(gstore);
-				  payment.getGroups().add(gadmin);
-				  permissionService.create(payment);
-				  
-				  Permission customer = new Permission("CUSTOMER");
-				  customer.getGroups().add(gsuperadmin);
-				  customer.getGroups().add(gstore);
-				  customer.getGroups().add(gadmin);
-				  permissionService.create(customer);
-				  
-				  
-				  Permission shipping = new Permission("SHIPPING");
-				  shipping.getGroups().add(gsuperadmin);
-				  shipping.getGroups().add(gadmin);
-				  shipping.getGroups().add(gstore);
-				  
-				  permissionService.create(shipping);
-				
-				
-				
-				  userDetailsService.createDefaultAdmin();
-				  
-				  
-				  //load customer groups and permissions
-				  Group gcustomer = new Group("CUSTOMER");
-				  gcustomer.setGroupType(GroupType.CUSTOMER);
-				  
-				  groupService.create(gcustomer);
-				  
-				  Permission gcustomerpermission = new Permission("AUTH_CUSTOMER");
-				  gcustomerpermission.getGroups().add(gcustomer);
-				  permissionService.create(gcustomerpermission);
-				  
-				  MerchantConfig config = new MerchantConfig();
+                        Permission permission = new Permission(shopPermission.getType());
+
+                        for(String groupName: shopPermission.getShopGroup().getName()){
+                            if(groupMap.get(groupName) == null){
+                                Group group = new Group(groupName);
+                                group.setGroupType(GroupType.ADMIN);
+                                groupService.create(group);
+                                groupMap.put(groupName,group);
+                                permission.getGroups().add(group);
+                            }
+                            else{
+                                permission.getGroups().add(groupMap.get(groupName)) ;
+                            }
+                            permissionService.create( permission);
+                        }
+
+
+                    }
+                }
+
+                  userDetailsService.createDefaultAdmin();
+                  MerchantConfig config = new MerchantConfig();
 				  config.setAllowPurchaseItems(true);
 				  config.setDisplayAddToCartOnFeaturedItems(true);
 				  
@@ -220,28 +149,28 @@ public class InitializationLoader {
 		String loadTestData = configuration.getProperty(ApplicationConstants.POPULATE_TEST_DATA);
 		boolean loadData =  !StringUtils.isBlank(loadTestData) && loadTestData.equals(SystemConstants.CONFIG_VALUE_TRUE);
 
-		
+
 		if(loadData) {
-			
+
 			SystemConfiguration configuration = systemConfigurationService.getByKey(ApplicationConstants.TEST_DATA_LOADED);
-		
+
 			if(configuration!=null) {
 					if(configuration.getKey().equals(ApplicationConstants.TEST_DATA_LOADED)) {
 						if(configuration.getValue().equals(SystemConstants.CONFIG_VALUE_TRUE)) {
-							return;		
+							return;
 						}
-					}		
+					}
 			}
-			
+
 			initData.initInitialData();
-			
+
 			configuration = new SystemConfiguration();
 			configuration.getAuditSection().setModifiedBy(SystemConstants.SYSTEM_USER);
 			configuration.setKey(ApplicationConstants.TEST_DATA_LOADED);
 			configuration.setValue(SystemConstants.CONFIG_VALUE_TRUE);
 			systemConfigurationService.create(configuration);
-			
-			
+
+
 		}
 	}
 
diff --git a/sm-shop/src/main/resources/permission/permission.json b/sm-shop/src/main/resources/permission/permission.json
new file mode 100644
index 0000000..aab6a31
--- /dev/null
+++ b/sm-shop/src/main/resources/permission/permission.json
@@ -0,0 +1,122 @@
+{
+    "permission": [
+      {
+        "type": "STORE_ADMIN",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN"
+          ]
+        }
+      },
+      {
+        "type": "SUPERADMIN",
+        "group": { "name": ["SUPERADMIN"] }
+      },
+      {
+        "type": "ADMIN",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN"
+          ]
+        }
+      },
+      {
+        "type": "AUTH",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN",
+            "ADMIN_CATALOGUE",
+            "ADMIN_STORE",
+            "ADMIN_ORDER"
+          ]
+        }
+      },
+      {
+        "type": "PRODUCTS",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN",
+            "ADMIN_CATALOGUE"
+          ]
+        }
+      },
+      {
+        "type": "ORDER",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN",
+            "ADMIN_ORDER"
+          ]
+        }
+      },
+      {
+        "type": "CONTENT",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN",
+            "ADMIN_CONTENT"
+          ]
+        }
+      },
+      {
+        "type": "STORE",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN",
+            "ADMIN_STORE"
+          ]
+        }
+      },
+      {
+        "type": "TAX",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN",
+            "ADMIN_STORE"
+          ]
+        }
+      },
+      {
+        "type": "PAYMENT",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN",
+            "ADMIN_STORE"
+          ]
+        }
+      },
+      {
+        "type": "CUSTOMER",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN",
+            "ADMIN_STORE"
+          ]
+        }
+      },
+      {
+        "type": "SHIPPING",
+        "group": {
+          "name": [
+            "SUPERADMIN",
+            "ADMIN",
+            "ADMIN_STORE"
+          ]
+        }
+      },
+      {
+        "type": "AUTH_CUSTOMER",
+        "group": { "name": ["CUSTOMER" ]}
+      }
+    ]
+  }