package org.akaza.openclinica.control.submit; import static java.util.Arrays.sort; import java.util.Comparator; import java.util.Map; import java.util.ResourceBundle; import org.akaza.openclinica.control.DefaultToolbar; import org.akaza.openclinica.i18n.util.ResourceBundleProvider; import org.jmesa.core.CoreContext; import org.jmesa.limit.Filter; import org.jmesa.limit.FilterSet; import org.jmesa.limit.Sort; import org.jmesa.limit.SortSet; 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; public class ListNotesTableToolbar extends DefaultToolbar { private ResourceBundle reswords = ResourceBundleProvider.getWordsBundle(); private String module; private int resolutionStatus; private int discNoteType; private boolean studyHasDiscNotes; private ResourceBundle resword; public ListNotesTableToolbar(boolean showMoreLink) { super(); this.showMoreLink = showMoreLink; } private FilterSet filterSet; private SortSet sortSet; public void setFilterSet(FilterSet filterSet) { this.filterSet = filterSet; } public void setSortSet(SortSet sortSet) { this.sortSet = sortSet; } @Override protected void addToolbarItems() { addToolbarItem(ToolbarItemType.SEPARATOR); addToolbarItem(createCustomItem(new ShowMoreItem())); if (this.studyHasDiscNotes) { addToolbarItem(createDownloadLinkItem()); addToolbarItem(createNotePopupLinkItem()); } // addToolbarItem(ToolbarItemType.SEPARATOR); // addToolbarItem(createBackToNotesMatrixListItem()); addToolbarItem(createCustomItem(new NewHiddenItem())); } public ToolbarItem createDownloadLinkItem() { DownloadLinkItem item = new DownloadLinkItem(); item.setCode(ToolbarItemType.CLEAR_ITEM.toCode()); ToolbarItemRenderer renderer = new ClearItemRenderer(item, getCoreContext()); renderer.setOnInvokeAction("onInvokeAction"); item.setToolbarItemRenderer(renderer); return item; } public ToolbarItem createNotePopupLinkItem() { NotePopupLinkItem item = new NotePopupLinkItem(); item.setCode(ToolbarItemType.CLEAR_ITEM.toCode()); ToolbarItemRenderer renderer = new ClearItemRenderer(item, getCoreContext()); renderer.setOnInvokeAction("onInvokeAction"); item.setToolbarItemRenderer(renderer); return item; } private ToolbarItem createCustomItem(AbstractItem item) { ToolbarItemRenderer renderer = new CustomItemRenderer(item, getCoreContext()); renderer.setOnInvokeAction("onInvokeAction"); item.setToolbarItemRenderer(renderer); return item; } public ToolbarItem createBackToNotesMatrixListItem() { ShowLinkToNotesMatrix item = new ShowLinkToNotesMatrix(); 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('listNotes',[" + 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('listNotes',[" + 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('listNotes',[" + getIndexes() + "],false);});").scriptEnd(); }else{ html.a().id("showMore").style("display:none;").href("javascript:hideCols('listNotes',[" + getIndexes() + "],true);").close(); html.div().close().nbsp().append(reswords.getString("show_more")).nbsp().divEnd().aEnd(); html.a().id("hide").href("javascript:hideCols('listNotes',[" + 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('listNotes',[" + getIndexes() + "],true);});").scriptEnd(); } 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 = "4, 5, 9, 11, 14, 16, 17, 19"; return result; } } private class ShowLinkToNotesMatrix extends AbstractItem { @Override public String disabled() { // TODO Auto-generated method stub return null; } @Override public String enabled() { HtmlBuilder html = new HtmlBuilder(); html.a().href("ListDiscNotesSubjectServlet?module=submit").id("backToNotesMatrix"); html.quote(); html.quote().close(); html.nbsp().append(reswords.getString("view_as_matrix")).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(); } } private class DownloadLinkItem extends AbstractItem { @Override public String disabled() { return null; } @Override public String enabled() { HtmlBuilder html = new HtmlBuilder(); String js = "javascript:openDocWindow('ChooseDownloadFormat" + "?resolutionStatus=" + resolutionStatus + "&discNoteType=" + discNoteType + "&module=" + module; for (Filter f: filterSet.getFilters()) { js += "&" + f.getProperty() + "=" + f.getValue(); } Sort sorts[] = sortSet.getSorts().toArray(new Sort[0]); sort(sorts, new Comparator<Sort>() { @Override public int compare(Sort s1, Sort s2) { return s1.getPosition() - s2.getPosition(); } }); for (Sort s: sorts) { js += "&" + "sort." + s.getProperty() + "=" + s.getOrder().name(); } js += "')"; html.a().href(js); html.quote(); html.append(getAction()); html.quote().close(); html.img().name("bt_View1").src("images/bt_Download.gif").border("0").alt(resword.getString("download_all_discrepancy_notes")).title( resword.getString("download_all_discrepancy_notes")).append("class=\"downloadAllDNotes\" width=\"24 \" height=\"15\"").end().aEnd(); return html.toString(); } } private class NotePopupLinkItem extends AbstractItem { @Override public String disabled() { return null; } @Override public String enabled() { HtmlBuilder html = new HtmlBuilder(); html.a().href("#"); html.onclick("javascript:openPopup()"); html.quote(); html.append(getAction()); html.quote().close(); html.img().name("bt_View1").src("images/bt_Print.gif").border("0").alt(resword.getString("print")).title( resword.getString("print")).append("class=\"downloadAllDNotes\" width=\"24 \" height=\"15\"").end().aEnd(); return html.toString(); } } public String getModule() { return module; } public void setModule(String module) { this.module = module; } public int getResolutionStatus() { return resolutionStatus; } public void setResolutionStatus(int resolutionStatus) { this.resolutionStatus = resolutionStatus; } public int getDiscNoteType() { return discNoteType; } public void setDiscNoteType(int discNoteType) { this.discNoteType = discNoteType; } public boolean isStudyHasDiscNotes() { return studyHasDiscNotes; } public void setStudyHasDiscNotes(boolean studyHasDiscNotes) { this.studyHasDiscNotes = studyHasDiscNotes; } public ResourceBundle getResword() { return resword; } public void setResword(ResourceBundle resword) { this.resword = resword; } }