diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/SaveToWorkspace.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/SaveToWorkspace.java index 8bb1b71..34584bb 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/SaveToWorkspace.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/SaveToWorkspace.java @@ -11,8 +11,6 @@ package org.eclipse.pde.internal.ui.views.imagebrowser; -import org.eclipse.pde.internal.ui.PDEUIMessages; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Map; @@ -24,6 +22,7 @@ import org.eclipse.jface.window.Window; import org.eclipse.osgi.util.NLS; import org.eclipse.pde.internal.ui.PDEPlugin; +import org.eclipse.pde.internal.ui.PDEUIMessages; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.ImageLoader; @@ -64,25 +63,23 @@ } int imageType = getImageType(result); - if (imageType != SWT.NONE) { - try { - ByteArrayOutputStream out = new ByteArrayOutputStream(); + try { + ByteArrayOutputStream out = new ByteArrayOutputStream(); - ImageLoader imageLoader = new ImageLoader(); - imageLoader.data = new ImageData[] {((ImageElement) data).getImageData()}; - imageLoader.save(out, imageType); + ImageLoader imageLoader = new ImageLoader(); + imageLoader.data = new ImageData[] {((ImageElement) data).getImageData()}; + imageLoader.save(out, imageType); - ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); - if (exists) - file.setContents(in, true, false, null); - else - file.create(in, true, null); + ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); + if (exists) + file.setContents(in, true, false, null); + else + file.create(in, true, null); - file.getParent().refreshLocal(IResource.DEPTH_ZERO, null); + file.getParent().refreshLocal(IResource.DEPTH_ZERO, null); - } catch (CoreException e) { - PDEPlugin.log(e); - } + } catch (CoreException e) { + PDEPlugin.log(e); } } } @@ -91,21 +88,20 @@ } private int getImageType(final IPath path) { - String filename = path.lastSegment(); - String extension = filename.substring(filename.lastIndexOf('.') + 1).toLowerCase(); - if ("gif".equals(extension)) //$NON-NLS-1$ + String extension = path.getFileExtension(); + if ("gif".equalsIgnoreCase(extension)) //$NON-NLS-1$ return SWT.IMAGE_GIF; - else if ("bmp".equals(extension)) //$NON-NLS-1$ + else if ("bmp".equalsIgnoreCase(extension)) //$NON-NLS-1$ return SWT.IMAGE_BMP; - else if ("png".equals(extension)) //$NON-NLS-1$ + else if ("png".equalsIgnoreCase(extension)) //$NON-NLS-1$ return SWT.IMAGE_PNG; - else if ("ico".equals(extension)) //$NON-NLS-1$ + else if ("ico".equalsIgnoreCase(extension)) //$NON-NLS-1$ return SWT.IMAGE_ICO; - return SWT.NONE; + return SWT.IMAGE_PNG; } } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/AbstractRepository.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/AbstractRepository.java index 3218c91..033442d 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/AbstractRepository.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/AbstractRepository.java @@ -70,14 +70,14 @@ protected boolean isImage(final File resource) { if (resource.isFile()) - return isImageName(resource.getName().toLowerCase()); + return isImageName(resource.getName()); return false; } protected boolean isImageName(final String fileName) { for (String extension : KNOWN_EXTENSIONS) { - if (fileName.endsWith(extension)) + if (fileName.regionMatches(true, fileName.length() - extension.length(), extension, 0, extension.length())) return true; } @@ -95,7 +95,7 @@ Enumeration entries = zipFile.entries(); while ((entries.hasMoreElements()) && (!monitor.isCanceled())) { ZipEntry entry = entries.nextElement(); - if (isImageName(entry.getName().toLowerCase())) { + if (isImageName(entry.getName())) { InputStream inputStream = null; try { inputStream = zipFile.getInputStream(entry); diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/WorkspaceRepository.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/WorkspaceRepository.java index 199fe67..a324898 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/WorkspaceRepository.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/WorkspaceRepository.java @@ -14,8 +14,7 @@ import java.io.IOException; import java.util.*; import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.*; import org.eclipse.pde.internal.ui.PDEPlugin; import org.eclipse.pde.internal.ui.views.imagebrowser.IImageTarget; import org.eclipse.pde.internal.ui.views.imagebrowser.ImageElement; @@ -29,44 +28,53 @@ } @Override - protected boolean populateCache(IProgressMonitor monitor) { + protected boolean populateCache(final IProgressMonitor monitor) { if (fProjects == null) initialize(monitor); if (!fProjects.isEmpty()) { - IProject project = fProjects.get(fProjects.size() - 1); + + final IProject project = fProjects.remove(0); // look for a manifest IFile manifest = project.getFile("META-INF/MANIFEST.MF"); //$NON-NLS-1$ + if (manifest.exists()) { try { // extract plugin name - String pluginName = getPluginName(manifest.getContents()); + final String pluginName = getPluginName(manifest.getContents()); // parse all folders - Collection locations = new HashSet(); - locations.add(project); - do { - IContainer next = locations.iterator().next(); - locations.remove(next); + project.accept(new IResourceProxyVisitor() { - for (IResource resource : next.members()) { - if (monitor.isCanceled()) - return true; + public boolean visit(IResourceProxy proxy) throws CoreException { - if (resource instanceof IFile) { - try { - if (isImageName(resource.getName().toLowerCase())) - addImageElement(new ImageElement(createImageData((IFile) resource), pluginName, resource.getProjectRelativePath().toPortableString())); + switch (proxy.getType()) { + case IResource.PROJECT : + // fall through + case IResource.FOLDER : + // parse subfolders + return true; - } catch (Exception e) { - // could not create image for location - } - } else if (resource instanceof IContainer) - locations.add((IContainer) resource); + case IResource.FILE : + // look for image files + if (isImageName(proxy.getName())) { + try { + addImageElement(new ImageElement(createImageData((IFile) proxy.requestResource()), pluginName, project.getProjectRelativePath().toPortableString())); + } catch (Exception e) { + // could not create image for location + } + + if (monitor.isCanceled()) + throw new OperationCanceledException(); + } + + break; + } + + return false; } - - } while ((!locations.isEmpty()) && (!monitor.isCanceled())); + }, IResource.DEPTH_INFINITE, IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS | IContainer.INCLUDE_HIDDEN); } catch (CoreException e) { PDEPlugin.log(e); } catch (IOException e) {