📄 cmsshell.java
字号:
CmsShell shell = new CmsShell(
webInfPath,
servletMapping,
defaultWebApp,
"${user}@${project}:${siteroot}|${uri}>",
null);
shell.start(stream);
}
}
/**
* Exits this shell and destroys the OpenCms instance.<p>
*/
public void exit() {
if (m_exitCalled) {
return;
}
m_exitCalled = true;
try {
if (m_additionaShellCommands != null) {
m_additionaShellCommands.shellExit();
} else {
m_shellCommands.shellExit();
}
} catch (Throwable t) {
t.printStackTrace();
}
try {
m_opencms.shutDown();
} catch (Throwable t) {
t.printStackTrace();
}
}
/**
* Private internal helper for localisation to the current user's locale
* within OpenCms. <p>
*
* @return the current user's <code>Locale</code>.
*/
public Locale getLocale() {
if (getSettings() == null) {
return CmsLocaleManager.getDefaultLocale();
}
return getSettings().getLocale();
}
/**
* Returns the localized messages object for the current user.<p>
*
* @return the localized messages object for the current user
*/
public CmsMessages getMessages() {
return m_messages;
}
/**
* Obtain the additional settings related to the current user.
*
* @return the additional settings related to the current user.
*/
public CmsUserSettings getSettings() {
return m_settings;
}
/**
* Prints the shell prompt.<p>
*/
public void printPrompt() {
String prompt = m_prompt;
prompt = CmsStringUtil.substitute(prompt, "${user}", m_cms.getRequestContext().currentUser().getName());
prompt = CmsStringUtil.substitute(prompt, "${siteroot}", m_cms.getRequestContext().getSiteRoot());
prompt = CmsStringUtil.substitute(prompt, "${project}", m_cms.getRequestContext().currentProject().getName());
prompt = CmsStringUtil.substitute(prompt, "${uri}", m_cms.getRequestContext().getUri());
System.out.print(prompt);
}
/**
* Sets the locale of the current user.<p>
*
* @param locale the locale to set
*
* @throws CmsException in case the locale of the current user can not be stored
*/
public void setLocale(Locale locale) throws CmsException {
CmsUserSettings settings = getSettings();
if (settings != null) {
settings.setLocale(locale);
settings.save(m_cms);
m_messages = Messages.get().getBundle(locale);
}
}
/**
* Starts this CmsShell.<p>
*
* @param fileInputStream a (file) input stream from which commands are read
*/
public void start(FileInputStream fileInputStream) {
try {
// execute the commands from the input stream
executeCommands(fileInputStream);
} catch (Throwable t) {
t.printStackTrace(System.err);
}
}
/**
* Shows the signature of all methods containing the given search String.<p>
*
* @param searchString the String to search for in the methods, if null all methods are shown
*/
protected void help(String searchString) {
String commandList;
boolean foundSomething = false;
System.out.println();
Iterator i = m_commandObjects.iterator();
while (i.hasNext()) {
CmsCommandObject cmdObj = (CmsCommandObject)i.next();
commandList = cmdObj.getMethodHelp(searchString);
if (!CmsStringUtil.isEmpty(commandList)) {
System.out.println(m_messages.key(
Messages.GUI_SHELL_AVAILABLE_METHODS_1,
cmdObj.getObject().getClass().getName()));
System.out.println(commandList);
foundSomething = true;
}
}
if (!foundSomething) {
System.out.println(m_messages.key(Messages.GUI_SHELL_MATCH_SEARCHSTRING_1, searchString));
}
}
/**
* Initializes the internal <code>CmsWorkplaceSettings</code> that contain (amongst other
* information) important information additional information about the current user
* (an instance of {@link CmsUserSettings}). <p>
*
* This step is performed within the <code>CmsShell</code> constructor directly after
* switching to run-level 2 and obtaining the <code>CmsObject</code> for the guest user as
* well as when invoking the CmsShell command <code>login</code>.
*
* @return the user settings for the current user.
*/
protected CmsUserSettings initSettings() {
m_settings = new CmsUserSettings(m_cms);
return m_settings;
}
/**
* Sets the echo status.<p>
*
* @param echo the echo status to set
*/
protected void setEcho(boolean echo) {
m_echo = echo;
}
/**
* Sets the current shell prompt.<p>
*
* To set the prompt, the following variables are available:<p>
*
* <code>$u</code> the current user name<br>
* <code>$s</code> the current site root<br>
* <code>$p</code> the current project name<p>
*
* @param prompt the prompt to set
*/
protected void setPrompt(String prompt) {
m_prompt = prompt;
}
/**
* Executes a shell command with a list of parameters.<p>
*
* @param command the command to execute
* @param parameters the list of parameters for the command
*/
private void executeCommand(String command, List parameters) {
if (m_echo) {
// echo the command to STDOUT
System.out.print(command);
for (int i = 0; i < parameters.size(); i++) {
System.out.print(" " + parameters.get(i));
}
System.out.println();
}
// prepare to lookup a method in CmsObject or CmsShellCommands
boolean executed = false;
Iterator i = m_commandObjects.iterator();
while (!executed && i.hasNext()) {
CmsCommandObject cmdObj = (CmsCommandObject)i.next();
executed = cmdObj.executeMethod(command, parameters);
}
if (!executed) {
// method not found
System.out.println();
StringBuffer commandMsg = new StringBuffer(command).append("(");
for (int j = 0; j < parameters.size(); j++) {
commandMsg.append("value");
if (j < parameters.size() - 1) {
commandMsg.append(", ");
}
}
commandMsg.append(")");
System.out.println(m_messages.key(Messages.GUI_SHELL_METHOD_NOT_FOUND_1, commandMsg.toString()));
System.out.println(m_messages.key(Messages.GUI_SHELL_HR_0));
((CmsShellCommands)m_shellCommands).help();
}
}
/**
* Executes all commands read from the given input stream.<p>
*
* @param fileInputStream a file input stream from which the commands are read
*/
private void executeCommands(FileInputStream fileInputStream) {
try {
LineNumberReader lnr = new LineNumberReader(new InputStreamReader(fileInputStream));
while (!m_exitCalled) {
printPrompt();
String line = lnr.readLine();
if (line == null) {
// if null the file has been read to the end
try {
Thread.sleep(500);
} catch (Throwable t) {
// noop
}
break;
}
if ((line != null) && line.trim().startsWith("#")) {
System.out.println(line);
continue;
}
StringReader reader = new StringReader(line);
StreamTokenizer st = new StreamTokenizer(reader);
st.eolIsSignificant(true);
// put all tokens into a List
List parameters = new ArrayList();
while (st.nextToken() != StreamTokenizer.TT_EOF) {
if (st.ttype == StreamTokenizer.TT_NUMBER) {
parameters.add(Integer.toString(new Double(st.nval).intValue()));
} else {
parameters.add(st.sval);
}
}
reader.close();
// extract command and arguments
if ((parameters == null) || (parameters.size() == 0)) {
if (m_echo) {
System.out.println();
}
continue;
}
String command = (String)parameters.get(0);
parameters = parameters.subList(1, parameters.size());
// execute the command
executeCommand(command, parameters);
}
} catch (Throwable t) {
t.printStackTrace(System.err);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -