cmsvfsdriver.java
来自「找了很久才找到到源代码」· Java 代码 · 共 1,400 行 · 第 1/5 页
JAVA
1,400 行
resProjectId,
CmsResourceState.valueOf(newState),
dateCreated,
userCreated,
dateLastModified,
userLastModified,
dateReleased,
dateExpired,
siblingCount,
resourceSize,
dateContent,
resourceVersion + structureVersion,
content);
}
/**
* @see org.opencms.db.I_CmsVfsDriver#createFolder(java.sql.ResultSet, CmsUUID, boolean)
*/
public CmsFolder createFolder(ResultSet res, CmsUUID projectId, boolean hasProjectIdInResultSet)
throws SQLException {
CmsUUID structureId = new CmsUUID(res.getString(m_sqlManager.readQuery("C_RESOURCES_STRUCTURE_ID")));
CmsUUID resourceId = new CmsUUID(res.getString(m_sqlManager.readQuery("C_RESOURCES_RESOURCE_ID")));
String resourcePath = res.getString(m_sqlManager.readQuery("C_RESOURCES_RESOURCE_PATH"));
int resourceType = res.getInt(m_sqlManager.readQuery("C_RESOURCES_RESOURCE_TYPE"));
int resourceFlags = res.getInt(m_sqlManager.readQuery("C_RESOURCES_RESOURCE_FLAGS"));
int resourceState = res.getInt(m_sqlManager.readQuery("C_RESOURCES_STATE"));
int structureState = res.getInt(m_sqlManager.readQuery("C_RESOURCES_STRUCTURE_STATE"));
long dateCreated = res.getLong(m_sqlManager.readQuery("C_RESOURCES_DATE_CREATED"));
long dateLastModified = res.getLong(m_sqlManager.readQuery("C_RESOURCES_DATE_LASTMODIFIED"));
long dateReleased = res.getLong(m_sqlManager.readQuery("C_RESOURCES_DATE_RELEASED"));
long dateExpired = res.getLong(m_sqlManager.readQuery("C_RESOURCES_DATE_EXPIRED"));
CmsUUID userCreated = new CmsUUID(res.getString(m_sqlManager.readQuery("C_RESOURCES_USER_CREATED")));
CmsUUID userLastModified = new CmsUUID(res.getString(m_sqlManager.readQuery("C_RESOURCES_USER_LASTMODIFIED")));
CmsUUID resProjectId = new CmsUUID(res.getString("LOCKED_IN_PROJECT"));
int resourceVersion = res.getInt(m_sqlManager.readQuery("C_RESOURCES_VERSION"));
int structureVersion = res.getInt(m_sqlManager.readQuery("C_RESOURCES_STRUCTURE_VERSION"));
int resourceSize = res.getInt(m_sqlManager.readQuery("C_RESOURCES_SIZE"));
// in case of folder type ensure, that the root path has a trailing slash
if (CmsFolder.isFolderSize(resourceSize)) {
resourcePath = CmsFileUtil.addTrailingSeparator(resourcePath);
}
int newState = (structureState > resourceState) ? structureState : resourceState;
return new CmsFolder(
structureId,
resourceId,
resourcePath,
resourceType,
resourceFlags,
resProjectId,
CmsResourceState.valueOf(newState),
dateCreated,
userCreated,
dateLastModified,
userLastModified,
dateReleased,
dateExpired,
resourceVersion + structureVersion);
}
/**
* @see org.opencms.db.I_CmsVfsDriver#createOnlineContent(org.opencms.db.CmsDbContext, org.opencms.util.CmsUUID, byte[], int, boolean, boolean)
*/
public void createOnlineContent(
CmsDbContext dbc,
CmsUUID resourceId,
byte[] contents,
int publishTag,
boolean keepOnline,
boolean needToUpdateContent) throws CmsDataAccessException {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = m_sqlManager.getConnection(dbc);
if (needToUpdateContent) {
// put the online content in the history, only if explicit requested
stmt = m_sqlManager.getPreparedStatement(conn, "C_ONLINE_CONTENTS_HISTORY");
stmt.setString(1, resourceId.toString());
stmt.executeUpdate();
m_sqlManager.closeAll(dbc, null, stmt, null);
// create new online content
stmt = m_sqlManager.getPreparedStatement(conn, "C_ONLINE_CONTENTS_WRITE");
stmt.setString(1, resourceId.toString());
if (contents.length < 2000) {
stmt.setBytes(2, contents);
} else {
stmt.setBinaryStream(2, new ByteArrayInputStream(contents), contents.length);
}
stmt.setInt(3, publishTag);
stmt.setInt(4, publishTag);
stmt.setInt(5, keepOnline ? 1 : 0);
stmt.executeUpdate();
m_sqlManager.closeAll(dbc, null, stmt, null);
} else {
// update old content entry
stmt = m_sqlManager.getPreparedStatement(conn, "C_HISTORY_CONTENTS_UPDATE");
stmt.setInt(1, publishTag);
stmt.setString(2, resourceId.toString());
stmt.executeUpdate();
m_sqlManager.closeAll(dbc, null, stmt, null);
if (!keepOnline) {
// put the online content in the history
stmt = m_sqlManager.getPreparedStatement(conn, "C_ONLINE_CONTENTS_HISTORY");
stmt.setString(1, resourceId.toString());
stmt.executeUpdate();
m_sqlManager.closeAll(dbc, null, stmt, null);
}
}
} catch (SQLException e) {
throw new CmsDbSqlException(Messages.get().container(
Messages.ERR_GENERIC_SQL_1,
CmsDbSqlException.getErrorQuery(stmt)), e);
} finally {
m_sqlManager.closeAll(dbc, conn, stmt, null);
}
}
/**
* @see org.opencms.db.I_CmsVfsDriver#createPropertyDefinition(org.opencms.db.CmsDbContext, org.opencms.util.CmsUUID, java.lang.String, org.opencms.file.CmsPropertyDefinition.CmsPropertyType)
*/
public CmsPropertyDefinition createPropertyDefinition(
CmsDbContext dbc,
CmsUUID projectId,
String name,
CmsPropertyDefinition.CmsPropertyType type) throws CmsDataAccessException {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = m_sqlManager.getConnection(dbc);
stmt = m_sqlManager.getPreparedStatement(conn, projectId, "C_PROPERTYDEF_CREATE");
stmt.setString(1, new CmsUUID().toString());
stmt.setString(2, name);
stmt.setInt(3, type.getMode());
stmt.executeUpdate();
} catch (SQLException e) {
throw new CmsDbSqlException(Messages.get().container(
Messages.ERR_GENERIC_SQL_1,
CmsDbSqlException.getErrorQuery(stmt)), e);
} finally {
m_sqlManager.closeAll(dbc, conn, stmt, null);
}
return readPropertyDefinition(dbc, name, projectId);
}
/**
* @see org.opencms.db.I_CmsVfsDriver#createRelation(org.opencms.db.CmsDbContext, CmsUUID, org.opencms.relations.CmsRelation)
*/
public void createRelation(CmsDbContext dbc, CmsUUID projectId, CmsRelation relation) throws CmsDataAccessException {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = m_sqlManager.getConnection(dbc);
stmt = m_sqlManager.getPreparedStatement(conn, projectId, "C_CREATE_RELATION");
stmt.setString(1, relation.getSourceId().toString());
stmt.setString(2, relation.getSourcePath());
stmt.setString(3, relation.getTargetId().toString());
stmt.setString(4, relation.getTargetPath());
stmt.setInt(5, relation.getType().getId());
if (LOG.isDebugEnabled()) {
LOG.debug(Messages.get().getBundle().key(
Messages.LOG_CREATE_RELATION_2,
String.valueOf(projectId),
relation));
}
stmt.executeUpdate();
} catch (SQLException e) {
throw new CmsDbSqlException(Messages.get().container(
Messages.ERR_GENERIC_SQL_1,
CmsDbSqlException.getErrorQuery(stmt)), e);
} finally {
m_sqlManager.closeAll(dbc, conn, stmt, null);
}
}
/**
* @see org.opencms.db.I_CmsVfsDriver#createResource(org.opencms.db.CmsDbContext, CmsUUID, org.opencms.file.CmsResource, byte[])
*/
public CmsResource createResource(CmsDbContext dbc, CmsUUID projectId, CmsResource resource, byte[] content)
throws CmsDataAccessException {
CmsUUID newStructureId = null;
Connection conn = null;
PreparedStatement stmt = null;
// check the resource path
String resourcePath = CmsFileUtil.removeTrailingSeparator(resource.getRootPath());
if (resourcePath.length() > CmsDriverManager.MAX_VFS_RESOURCE_PATH_LENGTH) {
throw new CmsDataAccessException(Messages.get().container(
Messages.ERR_RESOURCENAME_TOO_LONG_2,
resourcePath,
new Integer(CmsDriverManager.MAX_VFS_RESOURCE_PATH_LENGTH)));
}
// check if the parent folder of the resource exists and if is not deleted
if (!resource.getRootPath().equals("/")) {
String parentFolderName = CmsResource.getParentFolder(resource.getRootPath());
CmsFolder parentFolder = m_driverManager.getVfsDriver().readFolder(dbc, projectId, parentFolderName);
if (parentFolder.getState().isDeleted()) {
throw new CmsDbEntryNotFoundException(Messages.get().container(
Messages.ERR_PARENT_FOLDER_DELETED_1,
resource.getRootPath()));
}
}
// validate the resource length
internalValidateResourceLength(resource);
// set the resource state and modification dates
CmsResourceState newState;
long dateModified;
long dateCreated;
long dateContent = System.currentTimeMillis();
if (projectId.equals(CmsProject.ONLINE_PROJECT_ID)) {
newState = CmsResource.STATE_UNCHANGED;
dateCreated = resource.getDateCreated();
dateModified = resource.getDateLastModified();
} else {
newState = CmsResource.STATE_NEW;
if (resource.isTouched()) {
dateCreated = resource.getDateCreated();
dateModified = resource.getDateLastModified();
} else {
dateCreated = System.currentTimeMillis();
dateModified = dateCreated;
}
}
// check if the resource already exists
newStructureId = resource.getStructureId();
try {
CmsResource existingResource = m_driverManager.getVfsDriver().readResource(
dbc,
dbc.getProjectId().isNullUUID() ? projectId : dbc.getProjectId(),
resourcePath,
true);
if (existingResource.getState().isDeleted()) {
// if an existing resource is deleted, it will be finally removed now.
// but we have to reuse its id in order to avoid orphans in the online project
newStructureId = existingResource.getStructureId();
newState = CmsResource.STATE_CHANGED;
// remove the existing file and it's properties
List modifiedResources = m_driverManager.getVfsDriver().readSiblings(
dbc,
projectId,
existingResource,
false);
int propertyDeleteOption = (existingResource.getSiblingCount() > 1) ? CmsProperty.DELETE_OPTION_DELETE_STRUCTURE_VALUES
: CmsProperty.DELETE_OPTION_DELETE_STRUCTURE_AND_RESOURCE_VALUES;
deletePropertyObjects(dbc, projectId, existingResource, propertyDeleteOption);
removeFile(dbc, projectId, existingResource);
OpenCms.fireCmsEvent(new CmsEvent(
I_CmsEventListener.EVENT_RESOURCES_MODIFIED,
Collections.singletonMap("resources", modifiedResources)));
OpenCms.fireCmsEvent(new CmsEvent(
I_CmsEventListener.EVENT_RESOURCE_AND_PROPERTIES_MODIFIED,
Collections.singletonMap("resource", existingResource)));
} else {
// we have a collision: there exists already a resource with the same path/name which cannot be removed
throw new CmsVfsResourceAlreadyExistsException(Messages.get().container(
Messages.ERR_RESOURCE_WITH_NAME_ALREADY_EXISTS_1,
dbc.removeSiteRoot(resource.getRootPath())));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?