1.add code to support friendly output message.
[mirror_edk2.git] / Tools / Java / Source / ContextTool / org / tianocore / context / HelpInfo.java
1 /** @file
2 File is HelpInfo class which is used to output the usage info.
3
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 **/
13
14 package org.tianocore.context;
15
16 import java.util.LinkedList;
17
18 public class HelpInfo {
19
20
21 /**
22 * output the tools usage guide
23 * @param no input parameter
24 * @return no return value
25 **/
26 public static void outputUsageInfo() {
27 System.out.printf("\n%s", DescripationString);
28 System.out.printf("\n%s", UsageInfoString);
29 System.out.printf("\n%s", DetailOfOptionString);
30
31 for (int i = 0; i < settingnum; i++) {
32 outputSubUsageInfo(UsageString[i], UsageStringInfo[i]);
33 }
34
35 System.out.printf("\n%s", ExampleString);
36 System.out.printf("\n%s", str1);
37 System.out.printf("\n%s", str2);
38 System.out.printf("\n%s", str3);
39 System.out.printf("\n%s", str4);
40 }
41
42 /**
43 * output the usage info which bases on cmd option
44 * @param String str1 : the cmd option
45 * String str2 : the detail of cmd option
46 * @return no return value
47 **/
48 private static void outputSubUsageInfo(String str1, String str2) {
49
50 splitString(str2);
51 System.out.printf("\n%4s %-30s %s", "", str1, List.get(0));
52 for (int i=1; i<List.size(); i++){
53 System.out.printf("\n%4s %-30s %s", "", "", List.get(i));
54 }
55 List.clear();
56 }
57
58 /**
59 * according to the output width, split the detail info
60 * @param String str :the detail info
61 * @return no return value
62 **/
63 private static void splitString(String str) {
64 int strlength = str.length();
65 if (strlength > MaxSrtingLength) {
66 String[] tokens = str.split("[ ]", 0);
67 String tempstr = null;
68 int templength = 0;
69 int start = 0;
70 int end = 0;
71 for (int i = 0; i < tokens.length; i++) {
72 if ((templength = end + tokens[i].length() + 1) < (MaxSrtingLength + start)) {
73 end = templength;
74 } else {
75 tempstr = str.substring(start, end);
76 List.add(tempstr);
77 start = end;
78 i = i - 1;
79 }
80 }
81 tempstr = str.substring(start, end - 1);
82 List.add(tempstr);
83 } else {
84 List.add(str);
85 }
86 }
87
88
89 private static LinkedList<String> List = new LinkedList<String>();
90
91 private static final int MaxSrtingLength = 40;
92
93 private static final int settingnum = 7;
94
95 private static final String DescripationString = "The purpose of this tool is modifying the settings in target.txt";
96
97 private static final String UsageInfoString = "Usage: ContextTool [-option1] [args] [-option2] [args] ...";
98
99 private static final String DetailOfOptionString = "Where options include:";
100
101 private static final String ExampleString = "Example: ContextTool -a IA32 IA64 EBC -c Tools/Conf/tools_def.txt -t DEBUG -n GCC -p EdkNt32Pkg/Nt32.fpd -m 2\n";
102
103 private static final String str1 = "show current sub setting: ContextTool -x";
104
105 private static final String str2 = "show possible sub setting: ContextTool -x ?";
106
107 private static final String str3 = "clean current sub setting: ContextTool -x 0";
108
109 private static final String str4 = "x is the sub setting option, such as p, a, n, m, t, c.\n";
110
111 private static final String HString = "-h";
112
113 private static final String HStringInfo = "print usage info";
114
115 private static final String AString = "-a <list of Arch>";
116
117 private static final String AStringInfo = "What kind of architechure is the binary target, such as IA32, IA64, X64, EBC, or ARM. Multiple values can be specified on a single line, using space to separate the values.";
118
119 private static final String CString = "-c <tool_definition_file.txt>";
120
121 private static final String CStringInfo = "Assign a txt file with the relative path to WORKSPACE, which specify the tools to use for the build and must be located in the path: WORKSPACE/Tools/Conf/. If no file is specified, the default filename is \"tools_def.txt\"";
122
123 private static final String NString = "-n <list of TagNames>";
124
125 private static final String NStringInfo = "Specify the TagName, such as GCC, MSFT, which are defined in the \"tool_definition_file.txt\"";
126
127 private static final String PString = "-p <*.fpd>";
128
129 private static final String PStringInfo = "Specify the WORKSPACE relative Path and Filename of platform FPD file that will be used for the build.";
130
131 private static final String TString = "-t <list of Build Targets>";
132
133 private static final String TStringInfo = "What kind of the version is the binary target, such as DEBUG, RELEASE. Multiple values can be specified on a single line, using space to separate the values.";
134
135 private static final String MString = "-m <num of Threads>";
136
137 private static final String MStringInfo = "The number of concurrent threads. Default is 2. Recommend to set this value to one more than the number of your compurter cores or CPUs. 0 will disable MULTIPLE_THREAD and clean MAX_CONCURRENT_THREAD_NUMBER.";
138
139 private static final String[] UsageString = { HString, AString, CString,
140 NString, PString, TString, MString };
141
142 private static final String[] UsageStringInfo = { HStringInfo, AStringInfo,
143 CStringInfo, NStringInfo, PStringInfo, TStringInfo, MStringInfo };
144 }