package org.exoplatform.platform.organization.injector;
import java.util.List;
import org.exoplatform.container.component.BaseComponentPlugin;
import org.exoplatform.container.xml.InitParams;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.organization.Group;
import org.exoplatform.services.organization.MembershipHandler;
import org.exoplatform.services.organization.MembershipType;
import org.exoplatform.services.organization.OrganizationConfig;
import org.exoplatform.services.organization.OrganizationService;
import org.exoplatform.services.organization.User;
public class DataPlugin extends BaseComponentPlugin {
private static final Log LOG = ExoLogger.getLogger(DataPlugin.class);
private OrganizationService organizationService;
private OrganizationConfig config;
public DataPlugin(OrganizationService organizationService, InitParams params) throws Exception {
config = (OrganizationConfig) params.getObjectParamValues(OrganizationConfig.class).get(0);
this.organizationService = organizationService;
}
public OrganizationConfig getConfig() {
return this.config;
}
public void init() throws Exception {
LOG.info("=======> Initialize the organization data");
createGroups();
createMembershipTypes();
createUsers();
LOG.info("<=======");
}
private void createGroups() throws Exception {
LOG.info(" Init Group Data injection");
@SuppressWarnings("unchecked")
List<OrganizationConfig.Group> groups = (List<OrganizationConfig.Group>)config.getGroup();
if (groups == null || groups.isEmpty()) {
return;
}
for (OrganizationConfig.Group data : groups) {
String groupId = null;
String parentId = data.getParentId();
if (parentId == null || parentId.length() == 0)
groupId = "/" + data.getName();
else
groupId = data.getParentId() + "/" + data.getName();
if (organizationService.getGroupHandler().findGroupById(groupId) == null) {
LOG.info(" Creating Group " + groupId);
Group group = organizationService.getGroupHandler().createGroupInstance();
group.setGroupName(data.getName());
group.setDescription(data.getDescription());
group.setLabel(data.getLabel());
if (parentId == null || parentId.length() == 0) {
organizationService.getGroupHandler().addChild(null, group, false);
} else {
Group parentGroup = organizationService.getGroupHandler().findGroupById(parentId);
organizationService.getGroupHandler().addChild(parentGroup, group, false);
}
} else {
LOG.info(" Ignoring existing Group " + groupId);
}
}
}
private void createMembershipTypes() throws Exception {
LOG.info(" Init MembershipType Data ijection");
@SuppressWarnings("unchecked")
List<OrganizationConfig.MembershipType> types = (List<OrganizationConfig.MembershipType>)config.getMembershipType();
if (types == null || types.isEmpty()) {
return;
}
for (OrganizationConfig.MembershipType data : types) {
if (organizationService.getMembershipTypeHandler().findMembershipType(data.getType()) == null) {
LOG.info(" Creating MembershipType " + data.getType());
MembershipType type = organizationService.getMembershipTypeHandler().createMembershipTypeInstance();
type.setName(data.getType());
type.setDescription(data.getDescription());
organizationService.getMembershipTypeHandler().createMembershipType(type, false);
} else {
LOG.info(" Ignoring existing MembershipType " + data.getType());
}
}
}
@SuppressWarnings({ "unchecked" })
private void createUsers() throws Exception {
LOG.info(" Init User Data injection");
List<OrganizationConfig.User> users = (List<OrganizationConfig.User>)config.getUser();
if (users == null || users.isEmpty()) {
return;
}
MembershipHandler mhandler = organizationService.getMembershipHandler();
for (int i = 0; i < users.size(); i++) {
OrganizationConfig.User data = (OrganizationConfig.User) users.get(i);
User user = organizationService.getUserHandler().createUserInstance(data.getUserName());
user.setPassword(data.getPassword());
user.setFirstName(data.getFirstName());
user.setLastName(data.getLastName());
user.setEmail(data.getEmail());
if (organizationService.getUserHandler().findUserByName(data.getUserName()) == null) {
LOG.info(" Creating user " + data.getUserName());
organizationService.getUserHandler().createUser(user, false);
} else {
LOG.info(" Ignoring existing User " + data.getUserName());
}
String groups = data.getGroups();
if (groups != null && !groups.isEmpty()) {
String[] entry = groups.split(",");
for (int j = 0; j < entry.length; j++) {
String[] temp = entry[j].trim().split(":");
String membership = temp[0];
String groupId = temp[1];
if (mhandler.findMembershipByUserGroupAndType(data.getUserName(), groupId, membership) == null) {
Group group = organizationService.getGroupHandler().findGroupById(groupId);
MembershipType mt = organizationService.getMembershipTypeHandler().createMembershipTypeInstance();
mt.setName(membership);
mhandler.linkMembership(user, group, mt, false);
LOG.info(" Creating membership " + data.getUserName() + ", " + groupId + ", " + membership);
} else {
LOG.info(" Ignoring existing membership " + data.getUserName() + ", " + groupId + ", " + membership);
}
}
}
}
}
}