📄 cmsshellcommands.java
字号:
/*
* File : $Source: /usr/local/cvs/opencms/src/org/opencms/main/CmsShellCommands.java,v $
* Date : $Date: 2006/03/27 14:52:27 $
* Version: $Revision: 1.83 $
*
* This library is part of OpenCms -
* the Open Source Content Mananagement System
*
* Copyright (c) 2005 Alkacon Software GmbH (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* For further information about Alkacon Software GmbH, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.main;
import org.opencms.db.CmsDbEntryNotFoundException;
import org.opencms.db.CmsLoginMessage;
import org.opencms.file.CmsFile;
import org.opencms.file.CmsGroup;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsProject;
import org.opencms.file.CmsPropertyDefinition;
import org.opencms.file.CmsResource;
import org.opencms.file.CmsResourceFilter;
import org.opencms.file.CmsUser;
import org.opencms.file.types.CmsResourceTypeFolder;
import org.opencms.i18n.CmsLocaleManager;
import org.opencms.i18n.CmsMessages;
import org.opencms.importexport.CmsVfsImportExportHandler;
import org.opencms.module.CmsModule;
import org.opencms.module.CmsModuleImportExportHandler;
import org.opencms.report.CmsShellReport;
import org.opencms.report.I_CmsReport;
import org.opencms.security.CmsAccessControlEntry;
import org.opencms.security.CmsAccessControlList;
import org.opencms.security.CmsRole;
import org.opencms.security.I_CmsPrincipal;
import org.opencms.staticexport.CmsLinkManager;
import org.opencms.util.CmsFileUtil;
import org.opencms.util.CmsUUID;
import org.opencms.workplace.CmsWorkplace;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.Set;
import java.util.StringTokenizer;
/**
* Provides additional commands for the CmsShell.<p>
*
* Such additional commands can access OpenCms functions not available on "regular" OpenCms classes.
* Also, wrapping methods to access some important functions in the CmsObject that
* require complex data type parameters are provided.<p>
*
* @author Alexander Kandzior
*
* @version $Revision: 1.83 $
*
* @since 6.0.0
*/
class CmsShellCommands implements I_CmsShellCommands {
/** The OpenCms context object. */
private CmsObject m_cms;
/** The Cms shell object. */
private CmsShell m_shell;
/**
* Generate a new instance of the command processor.<p>
*
* To initilize the command processor, you must call {@link #initShellCmsObject(CmsObject, CmsShell)}.
*
* @see #initShellCmsObject(CmsObject, CmsShell)
*/
protected CmsShellCommands() {
// noop
}
/**
* Adds a web user.<p>
*
* @param name the name of the new web user
* @param password the password
* @param group the default group name
* @param description the description
* @return the created user
* @throws Exception if something goes wrong
* @see CmsObject#addWebUser(String, String, String, String, Hashtable)
*/
public CmsUser addWebUser(String name, String password, String group, String description) throws Exception {
return m_cms.addWebUser(name, password, group, description, new Hashtable());
}
/**
* Changes the current folder (i.e. the URI in the VFS).<p>
*
* @param target the new URI
* @throws Exception if something goes wrong
* @see org.opencms.file.CmsRequestContext#setUri(String)
*/
public void cd(String target) throws Exception {
String folder = CmsResource.getFolderPath(m_cms.getRequestContext().getUri());
if (!target.endsWith("/")) {
target += "/";
}
String resolvedTarget = CmsLinkManager.getAbsoluteUri(target, folder);
CmsResource res = m_cms.readResource(resolvedTarget);
if (!res.isFolder()) {
throw new CmsIllegalArgumentException(Messages.get().container(Messages.ERR_NOT_A_FOLDER_1, resolvedTarget));
}
m_cms.getRequestContext().setUri(resolvedTarget);
System.out.println('\n' + getMessages().key(Messages.GUI_SHELL_CURRENT_FOLDER_1, new Object[] {resolvedTarget}));
System.out.println();
}
/**
* Changes the access control for a given resource and a given principal(user/group).
*
* @param resourceName name of the resource
* @param principalType the type of the principal (group or user)
* @param principalName name of the principal
* @param permissionString the permissions in the format ((+|-)(r|w|v|c|i))*
* @throws CmsException if something goes wrong
* @see CmsObject#chacc(String, String, String, String)
*/
public void chacc(String resourceName, String principalType, String principalName, String permissionString)
throws CmsException {
m_cms.lockResource(resourceName);
if (I_CmsPrincipal.PRINCIPAL_GROUP.equalsIgnoreCase(principalType.trim())) {
principalName = OpenCms.getImportExportManager().translateGroup(principalName);
} else {
principalName = OpenCms.getImportExportManager().translateUser(principalName);
}
m_cms.chacc(resourceName, principalType, principalName, permissionString);
}
/**
* Clears all OpenCms internal caches.<p>
*
* @throws Exception if something goes wrong
*/
public void clearCaches() throws Exception {
OpenCms.fireCmsEvent(new CmsEvent(I_CmsEventListener.EVENT_CLEAR_CACHES, Collections.EMPTY_MAP));
}
/**
* Prints the OpenCms copyright information.<p>
*/
public void copyright() {
String[] copy = Messages.COPYRIGHT_BY_ALKACON;
for (int i = 0; i < copy.length; i++) {
System.out.println(copy[i]);
}
}
/**
* Creates a default project.<p>
*
* This created project has the following properties:<ul>
* <li>The users groups is the default user group
* <li>The project managers group is the default project manager group
* <li>All resources are contained in the project
* <li>The project will remain after publishing</ul>
*
* @param name the name of the project to create
* @param description the description for the new project
* @throws Exception if something goes wrong
*/
public void createDefaultProject(String name, String description) throws Exception {
m_cms.getRequestContext().saveSiteRoot();
m_cms.getRequestContext().setSiteRoot("/");
try {
CmsProject project = m_cms.createProject(
name,
description,
OpenCms.getDefaultUsers().getGroupUsers(),
OpenCms.getDefaultUsers().getGroupProjectmanagers(),
CmsProject.PROJECT_TYPE_NORMAL);
m_cms.getRequestContext().setCurrentProject(project);
m_cms.copyResourceToProject("/");
} finally {
m_cms.getRequestContext().restoreSiteRoot();
}
if (m_cms.hasRole(CmsRole.SEARCH_MANAGER)) {
// re-initialize the search indexes after default project generation
OpenCms.getSearchManager().initialize(m_cms);
}
}
/**
* Creates a new folder in the given target folder.<p>
*
* @param targetFolder the target folder
* @param folderName the new folder to create in the target folder
* @return the created folder
* @throws Exception if somthing goes wrong
*/
public CmsResource createFolder(String targetFolder, String folderName) throws Exception {
return m_cms.createResource(targetFolder + folderName, CmsResourceTypeFolder.RESOURCE_TYPE_ID);
}
/**
* Creates a group.<p>
*
* @param name the name of the new group
* @param description the description of the new group
* @return the created group
* @throws Exception if something goes wrong
* @see CmsObject#createGroup(String, String, int, String)
*/
public CmsGroup createGroup(String name, String description) throws Exception {
return m_cms.createGroup(name, description, I_CmsPrincipal.FLAG_ENABLED, null);
}
/**
* Creates a property definition for the given resource type.<p>
*
* @param name the name of the property definition to create
* @return the created property definition
* @throws Exception if something goes wrong
* @see CmsObject#createPropertyDefinition(String)
*/
public CmsPropertyDefinition createPropertydefinition(String name) throws Exception {
return m_cms.createPropertyDefinition(name);
}
/**
* Creates a new user.<p>
*
* @param name the name for the new user
* @param password the password for the new user
* @param description the description for the new user
*
* @throws Exception if something goes wrong
* @see CmsObject#createUser(String, String, String, Hashtable)
* @return the created user
*/
public CmsUser createUser(String name, String password, String description) throws Exception {
return m_cms.createUser(name, password, description, new Hashtable());
}
/**
* Creates a user with some additional information.<p>
*
* @param name the name of the new user
* @param password the password
* @param description the description
* @param firstname the users first name
* @param lastname the users he last name
* @param email the users email address
* @return the created user
*
* @throws Exception if something goes wrong
* @see CmsObject#createUser(String, String, String, Hashtable)
*/
public CmsUser createUser(
String name,
String password,
String description,
String firstname,
String lastname,
String email) throws Exception {
CmsUser user = m_cms.createUser(name, password, description, new Hashtable());
user.setEmail(email);
user.setFirstname(firstname);
user.setLastname(lastname);
m_cms.writeUser(user);
return user;
}
/**
* Deletes the versions from the backup tables that are older then the given weeks.<p>
*
* @param weeks a numer of weeks, all older backups are deleted
* @throws Exception if something goes wrong
* @see CmsObject#deleteBackups(long, int, org.opencms.report.I_CmsReport)
*/
public void deleteBackups(int weeks) throws Exception {
long oneWeek = 604800000;
long maxDate = System.currentTimeMillis() - (weeks * oneWeek);
m_cms.deleteBackups(maxDate, 100, new CmsShellReport(m_cms.getRequestContext().getLocale()));
}
/**
* Deletes a module.<p>
*
* @param moduleName the name of the module
* @throws Exception if something goes wrong
*/
public void deleteModule(String moduleName) throws Exception {
OpenCms.getModuleManager().deleteModule(
m_cms,
moduleName,
false,
new CmsShellReport(m_cms.getRequestContext().getLocale()));
}
/**
* Deletes a project by name.<p>
*
* @param name the name of the project to delete
* @throws Exception if something goes wrong
*
* @see CmsObject#deleteProject(int)
*/
public void deleteProject(String name) throws Exception {
m_cms.deleteProject(m_cms.readProject(name).getId());
}
/**
* Delete a property definition for a resource.<p>
*
* @param name the name of the property definition to delete
* @throws Exception if something goes wrong
* @see CmsObject#deletePropertyDefinition(String)
*/
public void deletepropertydefinition(String name) throws Exception {
m_cms.deletePropertyDefinition(name);
}
/**
* Turns the echo status for the shell on or off.<p>
*
* @param echo if "on", echo is turned on, otherwise echo is turned off
*/
public void echo(String echo) {
if (echo == null) {
return;
}
boolean b = "on".equalsIgnoreCase(echo.trim());
m_shell.setEcho(b);
if (b) {
System.out.println(getMessages().key(Messages.GUI_SHELL_ECHO_ON_0));
} else {
System.out.println(getMessages().key(Messages.GUI_SHELL_ECHO_OFF_0));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -