package org.exoplatform.forum.extras.injection.poll;
import java.util.HashMap;
import java.util.Random;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.forum.extras.injection.utils.LoremIpsum4J;
import org.exoplatform.poll.service.Poll;
import org.exoplatform.poll.service.PollNodeTypes;
import org.exoplatform.poll.service.Utils;
public class PollInjector extends AbstractPollInjector {
private static final String PARENT_PATH_GROUP = "/" + PollNodeTypes.APPLICATION_DATA + "/" + PollNodeTypes.EXO_POLLS;
private static final String POLL_PREFIX = "pollPrefix";
private static final String POLL_TYPE = "pollType";
private static final String GROUP_PREFIX = "groupPrefix";
private static final String NUMBER = "number";
private static final String TO_GROUP = "toGroup";
private boolean isPublic = true;
private LoremIpsum4J ipsum4j;
public PollInjector() {
super();
ipsum4j = new LoremIpsum4J();
}
@Override
public void inject(HashMap<String, String> params) throws Exception {
int number = getIntParam(params, NUMBER);
//private | public
String pollType = params.get(POLL_TYPE);
String pollPrefix = params.get(POLL_PREFIX);
String groupPrefix = params.get(GROUP_PREFIX);
String toGroup = params.get(TO_GROUP);
//
if (isPublic = "public".equals(pollType)) {
init(null, pollPrefix, null, null, null);
//
String parentPath = ExoContainerContext.getCurrentContainer().getContext().getName();
if (Utils.isEmpty(parentPath)) {
parentPath = "portal";
}
parentPath += "/" + PollNodeTypes.POLLS;
injectPoll("", parentPath, number);
} else {
if (Utils.isEmpty(toGroup)) {
getLog().info("Private poll: groupPrefix or toGroup value is wrong! Please set it exactly with 'groupPrefix' or 'toGroup' value. Aborting injection ...");
return;
}
init(groupPrefix, null, pollPrefix, toGroup, null);
//
String injectToGroupName = groupBase + toGroup;
String parentPath = injectToGroupName + PARENT_PATH_GROUP;
injectPoll(injectToGroupName, parentPath, number);
}
}
private void injectPoll(String toGroupName, String parentPath, int number) throws Exception {
String[] options = createOption(5);
String[] votes = {"0.0", "0.0", "0.0", "0.0", "0.0"};
//
for (int i = 0; i < number; i++) {
Poll poll = new Poll();
poll.setParentPath(parentPath);
poll.setQuestion(isPublic ? pollPublicName() : pollPrivateName());
poll.setOption(options);
poll.setVote(votes);
poll.setOwner("root");
poll.setIsMultiCheck(new Random().nextBoolean());
pollService.savePoll(poll, true, false);
//
if (isPublic) {
getLog().info("Public poll '" + poll.getQuestion() + "' generated.");
} else {
getLog().info("Private poll '" + poll.getQuestion() + "' generated into '" + toGroupName + "' group");
}
//
if (isPublic) {
pollPublicNumber++;
} else {
pollPrivateNumber++;
}
}
}
private String[] createOption(int size) {
String[] options = new String[size];
for (int i = 0; i < size; i++) {
options[i] = (isPublic ? pollPublicName() : pollPrivateName()) + "_option" + (i+1) + " " + ipsum4j.getWords(10);
}
return options;
}
}