+++ /dev/null
-// @file\r
-// DbCmds command-line interface to the classes that \r
-// update the FrameworkDatabase.db file based on WORKSPACE Contents\r
-//\r
-// Copyright (c) 2006, Intel Corporation All rights reserved.\r
-//\r
-// This program and the accompanying materials are licensed and made\r
-// available under the terms and conditions of the BSD License which\r
-// accompanies this distribution. The full text of the license may \r
-// be found at http://opensource.org/licenses/bsd-license.php\r
-//\r
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-//\r
-// This program is the command line interface to the CombineMsa class, which\r
-// will take the following arguments:\r
-//\r
-// Input:\r
-// -t, --test Test the Workspace against the FrameworkDatabase.db file\r
-// Returns 0 if valid, returns 1 if failed\r
-//\r
-// -f, --fix Fix the FrameworkDatabase.db file, so that it matches the\r
-// the contents of the WORKSPACE\r
-// Returns 0 if valid, returns 1 if failed\r
-//\r
-// -v [-v] Verbose Flag - sum of these will be used to set different\r
-// levels of verbosity\r
-//\r
-// -i Interactive, when used with -f or --fix, will query the user\r
-// regarding adds and deletes of packages and platforms from\r
-// the database.\r
-//\r
-// -a, --add Add an SPD or FPD file to the FrameworkDatabase.db file. The\r
-// SPD/FPD file must exist, or the command will fail.\r
-// Returns 0 if valid, returns 1 if failed\r
-//\r
-// -r, --del Remove an SPD or FPD file from the FrameworkDatabase.db file.\r
-// If the SPD/FPD file exists, the user will be queried to\r
-// remove it from the directory tree. For SPD files, the user\r
-// will also be presented with a list of Modules in the SPD\r
-// file, with the query to remove the modules as well as the\r
-// SPD file.\r
-// Returns 0 if valid, returns 1 if failed\r
-//\r
-// -u Display the UiName for all Packages and Platforms currently in\r
-// the FrameworkDatabase.db file.\r
-// Returns 0 if valid, returns 1 if failed\r
-//\r
-// -c Display a CSV listing of Type (SPD|FPD) UiName and Filename of\r
-// every entry in the FrameworkDatabase.db file.\r
-// Returns 0 if valid, returns 1 if failed\r
-//\r
-// No Options Display a list of Type (Package|Platfrom) and Filename of every\r
-// entry in the FrameworkDatabase.db file.\r
-// Returns 0 if valid, returns 1 if failed\r
-//\r
-// -h, -?, --help Displays this usage and exits.\r
-// Returns 0 if valid, returns 1 if failed\r
-//\r
-//\r
-// Output:\r
-// Displayed information\r
-//\r
-// Modifies - OPTIONAL\r
-// FrameworkDatabase.db\r
-//\r
-\r
-package org.tianocore.DbTools;\r
-\r
-import java.io.*;\r
-\r
-public class DbCmds {\r
-\r
- protected enum Cmd {\r
- SHOW_CSV, SHOW_PLATFORMS, SHOW_PACKAGES, FIX_DB, TEST_DB, FIND_SOMETHING, SHOW_FAR, ADD_SOMETHING,\r
- DELETE_SOMETHING\r
- }\r
-\r
- private int DEBUG = 0;\r
-\r
- private static final String copyright = "Copyright (c) 2006, Intel Corporation All rights reserved.";\r
-\r
- private static final String version = "Version 0.1";\r
-\r
- private static final String Specification = "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
-\r
- private int VERBOSE = 0;\r
-\r
- public boolean INTERACTIVE = false;\r
-\r
- private String workspace = System.getenv("WORKSPACE");\r
-\r
- private final String frameworkDatabase = workspace + File.separator + "Tools" + File.separator + "Conf"\r
- + File.separator + "FrameworkDatabase.db";\r
-\r
- private final int ESUCCESS = 0;\r
-\r
- private final int EFAILURE = 1;\r
-\r
- private final int MIN_VERBOSE = 0;\r
-\r
- private final int MED_VERBOSE = 1;\r
-\r
- private final int MAX_VERBOSE = 2;\r
-\r
- private final static int FOUND = 1;\r
-\r
- private final static int NOTFOUND = 0;\r
-\r
- private boolean TEST = false;\r
-\r
- private int result = ESUCCESS;\r
-\r
- private Cmd commandToCall;\r
-\r
- private boolean isPlatform = false;\r
-\r
- private boolean isPackage = false;\r
-\r
- private boolean isFar = false;\r
-\r
- private boolean QUIET = false;\r
-\r
- private String commandArgs = "";\r
-\r
- private String whatToFind = "";\r
-\r
- public int DbUpdateCmdLine(String[] args) {\r
-\r
- if (testFile(frameworkDatabase) == NOTFOUND) {\r
- System.out.println("ERROR: E000 Invalid Workspace!");\r
- System.out.println("The environment variable, WORKSPACE, does not point to a valid workspace");\r
- System.out.println("DbUpdate Aborted!");\r
- System.err.flush();\r
- System.exit(EFAILURE);\r
- }\r
- result = parseCmdLine(args);\r
- if (result == ESUCCESS) {\r
- if (DEBUG > 2)\r
- System.out.println("Parse Succeeded!");\r
- if (VERBOSE > MAX_VERBOSE)\r
- System.out.println("WORKSPACE: " + workspace);\r
- if (DEBUG > 1)\r
- System.out.println("Command to call: " + commandToCall.toString());\r
- result = processCmdLine(commandToCall);\r
- } else {\r
- if (QUIET == false) {\r
- System.out.println("Invalid Arguments");\r
- outputUsage();\r
- result = EFAILURE;\r
- }\r
- }\r
- if (DEBUG > 2)\r
- System.out.println(" Result: " + result);\r
-\r
- return result;\r
- }\r
-\r
- private int processCmdLine(Cmd cmdCode) {\r
- UpdateDb dbUp = new UpdateDb();\r
- int res = ESUCCESS;\r
- switch (cmdCode) {\r
- case SHOW_CSV:\r
- // display current Database contents in CSV format\r
- // Modifies: NOTHING\r
- if ((DEBUG > 3) || (VERBOSE > MED_VERBOSE))\r
- System.out.println("Display contents of the FrameworkDatabase.db file in CSV format.");\r
- result = dbUp.getCsvEntries(frameworkDatabase, VERBOSE);\r
- break;\r
- case FIX_DB:\r
- // Automatically make the database match the contents of the workspace\r
- // Modifies: FrameworkDatabase.db\r
- if ((VERBOSE > MIN_VERBOSE) && (QUIET == false)) {\r
- if (TEST == false)\r
- System.out.println("Adjusting the FrameworkDatabase to match the contents of the WORKSPACE: "\r
- + workspace);\r
- if (TEST)\r
- System.out.println("Verify the FrameworkDatabase matches the contents of the WORKSPACE: "\r
- + workspace);\r
- }\r
- if ((DEBUG > 3) || (VERBOSE > MED_VERBOSE))\r
- System.out.println("Scan the Workspace and update the FrameworkDatabase.db file.");\r
- result = dbUp.fixDatabase(workspace, VERBOSE, INTERACTIVE, TEST, QUIET);\r
-\r
- break;\r
- case ADD_SOMETHING:\r
- // Add a Platform, package or FAR to the workspace.\r
- // Modifies: FrameworkDatabase.db\r
- if (((DEBUG > 3) || (VERBOSE > MED_VERBOSE)) && (isPlatform))\r
- System.out.println("Add Platform " + commandArgs + " to the FrameworkDatabase.db file");\r
- else if (((DEBUG > 3) || (VERBOSE > MED_VERBOSE)) && (isPackage))\r
- System.out.println("Add Package " + commandArgs + " to the FrameworkDatabase.db file");\r
- else if (((DEBUG > 3) || (VERBOSE > MED_VERBOSE)) && (isFar))\r
- System.out.println("Add Framework Archive " + commandArgs + " to the FrameworkDatabase.db file");\r
- result = dbUp.addItem(frameworkDatabase, commandArgs, VERBOSE, INTERACTIVE);\r
- break;\r
- case DELETE_SOMETHING:\r
- // Remove a platform, package or FAR from the workspace\r
- // Modifies: FrameworkDatabase.db, AND Filesystem\r
- if (((DEBUG > 3) || (VERBOSE > MED_VERBOSE)) && (isPlatform))\r
- System.out.println("Removing Platform " + commandArgs + " from the FrameworkDatabase.db file");\r
- else if (((DEBUG > 3) || (VERBOSE > MED_VERBOSE)) && (isPackage))\r
- System.out.println("Removing Package " + commandArgs + " from the FrameworkDatabase.db file");\r
- else if (((DEBUG > 3) || (VERBOSE > MED_VERBOSE)) && (isFar))\r
- System.out.println("Removing Framework Archive " + commandArgs + " from the FrameworkDatabase.db file");\r
- result = dbUp.addItem(workspace, commandArgs, VERBOSE, INTERACTIVE);\r
- break;\r
- case FIND_SOMETHING:\r
- // Find something in the workspace\r
- // Modifies: NOTHING\r
- if ((DEBUG > 3) || (VERBOSE > MED_VERBOSE))\r
- System.out.println("Finding " + whatToFind + " " + commandArgs + " in the Workspace");\r
- result = dbUp.findItem(workspace, VERBOSE, whatToFind, commandArgs);\r
- break;\r
- case SHOW_FAR:\r
- // Display FAR information for all SPDs in the workspace\r
- // Modifies: NOTHING\r
- if ((DEBUG > 3) || (VERBOSE > MED_VERBOSE))\r
- System.out.println("Display Framework Archives in the Workspace");\r
- result = dbUp.findFars(workspace, VERBOSE);\r
- break;\r
- case SHOW_PACKAGES:\r
- // Display SPD information for all SPDs in the workspace\r
- // Modifies: NOTHING\r
- if ((DEBUG > 3) || (VERBOSE > MED_VERBOSE))\r
- System.out.println("Display Packages in the Workspace");\r
- result = dbUp.findSpds(workspace, VERBOSE);\r
- break;\r
- case SHOW_PLATFORMS:\r
- // Display FPD information for all SPDs in the workspace\r
- // Modifies: NOTHING\r
- if ((DEBUG > 3) || (VERBOSE > MED_VERBOSE))\r
- System.out.println("Display Platforms in the Workspace");\r
- result = dbUp.findFpds(workspace, VERBOSE);\r
- break;\r
- default:\r
- // ERROR IF WE GET HERE!\r
- if ((DEBUG > 3) || (VERBOSE > MAX_VERBOSE))\r
- System.out.println("We could not process the following: " + commandToCall.toString());\r
- else if (QUIET == false)\r
- outputUsage();\r
- result = EFAILURE;\r
- break;\r
- }\r
- return res;\r
- }\r
-\r
- private int parseCmdLine(String[] args) {\r
-\r
- // Default is to fix the database.\r
- commandToCall = Cmd.FIX_DB;\r
- if (args.length == NOTFOUND) {\r
- if ((DEBUG > 3) || (VERBOSE > MAX_VERBOSE))\r
- System.out.println("NO ARGUMENTS! " + commandToCall.toString());\r
- return (ESUCCESS);\r
- }\r
-\r
- for (int i = 0; i < args.length; i++)\r
- if (args[i].toLowerCase().contentEquals("-q"))\r
- QUIET = true;\r
-\r
- for (int i = 0; i < args.length; i++) {\r
- String arg = args[i].trim();\r
- // This is the list of valid options\r
- if (!((arg.toLowerCase().startsWith("-t")) || (arg.toLowerCase().startsWith("--t"))\r
- || (arg.toLowerCase().startsWith("-q")) || (arg.toLowerCase().startsWith("-i"))\r
- || (arg.toLowerCase().startsWith("-f")) || (arg.toLowerCase().startsWith("--f"))\r
- || (arg.toLowerCase().startsWith("-c")) || (arg.toLowerCase().startsWith("--c"))\r
- || (arg.toLowerCase().startsWith("-a")) || (arg.toLowerCase().startsWith("--a"))\r
- || (arg.toLowerCase().startsWith("-r")) || (arg.toLowerCase().startsWith("--d"))\r
- || (arg.toLowerCase().startsWith("-v")) || (arg.toLowerCase().startsWith("--c"))\r
- || (arg.toLowerCase().startsWith("--p")) || (arg.toLowerCase().startsWith("-h"))\r
- || (arg.toLowerCase().startsWith("--h")) || (arg.toLowerCase().startsWith("/h")) || (arg\r
- .toLowerCase()\r
- .startsWith("-?")))) {\r
- // This is the fall through, we got something we did not know how to\r
- // process!\r
- if (args[i].startsWith("-")) {\r
- System.out.println("ERROR: E1004 Unknown Option: " + arg);\r
- System.out.println("Try running with -h or --help");\r
- } else {\r
- System.out.println("ERROR: E1005 Unknown Argument: " + arg);\r
- System.out.println("Try running with -h or --help");\r
- }\r
- System.out.println("Program Aborted!");\r
- System.err.flush();\r
- System.exit(EFAILURE);\r
- }\r
- if ((arg.toLowerCase().contentEquals("-t")) || (arg.toLowerCase().contains("--test"))) {\r
- // Test Workspace, do not fix.\r
- TEST = true;\r
- }\r
- if (arg.toLowerCase().contentEquals("-q")) {\r
- QUIET = true;\r
- }\r
- if (arg.toLowerCase().contentEquals("-i")) {\r
- INTERACTIVE = true;\r
- }\r
- if ((arg.toLowerCase().contentEquals("-f")) || (arg.toLowerCase().contains("--fix"))) {\r
- // Non-interactive fix of the database\r
- commandToCall = Cmd.FIX_DB;\r
- }\r
- if ((arg.toLowerCase().contentEquals("-c")) || (arg.toLowerCase().contains("--csv"))) {\r
- // Dump database in CSV format\r
- commandToCall = Cmd.SHOW_CSV;\r
- }\r
- if ((arg.toLowerCase().trim().contentEquals("-a")) || (arg.toLowerCase().contains("--add"))) {\r
- i++;\r
- if (args[i].startsWith("-")) {\r
- System.out.println("ERROR: E002 Missing Argument!");\r
- System.out\r
- .println("The add function requires an argument, either a package name or a platform name!");\r
- System.out.println("DbUpdate Aborted!");\r
- System.err.flush();\r
- System.exit(EFAILURE);\r
- }\r
- commandToCall = Cmd.ADD_SOMETHING;\r
- commandArgs = args[i];\r
- setArgType(commandArgs);\r
- }\r
- if ((arg.toLowerCase().trim().contentEquals("-r")) || (arg.toLowerCase().contains("--del"))) {\r
- i++;\r
- if (args[i].startsWith("-")) {\r
- System.out.println("ERROR: E002 Missing Argument!");\r
- System.out\r
- .println("The remove function requires an argument, either a package name or a platform name!");\r
- System.out.println("DbUpdate Aborted!");\r
- System.err.flush();\r
- System.exit(EFAILURE);\r
- }\r
- commandToCall = Cmd.DELETE_SOMETHING;\r
- commandArgs = args[i];\r
- setArgType(commandArgs);\r
- }\r
- if (arg.toLowerCase().contains("--find")) {\r
- commandToCall = Cmd.FIND_SOMETHING;\r
- i++;\r
- if (args[i].toLowerCase().contains("--lib"))\r
- whatToFind = "LIBRARY";\r
- else if (args[i].toLowerCase().contains("--guid"))\r
- whatToFind = "GUID";\r
- else if (args[i].toLowerCase().contains("--ppi"))\r
- whatToFind = "PPI";\r
- else if (args[i].toLowerCase().contains("--prot"))\r
- whatToFind = "PROTOCOL";\r
- else if (args[i].toLowerCase().contains("--pcd"))\r
- whatToFind = "PCD";\r
- else if (args[i].startsWith("-")) {\r
- System.out.println("ERROR: E001 Invalid Argument");\r
- System.out.println("The find function takes either a qualifier of --guid, --ppi,");\r
- System.out.println(" --proto, --pcd, or the string to search for.");\r
- System.err.flush();\r
- System.exit(EFAILURE);\r
- } else\r
- commandArgs = args[i];\r
-\r
- if (!whatToFind.contentEquals("")) {\r
- i++;\r
- if (args[i].startsWith("-")) {\r
- System.out.println("ERROR: E001 Invalid Argument");\r
- System.out.println("The find function qualifier (--guid, --ppi, --proto, --pcd)");\r
- System.out.println(" must be followed by the string to search for.");\r
- System.err.flush();\r
- System.exit(EFAILURE);\r
- } else\r
- commandArgs = args[i];\r
- }\r
-\r
- }\r
- if (arg.trim().contentEquals("-v")) {\r
- VERBOSE++;\r
- }\r
- if (arg.toLowerCase().contains("--lib")) {\r
- whatToFind = "LIBRARY";\r
- }\r
- if (arg.toLowerCase().contains("--guid")) {\r
- whatToFind = "GUID";\r
- }\r
- if (arg.toLowerCase().contains("--ppi")) {\r
- whatToFind = "PPI";\r
- }\r
- if (arg.toLowerCase().contains("--prot")) {\r
- whatToFind = "PROTOCOL";\r
- }\r
- if (arg.toLowerCase().contains("--pcd")) {\r
- whatToFind = "PCD";\r
- }\r
- if (arg.toLowerCase().contentEquals("-d") || arg.trim().toLowerCase().contains("--debug")) {\r
- if ((i + 1 == args.length) || (args[i + 1].trim().startsWith("-"))) {\r
- DEBUG = 1;\r
- } else if (i + 1 < args.length) {\r
- String pattern = "^\\d+";\r
- if (args[i + 1].trim().matches(pattern)) {\r
- i++;\r
- DEBUG = Integer.parseInt(args[i]);\r
- } else\r
- DEBUG = 1;\r
- }\r
- }\r
- if (arg.trim().contentEquals("-V")) {\r
- System.out.println("DbTools, " + version);\r
- System.out.println(copyright);\r
- System.out.println(Specification);\r
- System.err.flush();\r
- System.exit(ESUCCESS);\r
- }\r
- if (arg.toLowerCase().trim().startsWith("--pack")) {\r
- commandToCall = Cmd.SHOW_PACKAGES;\r
- }\r
- if (arg.toLowerCase().trim().startsWith("--far")) {\r
- commandToCall = Cmd.SHOW_FAR;\r
- }\r
- if (arg.toLowerCase().trim().startsWith("--plat")) {\r
- commandToCall = Cmd.SHOW_PLATFORMS;\r
- }\r
- if ((arg.toLowerCase().contentEquals("-h")) || (arg.toLowerCase().contentEquals("-?"))\r
- || (arg.toLowerCase().startsWith("/h")) || (arg.toLowerCase().contentEquals("--help"))) {\r
- outputUsage();\r
- System.exit(EFAILURE);\r
- }\r
-\r
- }\r
- return ESUCCESS;\r
- }\r
-\r
- private int testFile(String Filename) {\r
- File tFile = new File(Filename);\r
- if (DEBUG > 4)\r
- System.out.println("File is located: " + tFile.getPath());\r
- if (tFile.exists())\r
- return FOUND;\r
- else\r
- return NOTFOUND;\r
- }\r
-\r
- private void setArgType(String argv) {\r
- if (argv.trim().toLowerCase().contains(".spd"))\r
- isPackage = true;\r
- if (argv.trim().toLowerCase().contains(".fpd"))\r
- isPlatform = true;\r
- if (argv.trim().toLowerCase().contains(".far"))\r
- isFar = true;\r
- }\r
-\r
- public String getArgType() {\r
- String argt = "UNKNOWN";\r
- if (isPackage)\r
- argt = "SPD";\r
- if (isFar)\r
- argt = "FAR";\r
- if (isPlatform)\r
- argt = "FPD";\r
- return argt;\r
- }\r
-\r
- private static void outputUsage() {\r
-\r
- System.out.println("DbTool, " + version);\r
- System.out.println(copyright);\r
- System.out.println("Usage:");\r
- System.out.println(" DbTool [-v] [-t] [-q] [-V] [--package] [--platform] [-h | -? | --help]");\r
- System.out.println(" where:");\r
- System.out.println(" -h | -? | --help OPTIONAL - This Help Text");\r
- System.out\r
- .println(" -t | --test OPTIONAL - Test the FrameworkDatabase Contents against the WORKSPACE");\r
- System.out\r
- .println(" -q OPTIONAL - Quiet mode - pass or fail only on return value, nothing is printed");\r
- System.out\r
- .println(" -f | --fix OPTIONAL - Automatically fix (non-interactive) the Database file to match the WORKSPACE.");\r
- System.out\r
- .println(" -v OPTIONAL - Verbose, print information messages. Adding more -v arguments increases verbosity.");\r
- System.out.println(" --package OPTIONAL - Show all Packages installed in the WORKSPACE.");\r
- System.out.println(" --platforms OPTIONAL - Show all Platforms installed in the WORKSPACE.");\r
- System.out.println(" -V OPTIONAL - Display Version information and exit.");\r
- //\r
- // TODO: Implement the following options.\r
- //\r
- /**\r
- System.out.println("");\r
- System.out.println(" =================== Options below this line have not been implemented in this release ===================");\r
- System.out\r
- .println(" -i OPTIONAL - Force interactive on commands that modify the WORKSPACE");\r
- System.out\r
- .println(" --far OPTIONAL - Show all Framework Archives installed in the WORKSPACE.");\r
- System.out\r
- .println(" --find [qualifier] value OPTIONAL - Search the WORKSPACE for value, with one and only one optional Qualifier.");\r
- System.out.println(" qualifiers: --guid Find a GUID by Guid C Name");\r
- System.out.println(" --prot Find a Protocol or ProtocolNotify by C Name");\r
- System.out.println(" --ppi Find a PPI or PpiNotify by C Name");\r
- System.out.println(" --pcd Find a PCD entry by C Name");\r
- System.out.println(" --lib Find information about a Library Class");\r
- System.out\r
- .println(" -c OPTIONAL - Print a comma separated value listing of TYPE,UiName,Filename");\r
- System.out\r
- .println(" -a, --add value OPTIONAL - Add a value (package, platform or far) to the database");\r
- System.out\r
- .println(" -r, --del value OPTIONAL - Remove a value (package, platform or far) from the database");\r
- System.out.println("");\r
- */\r
- }\r
-}\r