
org.eclipse.debug.internal.ui.ResourceExtender Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.eclipse.debug.ui Show documentation
Show all versions of org.eclipse.debug.ui Show documentation
This is org.eclipse.debug.ui jar used by Scout SDK
The newest version!
/*******************************************************************************
* Copyright (c) 2000, 2015 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.internal.ui;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Pattern;
import org.eclipse.core.expressions.PropertyTester;
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.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.content.IContentDescription;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.ui.IPathEditorInput;
/**
* ResourceExtender provides property testers for the XML expression language
* evaluation. We provide a copy in Debug so that launch shortcuts can add
* contextual launch enablement that does not require their plugins to be
* loaded. Copied from
* org.eclipse.jdt.internal.corext.refactoring.participants.xml.ResourceExtender
*/
public class ResourceExtender extends PropertyTester {
private static final String PROPERTY_MATCHES_PATTERN = "matchesPattern"; //$NON-NLS-1$
private static final String PROJECT_NATURE = "projectNature"; //$NON-NLS-1$
private static final String PROPERTY_MATCHES_CONTENT_TYPE = "matchesContentType"; //$NON-NLS-1$
/* (non-Javadoc)
* @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
*/
@Override
public boolean test(Object receiver, String method, Object[] args, Object expectedValue) {
IResource resource = ((IAdaptable) receiver).getAdapter(IResource.class);
if (resource == null) {
if (PROPERTY_MATCHES_CONTENT_TYPE.equals(method)) {
IPathEditorInput editorInput = ((IAdaptable) receiver).getAdapter(IPathEditorInput.class);
if (editorInput != null) {
IPath path= editorInput.getPath();
File file= path.toFile();
if (file.exists()) {
try (FileReader reader = new FileReader(file)) {
IContentType contentType= Platform.getContentTypeManager().getContentType((String)expectedValue);
IContentDescription description= contentType.getDescriptionFor(reader, IContentDescription.ALL);
if (description != null) {
return matchesContentType(description.getContentType(), (String)expectedValue);
}
} catch (FileNotFoundException e) {
return false;
} catch (IOException e) {
return false;
}
}
}
}
} else {
if (PROPERTY_MATCHES_PATTERN.equals(method)) {
String fileName = resource.getName();
String expected = (String) expectedValue;
expected = expected.replaceAll("\\.", "\\\\."); //$NON-NLS-1$//$NON-NLS-2$
expected = expected.replaceAll("\\*", "\\.\\*"); //$NON-NLS-1$//$NON-NLS-2$
Pattern pattern = Pattern.compile(expected);
boolean retVal = pattern.matcher(fileName).find();
return retVal;
} else if (PROJECT_NATURE.equals(method)) {
try {
IProject proj = resource.getProject();
return proj != null && proj.isAccessible() && proj.hasNature((String) expectedValue);
} catch (CoreException e) {
return false;
}
} else if (PROPERTY_MATCHES_CONTENT_TYPE.equals(method)) {
return matchesContentType(resource, (String) expectedValue);
}
}
return false;
}
/**
* Returns whether the given type or one of its base types matches the
* given content type identifier.
*
* @param type content type or null
* @param typeId content type identifier
* @return
*/
private boolean matchesContentType(IContentType type, String typeId) {
while (type != null) {
if (typeId.equals(type.getId())) {
return true;
}
type = type.getBaseType();
}
return false;
}
/**
* Returns whether or not the given file's content type matches the
* specified content type.
*
* Content types are looked up in the content type registry.
*
* @return whether or not the given resource has the given content type
*/
private boolean matchesContentType(IResource resource, String contentType) {
if (resource == null || !(resource instanceof IFile) || !resource.exists()) {
return false;
}
IFile file = (IFile) resource;
IContentDescription description;
try {
description = file.getContentDescription();
} catch (CoreException e) {
return false;
}
if (description != null) {
return matchesContentType(description.getContentType(), contentType);
}
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy