1 4 package org.terracotta.dso.editors.tree; 5 6 import org.eclipse.core.resources.IContainer; 7 import org.eclipse.core.resources.IResource; 8 import org.eclipse.core.runtime.IPath; 9 import org.eclipse.core.runtime.Path; 10 import org.eclipse.debug.ui.DebugUITools; 11 import org.eclipse.debug.ui.IDebugUIConstants; 12 import org.eclipse.jdt.core.IJavaElement; 13 import org.eclipse.jdt.core.JavaCore; 14 import org.eclipse.jdt.launching.IRuntimeClasspathEntry; 15 import org.eclipse.jdt.ui.ISharedImages; 16 import org.eclipse.jdt.ui.JavaElementLabelProvider; 17 import org.eclipse.jdt.ui.JavaUI; 18 import org.eclipse.swt.graphics.ImageData; 19 import org.eclipse.swt.graphics.PaletteData; 20 import org.eclipse.swt.graphics.RGB; 21 22 import com.tc.admin.common.XTreeNode; 23 24 import java.awt.Image ; 25 import java.awt.image.BufferedImage ; 26 import java.awt.image.ColorModel ; 27 import java.awt.image.DirectColorModel ; 28 import java.awt.image.IndexColorModel ; 29 import java.awt.image.WritableRaster ; 30 import java.io.File ; 31 import java.util.HashMap ; 32 33 import javax.swing.ImageIcon ; 34 35 52 53 public abstract class ProjectNode extends XTreeNode { 54 private static HashMap <String , Image > m_imageMap; 55 private static JavaElementLabelProvider m_javaLabelProvider; 56 57 static { 58 m_imageMap = new HashMap <String , Image >(); 59 m_javaLabelProvider = new JavaElementLabelProvider(); 60 } 61 62 public ProjectNode() { 63 super(); 64 } 65 66 public ProjectNode(Object obj) { 67 super(obj); 68 setIcon(new ImageIcon (getAWTImage(obj))); 69 } 70 71 public Image getAWTImage(Object adaptable) { 72 org.eclipse.swt.graphics.Image swtImage = getImage(adaptable); 73 Image awtImage = null; 74 75 if(swtImage != null) { 76 String swtHandle = swtImage.toString(); 77 78 if((awtImage = m_imageMap.get(swtHandle)) == null) { 79 m_imageMap.put(swtHandle, awtImage = swt2Swing(swtImage)); 80 } 81 } 82 83 return awtImage; 84 } 85 86 private org.eclipse.swt.graphics.Image getImage(Object adaptable) { 87 if(adaptable instanceof IRuntimeClasspathEntry) { 88 return getImage((IRuntimeClasspathEntry)adaptable); 89 } 90 else { 91 return m_javaLabelProvider.getImage(adaptable); 92 } 93 } 94 95 private org.eclipse.swt.graphics.Image getImage(IRuntimeClasspathEntry entry) { 96 IResource resource = entry.getResource(); 97 98 switch(entry.getType()) { 99 case IRuntimeClasspathEntry.PROJECT: 100 IJavaElement proj = JavaCore.create(resource); 102 return m_javaLabelProvider.getImage(proj); 103 case IRuntimeClasspathEntry.ARCHIVE: 104 if(resource instanceof IContainer) { 105 return m_javaLabelProvider.getImage(resource); 106 } 107 boolean external = resource == null; 108 boolean source = (entry.getSourceAttachmentPath() != null && !Path.EMPTY.equals(entry.getSourceAttachmentPath())); 109 String key = null; 110 if(external) { 111 IPath path = entry.getPath(); 112 if(path != null) { 113 File file = path.toFile(); 115 if(file.exists() && file.isDirectory()) { 116 key = ISharedImages.IMG_OBJS_PACKFRAG_ROOT; 117 } else if(source) { 118 key = ISharedImages.IMG_OBJS_EXTERNAL_ARCHIVE_WITH_SOURCE; 119 } else { 120 key = ISharedImages.IMG_OBJS_EXTERNAL_ARCHIVE; 121 } 122 } 123 } else { 124 if (source) { 125 key = ISharedImages.IMG_OBJS_JAR_WITH_SOURCE; 126 } else { 127 key = ISharedImages.IMG_OBJS_JAR; 128 } 129 } 130 return JavaUI.getSharedImages().getImage(key); 131 case IRuntimeClasspathEntry.VARIABLE: 132 return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_ENV_VAR); 133 case IRuntimeClasspathEntry.CONTAINER: 134 return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_LIBRARY); 135 case IRuntimeClasspathEntry.OTHER: 136 IRuntimeClasspathEntry delegate = entry; 137 138 org.eclipse.swt.graphics.Image image = m_javaLabelProvider.getImage(delegate); 139 if(image != null) { 140 return image; 141 } 142 if(resource == null) { 143 return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_LIBRARY); 144 } 145 return m_javaLabelProvider.getImage(resource); 146 } 147 148 return null; 149 } 150 151 private Image swt2Swing(org.eclipse.swt.graphics.Image swtImage) { 152 return convertToAWT(swtImage.getImageData()); 153 } 154 155 159 static BufferedImage convertToAWT(ImageData data) { 160 ColorModel colorModel = null; 161 PaletteData palette = data.palette; 162 163 if(palette.isDirect) { 164 ImageData maskData = data.getTransparencyMask(); 165 int maskPix; 166 167 colorModel = new DirectColorModel (32, 0x000000ff, 168 0x0000ff00, 169 0x00ff0000, 170 0xff000000); 171 172 BufferedImage bufferedImage = 173 new BufferedImage (colorModel, 174 colorModel.createCompatibleWritableRaster(data.width, data.height), 175 false, null); 176 177 WritableRaster raster = bufferedImage.getRaster(); 178 int[] pixelArray = new int[4]; 179 180 for(int y = 0; y < data.height; y++) { 181 for(int x = 0; x < data.width; x++) { 182 int pixel = data.getPixel(x, y); 183 RGB rgb = palette.getRGB(pixel); 184 185 pixelArray[0] = rgb.red; 186 pixelArray[1] = rgb.green; 187 pixelArray[2] = rgb.blue; 188 189 maskPix = maskData.getPixel(x,y); 190 pixelArray[3] = (maskPix == 1) ? 0xff : 0; 191 192 raster.setPixels(x, y, 1, 1, pixelArray); 193 } 194 } 195 196 return bufferedImage; 197 } 198 else { 199 RGB[] rgbs = palette.getRGBs(); 200 byte[] red = new byte[rgbs.length]; 201 byte[] green = new byte[rgbs.length]; 202 byte[] blue = new byte[rgbs.length]; 203 204 for(int i = 0; i < rgbs.length; i++) { 205 RGB rgb = rgbs[i]; 206 207 red[i] = (byte)rgb.red; 208 green[i] = (byte)rgb.green; 209 blue[i] = (byte)rgb.blue; 210 } 211 212 colorModel = (data.transparentPixel != -1) ? 213 new IndexColorModel (data.depth, rgbs.length, red, green, blue, data.transparentPixel) : 214 new IndexColorModel (data.depth, rgbs.length, red, green, blue); 215 216 BufferedImage bufferedImage = 217 new BufferedImage (colorModel, 218 colorModel.createCompatibleWritableRaster(data.width, data.height), 219 false, null); 220 221 WritableRaster raster = bufferedImage.getRaster(); 222 int[] pixelArray = new int[1]; 223 224 for(int y = 0; y < data.height; y++) { 225 for(int x = 0; x < data.width; x++) { 226 int pixel = data.getPixel(x, y); 227 228 pixelArray[0] = pixel; 229 230 raster.setPixel(x, y, pixelArray); 231 } 232 } 233 234 return bufferedImage; 235 } 236 } 237 238 protected void setChildAt(ProjectNode child, int index) { 239 children.setElementAt(child, index); 240 child.setParent(this); 241 } 242 } 243 | Popular Tags |