package org.akaza.openclinica.gwt.client; import java.util.HashMap; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.*; import com.google.gwt.user.client.Window; /** * A component class for the top-level navigation menu. */ public class GwtMenu implements EntryPoint { //The object containing the top-level menu private final Grid menuGrid = new Grid(1,5); //The object containing the second row of the menu private final HorizontalPanel horizontalPanel = new HorizontalPanel(); public static String COORDS = "menupos"; public void onModuleLoad() { MenuConstants menuConstants = GWT.create(MenuConstants.class); URLConstants urlConstants = GWT.create(URLConstants.class); //Get the selected menu from the URL parameter; will be a number from 1-5 String selectedMenu = Window.Location.getParameter(COORDS) == null ? "1" : Window.Location.getParameter(COORDS); //Window.alert(selectedMenu); //Link the top-level menu section to its position on the menu HashMap<String,String> menuPosition = new HashMap<String,String>(); menuPosition.put("1","home"); menuPosition.put("2","submit_data"); menuPosition.put("3","extract_data"); menuPosition.put("4","manage_study"); menuPosition.put("5","business_admin"); //Top-level menu: Home, SubmitData, ExtractData, ManageStudy, Business Admin final HTML homeLab = createHTML("<div><div><div><a href=\""+urlConstants.MainMenu()+ "\">"+menuConstants.home()+ "</a></div></div></div>", "bt_Home", true); homeLab.setStyleName(selectedMenu.equalsIgnoreCase("1") ? "nav_bt_current" : "nav_bt"); menuGrid.setWidget(0, 0, homeLab); final HTML submitDataLab = createHTML("<div><div><div><a href=\""+urlConstants.ListStudySubjectsSubmit()+"\">"+ menuConstants.submit_data()+"</a></div></div></div>", "bt_SubmitData", true); submitDataLab.setStyleName(selectedMenu.equalsIgnoreCase("2") ? "nav_bt_current" : "nav_bt"); menuGrid.setWidget(0, 1, submitDataLab); final HTML extractDataLab = createHTML("<div><div><div><a href=\""+urlConstants.ExtractDatasetsMain()+"\">"+ menuConstants.extract_data()+"</a></div></div></div>", "bt_ExtractData", true); extractDataLab.setStyleName(selectedMenu.equalsIgnoreCase("3") ? "nav_bt_current" : "nav_bt"); menuGrid.setWidget(0, 2, extractDataLab); final HTML manageStudyLab = createHTML("<div><div><div><a href=\""+urlConstants.ManageStudy()+"\">"+ menuConstants.manage_study()+"</a></div></div></div>", "bt_ManageStudy", true); manageStudyLab.setStyleName(selectedMenu.equalsIgnoreCase("4") ? "nav_bt_current" : "nav_bt"); menuGrid.setWidget(0, 3, manageStudyLab); final HTML businessAdminLab = createHTML("<div><div><div><a href=\""+urlConstants.AdminSystem()+"\">"+ menuConstants.business_admin()+"</a></div></div></div>", "bt_BusinessAdmin", true); businessAdminLab.setStyleName(selectedMenu.equalsIgnoreCase("5") ? "nav_bt_current" : "nav_bt"); menuGrid.setWidget(0, 4, businessAdminLab); RootPanel.get("menuContainer").add(menuGrid); //second row of the menu final String insideHtml = "<div><div><div>\n" + " <a href=\""+urlConstants.ListStudySubject()+"\">"+menuConstants.subjects()+"</a>\n" + " <a href=\""+urlConstants.ListSubjectGroupClass()+"\">"+menuConstants.groups()+"</a>\n" + " <a href=\""+urlConstants.ViewStudyEvents()+"\">"+menuConstants.events()+"</a>\n" + " <a href=\""+urlConstants.ListDiscNotesSubjectServlet()+"\">"+menuConstants.notes_discrepancies()+"</a>" + "<a href=\""+urlConstants.ViewRuleAssignment()+"\">"+menuConstants.rules()+"</a><br>" + "<span class=\"gwt_subnav_second_row\">\n" + "<a href=\""+urlConstants.ListStudyUser()+"\">"+menuConstants.users()+"</a>\n" + "<a href=\""+urlConstants.ListSite()+"\">"+menuConstants.sites()+"</a>\n" + "<a href=\""+urlConstants.ListEventDefinition()+"\">"+menuConstants.event_definitions()+"</a>\n" + "<a href=\""+urlConstants.ListCRF()+"\">"+menuConstants.crfs()+"</a>\n" + "<a href=\""+urlConstants.AuditLogStudy()+"\">"+menuConstants.view_audit_logs()+"</a></span></div></div></div>"; final HTML manageSubNav = createHTML(insideHtml, "subnav_ManageStudy", true); manageSubNav.setStyleName("gwt_subnav"); horizontalPanel.addStyleName("panelMargin"); horizontalPanel.add(manageSubNav); //This Map links the top menu to its second row; home doesn't have a second row HashMap<String,HorizontalPanel> menuSecondRow = new HashMap<String,HorizontalPanel>(); menuSecondRow.put("manage_study",horizontalPanel); //home does not have a second row HorizontalPanel panel = new HorizontalPanel(); HTML lab = new HTML("",false); panel.add(lab); menuSecondRow.put("home",panel); //second row of the menu for Submit Data String submitHtml = "<div><div><div>\n" + " <a href=\""+urlConstants.ListStudySubjectsSubmit()+"\">"+menuConstants.view_all_subjects()+"</a>\n" + " <a href=\""+urlConstants.AddNewSubject()+"\">"+menuConstants.add_subjects()+"</a>\n" + " <a href=\""+urlConstants.CreateNewStudyEvent()+"\">"+menuConstants.add_new_study_event()+"</a>\n" + " <br>" + "<span class=\"gwt_subnav_second_row\">\n" + "<a href=\""+urlConstants.ViewStudyEvents()+"\">"+menuConstants.view_events()+"</a>\n" + "<a href=\""+urlConstants.ImportCRFData()+"\">"+menuConstants.import_data()+"</a>\n" + "<a href=\""+urlConstants.ListDiscNotesSubjectServletSubmit()+"\">"+menuConstants.notes_discrepancies()+"</a>\n" + "</span></div></div></div>"; panel = this.createSecondRow(submitHtml,"subnav_Submit"); menuSecondRow.put("submit_data",panel); //second row of the menu for Extract Data submitHtml = "<div><div><div>\n" + " <a href=\""+urlConstants.ViewDatasets()+"\">"+menuConstants.view_dataset()+"</a>\n" + " <a href=\""+urlConstants.CreateDataset()+"\">"+menuConstants.create_dataset()+"</a>\n" + " </div></div></div>"; panel = this.createSecondRow(submitHtml,"subnav_Extract"); menuSecondRow.put("extract_data",panel); //second row of the menu for Business Admin submitHtml = "<div><div><div>\n" + " <a href=\""+urlConstants.ListUserAccounts()+"\">"+menuConstants.users()+"</a>\n" + " <a href=\""+urlConstants.ListSubject()+"\">"+menuConstants.subjects()+"</a>\n" + " <a href=\""+urlConstants.ListStudy()+"\">"+menuConstants.studies()+"</a>\n" + " <a href=\""+urlConstants.ListCRFAdmin()+"\">"+menuConstants.crfs()+"</a>\n" + " </div></div></div>"; panel = this.createSecondRow(submitHtml,"subnav_Admin"); menuSecondRow.put("business_admin",panel); if(! "".equalsIgnoreCase(selectedMenu)){ panel = menuSecondRow.get( menuPosition.get(selectedMenu)); } else { panel = menuSecondRow.get( menuPosition.get("4")); } RootPanel.get("menuContainer").add(panel); } /* A convenience method for creating HTML labels */ private HTML createHTML(String htmlText, String ID, boolean wrapText) { HTML lab = new HTML(htmlText,wrapText); //implements a unique ID for each element UIObject.ensureDebugId(lab.getElement(),ID); return lab; } private HorizontalPanel createSecondRow(String insideHtml,String id) { HorizontalPanel panel = new HorizontalPanel(); HTML subNav = createHTML(insideHtml, id, true); subNav.setStyleName("gwt_subnav"); panel.addStyleName("panelMargin"); panel.add(subNav); return panel; } }