Render compare gallery for wizard banner icons

Wizard banner icons are bigger than the "normal" 16x16 icons. So let's
create them in separate compare galleries

Change-Id: I0889db532483522938eb6b605d773285e3ad6dad
Signed-off-by: Matthias Becker <ma.becker@sap.com>
diff --git a/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/ExtractCSSMojo.java b/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/ExtractCSSMojo.java
index ab5acfe..c6360fc 100644
--- a/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/ExtractCSSMojo.java
+++ b/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/ExtractCSSMojo.java
@@ -87,7 +87,7 @@
 			String child = dirName;
 			File outputBase = new File(outputDir, child);
 
-			IconGatherer.gatherIcons(icons, "svg", file, file, outputBase, true);
+			IconGatherer.gatherIcons(icons, "svg", file, file, outputBase, true, FolderState.include);
 		}
 
 		ForkJoinPool forkJoinPool = new ForkJoinPool(4);
diff --git a/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/FolderState.java b/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/FolderState.java
new file mode 100644
index 0000000..195a609
--- /dev/null
+++ b/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/FolderState.java
@@ -0,0 +1,7 @@
+package org.eclipse.images.renderer;
+
+public enum FolderState {
+	exclude,
+	include,
+	only,
+}
\ No newline at end of file
diff --git a/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/GalleryMojo.java b/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/GalleryMojo.java
index 3f661c2..c1cea52 100644
--- a/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/GalleryMojo.java
+++ b/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/GalleryMojo.java
@@ -96,7 +96,7 @@
 			}
 
 			List<IconEntry> icons = new ArrayList<>();
-			IconGatherer.gatherIcons(icons, "png", file, file, iconDirectoryRoot, false);
+			IconGatherer.gatherIcons(icons, "png", file, file, iconDirectoryRoot, false, FolderState.exclude);
 
 			galleryIconSets.put(file.getName(), icons);
 		}
@@ -115,6 +115,19 @@
 		master.mkdirs();
 
 		renderGalleries(galleryDir, gifCompare, master, galleryIconSets, 16, 800, pngDir, gifDir);
+
+		galleryIconSets.clear();
+		// Search each subdir in the root dir for svg icons
+		for (File file : iconDirectoryRoot.listFiles()) {
+			if(!file.isDirectory()) {
+				continue;
+			}
+			List<IconEntry> icons = new ArrayList<>();
+			IconGatherer.gatherIcons(icons, "png", file, file, iconDirectoryRoot, false, FolderState.only);
+
+			galleryIconSets.put(file.getName(), icons);
+		}
+		renderWizardBannerCompareGalleries(gifCompare, galleryIconSets, 75, 800, pngDir, gifDir);
 	}
 
 	/**
@@ -145,7 +158,7 @@
 
 			log.info("Creating gallery for: " + key);
 			renderGallery(galleryDir, key, value, iconSize, width, 3);
-			renderGifCompareGallery(gifCompare, key, value, iconSize, width, 6, pngDir, gifDir);
+			renderGifCompareGallery(gifCompare, key, value, iconSize, width, 6, pngDir, gifDir, GIF_EXT);
 		}
 
 		// Render the master image
@@ -159,6 +172,28 @@
 	}
 
 	/**
+	 * <p>Renders each icon set into a gallery image for reviewing and showing off
+	 * icons, and then composes them into a master gallery image.</p>
+	 *
+	 * @param gifCompare
+	 * @param iconSets
+	 * @param iconSize
+	 * @param width
+	 * @param pngDir
+	 * @param gifDir
+	 */
+	public void renderWizardBannerCompareGalleries(File gifCompare, Map<String, List<IconEntry>> iconSets, int iconSize, int width, String pngDir, String gifDir) {
+		// Render each icon set
+		for (Entry<String, List<IconEntry>> entry : iconSets.entrySet()) {
+			String key = entry.getKey();
+			List<IconEntry> value = entry.getValue();
+
+			log.info("Creating wizard banner compare gallery for: " + key);
+			renderGifCompareGallery(gifCompare, key, value, iconSize, width, 6, pngDir, gifDir, ".png");
+		}
+	}
+
+	/**
 	 * <p>
 	 * Renders comparison images, the new png/svg icons vs old gifs.
 	 * </p>
@@ -173,7 +208,7 @@
 	 * @param gifDir
 	 */
 	private void renderGifCompareGallery(File outputDir, String key, List<IconEntry> icons, int iconSize, int width,
-			int margin, String pngDir, String gifDir) {
+			int margin, String pngDir, String gifDir, String fileExt) {
 		int leftColumnWidth = 300;
 		int textHeaderHeight = 31;
 		int outputSize = iconSize;
@@ -207,7 +242,7 @@
 		g.setColor(Color.DARK_GRAY);
 		g.fillRect(second + (margin / 2) + iconSize + 20, 0, (margin * 2) + (iconSize * 2) + 10, height);
 
-		g.drawString(key + " (GIF / PNG)", 15, 20);
+		g.drawString(key + " (Old / New)", 15, 20);
 
 		Collections.sort(icons);
 
@@ -222,14 +257,14 @@
 				BufferedImage pngImage = ImageIO.read(entry.inputPath);
 
 				// Munge the gif path
-				File gifLocalPath = new File(entry.inputPath.getParentFile(), entry.nameBase + GIF_EXT);
+				File gifLocalPath = new File(entry.inputPath.getParentFile(), entry.nameBase + fileExt);
 				String absoluteLocalPath = gifLocalPath.getAbsolutePath();
 				String gifAbsPath = absoluteLocalPath.replaceFirst(pngDir, gifDir);
 				File gifPath = new File(gifAbsPath);
 
-				log.debug("Search for GIF...");
+				log.debug("Search for old images...");
 				log.debug("Entry path: " + entry.inputPath.getAbsolutePath());
-				log.debug("GIF path: " + gifPath.getAbsolutePath());
+				log.debug("Old image path: " + gifPath.getAbsolutePath());
 
 				BufferedImage gifImage = null;
 				BufferedImage sizedGifImage = null;
@@ -238,7 +273,7 @@
 				if (gifPath.exists()) {
 					gifImage = ImageIO.read(gifPath);
 				} else {
-					log.debug("GIF not found: " + gifPath.getAbsolutePath());
+					log.debug("Old image not found: " + gifPath.getAbsolutePath());
 				}
 
 				g.drawString(entry.nameBase, 5, y + (margin * 3));
diff --git a/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/IconGatherer.java b/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/IconGatherer.java
index 3e7fd73..23db007 100644
--- a/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/IconGatherer.java
+++ b/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/IconGatherer.java
@@ -41,7 +41,7 @@
 	 * @param generateDisabledDirs
 	 */
 	public static void gatherIcons(List<IconEntry> icons, String extension, File rootDir, File iconDir, File outputBase,
-			boolean generateDisabledDirs) {
+			boolean generateDisabledDirs, FolderState wizardBannerState) {
 		File[] listFiles = iconDir.listFiles();
 
 		for (File child : listFiles) {
@@ -49,8 +49,17 @@
 				if (child.getName().startsWith("d") && !("dgm".equals(child.getName()))) {
 					continue;
 				}
+				if (wizardBannerState == FolderState.exclude) {
+					if ("wizban".equals(child.getName())) {
+						continue;
+					}
+				}
 
-				gatherIcons(icons, extension, rootDir, child, outputBase, generateDisabledDirs);
+				gatherIcons(icons, extension, rootDir, child, outputBase, generateDisabledDirs, wizardBannerState);
+				continue;
+			}
+
+			if (!child.getName().endsWith(extension)) {
 				continue;
 			}
 
@@ -68,6 +77,9 @@
 			File disabledOutputDir = null;
 
 			File parentFile = child.getParentFile();
+			if (wizardBannerState == FolderState.only && !"wizban".equals(parentFile.getName())) {
+				continue;
+			}
 
 			/*
 			 * Determine if/where to put a disabled version of the icon Eclipse
diff --git a/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/RenderMojo.java b/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/RenderMojo.java
index 613654c..ac4b4b0 100644
--- a/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/RenderMojo.java
+++ b/org.eclipse.images.renderer/src/main/java/org/eclipse/images/renderer/RenderMojo.java
@@ -623,7 +623,7 @@
 				createFragmentFiles(outputBase, dirName);
 			}
 
-			IconGatherer.gatherIcons(icons, "svg", file, file, outputBase, true);
+			IconGatherer.gatherIcons(icons, "svg", file, file, outputBase, true, FolderState.include);
 		}
 
 		log.info("Working directory: " + outputDir.getAbsolutePath());