package com.sleepycat.je.utilint; import java.io.File; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.EnvironmentConfig; import com.sleepycat.je.config.EnvironmentParams; import com.sleepycat.je.dbi.EnvironmentImpl; import de.ovgu.cide.jakutil.*; /** * Convenience methods for command line utilities. */ public class CmdUtil { public static String getArg( String[] argv, int whichArg) throws IllegalArgumentException { if (whichArg < argv.length) { return argv[whichArg]; } else { throw new IllegalArgumentException(); } } /** * Parse a string into a long. If the string starts with 0x, this is a hex * number, else it's decimal. */ public static long readLongNumber( String longVal){ if (longVal.startsWith("0x")) { return Long.parseLong(longVal.substring(2),16); } else { return Long.parseLong(longVal); } } private static final String printableChars="!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; public static void formatEntry( StringBuffer sb, byte[] entryData, boolean formatUsingPrintable){ for (int i=0; i < entryData.length; i++) { int b=entryData[i] & 0xff; if (formatUsingPrintable) { if (isPrint(b)) { if (b == 0134) { sb.append('\\'); } sb.append(printableChars.charAt(b - 33)); } else { sb.append('\\'); String hex=Integer.toHexString(b); if (b < 16) { sb.append('0'); } sb.append(hex); } } else { String hex=Integer.toHexString(b); if (b < 16) { sb.append('0'); } sb.append(hex); } } } private static boolean isPrint( int b){ return (b < 0177) && (040 < b); } /** * Create an environment suitable for utilities. Utilities should in * general send trace output to the console and not to the db log. */ public static EnvironmentImpl makeUtilityEnvironment( File envHome, boolean readOnly) throws DatabaseException { EnvironmentConfig config=new EnvironmentConfig(); config.setReadOnly(readOnly); hook853(config); hook854(config); hook855(config); config.setConfigParam(EnvironmentParams.ENV_RECOVERY.getName(),"false"); EnvironmentImpl envImpl=new EnvironmentImpl(envHome,config); return envImpl; } /** * Returns a description of the java command for running a utility, without * arguments. For utilities the last name of the class name can be * specified when "-jar je.jar" is used. */ public static String getJavaCommand( Class cls){ String clsName=cls.getName(); String lastName=clsName.substring(clsName.lastIndexOf('.') + 1); return "java { " + cls.getName() + " | -jar je.jar "+ lastName+ " }"; } protected static void hook853( EnvironmentConfig config) throws DatabaseException { } protected static void hook854( EnvironmentConfig config) throws DatabaseException { } protected static void hook855( EnvironmentConfig config) throws DatabaseException { } }