/******************************************************************************* * Copyright (c) 2012, Nabeel Shaheen * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted ******************************************************************************/ package com.odb.view.dashboard.client; import java.util.ArrayList; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.OpenEvent; import com.google.gwt.event.logical.shared.OpenHandler; import com.google.gwt.i18n.client.LocaleInfo; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DecoratorPanel; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.Tree; import com.google.gwt.user.client.ui.TreeItem; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.odb.core.service.DataSourceConfiguration; import com.odb.view.dashboard.client.charts.ChartType; import com.odb.view.dashboard.client.charts.ChartUI; import com.odb.view.dashboard.client.dto.DataSourceInfo; import com.odb.view.dashboard.client.dto.PublisherInfo; public class ClientUI { private static DebugWindow dbg = DebugWindow.getInstance(); final FlowPanel flowPanel = new FlowPanel(); private DashboardServiceAsync dashboardService = null; ArrayList<ChartUI> charts = new ArrayList<ChartUI>(); public void addChart(final DataSourceConfiguration dsConfig, final String graphType, final int width, final int height) { ChartUI chartUI =new ChartUI(dashboardService, dsConfig, graphType, width, height); charts.add(chartUI); flowPanel.add(chartUI); } public ClientUI(DashboardServiceAsync dashboardService) { this.dashboardService = dashboardService; final FlexTable splitFlexTable = new FlexTable(); splitFlexTable.addStyleName("cw-FlexTable"); splitFlexTable.setWidth("100%"); // splitFlexTable.getFlexCellFormatter().setColSpan(0, 0, 2); splitFlexTable.setWidget(0, 0, createMenu()); splitFlexTable.setWidget(1, 0, flowPanel); // splitFlexTable.getFlexCellFormatter().setHeight(1, 0, "90%"); splitFlexTable.getFlexCellFormatter().setHorizontalAlignment(0, 0, HasHorizontalAlignment.ALIGN_LEFT); splitFlexTable.getFlexCellFormatter().setHorizontalAlignment(1, 0, HasHorizontalAlignment.ALIGN_JUSTIFY); splitFlexTable.getFlexCellFormatter().setHorizontalAlignment(2, 0, HasHorizontalAlignment.ALIGN_LEFT); splitFlexTable.setWidget(2, 0, dbg.asWidget()); RootPanel.get().add(splitFlexTable); } // Create a command that will execute on menu item selection Command menuCommand = new Command() { public void execute() { Window.alert("Wake up..."); } }; private DialogBox createDialogBox(ArrayList<PublisherInfo> pubInfoList) { // Create a dialog box and set the caption text final DialogBox dialogBox = new DialogBox(); final StringBuffer newDataSourceID = new StringBuffer(); dialogBox.ensureDebugId("cwDialogBox"); dialogBox.setText("Select DataSource"); // Create a table to layout the content VerticalPanel dialogContents = new VerticalPanel(); dialogContents.setSpacing(4); dialogBox.setWidget(dialogContents); final Tree dynamicTree = createDynamicTree(pubInfoList); dynamicTree.ensureDebugId("cwTree-dynamicTree"); ScrollPanel dynamicTreeWrapper = new ScrollPanel(dynamicTree); dynamicTreeWrapper.ensureDebugId("cwTree-dynamicTree-Wrapper"); dynamicTreeWrapper.setSize("300px", "300px"); final ListBox dropBox = new ListBox(false); for (ChartType cType: ChartType.values()) { dropBox.addItem(cType.toString()); } dropBox.ensureDebugId("cwListBox-dropBox"); // Wrap the dynamic tree in a DecoratorPanel DecoratorPanel dynamicDecorator = new DecoratorPanel(); dynamicDecorator.setWidget(dynamicTreeWrapper); dialogContents.add(dynamicDecorator); // Add a close button at the bottom of the dialog Button nextButton = new Button("Next", new ClickHandler() { public void onClick(ClickEvent event) { newDataSourceID.append(dynamicTree.getSelectedItem().getText()); dashboardService.getDataSourceAllDetails(newDataSourceID.toString(), new AsyncCallback<DataSourceConfiguration>() { public void onFailure(Throwable caught) { // TODO Auto-generated method stub } public void onSuccess(DataSourceConfiguration result) { addChart(result, dropBox.getValue(dropBox.getSelectedIndex()), 400,300); dashboardService.addSubscription(result.getDsID(), dropBox.getValue(dropBox.getSelectedIndex()), null); } }); // createChart(newDataSourceID.toString()); dialogBox.hide(); } }); dialogContents.add(dropBox); dialogContents.add(nextButton); if (LocaleInfo.getCurrentLocale().isRTL()) { dialogContents.setCellHorizontalAlignment(nextButton, HasHorizontalAlignment.ALIGN_LEFT); } else { dialogContents.setCellHorizontalAlignment(nextButton, HasHorizontalAlignment.ALIGN_RIGHT); } // Add a close button at the bottom of the dialog Button closeButton = new Button("Close", new ClickHandler() { public void onClick(ClickEvent event) { dialogBox.hide(); } }); dialogContents.add(closeButton); if (LocaleInfo.getCurrentLocale().isRTL()) { dialogContents.setCellHorizontalAlignment(closeButton, HasHorizontalAlignment.ALIGN_LEFT); } else { dialogContents.setCellHorizontalAlignment(closeButton, HasHorizontalAlignment.ALIGN_RIGHT); } // Return the dialog box return dialogBox; } private Tree createDynamicTree(ArrayList<PublisherInfo> pubInfoList) { // Create a new tree final Tree dynamicTree = new Tree(); for (int i = 0; i < pubInfoList.size(); i++) { TreeItem item = dynamicTree.addItem(pubInfoList.get(i).getPublisherID()); item.addItem(""); } dynamicTree.addOpenHandler(new OpenHandler<TreeItem>() { public void onOpen(OpenEvent<TreeItem> event) { final TreeItem item = event.getTarget(); dashboardService.getDataSources(event.getTarget().getText(), new AsyncCallback<ArrayList<DataSourceInfo>>() { public void onSuccess(ArrayList<DataSourceInfo> result) { item.removeItems(); for (DataSourceInfo dsInfo : result) { TreeItem child = item.addItem(dsInfo.getDataSourceID()); } } public void onFailure(Throwable caught) { // TODO Auto-generated method stub } }); } }); return dynamicTree; } Command addCommand = new Command() { public void execute() { dashboardService.getPublisherInfo(new AsyncCallback<ArrayList<PublisherInfo>>() { public void onSuccess(ArrayList<PublisherInfo> result) { DialogBox msg = createDialogBox(result); msg.center(); msg.show(); } public void onFailure(Throwable caught) { } }); } }; private Widget createMenu() { MenuBar menu = new MenuBar(); menu.setAutoOpen(true); menu.setAnimationEnabled(true); MenuBar fileMenu = new MenuBar(); menu.addItem(new MenuItem("File", fileMenu)); fileMenu.addItem("Add Chart", addCommand); fileMenu.addItem("Del Chart", menuCommand); MenuBar helpMenu = new MenuBar(); menu.addItem(new MenuItem("Help", helpMenu)); helpMenu.addItem("Help", menuCommand); helpMenu.addItem("About", menuCommand); return menu; } }