Java tutorial
/* * Copyright (C) 2017 CenturyLink, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.centurylink.mdw.plugin; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaModel; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import com.centurylink.mdw.plugin.project.WorkflowProjectManager; import com.centurylink.mdw.plugin.project.model.WorkflowProject; /** * Utility for obtaining a desired resource type from an IAdaptable or Object. */ public class ResourceWrapper { private IAdaptable adaptable; private Object resourceObj; public ResourceWrapper(IAdaptable adaptable) { this.adaptable = adaptable; } public ResourceWrapper(Object resourceObj) { this.resourceObj = resourceObj; } public IFile getFile() { IFile file = null; if (adaptable != null) { file = (IFile) adaptable.getAdapter(IFile.class); if (file == null) { if (adaptable instanceof IJavaElement) { IResource res = ((IJavaElement) adaptable).getResource(); file = (IFile) res.getAdapter(IFile.class); if (file == null) { if (adaptable instanceof IJavaElement) file = (IFile) ((IJavaElement) adaptable).getResource().getAdapter(IFile.class); } } } } else { file = (resourceObj instanceof IFile) ? (IFile) resourceObj : null; if (file == null) { if (resourceObj instanceof IJavaElement) file = (IFile) ((IJavaElement) resourceObj).getResource().getAdapter(IFile.class); } } return file; } public IFolder getFolder() throws JavaModelException { IFolder folder = null; if (adaptable != null) { folder = (IFolder) adaptable.getAdapter(IFolder.class); if (folder == null) { // try as java element IPackageFragmentRoot pkgFragmentRoot = (IPackageFragmentRoot) adaptable .getAdapter(IPackageFragmentRoot.class); if (pkgFragmentRoot != null) { IResource res = pkgFragmentRoot.getCorrespondingResource(); folder = (IFolder) res.getAdapter(IFolder.class); } else { IPackageFragment pkgFragment = (IPackageFragment) adaptable.getAdapter(IPackageFragment.class); if (pkgFragment != null) { IResource res = pkgFragment.getCorrespondingResource(); folder = (IFolder) res.getAdapter(IFolder.class); } } } } else { if (resourceObj instanceof IFolder) { folder = (IFolder) resourceObj; } else if (resourceObj instanceof IPackageFragmentRoot) { IPackageFragmentRoot pkgFragmentRoot = (IPackageFragmentRoot) resourceObj; IResource res = pkgFragmentRoot.getCorrespondingResource(); folder = (IFolder) res.getAdapter(IFolder.class); } else if (resourceObj instanceof IPackageFragment) { IPackageFragment pkgFragment = (IPackageFragment) resourceObj; IResource res = pkgFragment.getCorrespondingResource(); folder = (IFolder) res.getAdapter(IFolder.class); } } return folder; } public IProject getProject() { IProject project = null; if (adaptable != null) { project = (IProject) adaptable.getAdapter(IProject.class); if (project == null) { IJavaProject javaProj = (IJavaProject) adaptable.getAdapter(IJavaProject.class); if (javaProj == null) { if (adaptable instanceof IJavaElement) javaProj = ((IJavaElement) adaptable).getJavaProject(); } if (javaProj != null) project = javaProj.getProject(); } } else { if (resourceObj instanceof IProject) project = (IProject) resourceObj; else if (resourceObj instanceof IJavaProject) project = ((IJavaProject) resourceObj).getProject(); else if (resourceObj instanceof IJavaElement) project = ((IJavaElement) resourceObj).getJavaProject().getProject(); } return project; } public IJavaProject getJavaProject() throws JavaModelException { IJavaProject javaProject = null; IProject project = getProject(); if (project != null) { IJavaModel javaModel = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()); if (javaModel != null) javaProject = javaModel.getJavaProject(project.getName()); } return javaProject; } public WorkflowProject getWorkflowProject() { WorkflowProject workflowProject = null; IProject project = getProject(); if (project != null) workflowProject = WorkflowProjectManager.getInstance().getWorkflowProject(project); return workflowProject; } public IProject getOwningProject() throws JavaModelException { IProject project = getProject(); if (project == null) { IFolder folder = getFolder(); if (folder != null) { project = folder.getProject(); } else { IFile file = getFile(); if (file != null) project = file.getProject(); } } return project; } public IJavaProject getOwningJavaProject() throws JavaModelException { IJavaProject javaProject = null; IProject owningProject = getOwningProject(); if (owningProject != null) { IJavaModel javaModel = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()); if (javaModel != null) javaProject = javaModel.getJavaProject(owningProject.getName()); } return javaProject; } public WorkflowProject getOwningWorkflowProject() throws JavaModelException { WorkflowProject owningWorkflowProject = null; IProject owningProject = getOwningProject(); if (owningProject != null) owningWorkflowProject = WorkflowProjectManager.getInstance().getWorkflowProject(owningProject); return owningWorkflowProject; } /** * Returns all subfolder members recursively. Returns null if resource * cannot be converted to an IContainer. */ public List<IFolder> getAllFolders() throws CoreException { IContainer container = null; if (adaptable != null) { container = (IContainer) adaptable.getAdapter(IContainer.class); } else { if (resourceObj instanceof IContainer) container = (IContainer) resourceObj; } if (container == null) // try as folder (for package fragments) { IFolder folder = getFolder(); if (folder != null) container = folder; } if (container == null) { return null; } else { List<IFolder> folders = new ArrayList<IFolder>(); findFolders(container, folders); return folders; } } private void findFolders(IContainer container, List<IFolder> addTo) throws CoreException { for (IResource res : container.members(false)) { IFolder subFolder = (IFolder) res.getAdapter(IFolder.class); if (subFolder == null) { ResourceWrapper subWrapper = new ResourceWrapper(res); subFolder = subWrapper.getFolder(); } if (subFolder != null) { addTo.add(subFolder); findFolders(subFolder, addTo); } } } }