package org.projectusus.ui.dependencygraph.nodes; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.ui.ISharedImages; import org.eclipse.jdt.ui.JavaElementLabels; import org.projectusus.core.filerelations.model.PackageRelations; import org.projectusus.core.filerelations.model.Packagename; import com.google.common.base.Function; import com.google.common.collect.Collections2; public class PackageRepresenter extends PlatformObject implements GraphNode { private final Packagename packagename; private static PackageRelations relations; public static Set<GraphNode> getAllPackages() { return transformToRepresenterSet( Packagename.getAll(), new PackageRelations() ); } public static Set<GraphNode> transformToRepresenterSet( Set<Packagename> classes, final PackageRelations rel ) { relations = rel; Function<Packagename, PackageRepresenter> function = new Function<Packagename, PackageRepresenter>() { public PackageRepresenter apply( Packagename descriptor ) { return new PackageRepresenter( descriptor ); } }; return new HashSet<GraphNode>( Collections2.transform( classes, function ) ); } public PackageRepresenter( Packagename pkg ) { this.packagename = pkg; } public Set<? extends GraphNode> getChildren() { return transformToRepresenterSet( relations.getDirectPackageRelationsFrom( packagename ), relations ); } public Set<? extends GraphNode> getParents() { return transformToRepresenterSet( relations.getDirectPackageRelationsTo( packagename ), relations ); } public String getEdgeEndLabel() { return ""; //$NON-NLS-1$ } public String getEdgeMiddleLabel() { return ""; //$NON-NLS-1$ } public String getEdgeStartLabel() { return ""; //$NON-NLS-1$ } @Override public boolean equals( Object obj ) { return obj instanceof PackageRepresenter && packagename.equals( ((PackageRepresenter)obj).packagename ); } @Override public int hashCode() { return packagename.hashCode(); } public int getFilterValue() { return 0; } public IFile getFile() { return null; } public Packagename getPackagename() { return packagename; } public boolean isPackageOneOf( Collection<Packagename> packages ) { return packages.contains( packagename ); } public boolean isAtEitherEndOf( Packagename source, Packagename dest ) { return packagename.equals( source ) || packagename.equals( dest ); } public Packagename getRelatedPackage() { return packagename; } public boolean isVisibleForLimitWithOtherNodes( boolean restricting, Set<GraphNode> others ) { if( restricting ) { return relations.getPackageCycles().containsPackage( packagename ); } return true; } public boolean isInDifferentPackageThan( GraphNode destination ) { return !getRelatedPackage().equals( destination.getRelatedPackage() ); } public String getDisplayText() { return JavaElementLabels.getTextLabel( packagename.getJavaElement(), JavaElementLabels.P_COMPRESSED ); } public String getImageName() { return ISharedImages.IMG_OBJS_PACKAGE; } public String getTooltipText() { return getDisplayText(); } public boolean represents( IJavaElement javaElement ) { IJavaElement pkg = javaElement.getAncestor( IJavaElement.PACKAGE_FRAGMENT ); return pkg != null && getRelatedPackage().getJavaElement().getElementName().equals( pkg.getElementName() ); } @Override public Object getAdapter( @SuppressWarnings( "rawtypes" ) Class adapter ) { if( adapter.equals( IJavaElement.class ) ) { return getPackagename().getJavaElement(); } return super.getAdapter( adapter ); } }