package org.bundlemaker.core.ui.artifact.tree; import org.bundlemaker.core.analysis.IBundleMakerArtifact; import org.bundlemaker.core.analysis.IPackageArtifact; import org.bundlemaker.core.jtype.ITypeArtifact; import org.bundlemaker.core.resource.IModularizedSystem; import org.bundlemaker.core.ui.artifact.Activator; import org.bundlemaker.core.ui.artifact.ArtifactImages; import org.eclipse.swt.graphics.Image; /** * <p> * Adds support for {@link IModularizedSystem} and {@link ITypeArtifact} instances to the * {@link DefaultArtifactLabelProvider} * </p> * * @author Gerd Wütherich (gerd@gerd-wuetherich.de) */ public class ArtifactTreeLabelProvider extends DefaultArtifactLabelProvider { /** * {@inheritDoc} */ @Override public Image getImage(Object obj) { if (obj instanceof String || obj instanceof IModularizedSystem) { return ArtifactImages.ROOT_ARTIFACT_ICON.getImage(); } // All other types are handled by the superclass Image result = super.getImage(obj); // return result; } /** * {@inheritDoc} */ @Override public String getText(Object obj) { if (obj instanceof String) { return (String) obj; } else if (obj instanceof IModularizedSystem) { return ((IModularizedSystem) obj).getName(); } else if (obj instanceof IBundleMakerArtifact && ((IBundleMakerArtifact) obj).isInstanceOf(IPackageArtifact.class) && isHierarchicalPackageLayout()) { return ((IBundleMakerArtifact) obj).getName(); } // All other cases are handled by the superclass return super.getText(obj); } @Override protected Image getImageForTypeArtifact(IBundleMakerArtifact artifact) { if (artifact instanceof ITypeArtifact) { ITypeArtifact typeHolder = (ITypeArtifact) artifact; if (typeHolder.getAssociatedType() != null) { switch (typeHolder.getAssociatedType().getType()) { case CLASS: { return ArtifactImages.CLASS_TYPE_ARTIFACT_ICON.getImage(); } case INTERFACE: { return ArtifactImages.INTERFACE_TYPE_ARTIFACT_ICON.getImage(); } case ENUM: { return ArtifactImages.ENUM_TYPE_ARTIFACT_ICON.getImage(); } case ANNOTATION: { return ArtifactImages.ANNOTATION_TYPE_ARTIFACT_ICON.getImage(); } default: break; } } else { return ArtifactImages.CLASS_TYPE_ARTIFACT_ICON.getImage(); } } // default: let superclass determine image return super.getImageForTypeArtifact(artifact); } /** * <p> * </p> * * @return */ private boolean isHierarchicalPackageLayout() { return Activator.getDefault().getArtifactModelConfigurationProvider().getArtifactModelConfiguration() .isHierarchicalPackages(); } }