/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.ui.action;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.ui.actions.RefreshAction;
import org.jboss.tools.common.model.ui.ModelUIPlugin;
/**
*
* @deprecated use org.jboss.tools.common.model.ui.internal.handlers.AddNatureHandler
*
*/
@Deprecated
public abstract class AddNatureActionDelegate implements IObjectActionDelegate, IWorkbenchWindowActionDelegate {
protected IProject project;
public AddNatureActionDelegate() {}
public void setActivePart(IAction action, IWorkbenchPart targetPart) {}
public void run(IAction action) {
if (action != null && !action.isEnabled()) return;
if(project == null) {
if(action != null) {
action.setEnabled(false);
}
return;
}
doRun();
}
protected void doRun() {
if(project == null) return;
RefreshAction refreshAction = new RefreshAction(ModelUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell());
refreshAction.selectionChanged(new StructuredSelection(project));
refreshAction.run();
IWizard wizard = getWizard(project);
WizardDialog dialog = new WizardDialog(ModelUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell(), wizard);
dialog.open();
}
protected abstract IWizard getWizard(IProject project);
protected abstract String getNatureID();
public void selectionChanged(IAction action, ISelection selection) {
project = null;
if (selection instanceof IStructuredSelection) {
IStructuredSelection structuredSelection = (IStructuredSelection)selection;
if (structuredSelection.size() == 1) {
Object object = structuredSelection.getFirstElement();
if(object instanceof IResource) {
project = ((IResource)object).getProject();
} else if(object instanceof IJavaElement) {
project = ((IJavaElement)object).getJavaProject().getProject();
}
if(project != null)
try {
if (!project.isOpen() || project.hasNature(getNatureID()))
project = null;
} catch (CoreException ex) {
project = null;
ModelUIPlugin.getPluginLog().logError(ex);
}
}
}
if(action != null) action.setEnabled(project != null);
}
protected String findWebXML(String root) {
if(root == null) return ""; //$NON-NLS-1$
File rf = new File(root);
if(!rf.isDirectory()) return ""; //$NON-NLS-1$
List<File> folders = new ArrayList<File>();
folders.add(rf);
return findWebXML(folders);
}
protected String findWebXML(List<File> folders) {
if(folders == null || folders.size() == 0) return ""; //$NON-NLS-1$
for (File f: folders) {
if(!f.isDirectory()) continue;
String s = f.getAbsolutePath().replace('\\', '/') + "/WEB-INF/web.xml"; //$NON-NLS-1$
if(new File(s).isFile()) return s;
}
List<File> nextLevelFolders = new ArrayList<File>();
for (File f: folders) {
File[] fs = f.listFiles();
if(fs == null) continue;
for (int i = 0; i < fs.length; i++) {
if(fs[i].isDirectory()) nextLevelFolders.add(fs[i]);
}
}
return findWebXML(nextLevelFolders);
}
public void dispose() {}
protected boolean isWindowAction;
public void init(IWorkbenchWindow window) {
isWindowAction = true;
}
}