You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2008/10/22 16:43:53 UTC

svn commit: r707092 - in /geronimo/gshell/trunk/gshell-support/gshell-ansi/src: main/java/org/apache/geronimo/gshell/ansi/ test/java/org/apache/geronimo/gshell/ansi/

Author: jdillon
Date: Wed Oct 22 07:43:52 2008
New Revision: 707092

URL: http://svn.apache.org/viewvc?rev=707092&view=rev
Log:
Make AnsiCode an enum

Modified:
    geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiBuffer.java
    geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiCode.java
    geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiRenderer.java
    geronimo/gshell/trunk/gshell-support/gshell-ansi/src/test/java/org/apache/geronimo/gshell/ansi/CodeTest.java

Modified: geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiBuffer.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiBuffer.java?rev=707092&r1=707091&r2=707092&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiBuffer.java (original)
+++ geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiBuffer.java Wed Oct 22 07:43:52 2008
@@ -77,7 +77,7 @@
         return append(String.valueOf(obj));
     }
 
-    public AnsiBuffer attrib(final int code) {
+    public AnsiBuffer attrib(final AnsiCode code) {
         if (isAnsiEnabled()) {
             buff.append(AnsiCode.attrib(code));
         }
@@ -85,7 +85,7 @@
         return this;
     }
 
-    public AnsiBuffer attrib(final String text, final int code) {
+    public AnsiBuffer attrib(final String text, final AnsiCode code) {
         assert text != null;
 
         if (isAnsiEnabled()) {
@@ -99,6 +99,6 @@
     }
 
     public AnsiBuffer attrib(final String text, final String codeName) {
-        return attrib(text, AnsiCode.forName(codeName));
+        return attrib(text, AnsiCode.valueOf(codeName.toUpperCase()));
     }
 }

Modified: geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiCode.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiCode.java?rev=707092&r1=707091&r2=707092&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiCode.java (original)
+++ geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiCode.java Wed Oct 22 07:43:52 2008
@@ -19,128 +19,65 @@
 
 package org.apache.geronimo.gshell.ansi;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Map;
-
 /**
- * Container for ANSI color codes.
+ * <tt>ANSI</tt> color codes.
  *
  * @version $Rev$ $Date$
  */
-public class AnsiCode
+public enum AnsiCode
 {
-    //
-    // TODO: Consider converting this to an enum
-    //
-    
-    public static final int OFF = 0;
-    public static final int BOLD = 1;
-    public static final int UNDERSCORE = 4;
-    public static final int BLINK = 5;
-    public static final int REVERSE = 7;
-    public static final int CONCEALED = 8;
-
-    public static final int FG_BLACK = 30;
-    public static final int FG_RED = 31;
-    public static final int FG_GREEN = 32;
-    public static final int FG_YELLOW = 33;
-    public static final int FG_BLUE = 34;
-    public static final int FG_MAGENTA = 35;
-    public static final int FG_CYAN = 36;
-    public static final int FG_WHITE = 37;
-
-    public static final int BLACK = FG_BLACK;
-    public static final int RED = FG_RED;
-    public static final int GREEN = FG_GREEN;
-    public static final int YELLOW = FG_YELLOW;
-    public static final int BLUE = FG_BLUE;
-    public static final int MAGENTA = FG_MAGENTA;
-    public static final int CYAN = FG_CYAN;
-    public static final int WHITE = FG_WHITE;
-
-    public static final int BG_BLACK = 40;
-    public static final int BG_RED = 41;
-    public static final int BG_GREEN = 42;
-    public static final int BG_YELLOW = 43;
-    public static final int BG_BLUE = 44;
-    public static final int BG_MAGENTA = 45;
-    public static final int BG_CYAN = 46;
-    public static final int BG_WHITE = 47;
+    OFF(0),
+    BOLD(1),
+    UNDERSCORE(4),
+    BLINK(5),
+    REVERSE(7),
+    CONCEALED(8),
+
+    FG_BLACK(30),
+    FG_RED(31),
+    FG_GREEN(32),
+    FG_YELLOW(33),
+    FG_BLUE(34),
+    FG_MAGENTA(35),
+    FG_CYAN(36),
+    FG_WHITE(37),
+
+    BLACK(FG_BLACK),
+    RED(FG_RED),
+    GREEN(FG_GREEN),
+    YELLOW(FG_YELLOW),
+    BLUE(FG_BLUE),
+    MAGENTA(FG_MAGENTA),
+    CYAN(FG_CYAN),
+    WHITE(FG_WHITE),
+
+    BG_BLACK(40),
+    BG_RED(41),
+    BG_GREEN(42),
+    BG_YELLOW(43),
+    BG_BLUE(44),
+    BG_MAGENTA(45),
+    BG_CYAN(46),
+    BG_WHITE(47);
 
     /** The ANSI escape char which is used to start sequences. */
     private static final char ESC = 27;
 
-    /** A map of code names to values. */
-    private static final Map<String,Integer> NAMES_TO_CODES;
-
-    /** A map of codes to name. */
-    private static final Map<Integer,String> CODES_TO_NAMES;
+    private final int code;
 
-    static {
-        Field[] fields = AnsiCode.class.getDeclaredFields();
-        Map<String,Integer> names = new HashMap<String,Integer>(fields.length);
-        Map<Integer,String> codes = new HashMap<Integer,String>(fields.length);
-
-        try {
-            for (Field field : fields) {
-                // Skip anything non-public, all public fields are codes
-                int mods = field.getModifiers();
-                if (!Modifier.isPublic(mods)) {
-                    continue;
-                }
-
-                String name = field.getName();
-                Integer code = (Integer) field.get(AnsiCode.class);
-
-                names.put(name, code);
-                codes.put(code, name);
-            }
-        }
-        catch (IllegalAccessException e) {
-            // This should never happen
-            throw new Error(e);
-        }
-
-        NAMES_TO_CODES = names;
-        CODES_TO_NAMES = codes;
+    private AnsiCode(final int code) {
+        this.code = code;
     }
 
-    /**
-     * Returns the ANSI code for the given symbolic name.  Supported symbolic names are all defined as
-     * fields in {@link AnsiCode} where the case is not significant.
-     */
-    public static int forName(final String name) throws IllegalArgumentException {
-        assert name != null;
-
-        // All names in the map are upper-case
-        String tmp = name.toUpperCase();
-        Integer code = NAMES_TO_CODES.get(tmp);
-
-        if (code == null) {
-            throw new IllegalArgumentException("Invalid ANSI code name: " + name);
-        }
-
-        return code;
-    }
-
-    /**
-     * Returns the symbolic name for the given ANSI code.
-     */
-    public static String name(final int code) throws IllegalArgumentException {
-        assert code >= 0;
-        
-        String name = CODES_TO_NAMES.get(code);
-
-        if (name == null) {
-            throw new IllegalArgumentException("Invalid ANSI code: " + code);
-        }
-
-        return name;
+    private AnsiCode(final AnsiCode code) {
+        this(code.code);
     }
+    
+    public static String attrib(final AnsiCode code) {
+        assert code != null;
 
-    public static String attrib(final int attr) {
-        return ESC + "[" + attr + "m";
+        StringBuilder buff = new StringBuilder();
+        buff.append(ESC).append("[").append(code.code).append("m");
+        return buff.toString();
     }
 }

Modified: geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiRenderer.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiRenderer.java?rev=707092&r1=707091&r2=707092&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiRenderer.java (original)
+++ geronimo/gshell/trunk/gshell-support/gshell-ansi/src/main/java/org/apache/geronimo/gshell/ansi/AnsiRenderer.java Wed Oct 22 07:43:52 2008
@@ -89,7 +89,7 @@
         String text = input.substring(i + 1, input.length());
 
         for (String name : codes) {
-            int code = AnsiCode.forName(name);
+            AnsiCode code = AnsiCode.valueOf(name.toUpperCase());
             buff.attrib(code);
         }
 
@@ -118,9 +118,9 @@
         return text != null && text.indexOf(BEGIN_TOKEN) >= 0;
     }
 
-    public static String encode(final Object text, final int code) {
+    public static String encode(final Object text, final AnsiCode code) {
         return new StringBuilder(BEGIN_TOKEN).
-                append(AnsiCode.name(code)).
+                append(code.name()).
                 append(CODE_TEXT_SEPARATOR).
                 append(text).
                 append(END_TOKEN).

Modified: geronimo/gshell/trunk/gshell-support/gshell-ansi/src/test/java/org/apache/geronimo/gshell/ansi/CodeTest.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-support/gshell-ansi/src/test/java/org/apache/geronimo/gshell/ansi/CodeTest.java?rev=707092&r1=707091&r2=707092&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-support/gshell-ansi/src/test/java/org/apache/geronimo/gshell/ansi/CodeTest.java (original)
+++ geronimo/gshell/trunk/gshell-support/gshell-ansi/src/test/java/org/apache/geronimo/gshell/ansi/CodeTest.java Wed Oct 22 07:43:52 2008
@@ -30,11 +30,10 @@
     extends TestCase
 {
     public void testForName() throws Exception {
-        assertEquals(AnsiCode.OFF, AnsiCode.forName("OFF"));
-        assertEquals(AnsiCode.OFF, AnsiCode.forName("off"));
+        assertEquals(AnsiCode.OFF, AnsiCode.valueOf("OFF"));
     }
 
     public void testName() throws Exception {
-        assertEquals("OFF", AnsiCode.name(AnsiCode.OFF));
+        assertEquals("OFF", AnsiCode.OFF.name());
     }
 }
\ No newline at end of file