/******************************************************************************* * 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.file; import java.util.*; import org.eclipse.core.resources.*; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.*; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.*; import org.eclipse.ui.*; import org.jboss.tools.common.meta.action.*; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.common.model.filesystems.FileSystemsHelper; import org.jboss.tools.common.model.project.IModelNature; import org.jboss.tools.common.model.util.EclipseResourceUtil; import org.jboss.tools.common.model.ui.ModelUIPlugin; /** * * @deprecated use org.jboss.tools.common.model.ui.internal.handlers.ModelResourceHandler * */ @Deprecated public class ModelResourceActionDelegate implements IObjectActionDelegate, IWorkbenchWindowActionDelegate { IResource resource = null; protected XModelObject object; protected List<XModelObject> objects = new ArrayList<XModelObject>(); public void setActivePart(IAction action, IWorkbenchPart targetPart) { } public void run(IAction action) { if (action.isEnabled()) doRun(); } private void doRun() { Properties p = new Properties(); initProperties(p); if(objects.size() < 2) { XActionInvoker.invoke(getActionPath(), object, p); } else { XModelObject[] os = objects.toArray(new XModelObject[0]); XActionInvoker.invoke(getActionPath(), object, os, p); } } protected void initProperties(Properties p) { } protected String getActionPath() { return null; } public void selectionChanged(IAction action, ISelection selection) { resource = null; object = null; objects.clear(); if (selection instanceof IStructuredSelection) { IStructuredSelection structuredSelection = (IStructuredSelection)selection; if (structuredSelection.size() == 1) { Object o = structuredSelection.getFirstElement(); process(o); if(object != null) { action.setEnabled(compureEnabled()); } else { object = getObjectByResource(resource); action.setEnabled(compureEnabled()); } } else if(structuredSelection.size() > 1) { Iterator it = structuredSelection.iterator(); while(it.hasNext()) { Object o = it.next(); object = null; process(o); if(object == null && resource != null) { object = getObjectByResource(resource); } if(object != null) { objects.add(object); } else { resource = null; objects.clear(); action.setEnabled(compureEnabled()); return; } } action.setEnabled(compureEnabled()); } } } private void process(Object o) { if(checkModelObject(o)) {} else if (checkFile(o)) {} else if(checkProject(o)) {} else if(checkFolder(o)) {} } XModelObject getObjectByResource(IResource resource) { XModelObject object = null; if(resource != null && !isRelevantProject(resource.getProject())) { resource = null; } if(resource == null) { object = null; } else if(resource instanceof IProject) { IModelNature n = EclipseResourceUtil.getModelNature((IProject)resource); if(n != null) { object = FileSystemsHelper.getFileSystems(n.getModel()); } else { object = null; } } else { object = EclipseResourceUtil.getObjectByResource(resource); if(object == null) object = EclipseResourceUtil.createObjectForResource(resource); if(object != null) checkModelObject(object); } return object; } protected boolean isRelevantProject(IProject project) { return true; } protected boolean checkModelObject(Object object) { if(object instanceof XModelObject) { this.object = (XModelObject)object; return true; } return false; } protected boolean checkFile(Object object) { if(object instanceof IFile) { if(isSupportingImplementation(IFile.class)) { resource = (IFile)object; } else if(isWindowAction && isSupportingImplementation(IProject.class)) { resource = ((IFile)object).getProject(); } } else if(object instanceof IClassFile) { if(isSupportingImplementation(IFile.class)) { try { resource = ((IClassFile)object).getCorrespondingResource(); } catch (JavaModelException e) { //ignore } } else if(isWindowAction && isSupportingImplementation(IJavaProject.class)) { object = ((IClassFile)object).getJavaProject(); } } else { return false; } return true; } protected boolean checkFolder(Object object) { if(object instanceof IFolder) { if(isSupportingImplementation(IFolder.class)) { resource = (IFolder)object; } else if(isWindowAction && isSupportingImplementation(IProject.class)) { resource = ((IResource)object).getProject(); } } else { return false; } return true; } protected boolean checkProject(Object object) { IProject project = null; if(object instanceof IProject) { if(!isSupportingImplementation(IProject.class)) return true; project = (IProject)object; } else if(object instanceof IJavaProject) { if(!isSupportingImplementation(IJavaProject.class)) return true; project = ((IJavaProject)object).getProject(); } else { return false; } if (project != null && (!project.isOpen() || !hasModelNature(project))) project = null; resource = project; return true; } protected boolean hasModelNature(IProject project) { String[] s = EclipseResourceUtil.getModelNatureNames(); for (int i = 0; i < s.length; i++) { try { if(project.hasNature(s[i])) return true; } catch (CoreException e) { ModelUIPlugin.getPluginLog().logError(e); } } return false; } protected boolean isSupportingImplementation(Class cls) { return (cls == IFile.class || cls == XModelObject.class); } protected boolean compureEnabled() { boolean enabled = (object != null); if(enabled) { XAction a = object.getModelEntity().getActionList().getAction(getActionPath()); enabled = a != null && ((objects.size() < 2) ? a.isEnabled(object) : a.isEnabled(object, objects.toArray(new XModelObject[0]))); } return enabled; } public void dispose() {} protected boolean isWindowAction; public void init(IWorkbenchWindow window) { isWindowAction = true; } }