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-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.mantle.client.solutionbrowser; import java.util.ArrayList; import java.util.List; import org.pentaho.gwt.widgets.client.dialogs.MessageDialogBox; import org.pentaho.gwt.widgets.client.filechooser.RepositoryFile; import org.pentaho.gwt.widgets.client.utils.NameUtils; import org.pentaho.mantle.client.EmptyRequestCallback; import org.pentaho.mantle.client.commands.AbstractCommand; import org.pentaho.mantle.client.commands.ExecuteUrlInNewTabCommand; import org.pentaho.mantle.client.commands.ShareFileCommand; import org.pentaho.mantle.client.dialogs.scheduling.ScheduleHelper; import org.pentaho.mantle.client.events.EventBusUtil; import org.pentaho.mantle.client.events.ShowDescriptionsEvent; import org.pentaho.mantle.client.events.ShowHiddenFilesEvent; import org.pentaho.mantle.client.events.SolutionBrowserSelectEvent; import org.pentaho.mantle.client.events.SolutionBrowserSelectEventHandler; import org.pentaho.mantle.client.events.SolutionFileHandler; import org.pentaho.mantle.client.messages.Messages; import org.pentaho.mantle.client.objects.SolutionFileInfo; import org.pentaho.mantle.client.solutionbrowser.PluginOptionsHelper.ContentTypePlugin; import org.pentaho.mantle.client.solutionbrowser.filelist.FileCommand; import org.pentaho.mantle.client.solutionbrowser.filelist.FileCommand.COMMAND; import org.pentaho.mantle.client.solutionbrowser.filelist.FileItem; import org.pentaho.mantle.client.solutionbrowser.filelist.FilesListPanel; import org.pentaho.mantle.client.solutionbrowser.filepicklist.FavoritePickItem; import org.pentaho.mantle.client.solutionbrowser.filepicklist.FavoritePickList; import org.pentaho.mantle.client.solutionbrowser.filepicklist.RecentPickItem; import org.pentaho.mantle.client.solutionbrowser.filepicklist.RecentPickList; import org.pentaho.mantle.client.solutionbrowser.tabs.IFrameTabPanel; import org.pentaho.mantle.client.solutionbrowser.toolbars.BrowserToolbar; import org.pentaho.mantle.client.solutionbrowser.tree.SolutionTree; import org.pentaho.mantle.client.solutionbrowser.tree.SolutionTreeWrapper; import org.pentaho.mantle.client.ui.PerspectiveManager; import org.pentaho.mantle.client.ui.tabs.MantleTabPanel; import com.allen_sauer.gwt.dnd.client.PickupDragController; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JsArrayString; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.RequestException; import com.google.gwt.http.client.Response; import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.SplitLayoutPanel; import com.google.gwt.user.client.ui.TreeItem; import com.google.gwt.user.client.ui.TreeListener; import com.google.gwt.user.client.ui.Widget; @SuppressWarnings("deprecation") public class SolutionBrowserPanel extends HorizontalPanel { private static final String FILE_EXTENSION_DELIMETER = "."; private final int defaultSplitPosition = 220; //$NON-NLS-1$ private SplitLayoutPanel navigatorAndContentSplit = new SplitLayoutPanel() { @Override public void onResize() { super.onResize(); adjustContentPanelSize(); } }; private SplitLayoutPanel solutionNavigatorPanel = new SplitLayoutPanel(); private SolutionTree solutionTree = new SolutionTree(true); private FilesListPanel filesListPanel = new FilesListPanel(); private Timer resizeTimer; private MantleTabPanel contentTabPanel = new MantleTabPanel(true); private boolean showSolutionBrowser = false; private boolean isAdministrator = false; private boolean isScheduler = false; private PickupDragController dragController; private List<String> executableFileExtensions = new ArrayList<String>(); private JsArrayString filters; private Command ToggleLocalizedNamesCommand = new Command() { public void execute() { solutionTree.setShowLocalizedFileNames(!solutionTree.isShowLocalizedFileNames()); // update setting final String url = GWT.getHostPageBaseURL() + "api/user-settings/MANTLE_SHOW_LOCALIZED_FILENAMES"; //$NON-NLS-1$ RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url); builder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); try { builder.sendRequest("" + solutionTree.isShowLocalizedFileNames(), EmptyRequestCallback.getInstance()); } catch (RequestException e) { // showError(e); } } }; public Command toggleShowHideFilesCommand = new Command() { public void execute() { filesListPanel.setShowHiddenFiles(!solutionTree.isShowHiddenFiles()); solutionTree.setShowHiddenFiles(!solutionTree.isShowHiddenFiles()); solutionTree.setSelectedItem(solutionTree.getSelectedItem(), true); // send event final ShowHiddenFilesEvent event = new ShowHiddenFilesEvent(); event.setValue(solutionTree.isShowHiddenFiles()); EventBusUtil.EVENT_BUS.fireEvent(event); // update setting final String url = GWT.getHostPageBaseURL() + "api/user-settings/MANTLE_SHOW_HIDDEN_FILES"; //$NON-NLS-1$ RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url); try { builder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); builder.sendRequest("" + solutionTree.isShowHiddenFiles(), EmptyRequestCallback.getInstance()); RepositoryFileTreeManager.getInstance().fetchRepositoryFileTree(true, null, null, solutionTree.isShowHiddenFiles()); } catch (RequestException e) { // showError(e); } } }; public Command toggleUseDescriptionCommand = new Command() { public void execute() { solutionTree.setUseDescriptionsForTooltip(!solutionTree.isUseDescriptionsForTooltip()); solutionTree.setSelectedItem(solutionTree.getSelectedItem(), true); // send event final ShowDescriptionsEvent event = new ShowDescriptionsEvent(); event.setValue(solutionTree.isUseDescriptionsForTooltip()); EventBusUtil.EVENT_BUS.fireEvent(event); // update setting final String url = GWT.getHostPageBaseURL() + "api/user-settings/MANTLE_SHOW_DESCRIPTIONS_FOR_TOOLTIPS"; //$NON-NLS-1$ RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url); try { builder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); builder.sendRequest("" + solutionTree.isUseDescriptionsForTooltip(), EmptyRequestCallback.getInstance()); } catch (RequestException e) { // showError(e); } } }; private TreeListener treeListener = new TreeListener() { public void onTreeItemSelected(TreeItem item) { filesListPanel.setShowHiddenFiles(solutionTree.isShowHiddenFiles()); filesListPanel.populateFilesList(SolutionBrowserPanel.this, solutionTree, item, filters); filesListPanel.getToolbar().setEnabled(false); } public void onTreeItemStateChanged(TreeItem item) { solutionTree.setSelectedItem(item, false); } }; private static SolutionBrowserPanel instance; private SolutionBrowserPanel() { RootPanel.get().getElement().getStyle().setProperty("position", "relative"); dragController = new SolutionBrowserDragController(contentTabPanel); instance = this; ExecuteUrlInNewTabCommand.setupNativeHooks(); SolutionBrowserPanel.setupNativeHooks(this); solutionTree.addTreeListener(treeListener); initializeExecutableFileTypes(); buildUI(); EventBusUtil.EVENT_BUS.addHandler(SolutionBrowserSelectEvent.TYPE, new SolutionBrowserSelectEventHandler() { public void onTabSelected(SolutionBrowserSelectEvent event) { adjustContentPanelSize(); } }); } public static SolutionBrowserPanel getInstance() { if (instance == null) { instance = new SolutionBrowserPanel(); } return instance; } private void buildUI() { FlowPanel topPanel = new FlowPanel(); SimplePanel toolbarWrapper = new SimplePanel(); toolbarWrapper.setWidget(new BrowserToolbar()); toolbarWrapper.setStyleName("files-toolbar"); //$NON-NLS-1$ topPanel.add(toolbarWrapper); topPanel.add(new SolutionTreeWrapper(solutionTree)); solutionNavigatorPanel.setStyleName("puc-vertical-split-panel"); solutionNavigatorPanel.setWidth("100%"); solutionNavigatorPanel.addNorth(topPanel, 500); solutionNavigatorPanel.add(filesListPanel); navigatorAndContentSplit.setStyleName("puc-horizontal-split-panel"); navigatorAndContentSplit.addWest(solutionNavigatorPanel, 300); navigatorAndContentSplit.add(contentTabPanel); navigatorAndContentSplit.getElement().setAttribute("id", "solutionNavigatorAndContentPanel"); Window.addResizeHandler(new ResizeHandler() { @Override public void onResize(ResizeEvent event) { adjustContentPanelSize(); } }); solutionNavigatorPanel.getElement().getParentElement().addClassName("puc-navigator-panel"); solutionNavigatorPanel.getElement().getParentElement().removeAttribute("style"); setStyleName("panelWithTitledToolbar"); //$NON-NLS-1$ setHeight("100%"); //$NON-NLS-1$ setWidth("100%"); //$NON-NLS-1$ add(navigatorAndContentSplit); sinkEvents(Event.MOUSEEVENTS); navigatorAndContentSplit.getWidget(1).setWidth("100%"); navigatorAndContentSplit.getElement().getStyle().setHeight(1, Unit.PX); contentTabPanel.getElement().getStyle().setHeight(1, Unit.PX); } private static native String setElementHeightOffset(Element ele, int offset) /*-{ var h = 0; if ($wnd.innerHeight) { h = $wnd.innerHeight; } else if ($wnd.document.documentElement && $wnd.document.documentElement.clientHeight != 0) { h = $wnd.document.documentElement.clientHeight; } else if ($wnd.document.body) { h = $wnd.document.body.clientHeight; } var height = h + offset - 5; var offSetHeight = height + 'px'; ele.style.height = offSetHeight; }-*/; private void adjustHeight() { Element pucHeader = DOM.getElementById("pucHeader"); if (pucHeader != null) { final boolean isIE = RootPanel.getBodyElement().getClassName().contains("IE8") || RootPanel.getBodyElement().getClassName().contains("IE9") || RootPanel.getBodyElement().getClassName().contains("IE10"); final int offset = pucHeader.getOffsetHeight(); setElementHeightOffset(navigatorAndContentSplit.getElement(), -1 * offset); setElementHeightOffset(contentTabPanel.getElement(), isIE ? -1 * (offset + 36) : -1 * offset); Timer t = new Timer() { public void run() { setElementHeightOffset(navigatorAndContentSplit.getElement(), -1 * offset); setElementHeightOffset(contentTabPanel.getElement(), isIE ? -1 * (offset + 36) : -1 * offset); } }; t.schedule(100); } } private void adjustWidth() { int splitterWidth = navigatorAndContentSplit.getSplitterSize(); int adjustedWidth = solutionNavigatorPanel.getOffsetWidth() + splitterWidth; int width = this.getOffsetWidth() - adjustedWidth; if (width > 0) { contentTabPanel.setWidth(width + "px"); } } public void adjustContentPanelSize() { if (resizeTimer == null) { resizeTimer = new Timer() { public void run() { resizeTimer = null; adjustWidth(); adjustHeight(); } }; resizeTimer.schedule(100); } } private static native void setupNativeHooks(SolutionBrowserPanel solutionNavigator) /*-{ $wnd.sendMouseEvent = function (event) { //CHECKSTYLE IGNORE LineLength FOR NEXT 1 LINES return solutionNavigator.@org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPanel::mouseUp(Lcom/google/gwt/user/client/Event;)(event); } $wnd.mantle_setNavigatorShowing = function (show) { //CHECKSTYLE IGNORE LineLength FOR NEXT 1 LINES return solutionNavigator.@org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPanel::setNavigatorShowing(Z)(show); } $wnd.mantle_confirmBackgroundExecutionDialog = function (url) { //CHECKSTYLE IGNORE LineLength FOR NEXT 1 LINES @org.pentaho.mantle.client.dialogs.scheduling.ScheduleHelper::confirmBackgroundExecutionDialog(Ljava/lang/String;)(url); } $wnd.mantle_openRepositoryFile = function (pathToFile, mode) { //CHECKSTYLE IGNORE LineLength FOR NEXT 1 LINES solutionNavigator.@org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPanel::openFile(Ljava/lang/String;Ljava/lang/String;)(pathToFile, mode); } $wnd.mantle_addFavorite = function (pathToFile, title) { //CHECKSTYLE IGNORE LineLength FOR NEXT 1 LINES solutionNavigator.@org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPanel::addFavorite(Ljava/lang/String;Ljava/lang/String;)(pathToFile, title); } $wnd.mantle_removeFavorite = function (pathToFile) { //CHECKSTYLE IGNORE LineLength FOR NEXT 1 LINES solutionNavigator.@org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPanel::removeFavorite(Ljava/lang/String;)(pathToFile); } $wnd.mantle_isNavigatorShowing = function () { //CHECKSTYLE IGNORE LineLength FOR NEXT 1 LINES return solutionNavigator.@org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPanel::isNavigatorShowing()(); } $wnd.mantle_setDashboardsFilter = function (filters) { //CHECKSTYLE IGNORE LineLength FOR NEXT 1 LINES solutionNavigator.@org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPanel::setDashboardsFilter(Lcom/google/gwt/core/client/JsArrayString;)(filters); } }-*/; public void setDashboardsFilter(JsArrayString filters) { this.filters = filters; } /** * This method is called via JSNI */ private void mouseUp(Event e) { navigatorAndContentSplit.onBrowserEvent(e); } @SuppressWarnings("nls") public static String pathToId(String path) { String id = NameUtils.encodeRepositoryPath(path); return NameUtils.URLEncode(id); } public List<String> getExecutableFileExtensions() { return executableFileExtensions; } public void openFile(final String fileNameWithPath, final String mode) { FileCommand.COMMAND realMode = COMMAND.RUN; try { realMode = FileCommand.COMMAND.valueOf(mode.toUpperCase()); } catch (IllegalArgumentException e) { // bad mode passed in, using default } openFile(fileNameWithPath, realMode); } public void getFile(final String solutionPath, final SolutionFileHandler handler) { final String moduleBaseURL = GWT.getModuleBaseURL(); final String moduleName = GWT.getModuleName(); final String contextURL = moduleBaseURL.substring(0, moduleBaseURL.lastIndexOf(moduleName)); final String path = solutionPath; // Expecting some encoding here final String url = contextURL + "api/repo/files/" + pathToId(path) + "/properties"; //$NON-NLS-1$ RequestBuilder executableTypesRequestBuilder = new RequestBuilder(RequestBuilder.GET, url); executableTypesRequestBuilder.setHeader("accept", "application/json"); executableTypesRequestBuilder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); try { executableTypesRequestBuilder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable exception) { // showError(exception); } public void onResponseReceived(Request request, Response response) { if (response.getStatusCode() == Response.SC_OK) { JSONObject jsonObject = new JSONObject(); jsonObject.put("repositoryFileDto", (JSONObject) JSONParser.parseLenient(response.getText())); RepositoryFile repositoryFile = new RepositoryFile(jsonObject); handler.handle(repositoryFile); } } }); } catch (RequestException e) { // showError(e); } } public void openFile(final String fileNameWithPath, final FileCommand.COMMAND mode) { final String moduleBaseURL = GWT.getModuleBaseURL(); final String moduleName = GWT.getModuleName(); final String contextURL = moduleBaseURL.substring(0, moduleBaseURL.lastIndexOf(moduleName)); final String path = fileNameWithPath; // Expecting some encoding here final String url = contextURL + "api/repo/files/" + pathToId(path) + "/properties"; //$NON-NLS-1$ RequestBuilder executableTypesRequestBuilder = new RequestBuilder(RequestBuilder.GET, url); executableTypesRequestBuilder.setHeader("accept", "application/json"); executableTypesRequestBuilder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); try { executableTypesRequestBuilder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable exception) { // showError(exception); } public void onResponseReceived(Request request, Response response) { if (response.getStatusCode() == Response.SC_OK) { JSONObject jsonObject = new JSONObject(); jsonObject.put("repositoryFileDto", (JSONObject) JSONParser.parseLenient(response.getText())); RepositoryFile repositoryFile = new RepositoryFile(jsonObject); openFile(repositoryFile, mode); } } }); } catch (RequestException e) { // showError(e); } } public void openFile(final RepositoryFile repositoryFile, final FileCommand.COMMAND mode) { String fileNameWithPath = repositoryFile.getPath(); if (mode == FileCommand.COMMAND.EDIT) { PerspectiveManager.getInstance().setPerspective(PerspectiveManager.OPENED_PERSPECTIVE); editFile(repositoryFile); } else if (mode == FileCommand.COMMAND.SCHEDULE_NEW) { ScheduleHelper.createSchedule(repositoryFile, new ScheduleCallback(repositoryFile)); return; } else if (mode == FileCommand.COMMAND.SHARE) { ShareFileCommand sfc = new ShareFileCommand(); sfc.setSolutionPath(fileNameWithPath); sfc.execute(); } else { String url = null; String extension = ""; //$NON-NLS-1$ if (fileNameWithPath.lastIndexOf(FILE_EXTENSION_DELIMETER) > 0) { //$NON-NLS-1$ extension = fileNameWithPath.substring(fileNameWithPath.lastIndexOf(FILE_EXTENSION_DELIMETER) + 1); //$NON-NLS-1$ } if (!executableFileExtensions.contains(extension)) { url = getPath() + "api/repos/" + pathToId(fileNameWithPath) + "/content"; //$NON-NLS-1$ //$NON-NLS-2$ } else { ContentTypePlugin plugin = PluginOptionsHelper.getContentTypePlugin(fileNameWithPath); url = getPath() + "api/repos/" + pathToId(fileNameWithPath) + "/" //$NON-NLS-1$//$NON-NLS-2$ + (plugin != null && (plugin.getCommandPerspective(mode) != null) ? plugin.getCommandPerspective(mode) : "generatedContent"); //$NON-NLS-1$ } // force to open pdf files in another window due to issues with pdf readers in IE browsers // via class added on themeResources for IE browsers boolean pdfReaderEmbeded = RootPanel.getBodyElement().getClassName().contains("pdfReaderEmbeded"); if (mode == FileCommand.COMMAND.NEWWINDOW || (extension.equals("pdf") && pdfReaderEmbeded)) { Window.open(url, "_blank", "menubar=yes,location=no,resizable=yes,scrollbars=yes,status=no"); //$NON-NLS-1$ //$NON-NLS-2$ } else { PerspectiveManager.getInstance().setPerspective(PerspectiveManager.OPENED_PERSPECTIVE); contentTabPanel.showNewURLTab(repositoryFile.getTitle(), repositoryFile.getTitle(), url, true); addRecent(fileNameWithPath, repositoryFile.getTitle()); } } // Store representation of file in the frame for reference later when // save is called String fileName = repositoryFile.getName(); if (fileName.contains(FILE_EXTENSION_DELIMETER)) { fileName = fileName.substring(0, fileName.lastIndexOf(FILE_EXTENSION_DELIMETER)); } String filePath = repositoryFile.getPath(); if (filePath.endsWith(repositoryFile.getName())) { filePath = filePath.substring(0, filePath.lastIndexOf(repositoryFile.getName()) - 1); } SolutionFileInfo fileInfo = new SolutionFileInfo(); fileInfo.setName(fileName); fileInfo.setPath(filePath); fileInfo.setType(SolutionFileInfo.Type.XACTION); if (contentTabPanel != null && contentTabPanel.getCurrentFrame() != null) { contentTabPanel.getCurrentFrame().setFileInfo(fileInfo); } } public void addRecent(String fileNameWithPath, String title) { RecentPickItem recentPickItem = new RecentPickItem(fileNameWithPath); recentPickItem.setTitle(title); recentPickItem.setLastUse(System.currentTimeMillis()); RecentPickList.getInstance().add(recentPickItem); } public void removeRecent(String fileNameWithPath) { RecentPickItem recentItem = new RecentPickItem(fileNameWithPath); RecentPickList.getInstance().remove(recentItem); } public void addFavorite(String fileNameWithPath, String title) { FavoritePickItem favoritePickItem = new FavoritePickItem(fileNameWithPath); favoritePickItem.setTitle(title); FavoritePickList.getInstance().add(favoritePickItem); } public void removeFavorite(String fileNameWithPath) { FavoritePickItem favoritePickItem = new FavoritePickItem(fileNameWithPath); FavoritePickList.getInstance().remove(favoritePickItem); } public void setDeepLinkUrl(String fileNameWithPath) { ContentTypePlugin plugin = PluginOptionsHelper.getContentTypePlugin(fileNameWithPath); if (plugin != null && plugin.hasCommand(COMMAND.RUN)) { String url = getPath() + "api/repos/" + pathToId(fileNameWithPath) + "/" //$NON-NLS-1$//$NON-NLS-2$ + plugin.getCommandPerspective(COMMAND.RUN); //$NON-NLS-3$ contentTabPanel.getCurrentFrame().setDeepLinkUrl(url); } } protected void initializeExecutableFileTypes() { final String moduleBaseURL = GWT.getModuleBaseURL(); final String moduleName = GWT.getModuleName(); final String contextURL = moduleBaseURL.substring(0, moduleBaseURL.lastIndexOf(moduleName)); final String url = contextURL + "api/repos/executableTypes"; //$NON-NLS-1$ RequestBuilder executableTypesRequestBuilder = new RequestBuilder(RequestBuilder.GET, url); executableTypesRequestBuilder.setHeader("accept", "application/json"); executableTypesRequestBuilder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); try { executableTypesRequestBuilder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable exception) { // showError(exception); } public void onResponseReceived(Request request, Response response) { if (response.getStatusCode() == Response.SC_OK) { JSONObject jsonObject = (JSONObject) JSONParser.parse(response.getText()); JSONArray jsonList = (JSONArray) jsonObject.get("executableFileTypeDto"); for (int i = 0; i < jsonList.size(); i++) { JSONObject executableType = (JSONObject) jsonList.get(i); executableFileExtensions.add(executableType.get("extension").isString().stringValue()); } } } }); } catch (RequestException e) { // showError(e); } } public void editFile(final RepositoryFile file) { if (file.getName().endsWith(".analysisview.xaction")) { //$NON-NLS-1$ openFile(file, COMMAND.RUN); } else { // check to see if a plugin supports editing ContentTypePlugin plugin = PluginOptionsHelper.getContentTypePlugin(file.getName()); if (plugin != null && plugin.hasCommand(COMMAND.EDIT)) { // load the editor for this plugin String editUrl = getPath() + "api/repos/" + pathToId(file.getPath()) + "/" //$NON-NLS-1$//$NON-NLS-2$ + (plugin != null && (plugin.getCommandPerspective(COMMAND.EDIT) != null) ? plugin.getCommandPerspective(COMMAND.EDIT) : "editor"); //$NON-NLS-1$ // See if it's already loaded for (int i = 0; i < contentTabPanel.getTabCount(); i++) { Widget w = contentTabPanel.getTab(i).getContent(); if (w instanceof IFrameTabPanel && ((IFrameTabPanel) w).getUrl().endsWith(editUrl)) { // Already up, select and exit contentTabPanel.selectTab(i); return; } } contentTabPanel.showNewURLTab(Messages.getString("editingColon") + file.getTitle(), Messages.getString("editingColon") + file.getTitle(), editUrl, true); //$NON-NLS-1$ //$NON-NLS-2$ } else { MessageDialogBox dialogBox = new MessageDialogBox(Messages.getString("error"), //$NON-NLS-1$ Messages.getString("cannotEditFileType"), //$NON-NLS-1$ true, false, true); dialogBox.center(); } } } public void editFile() { if (filesListPanel.getSelectedFileItems() == null || filesListPanel.getSelectedFileItems().size() != 1) { return; } RepositoryFile file = filesListPanel.getSelectedFileItems().get(0).getRepositoryFile(); if (file.getName().endsWith(".analysisview.xaction")) { //$NON-NLS-1$ openFile(file, COMMAND.RUN); } else { // check to see if a plugin supports editing ContentTypePlugin plugin = PluginOptionsHelper.getContentTypePlugin(file.getName()); if (plugin != null && plugin.hasCommand(COMMAND.EDIT)) { // load the editor for this plugin String editUrl = getPath() + "api/repos/" + pathToId(file.getPath()) + "/" //$NON-NLS-1$//$NON-NLS-2$ + (plugin != null && (plugin.getCommandPerspective(COMMAND.EDIT) != null) ? plugin.getCommandPerspective(COMMAND.EDIT) : "editor"); //$NON-NLS-1$ // See if it's already loaded for (int i = 0; i < contentTabPanel.getTabCount(); i++) { Widget w = contentTabPanel.getTab(i).getContent(); if (w instanceof IFrameTabPanel && ((IFrameTabPanel) w).getUrl().endsWith(editUrl)) { // Already up, select and exit contentTabPanel.selectTab(i); return; } } contentTabPanel.showNewURLTab(Messages.getString("editingColon") + file.getTitle(), //$NON-NLS-1$ Messages.getString("editingColon") + file.getTitle(), editUrl, true); //$NON-NLS-1$ } else { MessageDialogBox dialogBox = new MessageDialogBox(Messages.getString("error"), //$NON-NLS-1$ Messages.getString("cannotEditFileType"), //$NON-NLS-1$ true, false, true); dialogBox.center(); } } } public void executeActionSequence(final FileCommand.COMMAND mode) { if (filesListPanel.getSelectedFileItems() == null || filesListPanel.getSelectedFileItems().size() != 1) { return; } // open in content panel AbstractCommand authCmd = new AbstractCommand() { protected void performOperation() { performOperation(false); } protected void performOperation(boolean feedback) { final FileItem selectedFileItem = filesListPanel.getSelectedFileItems().get(0); String url = null; url = "api/repo/files/" //$NON-NLS-1$ + SolutionBrowserPanel.pathToId( filesListPanel.getSelectedFileItems().get(0).getRepositoryFile().getPath()) + "/generatedContent"; //$NON-NLS-1$ url = getPath() + url; if (mode == FileCommand.COMMAND.BACKGROUND) { MessageDialogBox dialogBox = new MessageDialogBox(Messages.getString("info"), //$NON-NLS-1$ Messages.getString("backgroundExecutionWarning"), //$NON-NLS-1$ true, false, true); dialogBox.center(); url += "&background=true"; //$NON-NLS-1$ RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); try { builder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); builder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable exception) { MessageDialogBox dialogBox = new MessageDialogBox(Messages.getString("error"), //$NON-NLS-1$ Messages.getString("couldNotBackgroundExecute"), false, false, true); //$NON-NLS-1$ dialogBox.center(); } public void onResponseReceived(Request request, Response response) { } }); } catch (RequestException e) { // ignored } } else if (mode == FileCommand.COMMAND.NEWWINDOW) { // popup blockers might attack this Window.open(url, "_blank", "menubar=yes,location=no,resizable=yes,scrollbars=yes,status=no"); //$NON-NLS-1$ //$NON-NLS-2$ } else if (mode == FileCommand.COMMAND.SUBSCRIBE) { final String myurl = url + "&subscribepage=yes"; //$NON-NLS-1$ contentTabPanel.showNewURLTab(selectedFileItem.getLocalizedName(), selectedFileItem.getLocalizedName(), myurl, true); } else { contentTabPanel.showNewURLTab(selectedFileItem.getLocalizedName(), selectedFileItem.getLocalizedName(), url, true); } } }; authCmd.execute(); } public MantleTabPanel getContentTabPanel() { return contentTabPanel; } public boolean isAdministrator() { return isAdministrator; } public void setAdministrator(boolean isAdministrator) { this.isAdministrator = isAdministrator; solutionTree.setAdministrator(isAdministrator); } public boolean isScheduler() { return isScheduler; } public void setScheduler(boolean isScheduler) { this.isScheduler = isScheduler; } public boolean isNavigatorShowing() { return showSolutionBrowser; } public void setNavigatorShowing(final boolean showSolutionBrowser) { this.showSolutionBrowser = showSolutionBrowser; if (showSolutionBrowser) { solutionNavigatorPanel.setVisible(true); //$NON-NLS-1$ navigatorAndContentSplit.setWidgetSize(solutionNavigatorPanel, defaultSplitPosition); // Show splitter pane if (this.navigatorAndContentSplit != null) { for (int i = 0; i < this.navigatorAndContentSplit.getWidgetCount(); i++) { if (this.navigatorAndContentSplit.getWidget(i).getStyleName() .equals("gwt-SplitLayoutPanel-HDragger")) { this.navigatorAndContentSplit.getWidget(i).getElement().getParentElement() .removeClassName("hidden"); this.contentTabPanel.getElement().getParentElement().removeClassName("alignleft"); } } } } else { // Hide splitter pane if (this.navigatorAndContentSplit != null) { for (int i = 0; i < this.navigatorAndContentSplit.getWidgetCount(); i++) { if (this.navigatorAndContentSplit.getWidget(i).getStyleName() .equals("gwt-SplitLayoutPanel-HDragger")) { this.navigatorAndContentSplit.getWidget(i).getElement().getParentElement() .setClassName("hidden"); this.contentTabPanel.getElement().getParentElement().setClassName("alignleft"); } } } navigatorAndContentSplit.setWidgetSize(solutionNavigatorPanel, 0); solutionNavigatorPanel.setVisible(false); } adjustContentPanelSize(); } public SolutionTree getSolutionTree() { return solutionTree; } public FilesListPanel getFilesListPanel() { return filesListPanel; } public PickupDragController getDragController() { return dragController; } public void setDragController(PickupDragController dragController) { this.dragController = dragController; } public String getPath() { String mypath = Window.Location.getPath(); if (!mypath.endsWith("/")) { //$NON-NLS-1$ mypath = mypath.substring(0, mypath.lastIndexOf("/") + 1); //$NON-NLS-1$ } mypath = mypath.replaceAll("/mantle/", "/"); //$NON-NLS-1$ //$NON-NLS-2$ if (!mypath.endsWith("/")) { //$NON-NLS-1$ mypath = "/" + mypath; //$NON-NLS-1$ } return mypath; } private static final native String encodeUri(String URI) /*-{ return encodeURIComponent(URI); }-*/; }