blob: fd487c46ec148b4c05b3e869a15cf60b11e780fc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.launching.environments;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.jdt.core.IAccessRule;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.internal.launching.LaunchingPlugin;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.jdt.launching.LibraryLocation;
import org.eclipse.jdt.launching.environments.IAccessRuleParticipant;
import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
/**
* Proxy to an access rule participant for an execution environment.
*
* @since 3.3
*/
class AccessRuleParticipant implements IAccessRuleParticipant {
private IConfigurationElement fElement;
private IAccessRuleParticipant fDelegate;
/**
* Constructs a proxy to a rule participant contributed with the
* given configuration element. The element may be an
* <code>executionEnvironment</code> element or a <code>ruleParticipant</code>
* extension.
*
* @param element the configuration element
*/
AccessRuleParticipant(IConfigurationElement element) {
fElement = element;
}
/* (non-Javadoc)
* @see org.eclipse.jdt.launching.environments.IAccessRuleParticipant#getAccessRules(org.eclipse.jdt.launching.environments.IExecutionEnvironment, org.eclipse.jdt.launching.IVMInstall, org.eclipse.jdt.launching.LibraryLocation[], org.eclipse.jdt.core.IJavaProject)
*/
@Override
public IAccessRule[][] getAccessRules(IExecutionEnvironment environment, IVMInstall vm, LibraryLocation[] libraries, IJavaProject project) {
try {
return getDelegate().getAccessRules(environment, vm, libraries, project);
} catch (CoreException e) {
LaunchingPlugin.log(e.getStatus());
}
IAccessRule[][] rules = new IAccessRule[libraries.length][];
for (int i = 0; i < rules.length; i++) {
rules[i] = new IAccessRule[0];
}
return rules;
}
private IAccessRuleParticipant getDelegate() throws CoreException {
if (fDelegate == null) {
if (fElement.getName().equals(EnvironmentsManager.ENVIRONMENT_ELEMENT)) {
fDelegate = (IAccessRuleParticipant) fElement.createExecutableExtension(EnvironmentsManager.RULE_PARTICIPANT_ELEMENT);
} else {
fDelegate = (IAccessRuleParticipant) fElement.createExecutableExtension("class"); //$NON-NLS-1$
}
}
return fDelegate;
}
/**
* Returns the id of this participant.
*
* @return participant id
*/
String getId() {
if (fElement.getName().equals(EnvironmentsManager.ENVIRONMENT_ELEMENT)) {
return fElement.getAttribute(EnvironmentsManager.RULE_PARTICIPANT_ELEMENT);
}
return fElement.getAttribute("id"); //$NON-NLS-1$
}
private String getDelegateClassName() {
if (fElement.getName().equals(EnvironmentsManager.ENVIRONMENT_ELEMENT)) {
return fElement.getAttribute(EnvironmentsManager.RULE_PARTICIPANT_ELEMENT);
}
return fElement.getAttribute("class"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (obj instanceof AccessRuleParticipant) {
AccessRuleParticipant participant = (AccessRuleParticipant) obj;
return participant.getDelegateClassName().equals(getDelegateClassName());
}
return false;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return getDelegateClassName().hashCode();
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return getDelegateClassName();
}
}