package org.sakaiproject.site.tool.helper.managegroupsectionrole.rsf;
import java.util.Collection;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.authz.api.Member;
import org.sakaiproject.authz.api.Role;
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.exception.PermissionException;
import org.sakaiproject.site.api.Group;
import org.sakaiproject.site.api.SiteService;
import org.sakaiproject.site.tool.helper.managegroupsectionrole.impl.SiteManageGroupSectionRoleHandler;
import org.sakaiproject.site.util.Participant;
import org.sakaiproject.site.util.SiteComparator;
import org.sakaiproject.site.util.SiteConstants;
import org.sakaiproject.util.SortedIterator;
import org.sakaiproject.util.SortedIterator;
import org.sakaiproject.user.api.User;
import org.sakaiproject.user.api.UserDirectoryService;
import uk.ac.cam.caret.sakai.rsf.producers.FrameAdjustingProducer;
import uk.org.ponder.messageutil.MessageLocator;
import uk.org.ponder.messageutil.TargettedMessageList;
import uk.org.ponder.rsf.components.UIBoundBoolean;
import uk.org.ponder.rsf.components.UIBranchContainer;
import uk.org.ponder.rsf.components.UIContainer;
import uk.org.ponder.rsf.components.UIInput;
import uk.org.ponder.rsf.components.UIMessage;
import uk.org.ponder.rsf.components.UIOutput;
import uk.org.ponder.rsf.components.UICommand;
import uk.org.ponder.rsf.components.UIForm;
import uk.org.ponder.rsf.components.UISelect;
import uk.org.ponder.rsf.components.UISelectChoice;
import uk.org.ponder.rsf.components.decorators.UIFreeAttributeDecorator;
import uk.org.ponder.rsf.components.decorators.UILabelTargetDecorator;
import uk.org.ponder.rsf.components.decorators.UITooltipDecorator;
import uk.org.ponder.rsf.flow.ARIResult;
import uk.org.ponder.rsf.flow.ActionResultInterceptor;
import uk.org.ponder.rsf.flow.jsfnav.NavigationCase;
import uk.org.ponder.rsf.view.ComponentChecker;
import uk.org.ponder.rsf.view.ViewComponentProducer;
import uk.org.ponder.rsf.viewstate.SimpleViewParameters;
import uk.org.ponder.rsf.viewstate.ViewParameters;
import uk.org.ponder.rsf.viewstate.ViewParamsReporter;
import uk.org.ponder.stringutil.StringList;
/**
*
* @author
*
*/
public class GroupAutoCreateProducer implements ViewComponentProducer, ActionResultInterceptor, ViewParamsReporter {
/** Our log (commons). */
private static Log M_log = LogFactory.getLog(GroupAutoCreateProducer.class);
public SiteManageGroupSectionRoleHandler handler;
public static final String VIEW_ID = "GroupAutoCreate";
public MessageLocator messageLocator;
public FrameAdjustingProducer frameAdjustingProducer;
public SiteService siteService = null;
public String getViewID() {
return VIEW_ID;
}
private TargettedMessageList tml;
public void setTargettedMessageList(TargettedMessageList tml) {
this.tml = tml;
}
public UserDirectoryService userDirectoryService;
public void setUserDirectoryService(UserDirectoryService userDirectoryService)
{
this.userDirectoryService = userDirectoryService;
}
public void fillComponents(UIContainer arg0, ViewParameters arg1, ComponentChecker arg2) {
String state="";
// id for group
String groupId = null;
// title for group
String groupTitle = null;
// description for group
String groupDescription = null;
// member list for group
Collection<Member> groupMembers = new Vector<Member>();
UIForm groupForm = UIForm.make(arg0, "groups-form");
String id = ((GroupEditViewParameters) arg1).id;
if (id != null)
{
try
{
Group g = siteService.findGroup(id);
groupId = g.getId();
groupTitle = g.getTitle();
groupDescription = g.getDescription();
groupMembers = g.getMembers();
}
catch (Exception e)
{
M_log.debug(this + "fillComponents: cannot get group id=" + id);
}
}
else
{
handler.resetParams();
}
UIOutput.make(groupForm, "prompt", messageLocator.getMessage("group.autocreate.newgroups"));
UIOutput.make(groupForm, "instructions_roster", messageLocator.getMessage("group.autocreate.instruction_roster"));
UIOutput.make(groupForm, "instructions_role", messageLocator.getMessage("group.autocreate.instruction_role"));
UIOutput.make(groupForm, "group_label", messageLocator.getMessage("group.title"));
UIInput titleTextIn = UIInput.make(groupForm, "group_title", "#{SiteManageGroupSectionRoleHandler.title}",groupTitle);
// for the site rosters list
List<String> siteRosters= handler.getSiteRosters(null);
if (siteRosters != null && siteRosters.size() > 0)
{
UIBranchContainer rosterOptions = UIBranchContainer.make(groupForm, "roster_options:");
UIMessage.make(arg0, "roster-select-header", "table.roster_select");
UIMessage.make(arg0, "roster-title-header", "table.roster_title");
UIMessage.make(arg0, "instruction-roster", "instruction.roster");
for (String roster: siteRosters) {
UIBranchContainer tablerow = UIBranchContainer.make(rosterOptions, "roster-row:");
UIBoundBoolean.make(tablerow, "roster-checkbox", "#{SiteManageGroupSectionRoleHandler.selectedRosters." + roster + "}");
UIOutput.make(tablerow, "roster-title", roster);
// check whether there is already a group with this roster
if (handler.existRosterGroup(roster))
{
UIMessage.make(tablerow, "exist-group-roster", "exist.group.roster");
}
}
}
// for the site roles list
List<Role> siteRoles= handler.getSiteRoles(null);
if (siteRoles != null && siteRoles.size() > 0)
{
UIBranchContainer roleOptions = UIBranchContainer.make(groupForm, "role_options:");
UIMessage.make(arg0, "role-select-header", "table.role_select");
UIMessage.make(arg0, "role-title-header", "table.role_title");
UIMessage.make(arg0, "instruction-role", "instruction.role");
for (Role role: siteRoles) {
UIBranchContainer tablerow = UIBranchContainer.make(roleOptions, "role-row:");
UIBoundBoolean.make(tablerow, "role-checkbox", "#{SiteManageGroupSectionRoleHandler.selectedRoles." + role.getId() + "}");
UIOutput.make(tablerow, "role-title", role.getId());
// check whether there is already a group with this role
if (handler.existRoleGroup(role.getId()))
{
UIMessage.make(tablerow, "exist-group-role", "exist.group.role");
}
}
}
UICommand.make(groupForm, "save", messageLocator.getMessage("update"), "#{SiteManageGroupSectionRoleHandler.processAutoCreateGroup}");
UICommand.make(groupForm, "cancel", messageLocator.getMessage("cancel"), "#{SiteManageGroupSectionRoleHandler.processBack}");
int i = 0;
//process any messages
tml = handler.messages;
if (tml.size() > 0) {
for (i = 0; i < tml.size(); i ++ ) {
UIBranchContainer errorRow = UIBranchContainer.make(arg0,"error-row:", Integer.valueOf(i).toString());
String outString = "";
if (tml.messageAt(i).args != null ) {
outString = messageLocator.getMessage(tml.messageAt(i).acquireMessageCode(),tml.messageAt(i).args[0]);
} else {
outString = messageLocator.getMessage(tml.messageAt(i).acquireMessageCode());
}
UIMessage.make(errorRow,"error",outString);
}
}
frameAdjustingProducer.fillComponents(arg0, "resize", "resetFrame");
}
public ViewParameters getViewParameters() {
GroupEditViewParameters params = new GroupEditViewParameters();
params.id = null;
return params;
}
// new hotness
public void interceptActionResult(ARIResult result, ViewParameters incoming, Object actionReturn) {
if ("done".equals(actionReturn) || "cancel".equals(actionReturn)) {
result.resultingView = new SimpleViewParameters(GroupListProducer.VIEW_ID);
}
}
}