Home | History | Annotate | Download | only in internal
      1 package com.beust.jcommander.internal;
      2 
      3 import com.beust.jcommander.ParameterException;
      4 
      5 import java.io.PrintWriter;
      6 import java.lang.reflect.Method;
      7 
      8 public class JDK6Console implements Console {
      9 
     10   private Object console;
     11 
     12   private PrintWriter writer;
     13 
     14   public JDK6Console(Object console) throws Exception {
     15     this.console = console;
     16     Method writerMethod = console.getClass().getDeclaredMethod("writer", new Class<?>[0]);
     17     writer = (PrintWriter) writerMethod.invoke(console, new Object[0]);
     18   }
     19 
     20   public void print(String msg) {
     21     writer.print(msg);
     22   }
     23 
     24   public void println(String msg) {
     25     writer.println(msg);
     26   }
     27 
     28   public char[] readPassword(boolean echoInput) {
     29     try {
     30       writer.flush();
     31       Method method;
     32       if (echoInput) {
     33           method = console.getClass().getDeclaredMethod("readLine", new Class<?>[0]);
     34           return ((String) method.invoke(console, new Object[0])).toCharArray();
     35       } else {
     36           method = console.getClass().getDeclaredMethod("readPassword", new Class<?>[0]);
     37           return (char[]) method.invoke(console, new Object[0]);
     38       }
     39     }
     40     catch (Exception e) {
     41       throw new ParameterException(e);
     42     }
     43   }
     44 
     45 }