/*******************************************************************************
* Copyright (c) 2012 VMware, Inc.
* 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
*
* Contributors:
* VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.metadata.actions;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.actions.BaseSelectionListenerAction;
import org.springframework.ide.eclipse.beans.core.internal.model.BeansModelUtils;
import org.springframework.ide.eclipse.beans.core.model.IBeansModelElement;
import org.springframework.ide.eclipse.beans.core.model.IBeansProject;
import org.springframework.ide.eclipse.metadata.MetadataUIImages;
import org.springframework.ide.eclipse.metadata.ui.RequestMappingMethodToClassMap;
import org.springframework.ide.eclipse.metadata.ui.RequestMappingView;
import org.springframework.ide.eclipse.metadata.ui.RequestMappingViewLabelProvider;
import org.springframework.ide.eclipse.metadata.wizards.OpenRequestMappingUrlWizard;
/**
* @author Leo Dos Santos
* @author Christian Dupuis
*/
public class OpenInBrowserAction extends BaseSelectionListenerAction {
private RequestMappingView viewPart;
private RequestMappingViewLabelProvider labelProvider;
private IBeansModelElement element;
public OpenInBrowserAction(RequestMappingView viewPart,
RequestMappingViewLabelProvider labelProvider) {
super(Messages.OpenInBrowserAction_TITLE);
setImageDescriptor(MetadataUIImages.DESC_OBJS_BROWSER);
this.viewPart = viewPart;
this.labelProvider = labelProvider;
}
@Override
protected boolean updateSelection(IStructuredSelection selection) {
element = viewPart.getInput();
if (getProject(element) == null) {
return false;
}
Object obj = selection.getFirstElement();
if (obj instanceof RequestMappingMethodToClassMap) {
String methodType = labelProvider.getColumnText(obj,
RequestMappingView.COLUMN_REQUEST_METHOD);
return "RequestMethod.GET".equalsIgnoreCase(methodType); //$NON-NLS-1$
}
return false;
}
@Override
public void run() {
String url = labelProvider.getColumnText(getStructuredSelection()
.getFirstElement(), RequestMappingView.COLUMN_URL);
if (url != null) {
IWizard wizard = new OpenRequestMappingUrlWizard(
(RequestMappingMethodToClassMap) getStructuredSelection()
.getFirstElement(), labelProvider,
getProject(element));
Shell shell = viewPart.getSite().getShell();
if (shell != null) {
WizardDialog dialog = new WizardDialog(shell, wizard);
dialog.create();
dialog.setBlockOnOpen(true);
dialog.open();
}
}
}
private IProject getProject(IBeansModelElement modelElement) {
if (modelElement == null) {
return null;
}
if (modelElement instanceof IBeansProject) {
return ((IBeansProject) modelElement).getProject();
}
return BeansModelUtils.getParentOfClass(modelElement,
IBeansProject.class).getProject();
}
}