]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerLabelProvider.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / packageview / PackageExplorerLabelProvider.java
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
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.packageview;
12
13 import java.util.HashMap;
14 import java.util.Iterator;
15 import java.util.Map;
16
17 import org.eclipse.swt.graphics.Image;
18
19 import org.eclipse.core.runtime.IPath;
20
21 import org.eclipse.core.resources.IFolder;
22
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;
27
28 import org.eclipse.ui.IWorkingSet;
29
30 import org.eclipse.jdt.core.IPackageFragment;
31
32 import org.eclipse.jdt.ui.JavaElementLabels;
33
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;
38
39 /**
40  * Provides the labels for the Package Explorer.
41  * <p>
42  * It provides labels for the packages in hierarchical layout and in all
43  * other cases delegates it to its super class.
44  * </p>
45  * @since 2.1
46  */
47 public class PackageExplorerLabelProvider extends AppearanceAwareLabelProvider {
48
49         PackageExplorerContentProvider fContentProvider;
50         private Map<ImageDescriptor, Image> fWorkingSetImages;
51
52         private boolean fIsFlatLayout;
53         PackageExplorerProblemsDecorator fProblemDecorator;
54
55         public PackageExplorerLabelProvider(PackageExplorerContentProvider cp) {
56                 super(DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED | JavaElementLabels.ALL_CATEGORY, DEFAULT_IMAGEFLAGS | JavaElementImageProvider.SMALL_ICONS);
57
58                 fProblemDecorator= new PackageExplorerProblemsDecorator();
59                 cp.generated_8519573135170199355(this);
60                 fWorkingSetImages= null;
61         }
62
63         /* (non-Javadoc)
64          * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getStyledText(java.lang.Object)
65          */
66         @Override
67         public StyledString getStyledText(Object element) {
68                 String text= getSpecificText(element);
69                 if (text != null) {
70                         return new StyledString(decorateText(text, element));
71                 }
72                 return super.getStyledText(element);
73         }
74
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);
83                         }
84                 } else if (element instanceof IWorkingSet) {
85                         return ((IWorkingSet) element).getLabel();
86                 }
87                 return null;
88         }
89
90         @Override
91         public String getText(Object element) {
92                 String text= getSpecificText(element);
93                 if (text != null) {
94                         return decorateText(text, element);
95                 }
96                 return super.getText(element);
97         }
98
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());
104                 }
105                 return fullName;
106         }
107
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)
115                                         buf.append('.');
116                                 buf.append(fullPath.segment(i));
117                         }
118                         return buf.toString();
119                 }
120                 return fragment.getElementName();
121         }
122
123         @Override
124         public Image getImage(Object element) {
125                 if (element instanceof IWorkingSet) {
126                         ImageDescriptor image= ((IWorkingSet)element).getImageDescriptor();
127                         if (image == null) {
128                                 return null;
129                         }
130                         if (fWorkingSetImages == null) {
131                                 fWorkingSetImages= new HashMap<ImageDescriptor, Image>();
132                         }
133
134                         Image result= fWorkingSetImages.get(image);
135                         if (result == null) {
136                                 result= image.createImage();
137                                 fWorkingSetImages.put(image, result);
138                         }
139                         return decorateImage(result, element);
140                 }
141                 return super.getImage(element);
142         }
143
144         public void setIsFlatLayout(boolean state) {
145                 fIsFlatLayout= state;
146                 fProblemDecorator.setIsFlatLayout(state);
147         }
148
149         @Override
150         public void dispose() {
151                 if (fWorkingSetImages != null) {
152                         for (Iterator<Image> iter= fWorkingSetImages.values().iterator(); iter.hasNext();) {
153                                 iter.next().dispose();
154                         }
155                 }
156                 super.dispose();
157         }
158
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);
169                                         }
170                                 }
171         
172                         }
173                 };
174         }
175 }