package org.sakaiproject.site.tool.helper.managegroupsectionrole.rsf; import java.util.HashMap; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.site.api.Group; import org.sakaiproject.site.tool.helper.managegroupsectionrole.impl.SiteManageGroupSectionRoleHandler; 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.UICommand; import uk.org.ponder.rsf.components.UIContainer; import uk.org.ponder.rsf.components.UIForm; 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.UIDeletionBinding; import uk.org.ponder.rsf.components.decorators.UICSSDecorator; import uk.org.ponder.rsf.components.decorators.UILabelTargetDecorator; import uk.org.ponder.rsf.flow.ARIResult; import uk.org.ponder.rsf.flow.ActionResultInterceptor; 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; public class CreateJoinableGroupsProducer implements ViewComponentProducer, ActionResultInterceptor, ViewParamsReporter{ public static final String VIEW_ID = "CreateJoinableGroups"; private static Log M_log = LogFactory.getLog(CreateJoinableGroupsProducer.class); public SiteManageGroupSectionRoleHandler handler; public MessageLocator messageLocator; private TargettedMessageList tml; public void setTargettedMessageList(TargettedMessageList tml) { this.tml = tml; } @Override public void fillComponents(UIContainer tofill, ViewParameters viewparams, ComponentChecker checker) { String joinableSetId = ((CreateJoinableGroupViewParameters) viewparams).id; boolean edit = joinableSetId != null && !"".equals(joinableSetId); if(edit){ handler.joinableSetName = joinableSetId; handler.joinableSetNameOrig = joinableSetId; } UIForm groupForm = UIForm.make(tofill, "groups-form"); String title = null; if(edit){ title = messageLocator.getMessage("group.joinable.title.edit"); }else{ title = messageLocator.getMessage("group.joinable.title"); } UIOutput.make(groupForm, "prompt", title); UIOutput.make(groupForm, "emptyGroupTitleAlert", messageLocator.getMessage("editgroup.titlemissing")); UIOutput.make(groupForm, "instructions", messageLocator.getMessage("group.joinable.desc")); UILabelTargetDecorator.targetLabel(UIMessage.make(groupForm, "group-title-group", "group.joinable.setname"), UIInput.make(groupForm, "groupTitle-group", "SiteManageGroupSectionRoleHandler.joinableSetName")); UIInput.make(groupForm, "groupTitle-group-orig", "SiteManageGroupSectionRoleHandler.joinableSetNameOrig"); if(edit){ UIOutput.make(groupForm, "current-groups-title", messageLocator.getMessage("group.joinable.currentgroups")); int i = 0; for(Group group : handler.site.getGroups()){ String joinableSet = group.getProperties().getProperty(group.GROUP_PROP_JOINABLE_SET); if(joinableSet != null && joinableSet.equals(joinableSetId)){ UIBranchContainer currentGroupsRow = UIBranchContainer.make(tofill,"current-groups-row:", Integer.valueOf(i).toString()); UIOutput.make(currentGroupsRow, "current-group", group.getTitle()); i++; } } } Map<String,String> cssMap = new HashMap<String,String>(); cssMap.put("background","#FFFFCC"); if(edit){ //Additional Row UIBranchContainer additionalRow = UIBranchContainer.make(groupForm,"additional-title-row:"); additionalRow.decorate(new UICSSDecorator(cssMap)); UIOutput.make(additionalRow, "additional-title", messageLocator.getMessage("group.joinable.additionalGroups")); } //Num of Groups Row UIBranchContainer groupsRow = UIBranchContainer.make(groupForm,"num-groups-row:"); if(edit){ groupsRow.decorate(new UICSSDecorator(cssMap)); } UILabelTargetDecorator.targetLabel(UIMessage.make(groupsRow, "group-unit", "group.joinable.numOfGroups"), UIInput.make(groupsRow, "num-groups", "SiteManageGroupSectionRoleHandler.joinableSetNumOfGroups")); //Max members Row: UIBranchContainer maxRow = UIBranchContainer.make(groupForm,"max-members-row:"); if(edit){ maxRow.decorate(new UICSSDecorator(cssMap)); } UILabelTargetDecorator.targetLabel(UIMessage.make(maxRow, "group-max-members", "group.joinable.maxMembers"), UIInput.make(maxRow, "num-max-members", "SiteManageGroupSectionRoleHandler.joinableSetNumOfMembers")); //allow preview row: UIBranchContainer allowViewRow = UIBranchContainer.make(groupForm,"allowview-row:"); if(edit){ allowViewRow.decorate(new UICSSDecorator(cssMap)); } UIBoundBoolean checkbox = UIBoundBoolean.make(allowViewRow, "allowViewMembership", "#{SiteManageGroupSectionRoleHandler.allowViewMembership}"); UILabelTargetDecorator.targetLabel(UIMessage.make(allowViewRow, "allowViewMembership-label", "group.joinable.allowPreview"), checkbox); if(edit){ //Generate Button UIBranchContainer generateRow = UIBranchContainer.make(groupForm,"generate-row:"); generateRow.decorate(new UICSSDecorator(cssMap)); UICommand.make(generateRow, "gererate", messageLocator.getMessage("group.joinable.generate"), "#{SiteManageGroupSectionRoleHandler.processGenerateJoinableSet}"); } //Save/Cancel String saveMethodBinding = null; if(edit){ saveMethodBinding = "#{SiteManageGroupSectionRoleHandler.processChangeJoinableSetName}"; }else{ saveMethodBinding = "#{SiteManageGroupSectionRoleHandler.processCreateJoinableSet}"; } UICommand.make(groupForm, "save", messageLocator.getMessage("update"), saveMethodBinding); UICommand cancel = UICommand.make(groupForm, "cancel", messageLocator.getMessage("cancel"), "#{SiteManageGroupSectionRoleHandler.processBack}"); cancel.parameters.add(new UIDeletionBinding("#{destroyScope.resultScope}")); if(edit){ //Delete Set button: UICommand.make(groupForm, "delete", messageLocator.getMessage("group.joinable.delete"), "#{SiteManageGroupSectionRoleHandler.processDeleteJoinableSet}"); } //process any messages tml = handler.messages; if (tml.size() > 0) { for (int i = 0; i < tml.size(); i ++ ) { UIBranchContainer errorRow = UIBranchContainer.make(groupForm,"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()); } UIOutput.make(errorRow,"error",outString); } } } @Override public String getViewID() { return VIEW_ID; } @Override public ViewParameters getViewParameters() { CreateJoinableGroupViewParameters params = new CreateJoinableGroupViewParameters(); params.id = null; return params; } @Override public void interceptActionResult(ARIResult result, ViewParameters incoming, Object actionReturn) { if ("success".equals(actionReturn) || "cancel".equals(actionReturn)) { result.resultingView = new SimpleViewParameters(GroupListProducer.VIEW_ID); } } }