Package org.opencms.module
Class CmsModuleUpdater
java.lang.Object
org.opencms.module.CmsModuleUpdater
Class used for updating modules.
This class updates modules in a smarter way than simply deleting and importing them again: The resources in the import ZIP file are compared to the resources in the currently installed module and only makes changes when necessary. The reason for this is that deletions of resources can be slow in some very large OpenCms installations, and the classic way of updating modules (delete/import) can take a long time because of this.
-
Constructor Summary
ConstructorDescriptionCmsModuleUpdater
(CmsModuleImportData moduleData, I_CmsReport report) Creates a new instance. -
Method Summary
Modifier and TypeMethodDescriptionstatic boolean
checkCompatibleModuleResources
(CmsModule installedModule, CmsModule newModule) Checks whether the module resources and sites of the two module versions are suitable for updating.static Optional<CmsModuleUpdater>
create
(CmsObject cms, String importFile, I_CmsReport report) Tries to create a new updater instance.protected CmsProject
createAndSetModuleImportProject
(CmsObject cms, CmsModule module) Creates the project used to import module resources and sets it on the CmsObject.protected void
Deletes and publishes resources with ID conflicts.void
importRelations
(CmsObject cms) Update relations for all imported resources.static boolean
needToUpdateResourceFields
(CmsResource existingRes, CmsResource newRes, boolean reduced) Check if a resource needs to be updated because of its direct fields.static String
normalizePath
(String... pathComponents) Normalizes the path.protected void
parseLinks
(CmsObject cms) Parses links for XMLContents etc.protected void
processDeletions
(CmsObject cms, List<CmsResource> toDelete) Handles the file deletions.protected void
processImportResource
(CmsObject cms, CmsResourceImportData resData, int index) Processes single resource from module import data.static CmsModuleImportData
readModuleData
(CmsObject cms, String importFile, I_CmsReport report) Reads the module data from an import zip file.void
run()
Performs the module update.protected void
runImportScript
(CmsObject cms, CmsModule module) Runs the module import script.boolean
updateAcls
(CmsObject cms, CmsResourceImportData resData, CmsResource resource) Updates the access control list fr a resource.
-
Constructor Details
-
CmsModuleUpdater
Creates a new instance.- Parameters:
moduleData
- the module import datareport
- the report to write to
-
-
Method Details
-
checkCompatibleModuleResources
public static boolean checkCompatibleModuleResources(CmsModule installedModule, CmsModule newModule) Checks whether the module resources and sites of the two module versions are suitable for updating.- Parameters:
installedModule
- the installed modulenewModule
- the module to import- Returns:
- true if the module resources are compatible
-
create
public static Optional<CmsModuleUpdater> create(CmsObject cms, String importFile, I_CmsReport report) throws CmsException Tries to create a new updater instance.If the module is deemed non-updatable, an empty result is returned.
- Parameters:
cms
- the current CMS contextimportFile
- the import file pathreport
- the report to write to- Returns:
- an optional module updater
- Throws:
CmsException
- if something goes wrong
-
needToUpdateResourceFields
public static boolean needToUpdateResourceFields(CmsResource existingRes, CmsResource newRes, boolean reduced) Check if a resource needs to be updated because of its direct fields.- Parameters:
existingRes
- the existing resourcenewRes
- the new resourcereduced
- true if we are in reduced export mode- Returns:
- true if we need to update the resource based on its direct fields
-
normalizePath
Normalizes the path.- Parameters:
pathComponents
- the path components- Returns:
- the normalized path
-
readModuleData
public static CmsModuleImportData readModuleData(CmsObject cms, String importFile, I_CmsReport report) throws CmsException Reads the module data from an import zip file.- Parameters:
cms
- the CMS contextimportFile
- the import filereport
- the report to write to- Returns:
- the module data
- Throws:
CmsException
- if something goes wrong
-
importRelations
Update relations for all imported resources.- Parameters:
cms
- the current CMS context- Throws:
CmsException
- if something goes wrong
-
run
Performs the module update. -
updateAcls
public boolean updateAcls(CmsObject cms, CmsResourceImportData resData, CmsResource resource) throws CmsException Updates the access control list fr a resource.- Parameters:
cms
- the current cms contextresData
- the resource dataresource
- the existing resource- Returns:
- the resource
- Throws:
CmsException
- if something goes wrong
-
createAndSetModuleImportProject
protected CmsProject createAndSetModuleImportProject(CmsObject cms, CmsModule module) throws CmsException Creates the project used to import module resources and sets it on the CmsObject.- Parameters:
cms
- the CmsObject to set the project onmodule
- the module- Returns:
- the created project
- Throws:
CmsException
- if something goes wrong
-
deleteConflictingResources
protected void deleteConflictingResources(CmsObject cms, CmsModule module, Map<CmsUUID, CmsUUID> conflictingIds) throws CmsException, ExceptionDeletes and publishes resources with ID conflicts.- Parameters:
cms
- the CMS context to usemodule
- the moduleconflictingIds
- the conflicting ids- Throws:
CmsException
- if something goes wrongException
- if something goes wrong
-
parseLinks
Parses links for XMLContents etc.- Parameters:
cms
- the CMS context to use- Throws:
CmsException
- if something goes wrong
-
processDeletions
Handles the file deletions.- Parameters:
cms
- the CMS context to usetoDelete
- the resources to delete- Throws:
CmsException
- if something goes wrong
-
processImportResource
Processes single resource from module import data.- Parameters:
cms
- the CMS context to useresData
- the resource data from the module importindex
- index of the current import resource
-
runImportScript
Runs the module import script.- Parameters:
cms
- the CMS context to usemodule
- the module for which to run the script
-