Java tutorial
/******************************************************************************* * Copyright (c) 2007-2014 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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 * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package com.jboss.devstudio.core.intro.action; import java.text.MessageFormat; import java.util.Properties; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.IPerspectiveDescriptor; import org.eclipse.ui.IPerspectiveRegistry; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.WorkbenchException; import org.eclipse.ui.internal.IPreferenceConstants; import org.eclipse.ui.internal.Workbench; import org.eclipse.ui.internal.util.PrefUtil; import org.eclipse.ui.intro.IIntroManager; import org.eclipse.ui.intro.IIntroPart; import org.eclipse.ui.intro.IIntroSite; import org.eclipse.ui.intro.config.IIntroAction; import com.jboss.devstudio.core.Activator; import com.jboss.devstudio.core.Messages; public class OpenPerspectiveIntroURLAction implements IIntroAction { private IWorkbenchWindow workbenchWindow; public void run(IIntroSite site, Properties params) { if (params == null || params.getProperty("perspectiveId", null) == null) //$NON-NLS-1$ return; String perspectiveId = params.getProperty("perspectiveId", null); //$NON-NLS-1$ workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (workbenchWindow == null) { return; } if (perspectiveId != null && perspectiveId.trim().length() > 0) { if (openNewWindow()) { try { IWorkbench workbench = getWorkbench(); IAdaptable input = ((Workbench) workbench).getDefaultPageInput(); workbench.openWorkbenchWindow(perspectiveId, input); } catch (WorkbenchException e) { Activator.logError(Activator.PLUGIN_ID, e); } } else { IWorkbenchPage activePage = getWorkbench().getActiveWorkbenchWindow().getActivePage(); if (activePage != null) { IPerspectiveRegistry reg = PlatformUI.getWorkbench().getPerspectiveRegistry(); IPerspectiveDescriptor perspectiveDescr = reg == null ? null : reg.findPerspectiveWithId(perspectiveId); IPerspectiveDescriptor activePerspectiveDescr = activePage.getPerspective(); if (perspectiveDescr != null && perspectiveDescr != activePerspectiveDescr) { activePage.setPerspective(perspectiveDescr); } else { if (perspectiveDescr == null) { // Log error in case the target perspective is absent String errorText = MessageFormat.format(Messages.INTRO_PERSPECTIVE_NOT_FOUND, perspectiveId); Activator.logError(Activator.PLUGIN_ID, errorText); } // If perspective descriptor is null or there is already selected the perspective with id == perspectiveId // then just close Welcome Screen (set the standby mode for the Welcome) IIntroManager intro = activePage.getWorkbenchWindow().getWorkbench().getIntroManager(); IIntroPart part = intro.getIntro(); if (part == null) { return; } if (!intro.isIntroStandby(part)) { intro.setIntroStandby(part, true); } } } else { try { IWorkbench workbench = getWorkbench(); IAdaptable input = ((Workbench) workbench).getDefaultPageInput(); getWorkbench().getActiveWorkbenchWindow().openPage(perspectiveId, input); } catch (WorkbenchException e) { Activator.logError(Activator.PLUGIN_ID, e); } } } } } boolean openNewWindow() { try { IPreferenceStore store = PrefUtil.getInternalPreferenceStore(); IWorkbenchPage activePage = getWorkbench().getActiveWorkbenchWindow().getActivePage(); return (null != activePage && null != activePage.getPerspective() && IPreferenceConstants.OPM_NEW_WINDOW == store.getInt(IPreferenceConstants.OPEN_PERSP_MODE)); } catch (Throwable x) { return false; } } IWorkbench getWorkbench() { return PlatformUI.getWorkbench(); } }