package org.akaza.openclinica.control.submit;
import org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean;
import org.akaza.openclinica.bean.managestudy.StudyGroupClassBean;
import org.akaza.openclinica.control.DefaultToolbar;
import org.akaza.openclinica.i18n.util.ResourceBundleProvider;
import org.jmesa.core.CoreContext;
import org.jmesa.view.html.HtmlBuilder;
import org.jmesa.view.html.toolbar.AbstractItem;
import org.jmesa.view.html.toolbar.AbstractItemRenderer;
import org.jmesa.view.html.toolbar.ClearItemRenderer;
import org.jmesa.view.html.toolbar.ToolbarItem;
import org.jmesa.view.html.toolbar.ToolbarItemRenderer;
import org.jmesa.view.html.toolbar.ToolbarItemType;
import java.util.ArrayList;
import java.util.ResourceBundle;
public class ListStudySubjectTableToolbar extends DefaultToolbar {
private final ArrayList<StudyEventDefinitionBean> studyEventDefinitions;
private final ArrayList<StudyGroupClassBean> studyGroupClasses;
private final boolean addSubjectLinkShow;
private ResourceBundle reswords = ResourceBundleProvider.getWordsBundle();
public ListStudySubjectTableToolbar(ArrayList<StudyEventDefinitionBean> studyEventDefinitions, ArrayList<StudyGroupClassBean> studyGroupClasses,
boolean addSubjectLinkShow, boolean showMoreLink) {
super();
this.studyEventDefinitions = studyEventDefinitions;
this.studyGroupClasses = studyGroupClasses;
this.addSubjectLinkShow = addSubjectLinkShow;
this.showMoreLink = showMoreLink;
}
@Override
protected void addToolbarItems() {
addToolbarItem(ToolbarItemType.SEPARATOR);
addToolbarItem(createCustomItem(new ShowMoreItem()));
addToolbarItem(ToolbarItemType.SEPARATOR);
addToolbarItem(createCustomItem(new StudyEventDefinitionDropDownItem()));
addToolbarItem(createCustomItem(new NewHiddenItem()));
if (addSubjectLinkShow) {
addToolbarItem(createAddSubjectItem());
}
}
private ToolbarItem createCustomItem(AbstractItem item) {
ToolbarItemRenderer renderer = new CustomItemRenderer(item, getCoreContext());
renderer.setOnInvokeAction("onInvokeAction");
item.setToolbarItemRenderer(renderer);
return item;
}
public ToolbarItem createAddSubjectItem() {
AddNewSubjectItem item = new AddNewSubjectItem();
item.setCode(ToolbarItemType.CLEAR_ITEM.toCode());
ToolbarItemRenderer renderer = new ClearItemRenderer(item, getCoreContext());
renderer.setOnInvokeAction("onInvokeAction");
item.setToolbarItemRenderer(renderer);
return item;
}
private class ShowMoreItem extends AbstractItem {
@Override
public String disabled() {
// TODO Auto-generated method stub
return null;
}
@Override
public String enabled() {
HtmlBuilder html = new HtmlBuilder();
if(showMoreLink){
html.a().id("showMore").href("javascript:hideCols('findSubjects',[" + getIndexes() + "],true);").close();
html.div().close().nbsp().append(reswords.getString("show_more")).nbsp().divEnd().aEnd();
html.a().id("hide").style("display: none;").href("javascript:hideCols('findSubjects',[" + getIndexes() + "],false);").close();
html.div().close().nbsp().append(reswords.getString("hide")).nbsp().divEnd().aEnd();
html.script().type("text/javascript").close().append(
"$j = jQuery.noConflict(); $j(document).ready(function(){ " + "hideCols('findSubjects',[" + getIndexes() + "],false);});").scriptEnd();
}else{
html.a().id("hide").href("javascript:hideCols('findSubjects',[" + getIndexes() + "],false);").close();
html.div().close().nbsp().append(reswords.getString("hide")).nbsp().divEnd().aEnd();
html.a().id("showMore").style("display: none;").href("javascript:hideCols('findSubjects',[" + getIndexes() + "],true);").close();
html.div().close().nbsp().append(reswords.getString("show_more")).nbsp().divEnd().aEnd();
}
return html.toString();
}
/**
* @return Dynamically generate the indexes of studyGroupClasses. It
* starts from 4 because there are 4 columns before study group
* columns that will require to be hidden.
* @see ListStudySubjectTableFactory#configureColumns(org.jmesa.facade.TableFacade,
* java.util.Locale)
*/
String getIndexes() {
String result = "1,2,3,4,5";
for (int i = 0; i < studyGroupClasses.size(); i++) {
result += "," + (5 + i + 1);
}
return result;
}
}
private class StudyEventDefinitionDropDownItem extends AbstractItem {
@Override
public String disabled() {
// TODO Auto-generated method stub
return null;
}
@Override
public String enabled() {
String js =
"var selectedValue = document.getElementById('sedDropDown').options[document.getElementById('sedDropDown').selectedIndex].value; "
+ " if (selectedValue != null ) { " + "window.location='ListEventsForSubjects?module=submit&defId=' + selectedValue;" + " } ";
HtmlBuilder html = new HtmlBuilder();
html.select().id("sedDropDown").onchange(js).close();
html.option().close().append(reswords.getString("select_an_event")).optionEnd();
for (StudyEventDefinitionBean studyEventDefinition : studyEventDefinitions) {
html.option().value(String.valueOf(studyEventDefinition.getId())).close().append(studyEventDefinition.getName()).optionEnd();
}
html.selectEnd();
return html.toString();
}
}
private class AddNewSubjectItem extends AbstractItem {
@Override
public String disabled() {
// TODO Auto-generated method stub
return null;
}
@Override
public String enabled() {
HtmlBuilder html = new HtmlBuilder();
//@pgawade 25-June-2012: fix for issue 14427
//html.a().href("#").id("addSubject");// onclick(
html.a().href("javascript:;").id("addSubject");
// "initmb();sm('box', 730,100);"
// );
html.quote();
html.quote().close();
html.nbsp().append(reswords.getString("add_new_subject")).nbsp().aEnd();
return html.toString();
}
}
private static class CustomItemRenderer extends AbstractItemRenderer {
public CustomItemRenderer(ToolbarItem item, CoreContext coreContext) {
setToolbarItem(item);
setCoreContext(coreContext);
}
public String render() {
ToolbarItem item = getToolbarItem();
return item.enabled();
}
}
}