1 /*******************************************************************************
2 * Copyright (c) 2000, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.packageview;
13 import java.util.HashMap;
14 import java.util.Iterator;
17 import org.eclipse.swt.graphics.Image;
19 import org.eclipse.core.runtime.IPath;
21 import org.eclipse.core.resources.IFolder;
23 import org.eclipse.jface.resource.ImageDescriptor;
24 import org.eclipse.jface.util.IPropertyChangeListener;
25 import org.eclipse.jface.util.PropertyChangeEvent;
26 import org.eclipse.jface.viewers.StyledString;
28 import org.eclipse.ui.IWorkingSet;
30 import org.eclipse.jdt.core.IPackageFragment;
32 import org.eclipse.jdt.ui.JavaElementLabels;
34 import org.eclipse.jdt.internal.ui.navigator.IExtensionStateConstants.Values;
35 import org.eclipse.jdt.internal.ui.navigator.JavaNavigatorLabelProvider;
36 import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
37 import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
40 * Provides the labels for the Package Explorer.
42 * It provides labels for the packages in hierarchical layout and in all
43 * other cases delegates it to its super class.
47 public class PackageExplorerLabelProvider extends AppearanceAwareLabelProvider {
49 PackageExplorerContentProvider fContentProvider;
50 private Map<ImageDescriptor, Image> fWorkingSetImages;
52 private boolean fIsFlatLayout;
53 PackageExplorerProblemsDecorator fProblemDecorator;
55 public PackageExplorerLabelProvider(PackageExplorerContentProvider cp) {
56 super(DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED | JavaElementLabels.ALL_CATEGORY, DEFAULT_IMAGEFLAGS | JavaElementImageProvider.SMALL_ICONS);
58 fProblemDecorator= new PackageExplorerProblemsDecorator();
59 cp.generated_8519573135170199355(this);
60 fWorkingSetImages= null;
64 * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getStyledText(java.lang.Object)
67 public StyledString getStyledText(Object element) {
68 String text= getSpecificText(element);
70 return new StyledString(decorateText(text, element));
72 return super.getStyledText(element);
75 private String getSpecificText(Object element) {
76 if (!fIsFlatLayout && element instanceof IPackageFragment) {
77 IPackageFragment fragment = (IPackageFragment) element;
78 Object parent= fContentProvider.getHierarchicalPackageParent(fragment);
79 if (parent instanceof IPackageFragment) {
80 return getNameDelta((IPackageFragment) parent, fragment);
81 } else if (parent instanceof IFolder) { // bug 152735
82 return getNameDelta((IFolder) parent, fragment);
84 } else if (element instanceof IWorkingSet) {
85 return ((IWorkingSet) element).getLabel();
91 public String getText(Object element) {
92 String text= getSpecificText(element);
94 return decorateText(text, element);
96 return super.getText(element);
99 private String getNameDelta(IPackageFragment parent, IPackageFragment fragment) {
100 String prefix= parent.getElementName() + '.';
101 String fullName= fragment.getElementName();
102 if (fullName.startsWith(prefix)) {
103 return fullName.substring(prefix.length());
108 private String getNameDelta(IFolder parent, IPackageFragment fragment) {
109 IPath prefix= parent.getFullPath();
110 IPath fullPath= fragment.getPath();
111 if (prefix.isPrefixOf(fullPath)) {
112 StringBuffer buf= new StringBuffer();
113 for (int i= prefix.segmentCount(); i < fullPath.segmentCount(); i++) {
114 if (buf.length() > 0)
116 buf.append(fullPath.segment(i));
118 return buf.toString();
120 return fragment.getElementName();
124 public Image getImage(Object element) {
125 if (element instanceof IWorkingSet) {
126 ImageDescriptor image= ((IWorkingSet)element).getImageDescriptor();
130 if (fWorkingSetImages == null) {
131 fWorkingSetImages= new HashMap<ImageDescriptor, Image>();
134 Image result= fWorkingSetImages.get(image);
135 if (result == null) {
136 result= image.createImage();
137 fWorkingSetImages.put(image, result);
139 return decorateImage(result, element);
141 return super.getImage(element);
144 public void setIsFlatLayout(boolean state) {
145 fIsFlatLayout= state;
146 fProblemDecorator.setIsFlatLayout(state);
150 public void dispose() {
151 if (fWorkingSetImages != null) {
152 for (Iterator<Image> iter= fWorkingSetImages.values().iterator(); iter.hasNext();) {
153 iter.next().dispose();
159 public void generated_3133365500175972833(final JavaNavigatorLabelProvider javanavigatorlabelprovider) {
160 setIsFlatLayout(javanavigatorlabelprovider.fStateModel
161 .getBooleanProperty(Values.IS_LAYOUT_FLAT));
162 javanavigatorlabelprovider.fLayoutPropertyListener = new IPropertyChangeListener() {
163 public void propertyChange(PropertyChangeEvent event) {
164 if (Values.IS_LAYOUT_FLAT.equals(event.getProperty())) {
165 if (event.getNewValue() != null) {
166 boolean newValue = ((Boolean) event.getNewValue())
167 .booleanValue() ? true : false;
168 setIsFlatLayout(newValue);