package org.neo4j.util.shell; import java.rmi.RemoteException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; public class BashVariableInterpreter { private static final Map<String, Replacer> REPLACERS = new HashMap<String, Replacer>(); static { REPLACERS.put( "d", new DateReplacer( "EEE MMM dd" ) ); REPLACERS.put( "h", new HostReplacer() ); REPLACERS.put( "H", new HostReplacer() ); REPLACERS.put( "s", new HostReplacer() ); REPLACERS.put( "t", new DateReplacer( "HH:mm:ss" ) ); REPLACERS.put( "T", new DateReplacer( "KK:mm:ss" ) ); REPLACERS.put( "@", new DateReplacer( "KK:mm aa" ) ); REPLACERS.put( "A", new DateReplacer( "HH:mm" ) ); REPLACERS.put( "u", new StaticReplacer( "user" ) ); REPLACERS.put( "v", new StaticReplacer( "1.0-b6" ) ); REPLACERS.put( "V", new StaticReplacer( "1.0-b6" ) ); } public void addReplacer( String key, Replacer replacer ) { REPLACERS.put( key, replacer ); } public String interpret( String string, ShellServer server, Session session ) { for ( String key : REPLACERS.keySet() ) { Replacer replacer = REPLACERS.get( key ); String value = replacer.getReplacement( server, session ); string = string.replaceAll( "\\\\" + key, value ); } return string; } public static interface Replacer { String getReplacement( ShellServer server, Session session ); } public static class StaticReplacer implements Replacer { private String value; public StaticReplacer( String value ) { this.value = value; } public String getReplacement( ShellServer server, Session session ) { return this.value; } } public static class DateReplacer implements Replacer { private DateFormat format; public DateReplacer( String format ) { this.format = new SimpleDateFormat( format ); } public String getReplacement( ShellServer server, Session session ) { return format.format( new Date() ); } } public static class HostReplacer implements Replacer { public String getReplacement( ShellServer server, Session session ) { try { return server.getName(); } catch ( RemoteException e ) { return ""; } } } }