a_cmsresourcetype.java
来自「找了很久才找到到源代码」· Java 代码 · 共 1,047 行 · 第 1/3 页
JAVA
1,047 行
public void setAdditionalModuleResourceType(boolean additionalType) {
m_addititionalModuleResourceType = additionalType;
}
/**
* @see org.opencms.file.types.I_CmsResourceType#setDateExpired(org.opencms.file.CmsObject, CmsSecurityManager, CmsResource, long, boolean)
*/
public void setDateExpired(
CmsObject cms,
CmsSecurityManager securityManager,
CmsResource resource,
long dateExpired,
boolean recursive) throws CmsException {
securityManager.setDateExpired(cms.getRequestContext(), resource, dateExpired);
}
/**
* @see org.opencms.file.types.I_CmsResourceType#setDateLastModified(org.opencms.file.CmsObject, CmsSecurityManager, CmsResource, long, boolean)
*/
public void setDateLastModified(
CmsObject cms,
CmsSecurityManager securityManager,
CmsResource resource,
long dateLastModified,
boolean recursive) throws CmsException {
securityManager.setDateLastModified(cms.getRequestContext(), resource, dateLastModified);
}
/**
* @see org.opencms.file.types.I_CmsResourceType#setDateReleased(org.opencms.file.CmsObject, CmsSecurityManager, CmsResource, long, boolean)
*/
public void setDateReleased(
CmsObject cms,
CmsSecurityManager securityManager,
CmsResource resource,
long dateReleased,
boolean recursive) throws CmsException {
securityManager.setDateReleased(cms.getRequestContext(), resource, dateReleased);
}
/**
* @see java.lang.Object#toString()
*/
public String toString() {
StringBuffer output = new StringBuffer();
output.append("[ResourceType] class=");
output.append(getClass().getName());
output.append(" name=");
output.append(getTypeName());
output.append(" id=");
output.append(getTypeId());
output.append(" loaderId=");
output.append(getLoaderId());
return output.toString();
}
/**
* @see org.opencms.file.types.I_CmsResourceType#undelete(org.opencms.file.CmsObject, CmsSecurityManager, CmsResource, boolean)
*/
public void undelete(CmsObject cms, CmsSecurityManager securityManager, CmsResource resource, boolean recursive)
throws CmsException {
securityManager.undelete(cms.getRequestContext(), resource);
}
/**
* @see org.opencms.file.types.I_CmsResourceType#undoChanges(org.opencms.file.CmsObject, CmsSecurityManager, CmsResource, CmsResource.CmsResourceUndoMode)
*/
public void undoChanges(
CmsObject cms,
CmsSecurityManager securityManager,
CmsResource resource,
CmsResource.CmsResourceUndoMode mode) throws CmsException {
securityManager.undoChanges(cms.getRequestContext(), resource, mode);
updateRelationForUndo(cms, securityManager, resource);
}
/**
* @see org.opencms.file.types.I_CmsResourceType#unlockResource(org.opencms.file.CmsObject, CmsSecurityManager, CmsResource)
*/
public void unlockResource(CmsObject cms, CmsSecurityManager securityManager, CmsResource resource)
throws CmsException {
securityManager.unlockResource(cms.getRequestContext(), resource);
}
/**
* @see org.opencms.file.types.I_CmsResourceType#writeFile(org.opencms.file.CmsObject, CmsSecurityManager, CmsFile)
*/
public CmsFile writeFile(CmsObject cms, CmsSecurityManager securityManager, CmsFile resource) throws CmsException {
if (resource.isFile()) {
CmsFile file = securityManager.writeFile(cms.getRequestContext(), resource);
I_CmsResourceType type = getResourceType(file);
// update the relations after writing!!
List links = null;
if (type instanceof I_CmsLinkParseable) {
// if the new type is link parseable
links = ((I_CmsLinkParseable)type).parseLinks(cms, file);
}
securityManager.updateRelationsForResource(cms.getRequestContext(), file, links);
return file;
}
// folders can never be written like a file
throw new CmsVfsException(Messages.get().container(
Messages.ERR_WRITE_FILE_IS_FOLDER_1,
cms.getSitePath(resource)));
}
/**
* @see org.opencms.file.types.I_CmsResourceType#writePropertyObject(org.opencms.file.CmsObject, org.opencms.db.CmsSecurityManager, CmsResource, org.opencms.file.CmsProperty)
*/
public void writePropertyObject(
CmsObject cms,
CmsSecurityManager securityManager,
CmsResource resource,
CmsProperty property) throws CmsException {
securityManager.writePropertyObject(cms.getRequestContext(), resource, property);
}
/**
* @see org.opencms.file.types.I_CmsResourceType#writePropertyObjects(org.opencms.file.CmsObject, org.opencms.db.CmsSecurityManager, CmsResource, java.util.List)
*/
public void writePropertyObjects(
CmsObject cms,
CmsSecurityManager securityManager,
CmsResource resource,
List properties) throws CmsException {
securityManager.writePropertyObjects(cms.getRequestContext(), resource, properties);
}
/**
* Creates the relation information for the resource with the given resource name.<p>
*
* @param cms the cms context
* @param securityManager the security manager
* @param resourceName the resource name of the resource to update the relations for
*
* @return the fresh read resource
*
* @throws CmsException if something goes wrong
*/
protected CmsResource createRelations(CmsObject cms, CmsSecurityManager securityManager, String resourceName)
throws CmsException {
CmsResource resource = securityManager.readResource(
cms.getRequestContext(),
resourceName,
CmsResourceFilter.ALL);
I_CmsResourceType resourceType = getResourceType(resource);
List links = null;
if (resourceType instanceof I_CmsLinkParseable) {
I_CmsLinkParseable linkParseable = (I_CmsLinkParseable)resourceType;
links = linkParseable.parseLinks(cms, cms.readFile(resource));
}
securityManager.updateRelationsForResource(cms.getRequestContext(), resource, links);
return resource;
}
/**
* Creates a macro resolver based on the current users OpenCms context and the provided resource name.<p>
*
* @param cms the current OpenCms user context
* @param resourcename the resource name for macros like {@link A_CmsResourceType#MACRO_RESOURCE_FOLDER_PATH}
*
* @return a macro resolver based on the current users OpenCms context and the provided resource name
*/
protected CmsMacroResolver getMacroResolver(CmsObject cms, String resourcename) {
CmsMacroResolver result = CmsMacroResolver.newInstance().setCmsObject(cms);
if (isFolder() && (!CmsResource.isFolder(resourcename))) {
// ensure folder ends with "/" so
resourcename = resourcename.concat("/");
}
// add special mappings for macros in default properties
result.addMacro(MACRO_RESOURCE_ROOT_PATH, cms.getRequestContext().addSiteRoot(resourcename));
result.addMacro(MACRO_RESOURCE_SITE_PATH, resourcename);
result.addMacro(MACRO_RESOURCE_FOLDER_PATH, CmsResource.getFolderPath(resourcename));
result.addMacro(MACRO_RESOURCE_PARENT_PATH, CmsResource.getParentFolder(resourcename));
result.addMacro(MACRO_RESOURCE_NAME, CmsResource.getName(resourcename));
return result;
}
/**
* Convenience method to get the initialized resource type instance for the given resource,
* with a fall back to special "unknown" resource types in case the resource type is not configured.<p>
*
* @param resource the resource to get the type for
*
* @return the initialized resource type instance for the given resource
*
* @see org.opencms.loader.CmsResourceManager#getResourceType(int)
*/
protected I_CmsResourceType getResourceType(CmsResource resource) {
return OpenCms.getResourceManager().getResourceType(resource);
}
/**
* Processes the copy resources of this resource type.<p>
*
* @param cms the current OpenCms user context
* @param resourcename the name of the base resource
* @param resolver the resolver used for resolving target macro names
*/
protected void processCopyResources(CmsObject cms, String resourcename, CmsMacroResolver resolver) {
Iterator i = m_copyResources.iterator();
while (i.hasNext()) {
CmsConfigurationCopyResource copyResource = (CmsConfigurationCopyResource)i.next();
String target = copyResource.getTarget();
if (copyResource.isTargetWasNull() || CmsMacroResolver.isMacro(target, MACRO_RESOURCE_FOLDER_PATH)) {
// target is just the resource folder, must add source file name to target
target = target.concat(CmsResource.getName(copyResource.getSource()));
}
// now resolve the macros in the target name
target = resolver.resolveMacros(target);
// now resolve possible releative paths in the target
target = CmsFileUtil.normalizePath(CmsLinkManager.getAbsoluteUri(target, resourcename), '/');
try {
cms.copyResource(copyResource.getSource(), target, copyResource.getType());
} catch (Exception e) {
// CmsIllegalArgumentException as well as CmsException
// log the error and continue with the other copy resources
if (LOG.isDebugEnabled()) {
// log stack trace in debug level only
LOG.debug(Messages.get().getBundle().key(
Messages.LOG_PROCESS_COPY_RESOURCES_3,
resourcename,
copyResource,
target), e);
} else {
LOG.error(Messages.get().getBundle().key(
Messages.LOG_PROCESS_COPY_RESOURCES_3,
resourcename,
copyResource,
target));
}
}
}
}
/**
* Returns a list of property objects that are attached to the resource on creation.<p>
*
* It's possible to use OpenCms macros for the property values.
* Please see {@link CmsMacroResolver} for allowed macro values.<p>
*
* @param properties the (optional) properties provided by the user
* @param resolver the resolver used to resolve the macro values
*
* @return a list of property objects that are attached to the resource on creation
*/
protected List processDefaultProperties(List properties, CmsMacroResolver resolver) {
if ((m_defaultProperties == null) || (m_defaultProperties.size() == 0)) {
// no default properties are defined
return properties;
}
// the properties must be copied since the macros could contain macros that are
// resolved differently for every user / context
ArrayList result = new ArrayList();
Iterator i = m_defaultProperties.iterator();
while (i.hasNext()) {
// create a clone of the next property
CmsProperty property = (CmsProperty)((CmsProperty)i.next()).clone();
// resolve possible macros in the property values
if (property.getResourceValue() != null) {
property.setResourceValue(resolver.resolveMacros(property.getResourceValue()));
}
if (property.getStructureValue() != null) {
property.setStructureValue(resolver.resolveMacros(property.getStructureValue()));
}
// save the new property in the result list
result.add(property);
}
// add the original properties
if (properties != null) {
result.addAll(properties);
}
// return the result
return result;
}
/**
* Update the relations after an undo changes operation.<p>
*
* @param cms the cms context
* @param securityManager the security manager
* @param resource the resource that has been undone
*
* @throws CmsException if something goes wrong
*/
protected void updateRelationForUndo(CmsObject cms, CmsSecurityManager securityManager, CmsResource resource)
throws CmsException {
// type may have changed from non link parseable to link parseable
CmsResource undoneResource1 = null;
try {
// first try to locate the resource by path
undoneResource1 = createRelations(cms, securityManager, resource.getRootPath());
} catch (CmsVfsResourceNotFoundException e) {
// ignore, undone move operation
}
// now, in case a move operation has been undone, locate the resource by id
CmsResource undoneResource2 = securityManager.readResource(
cms.getRequestContext(),
resource.getStructureId(),
CmsResourceFilter.ALL);
if (!undoneResource2.equals(undoneResource1)) {
I_CmsResourceType resourceType = getResourceType(resource);
List links = null;
if (resourceType instanceof I_CmsLinkParseable) {
I_CmsLinkParseable linkParseable = (I_CmsLinkParseable)resourceType;
if ((undoneResource1 == null) || !undoneResource2.getRootPath().equals(undoneResource1.getRootPath())) {
try {
links = linkParseable.parseLinks(cms, cms.readFile(undoneResource2));
} catch (CmsException e) {
if (LOG.isWarnEnabled()) {
LOG.warn(e);
}
} catch (CmsRuntimeException e) {
if (LOG.isWarnEnabled()) {
LOG.warn(e);
}
}
}
}
securityManager.updateRelationsForResource(cms.getRequestContext(), undoneResource2, links);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?