FileDocCategorySizeDatePackage
Initializer.javaAPI DocGlassfish v2 API32951Fri May 04 22:33:24 BST 2007com.sun.enterprise.tools.verifier

Initializer

public class Initializer extends Object
Initialization of arguments and other temporary variables is done here. This class is responsible for creating the framework context and setting proper argument values to it.
author
Vikas Awasthi

Fields Summary
private com.sun.enterprise.util.LocalStringManagerImpl
smh
private Logger
logger
private FrameworkContext
frameworkContext
private String
_FOStr
private String
_WFOStr
private String
_AOStr
Constructors Summary
public Initializer(String[] args)
Constructor for creating the intitializer object.

param
args

 // NOI18N

                 
       
        this.frameworkContext = new FrameworkContext();
        parseArgs(args);
    
Methods Summary
public FrameworkContextgetFrameworkContext()

return
returns the initialized FrameworkContext object

        return frameworkContext;
    
private java.lang.StringgetReportLevelString(int rl)

param
rl
return
reporting level string.

        String rls = "";
        if (rl == VerifierConstants.FAIL) {
            rls = _FOStr;
        } else if (rl == VerifierConstants.WARN) {
            rls = _WFOStr;
        } else if (rl == VerifierConstants.ALL) {
            rls = _AOStr;
        }
        return rls;
    
private java.lang.StringgetUsageString()

return
string

        String usage = "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine1", // NOI18N
                        "usage: VERIFIER [optional_params] <jarFile>")) // NOI18N
                + "\n\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine2", // NOI18N
                        "where :")) // NOI18N
                + "\n\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine3", // NOI18N
                        "  [optional_params]: Must be: ")) // NOI18N
                + "\n\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine5", // NOI18N
                        "    -d|--destdir <destination dir> : Verifier " + // NOI18N
                "results are put in the specified existing directory")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine35", // NOI18N
                        "   -D|--domain      : Absolute path of the domain directory. Domain directory will be ignored if verifier is run with -p option. The default domain directory is <AS_INSTALL_DIR>/domains/domain1")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine36", // NOI18N
                        "   -p|--portability : Verifier will be run in portability mode with this option. Verifier runs in appserver mode by default. In the default mode verifier additionally checks correct usage of Sun application server features.")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine16", // NOI18N
                        "   -h|--help|-?     : display verifier help")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine34", // NOI18N
                        "   -t|--timestamp   : verifer results are generated with timestamp appended to it")) // NOI18N
                + "\n\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine7", // NOI18N
                        "    -u|--gui      : use Verifier GUI")) // NOI18N
                + "\n\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine4", // NOI18N
                        "     -v|--verbose : Display more execution information ")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine17", // NOI18N
                        "   -V|--version   : display verifier tool version")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine8", // NOI18N
                        "          (Note: Overrides default behavior, ")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine9", // NOI18N
                        "                 required jarFile not needed)")) // NOI18N
                + "\n\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine10", // NOI18N
                        "   -r|--reportlevel : result reporting level")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine11", // NOI18N
                        "   level=   a|all : set output report level to " + // NOI18N
                "display all results")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine14", // NOI18N
                        "            f|failures : set output report level " + // NOI18N
                "to display only failure")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine15", // NOI18N
                        "            results")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine12", // NOI18N
                        "            w|warnings : set output report level " + // NOI18N
                "to display only warning and")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine13", // NOI18N
                        "            failure results")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine27", // NOI18N
                        "   -a|--app         : run only the Application tests")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine28", // NOI18N
                        "   -A|--appclient   : run only the Application Client tests")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine29", // NOI18N
                        "   -c|--connector   : run only the Connector tests")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine30", // NOI18N
                        "   -e|--ejb         : run only the EJB tests")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine31", // NOI18N
                        "   -w|--web         : run only the Web tests")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine32", // NOI18N
                        "   -s|--webservices : run only the WebServices tests")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine33", // NOI18N
                        "   -l|--webservicesclient : run only the WebServicesClient tests")) // NOI18N
                + "\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine37", // NOI18N
                        "   -P|--persistence : run only the EJB 3.0 persistence tests")) // NOI18N
                + "\n\n\n" + // NOI18N
                (smh.getLocalString
                (getClass().getName() + ".usageLine19", // NOI18N
                        "Note: The default mode is non-verbose mode and the " + // NOI18N
                "default reportlevel is to display only warning and failure results.\n")) // NOI18N
                //*****
                + "\n\n" +
                (smh.getLocalString
                (getClass().getName() + ".usageLine20",
                        "<jarFile>: ear/war/jar/rar file to perform static " +
                "verification on "))
                + "\n\n" +
                (smh.getLocalString
                (getClass().getName() + ".usageLine21",
                        "Below is an example which runs verifier in verbose mode"))
                + "\n" +
                (smh.getLocalString
                (getClass().getName() + ".usageLine22",
                        "and writes all the results of static verification of "))
                + "\n" +
                (smh.getLocalString
                (getClass().getName() + ".usageLine23",
                        "file sample.ear to the destination directory /verifierresults"))
                + "\n\n" +
                (smh.getLocalString
                (getClass().getName() + ".usageLine24",
                        " verifier -v -ra -d /verifierresults sample.ear"))
                + "\n\n" +
                (smh.getLocalString
                (getClass().getName() + ".usageLine25",
                        " The results get generated in both text and xml format."))
                + "\n" +
                (smh.getLocalString
                (getClass().getName() + ".usageLine26",
                        " Two result files, sample.ear.txt and sample.ear.xml, " +
                "will be created."))
                + "\n\n";

        return usage;
    
private voidparseArgs(java.lang.String[] argv)
parses the arguments passed to verifier and sets the framework context object.

param
argv

        int c;
        String arg;
        boolean isVerboseSet = false;
        LongOption[] longopts = new LongOption[20];
        // The set of valid long options for verifier
        StringBuffer sb = new StringBuffer();
        longopts[0] = new LongOption("help", false, null, 'h"); // NOI18N
        longopts[1] = new LongOption("timestamp", false, null, 't"); // NOI18N
        longopts[2] = new LongOption("verbose", false, null, 'v"); // NOI18N
        longopts[3] = new LongOption("version", false, null, 'V"); // NOI18N
        longopts[4] = new LongOption("destdir", true, sb, 'd"); // NOI18N
        longopts[5] = new LongOption("reportlevel", true, sb, 'r"); // NOI18N
        longopts[6] = new LongOption("gui", false, null, 'u"); // NOI18N
        longopts[7] = new LongOption("app", false, null, 'a"); // NOI18N
        longopts[8] = new LongOption("appclient", false, null, 'A"); // NOI18N
        longopts[9] = new LongOption("connector", false, null, 'c"); // NOI18N
        longopts[10] = new LongOption("ejb", false, null, 'e"); // NOI18N
        longopts[11] = new LongOption("web", false, null, 'w"); // NOI18N
        longopts[12] = new LongOption("webservices", false, null, 's"); // NOI18N
        longopts[13] = new LongOption("webservicesclient", false, null, 'l"); // NOI18N
        longopts[14] = new LongOption("persistence", false, null, 'P"); // NOI18N
        longopts[15] = new LongOption("configdir", true, null, 'C"); // NOI18N
        longopts[16] = new LongOption("portability", false, null, 'p"); // NOI18N
        longopts[17] = new LongOption("domain", true, null, 'D"); // NOI18N
        longopts[18] = new LongOption("extDir", true, null, 'E"); // NOI18N
        longopts[19] = new LongOption("mode", true, null, 'm"); // NOI18N

        //The set of valid reportlevel arguments
        String[] levels = new String[6];
        levels[0] = "a"; // NOI18N
        levels[1] = "w"; // NOI18N
        levels[2] = "f"; // NOI18N
        levels[3] = "all"; // NOI18N
        levels[4] = "warnings"; // NOI18N
        levels[5] = "failures"; // NOI18N


        CLIPParser parser = null;
        parser =
                new CLIPParser("verifier", argv, "-:vtVhud:r:aAcewslC:pPm:D:E:", // NOI18N
                        longopts);

        while ((c = parser.getopt()) != -1)
            switch (c) {
                case 0:
                    arg = parser.getOptarg();
                    processValidLongOpt(
                            (char) (new Integer(sb.toString())).intValue(),
                            arg, levels);
                    break;
                case 'v":
                    logger.setLevel(Level.FINEST);
                    isVerboseSet = true;
                    Handler[] handler = Logger.getLogger("").getHandlers();
                    for (int i = 0; i < handler.length; i++) {
                        handler[i].setLevel(Level.FINEST);
                    }
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.verboseFlag"); // NOI18N
                    break;

                case 't":
                    frameworkContext.setUseTimeStamp(true);
                    break;

                case 'h":
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.helpMessage"); // NOI18N
                    usage();
                    break;

                case 'V":
                    logger.log(Level.INFO, getClass().getName() + ".Version");
                    System.exit(0);
                    break;

                case 'u":
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.startGUI"); // NOI18N
                    frameworkContext.setUsingGui(true);
                    break;

                case 'r":
                    arg = parser.getOptarg();
                    if (arg == null) {
                        logger.log(Level.SEVERE,
                                getClass().getName() + ".reqargs", // NOI18N
                                new Object[]{"verifier", "-r"}); // NOI18N
                        usage();

                    } else {
                        boolean validLevel = false;
                        for (int i = 0; i < levels.length; i++) {
                            if (arg.equals(levels[i])) {
                                validLevel = true;
                                break;
                            }
                        }
                        if (!validLevel) {
                            logger.log(Level.SEVERE, getClass().getName() +
                                    ".invalidreplevel", // NOI18N
                                    new Object[]{"verifier", arg}); // NOI18N
                            usage();
                        } else {
                            setReportingLevel(arg.charAt(0));
                        }
                    }
                    break;

                case 'd":
                    arg = parser.getOptarg();
                    if (arg == null) {
                        logger.log(Level.SEVERE, getClass().getName() +
                                ".reqargs", // NOI18N
                                new Object[]{"verifier", "-d"}); // NOI18N
                        usage();
                    } else if (!verifyAndSetResultDir(arg)) {
                        usage();
                    }
                    break;

                case ':":
                    // probably it will never come here
                    logger.log(Level.SEVERE, getClass().getName() + ".reqsarg",
                            new Object[]{"verifier", // NOI18N
                                         new Character(
                                                 (char) parser.getOptopt()).toString()});
                    usage();
                    break;
                case 'a":
                    logger.log(Level.FINE, getClass().getName() + ".debug.app");
                    frameworkContext.setApp(true);
                    frameworkContext.setPartition(true);
                    break;

                case 'A":
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.appclient"); // NOI18N
                    frameworkContext.setAppClient(true);
                    frameworkContext.setPartition(true);
                    break;

                case 'c":
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.connector"); // NOI18N
                    frameworkContext.setConnector(true);
                    frameworkContext.setPartition(true);
                    break;

                case 'e":
                    logger.log(Level.FINE, getClass().getName() + ".debug.ejb");
                    frameworkContext.setEjb(true);
                    frameworkContext.setPartition(true);
                    break;

                case 'w":
                    logger.log(Level.FINE, getClass().getName() + ".debug.web");
                    frameworkContext.setWeb(true);
                    frameworkContext.setPartition(true);
                    break;

                case 's":
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.webservices"); // NOI18N
                    frameworkContext.setWebServices(true);
                    frameworkContext.setPartition(true);
                    break;

                case 'l":
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.webservicesclient"); // NOI18N
                    frameworkContext.setWebServicesClient(true);
                    frameworkContext.setPartition(true);
                    break;

                case 'P":
                    frameworkContext.setPersistenceUnits(true);
                    frameworkContext.setPartition(true);
                    break;

                case '?":
                    char x = (char) parser.getOptopt();
                    if (x == '?") {
                        usage();
                    }
                    logger.log(Level.SEVERE,
                            getClass().getName() + ".invalidarg", // NOI18N
                            new Object[]{"verifier", // NOI18N
                                         new Character(x).toString()});
                    usage();
                    break;

                case 'C":
                    arg = parser.getOptarg();
                    if (arg == null || !(new File(arg).exists())) {
                        logger.log(Level.SEVERE, getClass().getName() +
                                ".reqargs", // NOI18N
                                new Object[]{"verifier", "-C"}); // NOI18N
                        usage();
                    }
                    frameworkContext.setConfigDirStr(arg);
                    break;

                case 'p":
                    frameworkContext.setPortabilityMode(true);
                    break;

                case 'm":
                    arg = parser.getOptarg();
                    if (arg != null &&
                        (arg.equals(SpecVersionMapper.JavaEEVersion_1_2) ||
                            arg.equals(SpecVersionMapper.JavaEEVersion_1_3) ||
                            arg.equals(SpecVersionMapper.JavaEEVersion_1_4) ||
                            arg.equals(SpecVersionMapper.JavaEEVersion_5))) {
                        frameworkContext.setJavaEEVersion(arg);
                    } else {
                        logger.log(Level.SEVERE,
                                getClass().getName() + ".invalidjavaeeversion", // NOI18N
                                new Object[]{"verifier", arg}); // NOI18N
                        usage();
                    }
                    logger.log(Level.INFO, getClass().getName() + ".specversion",
                            new Object[]{frameworkContext.getJavaEEVersion()});
                    break;

                case 'D":
                    arg = parser.getOptarg();
                    if (arg == null) {
                        logger.log(Level.SEVERE, getClass().getName() +
                                ".reqargs", // NOI18N
                                new Object[]{"verifier", "-D"}); // NOI18N
                        usage();
                    }
                    if(!new File(arg).exists()) {
                        logger.log(Level.SEVERE, getClass().getName() +
                                ".log.noDirExists", // NOI18N
                                new Object[]{arg});
                        usage();
                    }
                    frameworkContext.setDomainDir(arg);
                    break;

                case 'E":
                    arg = parser.getOptarg();
                    if (arg == null) {
                        logger.log(Level.SEVERE, getClass().getName() +
                                ".reqargs", // NOI18N
                                new Object[]{"verifier", "-E"}); // NOI18N
                        usage();
                    }
                    frameworkContext.setExtDir(arg);
                    break;

                default:
                    logger.log(Level.SEVERE,
                            getClass().getName() + ".invalidarg", // NOI18N
                            new Object[]{"verifier", // NOI18N
                                         new Character((char) c).toString()});
                    usage();
                    break;
            }

        int i = parser.getOptind();
        if (i < argv.length) {
            File jarFile = new File(argv[i]);
            if (!jarFile.exists()) {
                logger.log(Level.SEVERE,
                        getClass().getName() + ".invalidArchive", // NOI18N
                        new Object[]{argv[i]});
                usage();
            }
            frameworkContext.setJarFileName(jarFile.getPath());
            logger.log(Level.FINE, getClass().getName() + ".debug.jarFileName",
                    new Object[]{frameworkContext.getJarFileName()});

            i++;
            for (; i < argv.length; i++)
                logger.log(Level.INFO, getClass().getName() + ".extraargs",
                        new Object[]{"verifier", argv[i]}); // NOI18N

        } else {
            if (!frameworkContext.isUsingGui()) {
                logger.log(Level.SEVERE, getClass().getName() + ".jarmissing",
                        new Object[]{"verifier"}); // NOI18N
                usage();
            }
        }
        if(!isVerboseSet)
            setFormatter();
        logger.log(Level.FINE, getClass().getName() + ".debug.endParseArgs");

    
private voidprocessValidLongOpt(int c, java.lang.String arg, java.lang.String[] levels)
validates long cli options

param
c
param
arg
param
levels


        switch (c) {
            case 'v":
                logger.setLevel(Level.FINEST);
                Handler[] handler = Logger.getLogger("").getHandlers();
                for (int i = 0; i < handler.length; i++) {
                    handler[i].setLevel(Level.FINEST);
                }
                logger.log(Level.FINE,
                        getClass().getName() + ".debug.verboseFlag"); // NOI18N
                break;

            case 't":
                frameworkContext.setUseTimeStamp(true);
                break;

            case 'h":
                logger.log(Level.FINE,
                        getClass().getName() + ".debug.helpMessage"); // NOI18N
                usage();
                break;

            case 'V":
                logger.log(Level.INFO, getClass().getName() + ".Version");
                System.exit(0);
                break;

            case 'u":
                logger.log(Level.FINE,
                        getClass().getName() + ".debug.startGUI"); // NOI18N
                frameworkContext.setUsingGui(true);
                break;

            case 'r":
                if (arg == null) {
                    logger.log(Level.SEVERE, getClass().getName() + ".reqargs",
                            new Object[]{"verifier", "-r"}); // NOI18N
                    usage();
                } else {
                    boolean validLevel = false;
                    for (int i = 0; i < levels.length; i++) {
                        if (arg.equals(levels[i])) {
                            validLevel = true;
                            break;
                        }
                    }
                    if (!validLevel) {
                        logger.log(Level.SEVERE, getClass().getName() +
                                ".invalidreplevel", // NOI18N
                                new Object[]{"verifier", arg}); // NOI18N
                        usage();
                    } else {
                        setReportingLevel(arg.charAt(0));
                    }
                }
                break;

            case 'd":
                if (arg == null) {
                    logger.log(Level.SEVERE, getClass().getName() + ".reqargs",
                            new Object[]{"verifier", "-d"}); // NOI18N
                    usage();
                } else if (!verifyAndSetResultDir(arg)) {
                    usage();
                }
                break;

            default:
                // should never come here
                logger.log(Level.SEVERE, getClass().getName() + ".invalidarg",
                        new Object[]{"verifier", // NOI18N
                                     new Character((char) c).toString()});
                usage();
                break;
        }
    
private voidsetFormatter()
This method is only used in standalone invocation. For backend invocations this method should not be called. The logger should continue to use the default formatter when verifier is invoked from backend.

        Handler[] handlers = logger.getParent().getHandlers();
        for (int i = 0; i < handlers.length; i++) 
            if(handlers[i] instanceof ConsoleHandler)
                handlers[i].setFormatter(new VerifierFormatter());
    
private voidsetReportingLevel(char c)
set the reporting level of verifier based on the option used while invoking verifier.

param
c


        boolean setWarningLevelOnce = false;
        switch (c) {
            case 'w":
                if (!setWarningLevelOnce) {
                    logger.log(Level.FINE,
                            getClass().getName() +
                            ".debug.displayWarningFailures"); // NOI18N
                    frameworkContext.setReportLevel(VerifierConstants.WARN);
                    setWarningLevelOnce = true;
                } else {
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.reportLevel", // NOI18N
                            new Object[]{
                                getReportLevelString(
                                        frameworkContext.getReportLevel())});
                }
                break;

            case 'f":
                if (!setWarningLevelOnce) {
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.displayFailures"); // NOI18N
                    frameworkContext.setReportLevel(VerifierConstants.FAIL);
                    setWarningLevelOnce = true;
                } else {
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.reportLevel", // NOI18N
                            new Object[]{
                                getReportLevelString(
                                        frameworkContext.getReportLevel())});
                }
                break;

            case 'a":
                if (!setWarningLevelOnce) {
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.displayAll"); // NOI18N
                    frameworkContext.setReportLevel(VerifierConstants.ALL);
                    setWarningLevelOnce = true;
                } else {
                    logger.log(Level.FINE,
                            getClass().getName() + ".debug.reportLevel", // NOI18N
                            new Object[]{
                                getReportLevelString(
                                        frameworkContext.getReportLevel())});
                }
                break;

            default:
                // should never come here
                logger.log(Level.SEVERE,
                        getClass().getName() + ".invalidreplevel", // NOI18N
                        new Object[]{"verifier", new Character(c).toString()}); // NOI18N
                usage();
        }
    
private voidusage()
Display usage message to user upon encountering invalid option

        if (!frameworkContext.isUsingGui()) {
            logger.log(Level.INFO, getUsageString());
            //If any argument is found invalid then Veriifer will bail out.
            System.exit(1);
        }
    
private booleanverifyAndSetResultDir(java.lang.String name)
verifies and sets the output directory for keeping the result files.

param
name The output directory to keep the result files
return
true if output directory is writable, otherwise false.


        File outputDir = new File(name);
        if (outputDir.exists()) {
            if (outputDir.isDirectory()) {
                if (outputDir.canWrite()) {
                    frameworkContext.setOutputDirName(name);
                    return true;
                } else {
                    logger.log(Level.SEVERE, getClass().getName() +
                            ".log.noPermissions", new Object[]{name}); // NOI18N
                    return false;
                }
            } else {
                logger.log(Level.SEVERE, getClass().getName() +
                        ".log.notADir", new Object[]{name}); // NOI18N
                return false;

            }
        } else {
            logger.log(Level.SEVERE, getClass().getName() +
                    ".log.noDirExists", new Object[]{name}); // NOI18N
            return false;
        }