Java tutorial
/******************************************************************************* * Copyright 2011 Google Inc. All Rights Reserved. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package egovframework.eam.admin.main.client; import java.util.LinkedHashMap; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT.UncaughtExceptionHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.History; import com.google.gwt.user.client.ui.RootPanel; import com.smartgwt.client.core.KeyIdentifier; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.TabBarControls; import com.smartgwt.client.types.VerticalAlignment; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.HTMLPane; import com.smartgwt.client.widgets.ImgButton; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.events.ChangeEvent; import com.smartgwt.client.widgets.form.fields.events.ChangeHandler; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.Layout; import com.smartgwt.client.widgets.layout.LayoutSpacer; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.menu.Menu; import com.smartgwt.client.widgets.menu.MenuItem; import com.smartgwt.client.widgets.menu.MenuItemIfFunction; import com.smartgwt.client.widgets.menu.events.ClickHandler; import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent; import com.smartgwt.client.widgets.tab.Tab; import com.smartgwt.client.widgets.tab.TabSet; import com.smartgwt.client.widgets.tab.events.TabSelectedEvent; import com.smartgwt.client.widgets.tab.events.TabSelectedHandler; import com.smartgwt.client.widgets.toolbar.ToolStrip; import com.smartgwt.client.widgets.toolbar.ToolStripButton; import com.smartgwt.client.widgets.tree.Tree; import com.smartgwt.client.widgets.tree.TreeNode; import com.smartgwt.client.widgets.tree.events.LeafClickEvent; import com.smartgwt.client.widgets.tree.events.LeafClickHandler; import egovframework.eam.admin.main.client.data.ExplorerTreeNode; /** * Entry point classes define <code>onModuleLoad()</code>. */ public class Main implements EntryPoint, ValueChangeHandler<String> { private TabSet mainTabSet; private SideNavTree sideNav; private Menu contextMenu; public void onModuleLoad() { final String initToken = History.getToken(); //setup overall layout / viewport VLayout main = new VLayout() { @Override protected void onInit() { super.onInit(); if (initToken.length() != 0) { onHistoryChanged(initToken); } } }; ToolStrip topBar = new ToolStrip(); topBar.setHeight(33); topBar.setWidth100(); topBar.addSpacer(6); ImgButton sgwtHomeButton = new ImgButton(); sgwtHomeButton.setSrc("pieces/24/cube_green.png"); sgwtHomeButton.setWidth(24); sgwtHomeButton.setHeight(24); sgwtHomeButton.setPrompt("Go to eGovFrame portal"); sgwtHomeButton.setHoverStyle("interactImageHover"); sgwtHomeButton.setShowRollOver(false); sgwtHomeButton.setShowDownIcon(false); sgwtHomeButton.setShowDown(false); sgwtHomeButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(ClickEvent event) { com.google.gwt.user.client.Window.open("http://www.egovframe.go.kr/", "sgwt", null); } }); topBar.addMember(sgwtHomeButton); topBar.addSpacer(6); Label title = new Label("eGov Access Management System"); title.setStyleName("sgwtTitle"); title.setWidth(300); topBar.addMember(title); topBar.addFill(); ToolStripButton devConsoleButton = new ToolStripButton(); devConsoleButton.setTitle("Developer Console"); devConsoleButton.setIcon("silk/bug.png"); //devConsoleButton.setStylePrimaryName("normal"); devConsoleButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(ClickEvent event) { SC.showConsole(); } }); topBar.addButton(devConsoleButton); topBar.addSeparator(); /* ImgButton imgButton = new ImgButton(); imgButton.setWidth(18); imgButton.setHeight(18); imgButton.setSrc("silk/emoticon.png"); imgButton.setShowFocused(false); imgButton.setShowFocusedIcon(false); imgButton.setPrompt("Bye bye!!"); imgButton.setTitle("logout"); imgButton.setHoverWidth(110); imgButton.setHoverStyle("interactImageHover"); imgButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(ClickEvent event) { com.google.gwt.user.client.Window.Location.replace("/j_spring_security_logout"); } }); topBar.addMember(imgButton); */ ToolStripButton logout = new ToolStripButton("Logout"); logout.setIcon("silk/emoticon.png"); logout.setPrompt("Bye bye!!"); logout.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(ClickEvent event) { com.google.gwt.user.client.Window.Location.replace("/j_spring_security_logout"); } }); topBar.addButton(logout); topBar.addSpacer(6); main.addMember(topBar); main.setWidth100(); main.setHeight100(); main.setStyleName("tabSetContainer"); HLayout hLayout = new HLayout(); hLayout.setLayoutMargin(5); hLayout.setWidth100(); hLayout.setHeight100(); VLayout sideNavLayout = new VLayout(); sideNavLayout.setHeight100(); sideNavLayout.setWidth(185); sideNavLayout.setShowResizeBar(true); sideNav = new SideNavTree(); sideNav.addLeafClickHandler(new LeafClickHandler() { public void onLeafClick(LeafClickEvent event) { TreeNode node = event.getLeaf(); showMenu(node); } }); sideNavLayout.addMember(sideNav); hLayout.addMember(sideNavLayout); mainTabSet = new TabSet(); Layout paneContainerProperties = new Layout(); paneContainerProperties.setLayoutMargin(0); paneContainerProperties.setLayoutTopMargin(1); mainTabSet.setPaneContainerProperties(paneContainerProperties); mainTabSet.setWidth100(); mainTabSet.setHeight100(); mainTabSet.addTabSelectedHandler(new TabSelectedHandler() { public void onTabSelected(TabSelectedEvent event) { Tab selectedTab = event.getTab(); String historyToken = selectedTab.getAttribute("historyToken"); if (historyToken != null) { History.newItem(historyToken, false); } else { History.newItem("main", false); } } }); LayoutSpacer layoutSpacer = new LayoutSpacer(); layoutSpacer.setWidth(5); SelectItem selectItem = new SelectItem(); selectItem.setHeight(21); selectItem.setWidth(130); LinkedHashMap<String, String> valueMap = new LinkedHashMap<String, String>(); valueMap.put("EnterpriseBlue", "Enterprise Blue"); valueMap.put("Enterprise", "Enterprise Gray"); valueMap.put("Graphite", "Graphite"); valueMap.put("Simplicity", "Simplicity"); selectItem.setValueMap(valueMap); final String skinCookieName = "skin_name_2_4"; String currentSkin = Cookies.getCookie(skinCookieName); if (currentSkin == null) { currentSkin = "EnterpriseBlue"; } selectItem.setDefaultValue(currentSkin); selectItem.setShowTitle(false); selectItem.addChangeHandler(new ChangeHandler() { public void onChange(ChangeEvent event) { Cookies.setCookie(skinCookieName, (String) event.getValue()); com.google.gwt.user.client.Window.Location.reload(); } }); DynamicForm form = new DynamicForm(); form.setPadding(0); form.setMargin(0); form.setCellPadding(1); form.setNumCols(1); form.setFields(selectItem); mainTabSet.setTabBarControls(TabBarControls.TAB_SCROLLER, TabBarControls.TAB_PICKER, layoutSpacer, form); contextMenu = createContextMenu(); Tab tab = new Tab(); tab.setTitle("Home "); tab.setIcon("pieces/16/cube_green.png", 16); tab.setWidth(80); HLayout mainPanel = new HLayout(); mainPanel.setHeight100(); mainPanel.setWidth100(); // main mainPanel.addMember(new GuidePane()); tab.setPane(mainPanel); mainTabSet.addTab(tab); Canvas canvas = new Canvas(); canvas.setBackgroundImage("[SKIN]/shared/background.gif"); canvas.setWidth100(); canvas.setHeight100(); canvas.addChild(mainTabSet); hLayout.addMember(canvas); main.addMember(hLayout); if (SC.hasFirebug()) { Label label = new Label(); label.setWidth100(); label.setHeight(50); label.setValign(VerticalAlignment.CENTER); label.setAlign(Alignment.CENTER); label.setContents( "Firebug can make the eGov Access Management run slow. For the best performance, we suggest disabling Firebug for this site."); Window fbWindow = new Window(); fbWindow.setTitle("Firebug Detected"); fbWindow.setWidth100(); fbWindow.setHeight(80); fbWindow.addItem(label); fbWindow.setRedrawOnResize(true); main.addMember(fbWindow); } main.draw(); // Add history listener //History.addHistoryListener(this); History.addValueChangeHandler(this); RootPanel p = RootPanel.get("loadingWrapper"); if (p != null) { RootPanel.getBodyElement().removeChild(p.getElement()); } GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() { public void onUncaughtException(Throwable e) { SC.say("Error", "Client Error occured."); GWT.log("", e); } }); } private Menu createContextMenu() { Menu menu = new Menu(); menu.setWidth(140); MenuItemIfFunction enableCondition = new MenuItemIfFunction() { public boolean execute(Canvas target, Menu menu, MenuItem item) { int selectedTab = mainTabSet.getSelectedTabNumber(); return selectedTab != 0; } }; MenuItem closeItem = new MenuItem("<u>C</u>lose"); closeItem.setEnableIfCondition(enableCondition); closeItem.setKeyTitle("Alt+C"); KeyIdentifier closeKey = new KeyIdentifier(); closeKey.setAltKey(true); closeKey.setKeyName("C"); closeItem.setKeys(closeKey); closeItem.addClickHandler(new ClickHandler() { public void onClick(MenuItemClickEvent event) { int selectedTab = mainTabSet.getSelectedTabNumber(); mainTabSet.removeTab(selectedTab); mainTabSet.selectTab(selectedTab - 1); } }); MenuItem closeAllButCurrent = new MenuItem("Close All But Current"); closeAllButCurrent.setEnableIfCondition(enableCondition); closeAllButCurrent.addClickHandler(new ClickHandler() { public void onClick(MenuItemClickEvent event) { int selected = mainTabSet.getSelectedTabNumber(); Tab[] tabs = mainTabSet.getTabs(); int[] tabsToRemove = new int[tabs.length - 2]; int cnt = 0; for (int i = 1; i < tabs.length; i++) { if (i != selected) { tabsToRemove[cnt] = i; cnt++; } } mainTabSet.removeTabs(tabsToRemove); } }); MenuItem closeAll = new MenuItem("Close All"); closeAll.setEnableIfCondition(enableCondition); closeAll.addClickHandler(new ClickHandler() { public void onClick(MenuItemClickEvent event) { Tab[] tabs = mainTabSet.getTabs(); int[] tabsToRemove = new int[tabs.length - 1]; for (int i = 1; i < tabs.length; i++) { tabsToRemove[i - 1] = i; } mainTabSet.removeTabs(tabsToRemove); mainTabSet.selectTab(0); } }); menu.setItems(closeItem, closeAllButCurrent, closeAll); return menu; } protected void showMenu(TreeNode node) { boolean isExplorerTreeNode = node instanceof ExplorerTreeNode; if (isExplorerTreeNode) { ExplorerTreeNode explorerTreeNode = (ExplorerTreeNode) node; PanelFactory factory = explorerTreeNode.getFactory(); if (factory != null) { String panelID = factory.getID(); Tab tab = null; if (panelID != null) { String tabID = panelID + "_tab"; tab = mainTabSet.getTab(tabID); } if (tab == null) { Canvas panel = factory.create(); tab = new Tab(); tab.setID(factory.getID() + "_tab"); //store history token on tab so that when an already open is selected, one can retrieve the //history token and update the URL tab.setAttribute("historyToken", explorerTreeNode.getNodeID()); tab.setContextMenu(contextMenu); String sampleName = explorerTreeNode.getName(); String icon = explorerTreeNode.getIcon(); if (icon == null) { icon = "silk/plugin.png"; } String imgHTML = Canvas.imgHTML(icon, 16, 16); tab.setTitle("<span>" + imgHTML + " " + sampleName + "</span>"); tab.setPane(panel); tab.setCanClose(true); mainTabSet.addTab(tab); mainTabSet.selectTab(tab); } else { mainTabSet.selectTab(tab); } } } } public void onHistoryChanged(String historyToken) { if (historyToken == null || historyToken.equals("")) { mainTabSet.selectTab(0); } else { ExplorerTreeNode[] menuData = sideNav.getMenuData(); for (ExplorerTreeNode explorerTreeNode : menuData) { if (explorerTreeNode.getNodeID().equals(historyToken)) { showMenu(explorerTreeNode); ListGridRecord selectedRecord = sideNav.getSelectedRecord(); if (selectedRecord != null) { sideNav.deselectRecord(selectedRecord); } sideNav.selectRecord(explorerTreeNode); Tree tree = sideNav.getData(); TreeNode categoryNode = tree.getParent(explorerTreeNode); while (categoryNode != null && !"/".equals(tree.getName(categoryNode))) { tree.openFolder(categoryNode); categoryNode = tree.getParent(categoryNode); } } } } } public void onValueChange(ValueChangeEvent<String> event) { if (event.getValue().equals("main")) { onHistoryChanged(""); } else { onHistoryChanged(event.getValue()); } } } class GuidePane extends HTMLPane { public GuidePane() { setContentsURL("guide/index.html"); setOverflow(Overflow.AUTO); setStyleName("defaultBorder"); setPadding(10); } }