package com.yoursway.experiments.birdseye.component; import static com.google.common.collect.Maps.newHashMap; import static com.yoursway.utils.YsPathUtils.extension; import static com.yoursway.utils.YsStrings.emptyToNull; import java.io.File; import java.util.Map; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Display; import com.yoursway.experiments.birdseye.model.Leaf; import com.yoursway.experiments.birdseye.model.Node; public class Factory { private final Display display; private Color defaultColor; private Map<String, Color> extToColor = newHashMap(); public Factory(Display display) { this.display = display; defaultColor = display.getSystemColor(SWT.COLOR_CYAN); } public void associate(String ext, int color) { associate(ext, display.getSystemColor(color)); } public void associate(String ext, Color color) { if (ext == null) throw new NullPointerException("ext is null"); if (color == null) throw new NullPointerException("color is null"); extToColor.put(ext.toLowerCase(), color); } public Node createLeaf(File file, String path) { return new Leaf(Math.log(1 + file.length()), colorFor(file), path); } private Color colorFor(File file) { String ext = emptyToNull(extension(file)); Color color = (ext == null ? null : extToColor.get(ext.toLowerCase())); if (color == null) return defaultColor; else return color; } }