?? cmsupdatebean.java
字號(hào):
/*
* File : $Source: /usr/local/cvs/opencms/src/org/opencms/setup/CmsUpdateBean.java,v $
* Date : $Date: 2006/03/27 14:52:51 $
* Version: $Revision: 1.6 $
*
* 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.setup;
import org.opencms.configuration.CmsConfigurationManager;
import org.opencms.configuration.CmsModuleConfiguration;
import org.opencms.file.CmsResource;
import org.opencms.i18n.CmsEncoder;
import org.opencms.main.CmsLog;
import org.opencms.main.CmsSystemInfo;
import org.opencms.main.OpenCms;
import org.opencms.module.CmsModule;
import org.opencms.module.CmsModuleVersion;
import org.opencms.module.CmsModuleXmlHandler;
import org.opencms.report.CmsShellReport;
import org.opencms.report.I_CmsReport;
import org.opencms.util.CmsStringUtil;
import org.opencms.xml.CmsXmlException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.jsp.JspWriter;
import org.apache.commons.logging.Log;
/**
* A java bean as a controller for the OpenCms update wizard.<p>
*
* @author Michael Moossen
*
* @version $Revision: 1.6 $
*
* @since 6.0.0
*/
public class CmsUpdateBean extends CmsSetupBean {
/** name of the update folder. */
public static final String FOLDER_UPDATE = "update" + File.separatorChar;
/** replace pattern constant for the cms script. */
private static final String C_ADMIN_GROUP = "@ADMIN_GROUP@";
/** replace pattern constant for the cms script. */
private static final String C_ADMIN_PWD = "@ADMIN_PWD@";
/** replace pattern constant for the cms script. */
private static final String C_ADMIN_USER = "@ADMIN_USER@";
/** replace pattern constant for the cms script. */
private static final String C_UPDATE_PROJECT = "@UPDATE_PROJECT@";
/** replace pattern constant for the cms script. */
private static final String C_UPDATE_SITE = "@UPDATE_SITE@";
/** The static log object for this class. */
private static final Log LOG = CmsLog.getLog(CmsUpdateBean.class);
/** The used admin user name. */
private String m_adminGroup = "_tmpUpdateGroup" + (System.currentTimeMillis() % 1000);
/** the admin user password. */
private String m_adminPwd = "admin";
/** The used admin user name. */
private String m_adminUser = "Admin";
/** List of module to be updated. */
private List m_modulesToUpdate;
/** the update project. */
private String m_updateProject = "_tmpUpdateProject" + (System.currentTimeMillis() % 1000);
/** the site for update. */
private String m_updateSite = CmsResource.VFS_FOLDER_SITES + "/default/";
/** Cache for the up-to-date module names. */
private List m_uptodateModules;
/** The workplace import thread. */
private CmsUpdateThread m_workplaceUpdateThread;
/**
* Default constructor.<p>
*/
public CmsUpdateBean() {
super();
m_modulesFolder = FOLDER_UPDATE + CmsSystemInfo.FOLDER_MODULES;
m_logFile = FOLDER_WEBINF + CmsLog.FOLDER_LOGS + "update.log";
}
/**
* Returns html code to display an error.<p>
*
* @param pathPrefix to adjust the path
*
* @return html code
*/
public String displayError(String pathPrefix) {
if (pathPrefix == null) {
pathPrefix = "";
}
StringBuffer html = new StringBuffer(512);
html.append("<table border='0' cellpadding='5' cellspacing='0' style='width: 100%; height: 100%;'>");
html.append("\t<tr>");
html.append("\t\t<td style='vertical-align: middle; height: 100%;'>");
html.append(getHtmlPart("C_BLOCK_START", "Error"));
html.append("\t\t\t<table border='0' cellpadding='0' cellspacing='0' style='width: 100%;'>");
html.append("\t\t\t\t<tr>");
html.append("\t\t\t\t\t<td><img src='").append(pathPrefix).append("resources/error.png' border='0'></td>");
html.append("\t\t\t\t\t<td> </td>");
html.append("\t\t\t\t\t<td style='width: 100%;'>");
html.append("\t\t\t\t\t\tThe Alkacon OpenCms update wizard has not been started correctly!<br>");
html.append("\t\t\t\t\t\tPlease click <a href='").append(pathPrefix);
html.append("index.jsp'>here</a> to restart the wizard.");
html.append("\t\t\t\t\t</td>");
html.append("\t\t\t\t</tr>");
html.append("\t\t\t</table>");
html.append(getHtmlPart("C_BLOCK_END"));
html.append("\t\t</td>");
html.append("\t</tr>");
html.append("</table>");
return html.toString();
}
/**
* Returns the admin Pwd.<p>
*
* @return the admin Pwd
*/
public String getAdminPwd() {
return m_adminPwd;
}
/**
* Returns the admin User.<p>
*
* @return the admin User
*/
public String getAdminUser() {
return m_adminUser;
}
/**
* Returns a map of all previously installed modules.<p>
*
* @return a map of <code>[String, {@link org.opencms.module.CmsModuleVersion}]</code> objects
*
* @see org.opencms.module.CmsModuleManager#getAllInstalledModules()
*/
public Map getInstalledModules() {
String file = CmsModuleConfiguration.DEFAULT_XML_FILE_NAME;
// /opencms/modules/module[?]
String basePath = new StringBuffer("/").append(CmsConfigurationManager.N_ROOT).append("/").append(
CmsModuleConfiguration.N_MODULES).append("/").append(CmsModuleXmlHandler.N_MODULE).append("[?]/").toString();
Map modules = new HashMap();
String name = "";
for (int i = 1; name != null; i++) {
if (i > 1) {
String ver = CmsModuleVersion.DEFAULT_VERSION;
try {
ver = getXmlHelper().getValue(
file,
CmsStringUtil.substitute(basePath, "?", "" + (i - 1)) + CmsModuleXmlHandler.N_VERSION);
} catch (CmsXmlException e) {
// ignore
}
modules.put(name, new CmsModuleVersion(ver));
}
try {
name = getXmlHelper().getValue(
file,
CmsStringUtil.substitute(basePath, "?", "" + i) + CmsModuleXmlHandler.N_NAME);
} catch (CmsXmlException e) {
// ignore
}
}
return modules;
}
/**
* List of modules to be updated.<p>
*
* @return a list of module names
*/
public List getModulesToUpdate() {
if (m_modulesToUpdate == null) {
getUptodateModules();
}
return m_modulesToUpdate;
}
/**
* Returns the update Project.<p>
*
* @return the update Project
*/
public String getUpdateProject() {
return m_updateProject;
}
/**
* Returns the update site.<p>
*
* @return the update site
*/
public String getUpdateSite() {
return m_updateSite;
}
/**
* Returns the modules that does not need to be updated.<p>
*
* @return a list of module names
*/
public List getUptodateModules() {
if (m_uptodateModules == null) {
m_uptodateModules = new ArrayList();
m_modulesToUpdate = new ArrayList();
Map installedModules = getInstalledModules();
Map availableModules = getAvailableModules();
Iterator itMods = availableModules.keySet().iterator();
while (itMods.hasNext()) {
String name = (String)itMods.next();
CmsModuleVersion instVer = (CmsModuleVersion)installedModules.get(name);
CmsModuleVersion availVer = ((CmsModule)availableModules.get(name)).getVersion();
boolean uptodate = (instVer != null && instVer.compareTo(availVer) >= 0);
if (uptodate) {
m_uptodateModules.add(name);
} else {
m_modulesToUpdate.add(name);
}
if (LOG.isDebugEnabled()) {
LOG.debug(name
+ " --- installed: "
+ instVer
+ " available: "
+ availVer
+ " --- uptodate: "
+ uptodate);
}
}
}
return m_uptodateModules;
}
/**
* Returns the workplace update thread.<p>
*
* @return the workplace update thread
*/
public CmsUpdateThread getWorkplaceUpdateThread() {
return m_workplaceUpdateThread;
}
/**
* @see org.opencms.setup.CmsSetupBean#htmlModules()
*/
public String htmlModules() {
StringBuffer html = new StringBuffer(1024);
Set uptodate = new HashSet(getUptodateModules());
Iterator itModules = sortModules(getAvailableModules().values()).iterator();
boolean hasModules = false;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -