cmsxmlcontenteditor.java
来自「找了很久才找到到源代码」· Java 代码 · 共 1,609 行 · 第 1/5 页
JAVA
1,609 行
return false;
}
return true;
}
/**
* @see org.opencms.workplace.tools.CmsToolDialog#useNewStyle()
*/
public boolean useNewStyle() {
return false;
}
/**
* @see org.opencms.workplace.editors.CmsEditor#commitTempFile()
*/
protected void commitTempFile() throws CmsException {
super.commitTempFile();
m_file = getCloneCms().readFile(getParamResource());
m_content = CmsXmlContentFactory.unmarshal(getCloneCms(), m_file);
}
/**
* Initializes the editor content when opening the editor for the first time.<p>
*
* Not necessary for the xmlcontent editor.<p>
*/
protected void initContent() {
// nothing to be done for the xmlcontent editor form
}
/**
* Initializes the element language for the first call of the editor.<p>
*/
protected void initElementLanguage() {
// get the default locale for the resource
List locales = OpenCms.getLocaleManager().getDefaultLocales(getCms(), getParamResource());
Locale locale = (Locale)locales.get(0);
if (m_content != null) {
// to copy anything we need at least one locale
if ((locales.size() > 1) && (m_content.getLocales().size() > 0) && !m_content.hasLocale(locale)) {
// required locale not available, check if an existing default locale should be copied as "template"
try {
// a list of possible default locales has been set as property, try to find a match
m_content.copyLocale(locales, locale);
writeContent();
} catch (CmsException e) {
// no match was found for the required locale
}
}
if (!m_content.hasLocale(locale)) {
// value may have changed because of the copy operation
locale = (Locale)m_content.getLocales().get(0);
}
}
setParamElementlanguage(locale.toString());
}
/**
* @see org.opencms.workplace.CmsWorkplace#initWorkplaceRequestValues(org.opencms.workplace.CmsWorkplaceSettings, javax.servlet.http.HttpServletRequest)
*/
protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) {
// fill the parameter values in the get/set methods
fillParamValues(request);
// set the dialog type
setParamDialogtype(EDITOR_TYPE);
if (getParamNewLink() != null) {
setParamAction(EDITOR_ACTION_NEW);
} else {
// initialize a content object from the temporary file
if ((getParamTempfile() != null) && !"null".equals(getParamTempfile())) {
try {
m_file = getCms().readFile(this.getParamTempfile(), CmsResourceFilter.ALL);
m_content = CmsXmlContentFactory.unmarshal(getCloneCms(), m_file);
} catch (CmsException e) {
// error during initialization, show error page
try {
showErrorPage(this, e);
} catch (JspException exc) {
// should usually never happen
if (LOG.isInfoEnabled()) {
LOG.info(exc);
}
}
}
}
}
// set the action for the JSP switch
if (EDITOR_SAVE.equals(getParamAction())) {
setAction(ACTION_SAVE);
} else if (EDITOR_SAVEEXIT.equals(getParamAction())) {
setAction(ACTION_SAVEEXIT);
} else if (EDITOR_EXIT.equals(getParamAction())) {
setAction(ACTION_EXIT);
} else if (EDITOR_CLOSEBROWSER.equals(getParamAction())) {
// closed browser window accidentally, unlock resource and delete temporary file
actionClear(true);
return;
} else if (EDITOR_ACTION_CHECK.equals(getParamAction())) {
setAction(ACTION_CHECK);
} else if (EDITOR_SAVEACTION.equals(getParamAction())) {
setAction(ACTION_SAVEACTION);
try {
actionDirectEdit();
} catch (Exception e) {
// should usually never happen
if (LOG.isInfoEnabled()) {
LOG.info(e.getLocalizedMessage(), e);
}
}
setAction(ACTION_EXIT);
} else if (EDITOR_DELETELOCALE.equals(getParamAction())) {
setAction(ACTION_DELETELOCALE);
} else if (EDITOR_SHOW.equals(getParamAction())) {
setAction(ACTION_SHOW);
} else if (EDITOR_SHOW_ERRORMESSAGE.equals(getParamAction())) {
setAction(ACTION_SHOW_ERRORMESSAGE);
} else if (EDITOR_CHANGE_ELEMENT.equals(getParamAction())) {
setAction(ACTION_SHOW);
actionChangeElementLanguage();
} else if (EDITOR_ACTION_ELEMENT_ADD.equals(getParamAction())) {
setAction(ACTION_ELEMENT_ADD);
try {
actionToggleElement();
} catch (JspException e) {
if (LOG.isErrorEnabled()) {
LOG.error(org.opencms.workplace.Messages.get().getBundle().key(
org.opencms.workplace.Messages.LOG_INCLUDE_ERRORPAGE_FAILED_0));
}
}
if ((getAction() != ACTION_CANCEL) && (getAction() != ACTION_SHOW_ERRORMESSAGE)) {
// no error ocurred, redisplay the input form
setAction(ACTION_SHOW);
}
} else if (EDITOR_ACTION_ELEMENT_REMOVE.equals(getParamAction())) {
setAction(ACTION_ELEMENT_REMOVE);
try {
actionToggleElement();
} catch (JspException e) {
if (LOG.isErrorEnabled()) {
LOG.error(org.opencms.workplace.Messages.get().getBundle().key(
org.opencms.workplace.Messages.LOG_INCLUDE_ERRORPAGE_FAILED_0));
}
}
if ((getAction() != ACTION_CANCEL) && (getAction() != ACTION_SHOW_ERRORMESSAGE)) {
// no error ocurred, redisplay the input form
setAction(ACTION_SHOW);
}
} else if (EDITOR_ACTION_ELEMENT_MOVE_DOWN.equals(getParamAction())) {
setAction(ACTION_ELEMENT_MOVE_DOWN);
try {
actionMoveElement();
} catch (JspException e) {
if (LOG.isErrorEnabled()) {
LOG.error(org.opencms.workplace.Messages.get().getBundle().key(
org.opencms.workplace.Messages.LOG_INCLUDE_ERRORPAGE_FAILED_0));
}
}
if ((getAction() != ACTION_CANCEL) && (getAction() != ACTION_SHOW_ERRORMESSAGE)) {
// no error ocurred, redisplay the input form
setAction(ACTION_SHOW);
}
} else if (EDITOR_ACTION_ELEMENT_MOVE_UP.equals(getParamAction())) {
setAction(ACTION_ELEMENT_MOVE_UP);
try {
actionMoveElement();
} catch (JspException e) {
if (LOG.isErrorEnabled()) {
LOG.error(org.opencms.workplace.Messages.get().getBundle().key(
org.opencms.workplace.Messages.LOG_INCLUDE_ERRORPAGE_FAILED_0));
}
}
if ((getAction() != ACTION_CANCEL) && (getAction() != ACTION_SHOW_ERRORMESSAGE)) {
// no error ocurred, redisplay the input form
setAction(ACTION_SHOW);
}
} else if (EDITOR_ACTION_NEW.equals(getParamAction())) {
setAction(ACTION_NEW);
return;
} else if (EDITOR_PREVIEW.equals(getParamAction())) {
setAction(ACTION_PREVIEW);
} else if (EDITOR_CORRECTIONCONFIRMED.equals(getParamAction())) {
setAction(ACTION_SHOW);
try {
// correct the XML structure before showing the form
correctXmlStructure();
} catch (CmsException e) {
// error during correction
try {
showErrorPage(this, e);
} catch (JspException exc) {
// should usually never happen
if (LOG.isInfoEnabled()) {
LOG.info(exc);
}
}
}
} else {
// initial call of editor
setAction(ACTION_DEFAULT);
try {
// lock resource if autolock is enabled in configuration
if (Boolean.valueOf(getParamDirectedit()).booleanValue()) {
// set a temporary lock in direct edit mode
checkLock(getParamResource(), CmsLockType.TEMPORARY);
} else {
// set common lock
checkLock(getParamResource());
}
// create the temporary file
setParamTempfile(createTempFile());
// initialize a content object from the created temporary file
m_file = getCms().readFile(this.getParamTempfile(), CmsResourceFilter.ALL);
m_content = CmsXmlContentFactory.unmarshal(getCloneCms(), m_file);
// check the XML content against the given XSD
try {
m_content.validateXmlStructure(new CmsXmlEntityResolver(getCms()));
} catch (CmsXmlException eXml) {
// validation failed, check the settings for handling the correction
if (OpenCms.getWorkplaceManager().isXmlContentAutoCorrect()) {
// correct the XML structure automatically according to the XSD
correctXmlStructure();
} else {
// show correction confirmation dialog
setAction(ACTION_CONFIRMCORRECTION);
}
}
} catch (CmsException e) {
// error during initialization
try {
showErrorPage(this, e);
} catch (JspException exc) {
// should usually never happen
if (LOG.isInfoEnabled()) {
LOG.info(exc);
}
}
}
// set the initial element language if not given in request parameters
if (getParamElementlanguage() == null) {
initElementLanguage();
}
}
}
/**
* Returns the html for the element operation buttons add, move, remove.<p>
*
* @param elementName name of the element
* @param index the index of the element
* @param addElement if true, the button to add an element is shown
* @param removeElement if true, the button to remove an element is shown
* @return the html for the element operation buttons
*/
private String buildElementButtons(String elementName, int index, boolean addElement, boolean removeElement) {
StringBuffer jsCall = new StringBuffer(512);
// indicates if at least one button is active
boolean buttonPresent = false;
jsCall.append("showElementButtons('");
jsCall.append(elementName);
jsCall.append("', ");
jsCall.append(index);
jsCall.append(", ");
// build the remove element button if required
if (removeElement) {
jsCall.append(Boolean.TRUE);
buttonPresent = true;
} else {
jsCall.append(Boolean.FALSE);
}
jsCall.append(", ");
// build the move down button (move down in API is move up for content editor)
if (index > 0) {
// build active move down button
jsCall.append(Boolean.TRUE);
buttonPresent = true;
} else {
jsCall.append(Boolean.FALSE);
}
jsCall.append(", ");
// build the move up button (move up in API is move down for content editor)
int indexCount = m_content.getIndexCount(elementName, getElementLocale());
if (index < (indexCount - 1)) {
// build active move up button
jsCall.append(Boolean.TRUE);
buttonPresent = true;
} else {
jsCall.append(Boolean.FALSE);
}
jsCall.append(", ");
// build the add element button if required
if (addElement) {
jsCall.append(Boolean.TRUE);
buttonPresent = true;
} else {
jsCall.append(Boolean.FALSE);
}
jsCall.append(");");
String result;
if (buttonPresent) {
// at least one button active, create mouseover button
String btIcon = "xmledit.png";
String btAction = jsCall.toString();
// determine icon to use and if a direct click action is possible
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?