Java tutorial
/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2002-2016 Pentaho Corporation.. All rights reserved. */ package org.pentaho.mantle.client.ui.xul; import org.pentaho.gwt.widgets.client.toolbar.ToolbarButton; import org.pentaho.mantle.client.MantleApplication; import org.pentaho.mantle.client.admin.ContentCleanerPanel; import org.pentaho.mantle.client.admin.EmailAdminPanelController; import org.pentaho.mantle.client.admin.UserRolesAdminPanelController; import org.pentaho.mantle.client.commands.FilePropertiesCommand; import org.pentaho.mantle.client.commands.NewDropdownCommand; import org.pentaho.mantle.client.commands.OpenDocCommand; import org.pentaho.mantle.client.commands.OpenFileCommand; import org.pentaho.mantle.client.commands.OpenKettleStatusCommand; import org.pentaho.mantle.client.commands.PrintCommand; import org.pentaho.mantle.client.commands.RefreshRepositoryCommand; import org.pentaho.mantle.client.commands.RefreshSchedulesCommand; import org.pentaho.mantle.client.commands.SaveCommand; import org.pentaho.mantle.client.events.EventBusUtil; import org.pentaho.mantle.client.events.ISolutionBrowserEvent; import org.pentaho.mantle.client.events.SolutionBrowserCloseEvent; import org.pentaho.mantle.client.events.SolutionBrowserCloseEventHandler; import org.pentaho.mantle.client.events.SolutionBrowserDeselectEvent; import org.pentaho.mantle.client.events.SolutionBrowserDeselectEventHandler; import org.pentaho.mantle.client.events.SolutionBrowserOpenEvent; import org.pentaho.mantle.client.events.SolutionBrowserOpenEventHandler; import org.pentaho.mantle.client.events.SolutionBrowserSelectEvent; import org.pentaho.mantle.client.events.SolutionBrowserSelectEventHandler; import org.pentaho.mantle.client.events.SolutionBrowserUndefinedEvent; import org.pentaho.mantle.client.events.SolutionBrowserUndefinedEventHandler; import org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPanel; import org.pentaho.mantle.client.solutionbrowser.filelist.FileCommand.COMMAND; import org.pentaho.mantle.client.solutionbrowser.filelist.FileItem; import org.pentaho.mantle.client.solutionbrowser.tabs.IFrameTabPanel; import org.pentaho.mantle.client.ui.PerspectiveManager; import org.pentaho.platform.api.engine.perspective.pojo.IPluginPerspective; import org.pentaho.ui.xul.XulEventSourceAdapter; import org.pentaho.ui.xul.components.XulToolbarbutton; import org.pentaho.ui.xul.stereotype.Bindable; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.RunAsyncCallback; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.DeckPanel; import com.google.gwt.user.client.ui.Frame; import com.google.gwt.user.client.ui.Widget; public class MantleModel extends XulEventSourceAdapter implements SolutionBrowserOpenEventHandler, SolutionBrowserCloseEventHandler, SolutionBrowserSelectEventHandler, SolutionBrowserDeselectEventHandler, SolutionBrowserUndefinedEventHandler { private MantleXul main; private boolean saveEnabled; private boolean saveAsEnabled; private boolean newAnalysisEnabled; private boolean contentEditEnabled; private boolean contentEditSelected; private boolean showBrowserSelected; private boolean showNavigatorSelected; private boolean propertiesEnabled; private boolean printVisible; private FileItem selectedFileItem; private JavaScriptObject callback; public MantleModel(MantleXul main) { EventBusUtil.EVENT_BUS.addHandler(SolutionBrowserOpenEvent.TYPE, this); EventBusUtil.EVENT_BUS.addHandler(SolutionBrowserCloseEvent.TYPE, this); EventBusUtil.EVENT_BUS.addHandler(SolutionBrowserSelectEvent.TYPE, this); EventBusUtil.EVENT_BUS.addHandler(SolutionBrowserDeselectEvent.TYPE, this); EventBusUtil.EVENT_BUS.addHandler(SolutionBrowserUndefinedEvent.TYPE, this); this.main = main; } @Bindable public boolean isPropertiesEnabled() { return this.propertiesEnabled; } @Bindable public void setPropertiesEnabled(Boolean enabled) { boolean prevVal = this.propertiesEnabled; propertiesEnabled = enabled; this.firePropertyChange("propertiesEnabled", prevVal, propertiesEnabled); } @Bindable public boolean isSaveEnabled() { return this.saveEnabled; } @Bindable public void setSaveEnabled(Boolean enabled) { boolean prevVal = this.saveEnabled; saveEnabled = enabled; this.firePropertyChange("saveEnabled", prevVal, saveEnabled); } @Bindable public boolean isSaveAsEnabled() { return this.saveAsEnabled; } @Bindable public void setSaveAsEnabled(Boolean enabled) { boolean prevVal = this.saveAsEnabled; saveAsEnabled = enabled; this.firePropertyChange("saveAsEnabled", prevVal, saveAsEnabled); } @Bindable public void setPrintVisible(Boolean visible) { boolean prevVal = printVisible; printVisible = visible; this.firePropertyChange("printVisible", prevVal, printVisible); } @Bindable public boolean isPrintVisible() { return this.printVisible; } @Bindable public void executePropertiesCommand() { FilePropertiesCommand propertiesCommand = new FilePropertiesCommand(selectedFileItem.getRepositoryFile()); propertiesCommand.execute(); } @Bindable public void executeSaveCommand() { SaveCommand saveCommand = new SaveCommand(); saveCommand.execute(); } @Bindable public void executeSaveAsCommand() { SaveCommand saveAsCommand = new SaveCommand(true); saveAsCommand.execute(); } @Bindable public void executeEditContent() { OpenFileCommand cmd = new OpenFileCommand(COMMAND.EDIT); cmd.execute(); } @Bindable public void executeShareContent() { OpenFileCommand cmd = new OpenFileCommand(COMMAND.SHARE); cmd.execute(); } @Bindable public void executeScheduleContent() { OpenFileCommand cmd = new OpenFileCommand(COMMAND.SCHEDULE_NEW); cmd.execute(); } @Bindable public void executePrintCommand() { PrintCommand printCommand = new PrintCommand(); printCommand.execute(); } @Bindable public void showSchedules() { IPluginPerspective perspective = PerspectiveManager.getInstance().getActivePerspective(); boolean showing = perspective.getId().equalsIgnoreCase(PerspectiveManager.SCHEDULES_PERSPECTIVE); if (!showing || !this.showBrowserSelected) { PerspectiveManager.getInstance().setPerspective(PerspectiveManager.SCHEDULES_PERSPECTIVE); } } @Bindable public void showBrowser() { IPluginPerspective perspective = PerspectiveManager.getInstance().getActivePerspective(); boolean showing = perspective.getId().equalsIgnoreCase(PerspectiveManager.OPENED_PERSPECTIVE); if (!showing) { PerspectiveManager.getInstance().setPerspective(PerspectiveManager.OPENED_PERSPECTIVE); } } @Bindable public void loadAdminContent(final String securityPanelId, final String url) { // hijack content area (or simply find and select existing content) Frame frame = null; for (int i = 0; i < MantleXul.getInstance().getAdminContentDeck().getWidgetCount(); i++) { Widget w = MantleXul.getInstance().getAdminContentDeck().getWidget(i); if (w instanceof Frame && securityPanelId.equals(w.getElement().getId())) { frame = (Frame) w; } } if (frame == null) { frame = new Frame(url); frame.getElement().setId(securityPanelId); frame.getElement().setAttribute("frameBorder", "0"); frame.getElement().setAttribute("allowTransparency", "true"); MantleXul.getInstance().getAdminContentDeck().add(frame); } MantleXul.getInstance().getAdminContentDeck() .showWidget(MantleXul.getInstance().getAdminContentDeck().getWidgetIndex(frame)); } @Bindable public void loadSettingsPanel() { GWT.runAsync(new RunAsyncCallback() { public void onSuccess() { DeckPanel contentDeck = MantleXul.getInstance().getAdminContentDeck(); if (contentDeck.getWidgetIndex(ContentCleanerPanel.getInstance()) == -1) { contentDeck.add(ContentCleanerPanel.getInstance()); } contentDeck.showWidget(contentDeck.getWidgetIndex(ContentCleanerPanel.getInstance())); } public void onFailure(Throwable reason) { } }); } @Bindable public void loadUserRolesAdminPanel() { GWT.runAsync(new RunAsyncCallback() { public void onSuccess() { DeckPanel contentDeck = MantleXul.getInstance().getAdminContentDeck(); if (MantleApplication.getInstance().getContentDeck() .getWidgetIndex(UserRolesAdminPanelController.getInstance()) == -1) { contentDeck.add(UserRolesAdminPanelController.getInstance()); } contentDeck.showWidget(contentDeck.getWidgetIndex(UserRolesAdminPanelController.getInstance())); } public void onFailure(Throwable reason) { } }); } @Bindable public void loadEmailAdminPanel() { GWT.runAsync(new RunAsyncCallback() { public void onSuccess() { DeckPanel contentDeck = MantleXul.getInstance().getAdminContentDeck(); if (MantleApplication.getInstance().getContentDeck() .getWidgetIndex(EmailAdminPanelController.getInstance()) == -1) { contentDeck.add(EmailAdminPanelController.getInstance()); } contentDeck.showWidget(contentDeck.getWidgetIndex(EmailAdminPanelController.getInstance())); } public void onFailure(Throwable reason) { } }); } @Bindable public void refreshContent() { if (PerspectiveManager.SCHEDULES_PERSPECTIVE .equals(PerspectiveManager.getInstance().getActivePerspective().getId())) { Command cmd = new RefreshSchedulesCommand(); cmd.execute(); } else { Command cmd = new RefreshRepositoryCommand(); cmd.execute(); } } @Bindable public void toggleUseDescriptionsForTooltips() { SolutionBrowserPanel.getInstance().toggleUseDescriptionCommand.execute(); } @Bindable public void toggleShowHideFiles() { SolutionBrowserPanel.getInstance().toggleShowHideFilesCommand.execute(); } @Bindable public void openDocumentation() { OpenDocCommand cmd = new OpenDocCommand(); cmd.execute(); } @Bindable public void openKettleStatusPage() { OpenKettleStatusCommand cmd = new OpenKettleStatusCommand(); cmd.execute(); } @Bindable public void setNewAnalysisEnabled(Boolean enabled) { boolean prevVal = this.newAnalysisEnabled; newAnalysisEnabled = enabled; this.firePropertyChange("newAnalysisEnabled", prevVal, newAnalysisEnabled); } @Bindable public void executeOpenFileCommand() { OpenFileCommand openFileCommand = new OpenFileCommand(); openFileCommand.execute(); } @Bindable public void launchNewDropdownCommand(XulToolbarbutton button) { NewDropdownCommand launchNewDropdownCommand = new NewDropdownCommand( ((ToolbarButton) button.getManagedObject()).getPushButton()); launchNewDropdownCommand.execute(); } public void onUndefinedEvent(SolutionBrowserUndefinedEvent event) { onSolutionBrowserEvent(event); } public void onTabOpened(SolutionBrowserOpenEvent event) { onSolutionBrowserEvent(event); } public void onTabSelected(SolutionBrowserSelectEvent event) { onSolutionBrowserEvent(event); } public void onTabClosed(SolutionBrowserCloseEvent event) { onSolutionBrowserEvent(event); } public void onTabDeselected(SolutionBrowserDeselectEvent event) { onSolutionBrowserEvent(event); } private void onSolutionBrowserEvent(ISolutionBrowserEvent event) { FileItem selectedItem = null; if (event.getFileItems() != null && event.getFileItems().size() > 0) { selectedItem = event.getFileItems().get(0); } try { handleSolutionBrowserEvent(event.getWidget(), selectedItem); } catch (Throwable t) { MantleApplication.log(t.getMessage()); } if (event.getWidget() != null) { main.removeOverlays(((IFrameTabPanel) event.getWidget()).getOverlayIds()); } } private void handleSolutionBrowserEvent(Widget panel, FileItem selectedFileItem) { this.selectedFileItem = selectedFileItem; setPropertiesEnabled(selectedFileItem != null && selectedFileItem.getRepositoryFile() != null); setSaveEnabled(selectedFileItem != null && selectedFileItem.getRepositoryFile() != null); setSaveAsEnabled(selectedFileItem != null && selectedFileItem.getRepositoryFile() != null); boolean saveEnabled = false; boolean editIsEnabled = false; boolean editSelected = false; boolean printVisible = false; JavaScriptObject callback = null; if (panel != null && panel instanceof IFrameTabPanel) { IFrameTabPanel tbp = (IFrameTabPanel) panel; saveEnabled = tbp.isSaveEnabled(); editIsEnabled = tbp.isEditEnabled(); editSelected = tbp.isEditSelected(); printVisible = tbp.isPrintVisible(); } setSaveEnabled(saveEnabled); setSaveAsEnabled(saveEnabled); setContentEditEnabled(editIsEnabled); setContentEditSelected(editSelected); setPrintVisible(printVisible); setCallback(callback); this.showNavigatorSelected = SolutionBrowserPanel.getInstance().isNavigatorShowing(); setShowBrowserSelected(this.showNavigatorSelected); } @Bindable public boolean isShowBrowserSelected() { return showBrowserSelected; } @Bindable public void setShowBrowserSelected(boolean showBrowserSelected) { boolean prevVal = this.showBrowserSelected; this.showBrowserSelected = showBrowserSelected; this.firePropertyChange("showBrowserSelected", prevVal, showBrowserSelected); } @Bindable public void setContentEditEnabled(boolean enable) { boolean prevVal = this.contentEditEnabled; contentEditEnabled = enable; this.firePropertyChange("contentEditEnabled", prevVal, contentEditEnabled); } @Bindable public void setContentEditSelected(boolean selected) { boolean prevVal = this.contentEditSelected; contentEditSelected = selected; this.firePropertyChange("contentEditSelected", prevVal, contentEditSelected); } @Bindable public boolean isContentEditSelected() { return this.contentEditSelected; } @Bindable public void setContentEditToggled() { setContentEditSelected(!this.contentEditSelected); } @Bindable public boolean isContentEditEnabled() { return contentEditEnabled; } public JavaScriptObject getCallback() { return callback; } public void setCallback(JavaScriptObject callback) { this.callback = callback; } @Bindable public boolean isShowNavigatorSelected() { return this.showNavigatorSelected; } @Bindable public void setShowNavigatorSelected(boolean showNavigator) { this.showNavigatorSelected = showNavigator; } }