cmsxmlcontenteditor.java
来自「找了很久才找到到源代码」· Java 代码 · 共 1,609 行 · 第 1/5 页
JAVA
1,609 行
// get the action class from the OpenCms runtime property
I_CmsEditorActionHandler actionClass = OpenCms.getWorkplaceManager().getEditorActionHandler();
if (actionClass == null) {
// error getting the action class, save content and exit the editor
actionSave();
actionExit();
} else {
actionClass.editorAction(this, getJsp());
}
}
/**
* Performs the exit editor action.<p>
*
* @see org.opencms.workplace.editors.CmsEditor#actionExit()
*/
public void actionExit() throws IOException, JspException, ServletException {
if (getAction() == ACTION_CANCEL) {
// save and exit was cancelled
return;
}
// unlock resource if we are in direct edit mode
actionClear(false);
// close the editor
actionClose();
}
/**
* Moves an element in the xml content either up or down.<p>
*
* Depends on the given action value.<p>
*
* @throws JspException if including the error page fails
*/
public void actionMoveElement() throws JspException {
// set editor values from request
try {
setEditorValues(getElementLocale());
} catch (CmsXmlException e) {
// an error occured while trying to set the values, stop action
showErrorPage(e);
return;
}
// get the necessary parameters to move the element
int index = 0;
try {
index = Integer.parseInt(getParamElementIndex());
} catch (Exception e) {
// ignore, should not happen
}
// get the value to move
I_CmsXmlContentValue value = m_content.getValue(getParamElementName(), getElementLocale(), index);
if (getAction() == ACTION_ELEMENT_MOVE_DOWN) {
// move down the value
value.moveDown();
} else {
// move up the value
value.moveUp();
}
if (getValidationHandler().hasWarnings(getElementLocale())) {
// there were warnings for the edited content, reset validation handler to avoid display issues
resetErrorHandler();
}
try {
// write the modified content to the temporary file
writeContent();
} catch (CmsException e) {
// an error occured while trying to save
showErrorPage(e);
}
}
/**
* Creates a new XML content item for editing.<p>
*
* @throws JspException in case something goes wrong
*/
public void actionNew() throws JspException {
// get the collector used to create the new content
int pos = m_paramNewLink.indexOf('|');
String collectorName = m_paramNewLink.substring(0, pos);
String param = m_paramNewLink.substring(pos + 1);
// get the collector used for calculating the next file name
I_CmsResourceCollector collector = OpenCms.getResourceManager().getContentCollector(collectorName);
String newFileName = "";
try {
// one resource serves as a "template" for the new resource
CmsFile templateFile = getCms().readFile(getParamResource(), CmsResourceFilter.IGNORE_EXPIRATION);
CmsXmlContent template = CmsXmlContentFactory.unmarshal(getCloneCms(), templateFile);
Locale locale = (Locale)OpenCms.getLocaleManager().getDefaultLocales(getCms(), getParamResource()).get(0);
// now create a new XML content based on the templates content definition
CmsXmlContent newContent = CmsXmlContentFactory.createDocument(
getCms(),
locale,
template.getEncoding(),
template.getContentDefinition());
// IMPORTANT: calculation of the name MUST be done here so the file name is ensured to be valid
newFileName = collector.getCreateLink(getCms(), collectorName, param);
boolean useModelFile = false;
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(getParamModelFile())) {
getCms().getRequestContext().setAttribute(CmsRequestContext.ATTRIBUTE_MODEL, getParamModelFile());
useModelFile = true;
}
// now create the resource, fill it with the marshalled XML and write it back to the VFS
getCms().createResource(newFileName, templateFile.getTypeId());
// re-read the created resource
CmsFile newFile = getCms().readFile(newFileName, CmsResourceFilter.ALL);
if (!useModelFile) {
newFile.setContents(newContent.marshal());
// write the file with the updated content
getCloneCms().writeFile(newFile);
}
// wipe out parameters for the editor to ensure proper operation
setParamNewLink(null);
setParamAction(null);
setParamResource(newFileName);
setAction(ACTION_DEFAULT);
// create the temporary file to work with
setParamTempfile(createTempFile());
// set the member variables for the content
m_file = getCms().readFile(getParamTempfile(), CmsResourceFilter.ALL);
if (!useModelFile) {
m_content = newContent;
} else {
m_content = CmsXmlContentFactory.unmarshal(getCms(), m_file);
}
} catch (CmsException e) {
if (LOG.isErrorEnabled()) {
LOG.error(Messages.get().getBundle().key(Messages.LOG_CREATE_XML_CONTENT_ITEM_1, m_paramNewLink), e);
}
throw new JspException(e);
} finally {
try {
// delete the new file
getCms().deleteResource(newFileName, CmsResource.DELETE_REMOVE_SIBLINGS);
} catch (CmsException e) {
// ignore
}
}
}
/**
* Performs the preview xml content action in a new browser window.<p>
*
* @throws IOException if redirect fails
* @throws JspException if inclusion of error page fails
*/
public void actionPreview() throws IOException, JspException {
try {
// save content of the editor only to the temporary file
setEditorValues(getElementLocale());
writeContent();
// remove eventual release & expiration date from temporary file to make preview work
getCms().setDateReleased(getParamTempfile(), CmsResource.DATE_RELEASED_DEFAULT, false);
getCms().setDateExpired(getParamTempfile(), CmsResource.DATE_EXPIRED_DEFAULT, false);
} catch (CmsException e) {
// show error page
showErrorPage(this, e);
}
// get preview uri from content handler
String previewUri = m_content.getContentDefinition().getContentHandler().getPreview(
getCms(),
m_content,
getParamTempfile());
// create locale request parameter
StringBuffer param = new StringBuffer(8);
if (previewUri.indexOf('?') != -1) {
param.append("&");
} else {
param.append("?");
}
param.append(CmsLocaleManager.PARAMETER_LOCALE);
param.append("=");
param.append(getParamElementlanguage());
// redirect to the temporary file with currently active element language or to the specified preview uri
sendCmsRedirect(previewUri + param);
}
/**
* Performs the save content action.<p>
*
* @see org.opencms.workplace.editors.CmsEditor#actionSave()
*/
public void actionSave() throws JspException {
actionSave(getElementLocale());
if (getAction() != ACTION_CANCEL) {
// save successful, set save action
setAction(ACTION_SAVE);
}
}
/**
* Performs the save content action.<p>
*
* This is also used when changing the element language.<p>
*
* @param locale the locale to save the content
* @throws JspException if including the error page fails
*/
public void actionSave(Locale locale) throws JspException {
try {
setEditorValues(locale);
// check if content has errors
if (!hasValidationErrors()) {
// no errors found, write content and copy temp file contents
writeContent();
commitTempFile();
// set the modified parameter
setParamModified(Boolean.TRUE.toString());
}
} catch (CmsException e) {
showErrorPage(e);
}
}
/**
* Adds an optional element to the xml content or removes an optional element from the xml content.<p>
*
* Depends on the given action value.<p>
*
* @throws JspException if including the error page fails
*/
public void actionToggleElement() throws JspException {
// set editor values from request
try {
setEditorValues(getElementLocale());
} catch (CmsXmlException e) {
// an error occured while trying to set the values, stop action
showErrorPage(e);
return;
}
// get the necessary parameters to add/remove the element
int index = 0;
try {
index = Integer.parseInt(getParamElementIndex());
} catch (Exception e) {
// ignore, should not happen
}
if (getAction() == ACTION_ELEMENT_REMOVE) {
// remove the value
m_content.removeValue(getParamElementName(), getElementLocale(), index);
} else {
// add the new value after the clicked element
if (m_content.hasValue(getParamElementName(), getElementLocale())) {
// when other values are present, increase index to use right position
index += 1;
}
m_content.addValue(getCms(), getParamElementName(), getElementLocale(), index);
}
if (getValidationHandler().hasWarnings(getElementLocale())) {
// there were warnings for the edited content, reset validation handler to avoid display issues
resetErrorHandler();
}
try {
// write the modified content to the temporary file
writeContent();
} catch (CmsException e) {
// an error occured while trying to save
showErrorPage(e);
}
}
/**
* Builds the html String for the element language selector.<p>
*
* This method has to use the resource request parameter because the temporary file is
* not available in the upper button frame.<p>
*
* @param attributes optional attributes for the <select> tag
* @return the html for the element language selectbox
*/
public String buildSelectElementLanguage(String attributes) {
return buildSelectElementLanguage(attributes, getParamResource(), getElementLocale());
}
/**
* @see org.opencms.widgets.I_CmsWidgetDialog#getButtonStyle()
*/
public int getButtonStyle() {
return getSettings().getUserSettings().getEditorButtonStyle();
}
/**
* @see org.opencms.workplace.editors.CmsEditor#getEditorResourceUri()
*/
public String getEditorResourceUri() {
return getSkinUri() + "editors/" + EDITOR_TYPE + "/";
}
/**
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?