package com.smartitengineering.user.initialization; import com.smartitengineering.user.domain.BasicIdentity; import com.smartitengineering.user.domain.GlobalRole; import com.smartitengineering.user.domain.Name; import com.smartitengineering.user.domain.Organization; import com.smartitengineering.user.domain.Person; import com.smartitengineering.user.domain.Privilege; import com.smartitengineering.user.domain.Role; import com.smartitengineering.user.domain.SecuredObject; import com.smartitengineering.user.domain.User; import com.smartitengineering.user.domain.UserPerson; import com.smartitengineering.user.parser.SmartUserStrings; import com.smartitengineering.user.service.OrganizationService; import com.smartitengineering.user.service.PrivilegeService; import com.smartitengineering.user.service.RoleService; import com.smartitengineering.user.service.SecuredObjectService; import com.smartitengineering.user.service.UserPersonService; import com.smartitengineering.user.service.UserService; import com.smartitengineering.user.service.Services; import java.util.HashSet; import java.util.Set; public class InitialUserFactory { private final String ORG_NAME = SmartUserStrings.FIRST_ORGANIZATION_NAME; private final String ORG_SHORTNAME = SmartUserStrings.FIRST_ORGANIZATION_SHORT_NAME; private final String ORG_SECURED_OBJECT_NAME = "Smart User Organization"; private final String SUPER_ADMIN_USERNAME = SmartUserStrings.SUPER_ADMIN_USERNAME; private final String SUPER_ADMIN_PASSWORD = SmartUserStrings.SUPER_ADMIN_PASSWORD; private final String ORGS_OID = SmartUserStrings.ORGANIZATIONS_URL; private final String ORGS_OID_NAME = "smart-user-organizations"; private final String USERS_OID_NAME = "smart-user-users"; private final String USERS_OID = SmartUserStrings.USERS_URL; private final String SECURED_OBJECTS_OID = SmartUserStrings.SECURED_OBJECTS_URL; private final String SECURED_OBJECTS_OID_NAME = "smart-user-secured-objects"; private final String PRIVILEGES_OID = SmartUserStrings.PRIVILEGES_URL; private final String PRIVILEGES_OID_NAME = "smart-user-privileges"; private final Integer PRIVILEGE_PERMISSION_MASK = 31; private final String USER_OID_NAME = "super-admin-user-secured-object"; private final String USER_UNIQUE_FRAG = SmartUserStrings.USER_UNIQUE_URL_FRAGMENT; private final String ORG_UNIQUE_FRAG = SmartUserStrings.ORGANIZATION_UNIQUE_URL_FRAGMENT; public UserPersonService getUserPersonService() { return Services.getInstance().getUserPersonService(); } public RoleService getRoleService() { return Services.getInstance().getRoleService(); } public PrivilegeService getPrivilegeService() { return Services.getInstance().getPrivilegeService(); } public SecuredObjectService getSecuredObjectService() { return Services.getInstance().getSecuredObjectService(); } public UserService getUserService() { return Services.getInstance().getUserService(); } public OrganizationService getOrganizationService() { return Services.getInstance().getOrganizationService(); } public void initializeInformation() { if (getOrganizationService().getAllOrganization().isEmpty()) { initialize(); } } public void initialize() { intializeRoles(); Organization organization = new Organization(ORG_NAME, ORG_SHORTNAME); getOrganizationService().save(organization); organization = getOrganizationService().getOrganizationByUniqueShortName(ORG_SHORTNAME); Role role = new Role(); role = getRoleService().getRoleByName(GlobalRole.ROLE_ADMIN.name()); Set<Role> roles = new HashSet<Role>(); roles.add(role); SecuredObject securedObjectOrganizations = new SecuredObject(); securedObjectOrganizations.setName(ORGS_OID_NAME); securedObjectOrganizations.setObjectID(ORGS_OID); //This objectId is actually the http url of organizations list securedObjectOrganizations.setOrganization(organization); securedObjectOrganizations.setParentObjectID(null); getSecuredObjectService().save(securedObjectOrganizations); securedObjectOrganizations = getSecuredObjectService().getByOrganizationAndObjectID( organization.getUniqueShortName(), securedObjectOrganizations.getObjectID()); String orgUri = ORGS_OID + ORG_UNIQUE_FRAG + "/" + organization.getUniqueShortName(); SecuredObject securedObject; securedObject = getSecuredObjectService().getByOrganizationAndObjectID(organization.getUniqueShortName(), orgUri); securedObject.setParentObjectID(securedObjectOrganizations.getObjectID()); getSecuredObjectService().update(securedObject); Privilege privilege = getPrivilegeService().getPrivilegeByOrganizationAndPrivilegeName(organization.getUniqueShortName(), "smart-user-admin"); privilege.setSecuredObject(securedObjectOrganizations); getPrivilegeService().update(privilege); privilege = getPrivilegeService().getPrivilegeByOrganizationAndPrivilegeName(organization.getUniqueShortName(), "smart-user-admin"); Set<Privilege> privileges = new HashSet(); privileges.add(privilege); User user = new User(); user.setOrganization(organization); user.setUsername(SUPER_ADMIN_USERNAME); user.setPassword(SUPER_ADMIN_PASSWORD); user.setPrivileges(privileges); user.setRoles(roles); Person person = new Person(); Name name = new Name(); name.setFirstName("Super"); name.setLastName("Admin"); BasicIdentity self = new BasicIdentity(); self.setName(name); self.setNationalID(""); person.setSelf(self); person.setPrimaryEmail("info@smart-user.com"); UserPerson userPerson = new UserPerson(); userPerson.setPerson(person); userPerson.setUser(user); getUserPersonService().create(userPerson); //userService.save(user); user = getUserService().getUserByOrganizationAndUserName(user.getOrganization().getUniqueShortName(), user. getUsername()); SecuredObject securedObjectUser; securedObjectUser = getSecuredObjectService().getByOrganizationAndObjectID(organization.getUniqueShortName(), orgUri + USER_UNIQUE_FRAG + "/" + user.getUsername()); Privilege privilegeUser = new Privilege(); privilegeUser.setDisplayName("Admin User Profile Privilege"); privilegeUser.setName("super-admin-user-privilege"); privilegeUser.setParentOrganization(organization); privilegeUser.setPermissionMask(PRIVILEGE_PERMISSION_MASK); //permission mask 31 means all privileges are there 11111 privilegeUser.setSecuredObject(securedObjectUser); privilegeUser.setShortDescription( "This privilege contains the authority to change the password and profile of the super admin."); getPrivilegeService().create(privilegeUser); privilegeUser = getPrivilegeService().getPrivilegeByOrganizationAndPrivilegeName(organization.getUniqueShortName(), privilegeUser. getName()); privileges.add(privilegeUser); user.setPrivileges(privileges); getUserService().update(user); } private void intializeRoles() { Role role = new Role(); role.setName(GlobalRole.ROLE_ADMIN.name()); role.setDisplayName("Global Role for Adminstration"); role.setShortDescription( "This is the global role with all the privileges. The user with this role can do anything to the system"); getRoleService().create(role); role.setName(GlobalRole.ROLE_READ.name()); role.setDisplayName("Global Role to Read"); role.setShortDescription( "This is the global role with all reading privileges. The user with this role can read anything from the system"); getRoleService().create(role); role.setName(GlobalRole.ROLE_CREATE.name()); role.setDisplayName("Global Role to Create"); role.setShortDescription( "This is the global role with all creation privileges. The user with this role can create any object in the system"); getRoleService().create(role); role.setName(GlobalRole.ROLE_UPDATE.name()); role.setDisplayName("Global Role for editing"); role.setShortDescription( "This is the global role with all editing privileges. The user with this role can edit any object in the system"); getRoleService().create(role); role.setName(GlobalRole.ROLE_DELETE.name()); role.setDisplayName("Global Role for Deletion"); role.setShortDescription( "This is the global role with all deletion privileges. The user with this role can delete anything from the system"); getRoleService().create(role); } }