• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.cts;
18 
19 import java.util.ArrayList;
20 import java.util.List;
21 
22 /**
23  * CommandHistory holds max 50 executed command.
24  * User can view what has been input and select one to execute again.
25  * Example:
26  * <ul>
27  *    <li> "cts_host > h"  to view latest 50 executed command.
28  *    <li> "cts_host > h 10" to view latest 10 executed command.
29  *    <li> "cts_host > h -e 5" to execute the 5th executed command.
30  * </ul>
31  */
32 public class CommandHistory {
33     private static final int CMD_RECORD_DEPTH = 50;
34 
35     private List<String> mCmdRecords;
36 
CommandHistory()37     public CommandHistory() {
38         mCmdRecords = new ArrayList<String>();
39     }
40 
41     /**
42      * Check if the command is history command.
43      *
44      * @param cmd The command string.
45      * @return If it's history command, return true; else return false.
46      */
isHistoryCommand(final String cmd)47     public boolean isHistoryCommand(final String cmd) {
48         return CTSCommand.HISTORY.equals(cmd) || CTSCommand.H.equals(cmd);
49     }
50 
51     /**
52      * Get the number of commands recorded.
53      *
54      * @return The number of commands recorded.
55      */
size()56     public int size() {
57         return mCmdRecords.size();
58     }
59 
60     /**
61      * Get command by index from command history cache.
62      *
63      * @param index The command index.
64      * @return The command corresponding to the command index.
65      */
get(final int index)66     public String get(final int index) {
67         return mCmdRecords.get(index);
68     }
69 
70     /**
71      * display specified number of commands from command history cache onto CTS console.
72      *
73      * @param cmdCount The command count requested.
74      */
show(final int cmdCount)75     public void show(final int cmdCount) {
76         int cmdSize = mCmdRecords.size();
77         int start = 0;
78 
79         if (cmdSize == 0) {
80             CUIOutputStream.println("no history command list");
81             return;
82         }
83         if (cmdCount < cmdSize) {
84             start = cmdSize - cmdCount;
85         }
86 
87         for (; start < cmdSize; start ++) {
88             String cmdLine = mCmdRecords.get(start);
89             CUIOutputStream.println("  " + Long.toString(start) + "\t" + cmdLine);
90         }
91     }
92 
93     /**
94      * Add a command to the command cache.
95      *
96      * @param cp The command container.
97      * @param cmdLine The command line.
98      */
addCommand(final CommandParser cp, final String cmdLine)99     public void addCommand(final CommandParser cp,
100             final String cmdLine) {
101         if ((cmdLine == null) || (cmdLine.length() == 0)) {
102             return;
103         }
104 
105         if (isValidCommand(cp.getAction()) && (!hasCommand(cmdLine))) {
106             mCmdRecords.add(cmdLine);
107             if (mCmdRecords.size() > CMD_RECORD_DEPTH) {
108                 mCmdRecords.remove(0);
109             }
110         }
111     }
112 
113     /**
114      * Check if the command contains valid action.
115      *
116      * @param action The action contained in the command.
117      * @return If valid, return true; else, return false.
118      */
isValidCommand(final String action)119     private boolean isValidCommand(final String action) {
120         if (!(CTSCommand.HISTORY.equals(action) || CTSCommand.H.equals(action))) {
121             if (CTSCommand.ADD.equals(action)
122                     || CTSCommand.EXIT.equals(action)
123                     || CTSCommand.HELP.equals(action)
124                     || CTSCommand.LIST.equals(action)
125                     || CTSCommand.REMOVE.equals(action)
126                     || CTSCommand.START.equals(action)) {
127                 return true;
128             }
129         }
130         return false;
131     }
132 
133     /**
134      * Check if the command is a duplicate one.
135      *
136      * @param cmdLine The command to be checked against the commands recorded.
137      * @return If duplicated, return true; else, return false.
138      */
hasCommand(final String cmdLine)139     private boolean hasCommand(final String cmdLine) {
140         for(String cmd : mCmdRecords) {
141             if (cmd.equals(cmdLine)) {
142                 return true;
143             }
144         }
145         return false;
146     }
147 }
148