blob: 9450bf96705cdad3ab0f83d248abdf026b0e6dda [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2015 Broadcom 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:
* Broadcom Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.internal.resources;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.PlatformObject;
/**
* Concrete implementation of a build configuration.
*<p>
* This class can both be used as a real build configuration in a project.
* As well as the reference to a build configuration in another project.
*</p>
*<p>
* When being used as a reference, core.resources <strong>must</strong> call
* {@link #getBuildConfig()} to dereference the build configuration to the
* the actual build configuration on the referenced project.
*</p>
*/
public class BuildConfiguration extends PlatformObject implements IBuildConfiguration {
/** Project on which this build configuration is set */
private final IProject project;
/** Unique human readable name of the configuration in the project */
private final String name;
public BuildConfiguration(IProject project) {
this(project, IBuildConfiguration.DEFAULT_CONFIG_NAME);
}
public BuildConfiguration(IProject project, String configName) {
this.project = project;
this.name = configName;
}
/**
* @return the concrete build configuration referred to by this IBuildConfiguration
* when it's being used as a reference
*/
public IBuildConfiguration getBuildConfig() throws CoreException {
return project.getBuildConfig(name);
}
@Override
public String getName() {
return name;
}
@Override
public IProject getProject() {
return project;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
BuildConfiguration other = (BuildConfiguration) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (project == null) {
if (other.project != null)
return false;
} else if (!project.equals(other.project))
return false;
return true;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((project == null) ? 0 : project.hashCode());
return result;
}
@Override
public String toString() {
StringBuilder result = new StringBuilder();
if (project != null)
result.append(project.getName());
else
result.append("?"); //$NON-NLS-1$
result.append(";"); //$NON-NLS-1$
if (name != null)
result.append(" [").append(name).append(']'); //$NON-NLS-1$
else
result.append(" [active]"); //$NON-NLS-1$
return result.toString();
}
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(Class<T> adapter) {
if (adapter.isInstance(project))
return (T) project;
return super.getAdapter(adapter);
}
}