1 18 package org.apache.tools.ant.listener; 19 20 import java.io.FileInputStream ; 21 import java.io.IOException ; 22 import java.io.InputStream ; 23 import java.io.PrintStream ; 24 import java.util.Properties ; 25 import org.apache.tools.ant.DefaultLogger; 26 import org.apache.tools.ant.Project; 27 28 99 public final class AnsiColorLogger extends DefaultLogger { 100 private static final int ATTR_DIM = 2; 103 108 private static final int FG_RED = 31; 110 private static final int FG_GREEN = 32; 111 private static final int FG_BLUE = 34; 113 private static final int FG_MAGENTA = 35; 114 private static final int FG_CYAN = 36; 115 117 126 private static final String PREFIX = "\u001b["; 127 private static final String SUFFIX = "m"; 128 private static final char SEPARATOR = ';'; 129 private static final String END_COLOR = PREFIX + SUFFIX; 130 131 private String errColor 132 = PREFIX + ATTR_DIM + SEPARATOR + FG_RED + SUFFIX; 133 private String warnColor 134 = PREFIX + ATTR_DIM + SEPARATOR + FG_MAGENTA + SUFFIX; 135 private String infoColor 136 = PREFIX + ATTR_DIM + SEPARATOR + FG_CYAN + SUFFIX; 137 private String verboseColor 138 = PREFIX + ATTR_DIM + SEPARATOR + FG_GREEN + SUFFIX; 139 private String debugColor 140 = PREFIX + ATTR_DIM + SEPARATOR + FG_BLUE + SUFFIX; 141 142 private boolean colorsSet = false; 143 144 148 private void setColors() { 149 String userColorFile = System.getProperty("ant.logger.defaults"); 150 String systemColorFile = 151 "/org/apache/tools/ant/listener/defaults.properties"; 152 153 InputStream in = null; 154 155 try { 156 Properties prop = new Properties (); 157 158 if (userColorFile != null) { 159 in = new FileInputStream (userColorFile); 160 } else { 161 in = getClass().getResourceAsStream(systemColorFile); 162 } 163 164 if (in != null) { 165 prop.load(in); 166 } 167 168 String errC = prop.getProperty("AnsiColorLogger.ERROR_COLOR"); 169 String warn = prop.getProperty("AnsiColorLogger.WARNING_COLOR"); 170 String info = prop.getProperty("AnsiColorLogger.INFO_COLOR"); 171 String verbose = prop.getProperty("AnsiColorLogger.VERBOSE_COLOR"); 172 String debug = prop.getProperty("AnsiColorLogger.DEBUG_COLOR"); 173 if (errC != null) { 174 errColor = PREFIX + errC + SUFFIX; 175 } 176 if (warn != null) { 177 warnColor = PREFIX + warn + SUFFIX; 178 } 179 if (info != null) { 180 infoColor = PREFIX + info + SUFFIX; 181 } 182 if (verbose != null) { 183 verboseColor = PREFIX + verbose + SUFFIX; 184 } 185 if (debug != null) { 186 debugColor = PREFIX + debug + SUFFIX; 187 } 188 } catch (IOException ioe) { 189 } finally { 191 if (in != null) { 192 try { 193 in.close(); 194 } catch (IOException e) { 195 } 197 } 198 } 199 } 200 201 204 205 protected void printMessage(final String message, 206 final PrintStream stream, 207 final int priority) { 208 if (message != null && stream != null) { 209 if (!colorsSet) { 210 setColors(); 211 colorsSet = true; 212 } 213 214 final StringBuffer msg = new StringBuffer (message); 215 switch (priority) { 216 case Project.MSG_ERR: 217 msg.insert(0, errColor); 218 msg.append(END_COLOR); 219 break; 220 case Project.MSG_WARN: 221 msg.insert(0, warnColor); 222 msg.append(END_COLOR); 223 break; 224 case Project.MSG_INFO: 225 msg.insert(0, infoColor); 226 msg.append(END_COLOR); 227 break; 228 case Project.MSG_VERBOSE: 229 msg.insert(0, verboseColor); 230 msg.append(END_COLOR); 231 break; 232 case Project.MSG_DEBUG: 233 default: 235 msg.insert(0, debugColor); 236 msg.append(END_COLOR); 237 break; 238 } 239 final String strmessage = msg.toString(); 240 stream.println(strmessage); 241 } 242 } 243 } 244 | Popular Tags |