001/* 002 * Portions of this software was developed by employees of the National Institute 003 * of Standards and Technology (NIST), an agency of the Federal Government and is 004 * being made available as a public service. Pursuant to title 17 United States 005 * Code Section 105, works of NIST employees are not subject to copyright 006 * protection in the United States. This software may be subject to foreign 007 * copyright. Permission in the United States and in foreign countries, to the 008 * extent that NIST may hold copyright, to use, copy, modify, create derivative 009 * works, and distribute this software and its documentation without fee is hereby 010 * granted on a non-exclusive basis, provided that this notice and disclaimer 011 * of warranty appears in all copies. 012 * 013 * THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER 014 * EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY 015 * THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF 016 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM 017 * INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE 018 * SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE. IN NO EVENT 019 * SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT, 020 * INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM, 021 * OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY, 022 * CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR 023 * PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT 024 * OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER. 025 */ 026 027package gov.nist.secauto.metaschema.cli.processor; 028 029import edu.umd.cs.findbugs.annotations.NonNull; 030 031public enum ExitCode { 032 /** 033 * The command executed without issue. 034 */ 035 OK(0), 036 /** 037 * The command executed properly, but the operation failed. 038 */ 039 FAIL(1), 040 /** 041 * An error occurred while reading or writing. 042 */ 043 IO_ERROR(2), 044 /** 045 * A command was requested by name that doesn't exist or required arguments are 046 * missing. 047 */ 048 INVALID_COMMAND(3), 049 /** 050 * The target argument was not found or invalid. 051 */ 052 INVALID_TARGET(4), 053 /** 054 * Handled errors that occur during command execution. 055 */ 056 PROCESSING_ERROR(5), 057 /** 058 * Unhandled errors that occur during command execution. 059 */ 060 RUNTIME_ERROR(6), 061 /** 062 * The provided argument information for a command fails to match argument use 063 * requirements. 064 */ 065 INVALID_ARGUMENTS(7); 066 067 private final int statusCode; 068 069 ExitCode(int statusCode) { 070 this.statusCode = statusCode; 071 } 072 073 /** 074 * Get the related status code for use with {@link System#exit(int)}. 075 * 076 * @return the statusCode 077 */ 078 public int getStatusCode() { 079 return statusCode; 080 } 081 082 /** 083 * Exit without a message. 084 * 085 * @return the exit status 086 */ 087 @NonNull 088 public ExitStatus exit() { 089 return new NonMessageExitStatus(this); 090 } 091 092 /** 093 * Exit with the associated message. 094 * 095 * @return the exit status 096 */ 097 @NonNull 098 public ExitStatus exitMessage() { 099 return new MessageExitStatus(this); 100 } 101 102 /** 103 * Exit with the associated message and message arguments. 104 * 105 * @param messageArguments 106 * any message parameters 107 * 108 * @return the exit status 109 */ 110 @NonNull 111 public ExitStatus exitMessage(@NonNull Object... messageArguments) { 112 return new MessageExitStatus(this, messageArguments); 113 } 114}