cmsmoduleimportexporthandler.java
来自「找了很久才找到到源代码」· Java 代码 · 共 559 行 · 第 1/2 页
JAVA
559 行
* Returns the VFS resources to be exported additionally with the module as a list.<p>
*
* @return the VFS resources to be exported additionally with the module as a list
*/
public List getResourcesAsList() {
return m_additionalResources;
}
/**
* @see org.opencms.importexport.I_CmsImportExportHandler#importData(org.opencms.file.CmsObject, java.lang.String, java.lang.String, org.opencms.report.I_CmsReport)
*/
public synchronized void importData(CmsObject cms, String importFile, String importPath, I_CmsReport report)
throws CmsXmlException, CmsImportExportException, CmsRoleViolationException, CmsException {
CmsProject previousProject = cms.getRequestContext().currentProject();
try {
importFile = importFile.replace('\\', '/');
String moduleZipName = importFile.substring(importFile.lastIndexOf('/') + 1);
String modulePackageName;
if (moduleZipName.toLowerCase().endsWith(".zip")) {
modulePackageName = moduleZipName.substring(0, moduleZipName.lastIndexOf('.'));
int pos = modulePackageName.lastIndexOf('_');
if (pos > 0) {
modulePackageName = modulePackageName.substring(0, pos);
}
} else {
modulePackageName = moduleZipName;
}
CmsProject importProject = null;
String storedSiteRoot = cms.getRequestContext().getSiteRoot();
try {
cms.getRequestContext().setSiteRoot("/");
try {
// try to read a (leftover) module import project
importProject = cms.readProject(Messages.get().getBundle(cms.getRequestContext().getLocale()).key(
Messages.GUI_IMPORT_MODULE_PROJECT_NAME_1,
new Object[] {modulePackageName}));
} catch (CmsException e) {
// create a Project to import the module
importProject = cms.createProject(
Messages.get().getBundle(cms.getRequestContext().getLocale()).key(
Messages.GUI_IMPORT_MODULE_PROJECT_NAME_1,
new Object[] {modulePackageName}),
Messages.get().getBundle(cms.getRequestContext().getLocale()).key(
Messages.GUI_IMPORT_MODULE_PROJECT_DESC_1,
new Object[] {modulePackageName}),
OpenCms.getDefaultUsers().getGroupAdministrators(),
OpenCms.getDefaultUsers().getGroupAdministrators(),
CmsProject.PROJECT_TYPE_TEMPORARY);
}
cms.getRequestContext().setCurrentProject(importProject);
// copy the root folder to the project
cms.copyResourceToProject("/");
} finally {
cms.getRequestContext().setSiteRoot(storedSiteRoot);
}
report.print(Messages.get().container(Messages.RPT_IMPORT_MODULE_BEGIN_0), I_CmsReport.FORMAT_HEADLINE);
if (report instanceof CmsHtmlReport) {
report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
"<i>" + modulePackageName + "</i>"));
} else {
report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
modulePackageName));
}
report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0));
importModule(cms, importFile, report);
report.println(Messages.get().container(Messages.RPT_PUBLISH_PROJECT_BEGIN_0), I_CmsReport.FORMAT_HEADLINE);
// now unlock and publish the project
cms.unlockProject(importProject.getUuid());
OpenCms.getPublishManager().publishProject(cms, report);
OpenCms.getPublishManager().waitWhileRunning();
report.println(Messages.get().container(Messages.RPT_PUBLISH_PROJECT_END_0), I_CmsReport.FORMAT_HEADLINE);
report.println(Messages.get().container(Messages.RPT_IMPORT_MODULE_END_0), I_CmsReport.FORMAT_HEADLINE);
} finally {
cms.getRequestContext().setCurrentProject(previousProject);
}
}
/**
* @see org.opencms.importexport.I_CmsImportExportHandler#matches(org.dom4j.Document)
*/
public boolean matches(Document manifest) {
Element rootElement = manifest.getRootElement();
return (rootElement.selectNodes("./module/name").size() > 0);
}
/**
* Sets the VFS resources to be exported additionally with the module.<p>
*
* @param resources the VFS resources to be exported additionally with the module
*/
public void setAdditionalResources(String[] resources) {
m_additionalResources = Arrays.asList(resources);
}
/**
* @see org.opencms.importexport.I_CmsImportExportHandler#setDescription(java.lang.String)
*/
public void setDescription(String description) {
m_description = description;
}
/**
* Sets the name of the export file in the real file system.<p>
*
* @param fileName the name of the export file in the real file system
*/
public void setFileName(String fileName) {
m_fileName = fileName;
}
/**
* Will be called by the digester if a module was imported.<p>
*
* @param moduleHandler contains the imported module
*/
public void setModule(CmsModuleXmlHandler moduleHandler) {
m_importedModule = moduleHandler.getModule();
}
/**
* Sets the (package) name of the module to be exported.<p>
*
* @param moduleName the (package) name of the module to be exported
*/
public void setModuleName(String moduleName) {
m_moduleName = moduleName;
}
/**
* @see java.lang.Object#finalize()
*/
protected void finalize() throws Throwable {
try {
if (m_additionalResources != null) {
m_additionalResources.clear();
}
} catch (Exception e) {
// noop
} finally {
super.finalize();
}
}
/**
* Returns the module imported with the digester.<p>
*
* @return the module imported with the digester
*/
private CmsModule getModule() {
return m_importedModule;
}
/**
* Imports a module from an external file source.<p>
*
* @param cms must have been initialized with {@link CmsRole#DATABASE_MANAGER} permissions
* @param importResource the name of the input source
* @param report the report to print the progess information to
*
* @throws CmsSecurityException if no {@link CmsRole#DATABASE_MANAGER} permissions are available
* @throws CmsConfigurationException if the module is already installed or the
* dependencies are not fulfilled
* @throws CmsException if errors occur reading the module data
*/
private synchronized void importModule(CmsObject cms, String importResource, I_CmsReport report)
throws CmsSecurityException, CmsConfigurationException, CmsException {
// check if the user has the required permissions
OpenCms.getRoleManager().checkRole(cms, CmsRole.DATABASE_MANAGER);
// read the module from the import file
CmsModule importedModule = readModuleFromImport(importResource);
// check if the module is already installed
if (OpenCms.getModuleManager().hasModule(importedModule.getName())) {
throw new CmsConfigurationException(Messages.get().container(
Messages.ERR_MOD_ALREADY_INSTALLED_1,
importedModule.getName()));
}
// check the module dependencies
List dependencies = OpenCms.getModuleManager().checkDependencies(
importedModule,
CmsModuleManager.DEPENDENCY_MODE_IMPORT);
if (dependencies.size() > 0) {
// some dependencies not fulfilled
StringBuffer missingModules = new StringBuffer();
Iterator it = dependencies.iterator();
while (it.hasNext()) {
CmsModuleDependency dependency = (CmsModuleDependency)it.next();
missingModules.append(" ").append(dependency.getName()).append(", Version ").append(
dependency.getVersion()).append("\r\n");
}
throw new CmsConfigurationException(Messages.get().container(
Messages.ERR_MOD_DEPENDENCY_INFO_2,
importedModule.getName() + ", Version " + importedModule.getVersion(),
missingModules));
}
// check the imported resource types for name / id conflicts
List checkedTypes = new ArrayList();
Iterator i = importedModule.getResourceTypes().iterator();
while (i.hasNext()) {
I_CmsResourceType type = (I_CmsResourceType)i.next();
// first check against the already configured resource types
int externalConflictIndex = OpenCms.getResourceManager().getResourceTypes().indexOf(type);
if (externalConflictIndex >= 0) {
I_CmsResourceType conflictingType = (I_CmsResourceType)OpenCms.getResourceManager().getResourceTypes().get(
externalConflictIndex);
if (!type.isIdentical(conflictingType)) {
// if name and id are identical, we assume this is a module replace operation
throw new CmsConfigurationException(org.opencms.loader.Messages.get().container(
org.opencms.loader.Messages.ERR_CONFLICTING_MODULE_RESOURCE_TYPES_5,
new Object[] {
type.getTypeName(),
new Integer(type.getTypeId()),
importedModule.getName(),
conflictingType.getTypeName(),
new Integer(conflictingType.getTypeId())}));
}
}
// now check against the other resource types of the imported module
int internalConflictIndex = checkedTypes.indexOf(type);
if (internalConflictIndex >= 0) {
I_CmsResourceType conflictingType = (I_CmsResourceType)checkedTypes.get(internalConflictIndex);
throw new CmsConfigurationException(org.opencms.loader.Messages.get().container(
org.opencms.loader.Messages.ERR_CONFLICTING_RESTYPES_IN_MODULE_5,
new Object[] {
importedModule.getName(),
type.getTypeName(),
new Integer(type.getTypeId()),
conflictingType.getTypeName(),
new Integer(conflictingType.getTypeId())}));
}
// add the resource type for the next check
checkedTypes.add(type);
}
// add the imported module to the module manager
OpenCms.getModuleManager().addModule(cms, importedModule);
// reinitialize the resource manager with additional module resourcetypes if nescessary
if (importedModule.getResourceTypes() != Collections.EMPTY_LIST) {
OpenCms.getResourceManager().initialize(cms);
}
// reinitialize the workplace manager with addititonal module explorertypes if nescessary
if (importedModule.getExplorerTypes() != Collections.EMPTY_LIST) {
OpenCms.getWorkplaceManager().addExplorerTypeSettings(importedModule);
}
// import the module resources
CmsImport cmsImport = new CmsImport(cms, importResource, "/", report);
cmsImport.importResources();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?