Package org.fusesource.ide.commons.util

Source Code of org.fusesource.ide.commons.util.IFiles

/*******************************************************************************
* Copyright (c) 2013 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 org.fusesource.ide.commons.util;

import java.io.File;
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.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.content.IContentDescription;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;

public class IFiles {

  public static File toFile(IFile file) {
    File f = file.getRawLocation() != null ? file.getRawLocation().toFile() : null;
    if (f == null) f = file.getLocation() != null ? file.getLocation().toFile() : null;
    if (f == null) f = file.getFullPath() != null ? file.getFullPath().toFile() : null;
    return f;
  }
 
  public static List<IFile> filter(IContainer container, Predicate<IFile> filter) throws CoreException {
    List<IFile> list = new ArrayList<IFile>();
    filter(container, filter, list);
    return list;
  }

  protected static void filter(IContainer container, Predicate<IFile> filter, List<IFile> list) throws CoreException {
    IResource[] members = container.members();
    for (IResource resource : members) {
      if (resource instanceof IFile) {
        IFile file = (IFile) resource;
        if (filter.matches(file)) {
          list.add(file);
        }
      } else if (resource instanceof IContainer) {
        filter((IContainer) resource, filter, list);
      }
    }
  }

  /**
   * Returns the file name relative to the source directory or project it is contained
   * inside
   */
  public static String getRelativeFileUri(IFile file) {
    IContainer parent = file.getParent();
 
    while (parent != null && !(parent instanceof IProject)) {
      IJavaElement element = JavaCore.create(parent);
 
      // lets use package relative URIs for files
      if (element != null && element.exists() && element instanceof IPackageFragmentRoot) {
        IPath parentFullPath = parent.getFullPath();
        int segmentCount = parentFullPath.segmentCount();
        IPath relativePath = file.getFullPath().removeFirstSegments(segmentCount);
        return relativePath.toString();
      }
      parent = parent.getParent();
    }
    return file.getProjectRelativePath().toString();
  }

  public static boolean isContentTypeId(IFile file, String id) throws CoreException {
    return isContentType(file.getContentDescription(), id);
  }

  public static boolean isContentType(IContentDescription contentDescription, String id) {
    boolean answer = false;
    if (contentDescription != null) {
      return isContentType(contentDescription.getContentType(), id);
    }
    return answer;
  }

  /**
   * Recursively walks the content type hierarchy to find if the given content type matches the id
   */
  public static boolean isContentType(IContentType contentType, String id) {
    if (contentType != null) {
      if (Objects.equal(contentType.getId(), id)) {
        return true;
      }
      IContentType baseType = contentType.getBaseType();
      if (baseType != null) {
        return isContentType(baseType, id);
      }
    }
    return false;
  }

  public static boolean isTextContentType(IFile file) throws CoreException {
    return isContentTypeId(file, CONTENT_TYPE_TEXT);
  }
 
  public static final String CONTENT_TYPE_XML = "org.eclipse.core.runtime.xml";
  public static final String CONTENT_TYPE_TEXT = "org.eclipse.core.runtime.text";
}
TOP

Related Classes of org.fusesource.ide.commons.util.IFiles

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.