package org.projectusus.core.basis;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
public class JavaModelPath {
private IProject project;
private IFile file;
private IType type;
private IMethod method;
public static JavaModelPath of( IJavaElement element ) throws JavaModelException {
IJavaElement ancestor = element.getAncestor( IJavaElement.METHOD );
if( ancestor != null ) {
return new JavaModelPath( (IMethod)ancestor );
}
ancestor = element.getAncestor( IJavaElement.TYPE );
if( ancestor != null ) {
return new JavaModelPath( (IType)ancestor );
}
return new JavaModelPath( (IFile)element.getUnderlyingResource() );
}
public JavaModelPath() {
super();
}
/**
* @param project
* must not be null.
*/
public JavaModelPath( IProject project ) {
this.project = project;
}
/**
* @param file
* must not be null.
*/
public JavaModelPath( IFile file ) {
this( file.getProject() );
this.file = file;
}
/**
* @param type
* must not be null.
*/
public JavaModelPath( IType type ) throws JavaModelException {
this( (IFile)type.getUnderlyingResource() );
this.type = type;
}
/**
* @param method
* must not be null.
*/
public JavaModelPath( IMethod method ) throws JavaModelException {
this( (IType)method.getAncestor( IJavaElement.TYPE ) );
this.method = method;
}
public boolean isRestrictedToProject() {
return project != null;
}
public IProject getProject() {
return project;
}
public boolean isRestrictedToFile() {
return file != null;
}
public IFile getFile() {
return file;
}
public boolean isRestrictedToType() {
return type != null;
}
public IJavaElement getType() {
return type;
}
public boolean isRestrictedToMethod() {
return method != null;
}
public IMethod getMethod() {
return method;
}
@Override
public String toString() {
ToStringBuilder builder = new ToStringBuilder( this );
builder.append( "Project", project ).append( "File", file ).append( "Type", type ).append( "Method", method ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
return builder.toString();
}
@Override
public boolean equals( Object obj ) {
return obj instanceof JavaModelPath && equals( (JavaModelPath)obj );
}
private boolean equals( JavaModelPath other ) {
return new EqualsBuilder().append( project, other.project ).append( file, other.file ).append( type, other.type ).append( method, other.method ).isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder().append( project ).append( file ).append( type ).append( method ).toHashCode();
}
}