cmsprojectdriver.java
来自「找了很久才找到到源代码」· Java 代码 · 共 1,511 行 · 第 1/5 页
JAVA
1,511 行
} else if (offlineResource.getState().isChanged()) {
report.print(Messages.get().container(Messages.RPT_PUBLISH_FILE_0), I_CmsReport.FORMAT_NOTE);
report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
dbc.removeSiteRoot(offlineResource.getRootPath())));
report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0));
publishChangedFile(
dbc,
onlineProject,
offlineResource,
publishedContentIds,
publishHistoryId,
publishTag);
dbc.pop();
// delete old historical entries
m_driverManager.getHistoryDriver().deleteEntries(
dbc,
new CmsHistoryFile(offlineResource),
OpenCms.getSystemInfo().getHistoryVersions(),
-1);
report.println(
org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_OK_0),
I_CmsReport.FORMAT_OK);
if (LOG.isDebugEnabled()) {
LOG.debug(Messages.get().getBundle().key(
Messages.LOG_PUBLISHING_FILE_3,
offlineResource.getRootPath(),
String.valueOf(m),
String.valueOf(n)));
}
} else if (offlineResource.getState().isNew()) {
report.print(Messages.get().container(Messages.RPT_PUBLISH_FILE_0), I_CmsReport.FORMAT_NOTE);
report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
dbc.removeSiteRoot(offlineResource.getRootPath())));
report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0));
publishNewFile(dbc, onlineProject, offlineResource, publishedContentIds, publishHistoryId, publishTag);
dbc.pop();
// delete old historical entries
m_driverManager.getHistoryDriver().deleteEntries(
dbc,
new CmsHistoryFile(offlineResource),
OpenCms.getSystemInfo().getHistoryVersions(),
-1);
report.println(
org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_OK_0),
I_CmsReport.FORMAT_OK);
if (LOG.isDebugEnabled()) {
if (LOG.isDebugEnabled()) {
LOG.debug(Messages.get().getBundle().key(
Messages.LOG_PUBLISHING_FILE_3,
offlineResource.getRootPath(),
String.valueOf(m),
String.valueOf(n)));
}
}
} else {
// state == unchanged !!?? something went really wrong
report.print(Messages.get().container(Messages.RPT_PUBLISH_FILE_0), I_CmsReport.FORMAT_NOTE);
report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
dbc.removeSiteRoot(offlineResource.getRootPath())));
report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0));
report.println(
org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_FAILED_0),
I_CmsReport.FORMAT_ERROR);
if (LOG.isErrorEnabled()) {
// the whole resource is printed out here
LOG.error(Messages.get().getBundle().key(
Messages.LOG_PUBLISHING_FILE_3,
String.valueOf(m),
String.valueOf(n),
offlineResource));
}
}
} catch (CmsException e) {
throw new CmsDataAccessException(e.getMessageContainer(), e);
} finally {
// notify the app. that the published file and it's properties have been modified offline
OpenCms.fireCmsEvent(new CmsEvent(
I_CmsEventListener.EVENT_RESOURCE_AND_PROPERTIES_MODIFIED,
Collections.singletonMap("resource", offlineResource)));
}
}
/**
* @see org.opencms.db.I_CmsProjectDriver#publishFileContent(CmsDbContext, CmsProject, CmsProject, CmsResource, Set, boolean, int)
*/
public CmsFile publishFileContent(
CmsDbContext dbc,
CmsProject offlineProject,
CmsProject onlineProject,
CmsResource offlineResource,
Set publishedResourceIds,
boolean needToUpdateContent,
int publishTag) throws CmsDataAccessException {
CmsFile newFile = null;
try {
// read the file content offline
CmsUUID projectId = dbc.getProjectId();
dbc.setProjectId(CmsUUID.getNullUUID());
byte[] offlineContent = m_driverManager.getVfsDriver().readContent(
dbc,
offlineProject.getUuid(),
offlineResource.getResourceId());
CmsFile offlineFile = new CmsFile(offlineResource);
offlineFile.setContents(offlineContent);
dbc.setProjectId(projectId);
// create the file online
newFile = (CmsFile)offlineFile.clone();
newFile.setState(CmsResource.STATE_UNCHANGED);
boolean createSibling = true;
// check if we are facing with a create new sibling operation
if (!offlineFile.getState().isNew()) {
createSibling = false;
} else {
// check if the resource entry already exists
if (!m_driverManager.getVfsDriver().validateResourceIdExists(
dbc,
onlineProject.getUuid(),
offlineFile.getResourceId())) {
// we are creating a normal resource and not a sibling
createSibling = false;
}
}
// only update the content if it was not updated before
boolean alreadyPublished = publishedResourceIds.contains(offlineResource.getResourceId());
needToUpdateContent &= !alreadyPublished;
if (createSibling) {
if (!alreadyPublished) {
// create the file online, the first time a sibling is published also the resource entry has to be actualized
m_driverManager.getVfsDriver().createResource(dbc, onlineProject.getUuid(), newFile, null);
} else {
// create the sibling online
m_driverManager.getVfsDriver().createSibling(dbc, onlineProject, offlineResource);
}
newFile = new CmsFile(offlineResource);
newFile.setContents(offlineContent);
} else {
// update the online/offline structure and resource records of the file
m_driverManager.getVfsDriver().publishResource(dbc, onlineProject, newFile, offlineFile);
}
// update version numbers
m_driverManager.getVfsDriver().publishVersions(dbc, offlineResource, !alreadyPublished);
// create/update the content
m_driverManager.getVfsDriver().createOnlineContent(
dbc,
offlineFile.getResourceId(),
offlineFile.getContents(),
publishTag,
true,
needToUpdateContent);
// mark the resource as written to avoid that the same content is written for each sibling instance
publishedResourceIds.add(offlineResource.getResourceId());
} catch (CmsDataAccessException e) {
if (LOG.isErrorEnabled()) {
LOG.error(Messages.get().getBundle().key(
Messages.LOG_PUBLISHING_FILE_CONTENT_1,
offlineResource.toString()), e);
}
throw e;
}
return newFile;
}
/**
* @see org.opencms.db.I_CmsProjectDriver#publishFolder(org.opencms.db.CmsDbContext, org.opencms.report.I_CmsReport, int, int, org.opencms.file.CmsProject, org.opencms.file.CmsFolder, org.opencms.util.CmsUUID, int)
*/
public void publishFolder(
CmsDbContext dbc,
I_CmsReport report,
int m,
int n,
CmsProject onlineProject,
CmsFolder offlineFolder,
CmsUUID publishHistoryId,
int publishTag) throws CmsDataAccessException {
try {
report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_SUCCESSION_2,
String.valueOf(m),
String.valueOf(n)), I_CmsReport.FORMAT_NOTE);
report.print(Messages.get().container(Messages.RPT_PUBLISH_FOLDER_0), I_CmsReport.FORMAT_NOTE);
report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
dbc.removeSiteRoot(offlineFolder.getRootPath())));
report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0));
CmsResourceState resourceState = fixMovedResource(
dbc,
onlineProject,
offlineFolder,
publishHistoryId,
publishTag);
CmsResource onlineFolder = null;
if (offlineFolder.getState().isNew()) {
try {
// create the folder online
CmsResource newFolder = (CmsFolder)offlineFolder.clone();
newFolder.setState(CmsResource.STATE_UNCHANGED);
onlineFolder = m_driverManager.getVfsDriver().createResource(
dbc,
onlineProject.getUuid(),
newFolder,
null);
m_driverManager.getVfsDriver().publishResource(dbc, onlineProject, onlineFolder, offlineFolder);
// update version numbers
m_driverManager.getVfsDriver().publishVersions(dbc, offlineFolder, true);
} catch (CmsVfsResourceAlreadyExistsException e) {
if (LOG.isWarnEnabled()) {
LOG.warn(Messages.get().getBundle().key(
Messages.LOG_WARN_FOLDER_WRONG_STATE_CN_1,
offlineFolder.getRootPath()));
}
try {
onlineFolder = m_driverManager.getVfsDriver().readFolder(
dbc,
onlineProject.getUuid(),
offlineFolder.getRootPath());
m_driverManager.getVfsDriver().publishResource(dbc, onlineProject, onlineFolder, offlineFolder);
// update version numbers
m_driverManager.getVfsDriver().publishVersions(dbc, offlineFolder, true);
} catch (CmsDataAccessException e1) {
if (LOG.isErrorEnabled()) {
LOG.error(Messages.get().getBundle().key(
Messages.LOG_READING_RESOURCE_1,
offlineFolder.getRootPath()), e);
}
throw e1;
}
} catch (CmsDataAccessException e) {
if (LOG.isErrorEnabled()) {
LOG.error(Messages.get().getBundle().key(
Messages.LOG_PUBLISHING_RESOURCE_1,
offlineFolder.getRootPath()), e);
}
throw e;
}
} else if (offlineFolder.getState().isChanged()) {
try {
// read the folder online
onlineFolder = m_driverManager.getVfsDriver().readFolder(
dbc,
onlineProject.getUuid(),
offlineFolder.getStructureId());
} catch (CmsVfsResourceNotFoundException e) {
if (LOG.isWarnEnabled()) {
LOG.warn(Messages.get().getBundle().key(
Messages.LOG_WARN_FOLDER_WRONG_STATE_NC_1,
offlineFolder.getRootPath()));
}
try {
onlineFolder = m_driverManager.getVfsDriver().createResource(
dbc,
onlineProject.getUuid(),
offlineFolder,
null);
internalResetResourceState(dbc, onlineFolder);
} catch (CmsDataAccessException e1) {
if (LOG.isErrorEnabled()) {
LOG.error(Messages.get().getBundle().key(
Messages.LOG_PUBLISHING_RESOURCE_1,
offlineFolder.getRootPath()), e);
}
throw e1;
}
}
try {
// update the folder online
m_driverManager.getVfsDriver().publishResource(dbc, onlineProject, onlineFolder, offlineFolder);
// update version numbers
m_driverManager.getVfsDriver().publishVersions(dbc, offlineFolder, true);
} catch (CmsDataAccessException e) {
if (LOG.isErrorEnabled()) {
LOG.error(Messages.get().getBundle().key(
Messages.LOG_PUBLISHING_RESOURCE_1,
offlineFolder.getRootPath()), e);
}
throw e;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?