
org.opencms.ade.containerpage.client.ui.CmsElementSettingsDialog Maven / Gradle / Ivy
Show all versions of opencms-gwt Show documentation
/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* For further information about Alkacon Software, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.ade.containerpage.client.ui;
import org.opencms.ade.containerpage.client.CmsContainerpageController;
import org.opencms.ade.containerpage.client.CmsContainerpageController.I_ReloadHandler;
import org.opencms.ade.containerpage.client.Messages;
import org.opencms.ade.containerpage.client.ui.groupeditor.CmsInheritanceContainerEditor;
import org.opencms.ade.containerpage.shared.CmsContainerElement;
import org.opencms.ade.containerpage.shared.CmsContainerElement.ModelGroupState;
import org.opencms.ade.containerpage.shared.CmsContainerElementData;
import org.opencms.ade.containerpage.shared.CmsElementSettingsConfig;
import org.opencms.ade.containerpage.shared.CmsFormatterConfig;
import org.opencms.ade.containerpage.shared.CmsFormatterConfigCollection;
import org.opencms.gwt.client.CmsCoreProvider;
import org.opencms.gwt.client.ui.CmsFieldSet;
import org.opencms.gwt.client.ui.contextmenu.CmsContextMenuButton;
import org.opencms.gwt.client.ui.contextmenu.CmsDialogContextMenuHandler;
import org.opencms.gwt.client.ui.css.I_CmsInputLayoutBundle;
import org.opencms.gwt.client.ui.css.I_CmsLayoutBundle;
import org.opencms.gwt.client.ui.input.CmsCheckBox;
import org.opencms.gwt.client.ui.input.CmsMultiCheckBox;
import org.opencms.gwt.client.ui.input.CmsSelectBox;
import org.opencms.gwt.client.ui.input.CmsSelectComboBox;
import org.opencms.gwt.client.ui.input.I_CmsFormField;
import org.opencms.gwt.client.ui.input.I_CmsFormWidget;
import org.opencms.gwt.client.ui.input.form.A_CmsFormFieldPanel;
import org.opencms.gwt.client.ui.input.form.CmsBasicFormField;
import org.opencms.gwt.client.ui.input.form.CmsDialogFormHandler;
import org.opencms.gwt.client.ui.input.form.CmsFieldTooltip;
import org.opencms.gwt.client.ui.input.form.CmsFieldTooltip.Data;
import org.opencms.gwt.client.ui.input.form.CmsFieldsetFormFieldPanel;
import org.opencms.gwt.client.ui.input.form.CmsForm;
import org.opencms.gwt.client.ui.input.form.CmsFormDialog;
import org.opencms.gwt.client.ui.input.form.CmsFormRow;
import org.opencms.gwt.client.ui.input.form.CmsInfoBoxFormFieldPanel;
import org.opencms.gwt.client.ui.input.form.CmsWidgetFactoryRegistry;
import org.opencms.gwt.client.ui.input.form.I_CmsFormSubmitHandler;
import org.opencms.gwt.client.ui.input.form.I_CmsFormWidgetMultiFactory;
import org.opencms.gwt.client.util.CmsDomUtil;
import org.opencms.gwt.shared.CmsAdditionalInfoBean;
import org.opencms.gwt.shared.CmsCoreData.AdeContext;
import org.opencms.gwt.shared.CmsGwtConstants;
import org.opencms.gwt.shared.CmsListInfoBean;
import org.opencms.gwt.shared.CmsTemplateContextInfo;
import org.opencms.util.CmsStringUtil;
import org.opencms.util.CmsUUID;
import org.opencms.xml.content.CmsXmlContentProperty;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.google.common.base.Optional;
import com.google.common.base.Supplier;
import com.google.common.collect.Maps;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* The element settings dialog.
*/
public class CmsElementSettingsDialog extends CmsFormDialog implements I_CmsFormWidgetMultiFactory {
/**
* A panel which adds icons with tooltips containing the field description to the rows.
*/
public static class FieldPanel extends CmsFieldsetFormFieldPanel {
/**
* Creates a new instance.
*
* @param info the list info bean for an element
* @param legend the legend for the fieldset
*/
public FieldPanel(CmsListInfoBean info, String legend) {
super(info, legend);
}
/**
* @see org.opencms.gwt.client.ui.input.form.A_CmsFormFieldPanel#createRow(org.opencms.gwt.client.ui.input.I_CmsFormField)
*/
@Override
protected CmsFormRow createRow(I_CmsFormField field) {
final String htmlDesc = field.getDescription();
CmsFormRow row = createRow(
field.getLabel(),
A_CmsFormFieldPanel.NO_DESCRIPTION,
(Widget)field.getWidget(),
htmlDesc,
true);
return row;
}
}
/**
* Exception for the case where no formatter configuration is available.
*/
public static class NoFormatterException extends Exception {
/** uid. */
private static final long serialVersionUID = -5735428472483535958L;
/**
* Creates a new instance.
*/
public NoFormatterException() {
// nothing here
}
}
/** The model group options. */
protected enum GroupOption {
/** The copy elements option. */
copy(Messages.get().key(Messages.GUI_MODEL_GROUP_OPTION_COPY_0)),
/** The disabled option. */
disabled(Messages.get().key(Messages.GUI_MODEL_GROUP_OPTION_DISABLED_0)),
/** The reuse option. */
reuse(Messages.get().key(Messages.GUI_MODEL_GROUP_OPTION_REUSE_0));
/** The option label. */
private String m_label;
/**
* Constructor.
*
* @param label the label
*/
GroupOption(String label) {
m_label = label;
}
/**
* Returns the option label.
*
* @return the option label
*/
protected String getLabel() {
return m_label;
}
}
/** The container page controller. */
CmsContainerpageController m_controller;
/** Checkbox to set the 'model group' status. */
CmsSelectBox m_modelGroupSelect;
/** The template context changed flag. */
private boolean m_changedContext;
/** The current container id. */
private String m_containerId;
/** The template context info. */
private CmsTemplateContextInfo m_contextInfo;
/** The template context widget. */
private CmsMultiCheckBox m_contextsWidget;
/** Checkbox to set the 'createNew' status. */
private CmsCheckBox m_createNewCheckBox;
/** The element data bean. */
private CmsContainerElementData m_elementBean;
/** The element panel. */
private CmsContainerPageElementPanel m_elementWidget;
/** Id of currently selected formatter. */
private String m_formatter;
/** The formatter select widget. */
private CmsSelectBox m_formatterSelect;
/** The break up model group checkbox. */
private CmsCheckBox m_modelGroupBreakUp;
/** The original formatter key. */
private String m_originalFormatter;
/** Setting presets. */
private Map m_presets;
/** The element setting values. */
private Map m_settings;
/**
* Constructor.
*
* @param controller the container page controller
* @param elementWidget the element panel
* @param settingsConfig the element setting configuration
* @param settingPresets the presets for settings
*
* @throws NoFormatterException if no formatter configuration is found for the element
*/
public CmsElementSettingsDialog(
CmsContainerpageController controller,
CmsContainerPageElementPanel elementWidget,
CmsElementSettingsConfig settingsConfig,
Map settingPresets)
throws NoFormatterException {
super(Messages.get().key(Messages.GUI_PROPERTY_DIALOG_TITLE_0), new CmsForm(false), null);
setAnimationEnabled(false);
setUseAnimation(false);
addStyleName(I_CmsLayoutBundle.INSTANCE.elementSettingsDialogCss().elementSettingsDialog());
m_presets = settingPresets != null ? settingPresets : new HashMap();
CmsContainerElementData elementBean = settingsConfig.getElementData();
m_elementWidget = elementWidget;
m_controller = controller;
m_elementBean = elementBean;
m_contextInfo = m_controller.getData().getTemplateContextInfo();
m_containerId = m_elementWidget.getParentTarget().getContainerId();
CmsListInfoBean infoBean = new CmsListInfoBean();
infoBean.setResourceState(settingsConfig.getState());
infoBean.setTitle(elementBean.getTitle());
infoBean.setSubTitle(elementBean.getSitePath());
infoBean.setResourceType(elementBean.getResourceType());
infoBean.setBigIconClasses(elementBean.getBigIconClasses());
m_settings = elementBean.getSettings();
A_CmsFormFieldPanel formFieldPanel = null;
CmsFormatterConfig currentFormatterConfig = m_elementBean.getFormatterConfig(m_containerId);
if (currentFormatterConfig == null) {
throw new NoFormatterException();
}
for (CmsAdditionalInfoBean addInfo : settingsConfig.getAdditionalInfo()) {
infoBean.addAdditionalInfo(addInfo.getName(), addInfo.getValue(), addInfo.getStyle());
}
// infoBean.addAdditionalInfo(Messages.get().key(Messages.GUI_ADDINFO_FORMATTER_PATH_0), formatterPath);
I_CmsDropContainer dropContainer = elementWidget.getParentTarget();
if (dropContainer instanceof CmsContainerPageContainer) {
CmsContainerPageContainer cpc = (CmsContainerPageContainer)dropContainer;
String type = cpc.getContainerType();
String name = cpc.getContainerId();
infoBean.addAdditionalInfo(Messages.get().key(Messages.GUI_ADDINFO_FORMATTER_CONTAINER_0), name);
infoBean.addAdditionalInfo(Messages.get().key(Messages.GUI_ADDINFO_FORMATTER_CONTAINER_TYPE_0), type);
}
boolean isEditableModelGroup = CmsCoreProvider.get().getUserInfo().isDeveloper()
&& m_controller.getData().isModelGroup()
&& ((m_controller.getModelGroupElementId() == null)
|| CmsContainerpageController.getServerId(elementBean.getClientId()).equals(
m_controller.getModelGroupElementId()));
boolean isDeveloper = CmsCoreProvider.get().getUserInfo().isDeveloper();
m_originalFormatter = currentFormatterConfig.getKeyOrId();
if (m_contextInfo.shouldShowElementTemplateContextSelection()
|| isDeveloper
|| m_elementBean.hasAlternativeFormatters(m_containerId)) {
CmsFieldsetFormFieldPanel fieldSetPanel = new FieldPanel(
infoBean,
Messages.get().key(Messages.GUI_SETTINGS_LEGEND_0));
formFieldPanel = fieldSetPanel;
if (m_elementBean.hasAlternativeFormatters(m_containerId)) {
CmsFieldSet formatterFieldset = new CmsFieldSet();
// insert as first field-set after the element info box
fieldSetPanel.getMainPanel().insert(formatterFieldset, 1);
formatterFieldset.setLegend(Messages.get().key(Messages.GUI_FORMATTERS_LEGEND_0));
formatterFieldset.getElement().getStyle().setMarginTop(10, Style.Unit.PX);
LinkedHashMap formatters = new LinkedHashMap();
CmsElementSettingsFormatterWidget formatterWidget = new CmsElementSettingsFormatterWidget();
m_formatterSelect = formatterWidget.getFormatterSelect();
CmsFormatterConfigCollection formattersForContainer = m_elementBean.getFormatters().get(m_containerId);
for (CmsFormatterConfig formatter : formattersForContainer) {
formatters.put(formatter.getKeyOrId(), formatter.getLabel());
m_formatterSelect.setTitle(formatter.getKeyOrId(), formatter.getJspRootPath());
}
m_formatterSelect.setItems(formatters);
String currentFormatterValue = m_elementBean.getFormatterConfig(m_containerId).getKeyOrId();
m_formatter = currentFormatterValue;
m_formatterSelect.selectValue(currentFormatterValue);
m_formatterSelect.addValueChangeHandler(new ValueChangeHandler() {
public void onValueChange(ValueChangeEvent event) {
onFormatterChange(event.getValue());
}
});
// set up formatter help tooltip
final FlowPanel help = formatterWidget.getHelp();
for (String style : CmsFormRow.ICON_STYLES) {
help.addStyleName(style);
}
final Map tooltips = Maps.newHashMap();
for (CmsFormatterConfig formatterConfig : formattersForContainer) {
String description = formatterConfig.getDescription();
if (description == null) {
description = formatterConfig.getLabel();
}
tooltips.put(formatterConfig.getKeyOrId(), new Data(help, description, true));
}
Supplier tooltipProvider = new Supplier() {
@SuppressWarnings("synthetic-access")
public Data get() {
return tooltips.get(m_formatter);
}
};
CmsFormRow.installTooltipEventHandlers(help, tooltipProvider);
formatterFieldset.add(formatterWidget);
}
if (m_controller.getData().isModelPage() || isEditableModelGroup) {
CmsFieldSet modelGroupFieldSet = new CmsFieldSet();
modelGroupFieldSet.setLegend(Messages.get().key(Messages.GUI_CREATE_NEW_LEGEND_0
));
modelGroupFieldSet.getElement().getStyle().setMarginTop(10, Unit.PX);
if (isEditableModelGroup && !elementWidget.hasModelGroupParent()) {
addModelGroupSettings(elementBean, elementWidget, modelGroupFieldSet);
} else if (!elementWidget.isModelGroup()) {
addCreateNewCheckbox(elementBean, modelGroupFieldSet);
}
if (modelGroupFieldSet.getWidgetCount() > 0) {
fieldSetPanel.getMainPanel().insert(modelGroupFieldSet, 1);
}
} else if (elementWidget.isModelGroup()) {
CmsFieldSet modelGroupFieldSet = new CmsFieldSet();
modelGroupFieldSet.setLegend(Messages.get().key(Messages.GUI_CREATE_NEW_LEGEND_0
));
modelGroupFieldSet.getElement().getStyle().setMarginTop(10, Unit.PX);
m_modelGroupBreakUp = new CmsCheckBox(Messages.get().key(Messages.GUI_MODEL_GROUP_BREAK_UP_0));
m_modelGroupBreakUp.setDisplayInline(false);
m_modelGroupBreakUp.getElement().getStyle().setMarginTop(7, Style.Unit.PX);
modelGroupFieldSet.add(m_modelGroupBreakUp);
fieldSetPanel.getMainPanel().insert(modelGroupFieldSet, 1);
}
if (m_contextInfo.shouldShowElementTemplateContextSelection()) {
String templateContexts = m_settings.get(CmsTemplateContextInfo.SETTING);
if (templateContexts == null) {
templateContexts = CmsStringUtil.listAsString(
new ArrayList(
CmsContainerpageController.get().getData().getTemplateContextInfo().getContextLabels().keySet()),
"|");
} else if (templateContexts.equals(CmsTemplateContextInfo.EMPTY_VALUE)) {
// translate "none" to an empty selection
templateContexts = "";
}
m_settings.put(CmsTemplateContextInfo.SETTING, templateContexts);
CmsFieldSet contextsFieldset = new CmsFieldSet();
contextsFieldset.setLegend(m_contextInfo.getSettingDefinition().getNiceName());
contextsFieldset.getElement().getStyle().setMarginTop(10, Style.Unit.PX);
m_contextsWidget = new CmsMultiCheckBox(
CmsStringUtil.splitOptions(m_contextInfo.getSettingDefinition().getWidgetConfiguration()));
for (CmsCheckBox checkbox : m_contextsWidget.getCheckboxes()) {
Style checkboxStyle = checkbox.getElement().getStyle();
checkbox.getButton().getElement().getStyle().setFontWeight(Style.FontWeight.NORMAL);
checkboxStyle.setMarginTop(7, Style.Unit.PX);
}
m_contextsWidget.setFormValueAsString(m_settings.get(CmsTemplateContextInfo.SETTING));
m_contextsWidget.addValueChangeHandler(new ValueChangeHandler() {
public void onValueChange(ValueChangeEvent event) {
setTemplateContextChanged(true);
}
});
contextsFieldset.add(m_contextsWidget);
fieldSetPanel.getMainPanel().add(contextsFieldset);
}
} else {
formFieldPanel = new CmsInfoBoxFormFieldPanel(infoBean);
}
CmsUUID serverId = null;
if (elementBean.isModelGroup()) {
serverId = elementBean.getModelGroupId();
} else {
String id = CmsContainerpageController.getServerId(elementBean.getClientId());
if (CmsUUID.isValidUUID(id) && !(new CmsUUID(id).isNullUUID())) {
serverId = new CmsUUID(id);
}
}
if (serverId != null) {
CmsContextMenuButton menuButton = new CmsContextMenuButton(
serverId,
new CmsDialogContextMenuHandler(),
AdeContext.resourceinfo);
menuButton.addStyleName(I_CmsLayoutBundle.INSTANCE.listItemWidgetCss().permaVisible());
formFieldPanel.getInfoWidget().addButton(menuButton);
}
getForm().setWidget(formFieldPanel);
formFieldPanel.addStyleName(I_CmsInputLayoutBundle.INSTANCE.inputCss().formGradientBackground());
I_CmsFormSubmitHandler submitHandler = new I_CmsFormSubmitHandler() {
/**
* @see org.opencms.gwt.client.ui.input.form.I_CmsFormSubmitHandler#onSubmitForm(org.opencms.gwt.client.ui.input.form.CmsForm, java.util.Map, java.util.Set)
*/
public void onSubmitForm(
CmsForm formParam,
final Map fieldValues,
Set editedFields) {
submitForm(formParam, fieldValues, editedFields);
}
};
CmsDialogFormHandler formHandler = new CmsDialogFormHandler();
formHandler.setSubmitHandler(submitHandler);
getForm().setFormHandler(formHandler);
formHandler.setDialog(this);
renderSettingsForm(
m_elementBean.getSettingConfig(m_containerId),
m_elementBean.getFormatterConfig(m_containerId).getNestedFormatterPrefixes());
}
/**
* @see org.opencms.gwt.client.ui.input.form.CmsFormDialog#center()
*/
@Override
public void center() {
show();
}
/**
* @see org.opencms.gwt.client.ui.input.form.I_CmsFormWidgetMultiFactory#createFormWidget(java.lang.String, java.util.Map, com.google.common.base.Optional)
*/
public I_CmsFormWidget createFormWidget(
String key,
Map widgetParams,
Optional defaultValue) {
if (CmsSelectBox.WIDGET_TYPE.equals(key) || CmsSelectComboBox.WIDGET_TYPE.equals(key)) {
if ((defaultValue != null) && defaultValue.isPresent() && widgetParams.containsKey(defaultValue.get())) {
key = key + CmsSelectBox.NOTNULL_SUFFIX;
}
Map newParams = new HashMap<>();
newParams.putAll(widgetParams);
newParams.put(CmsSelectBox.OPTION_RESIZABLE, "false");
widgetParams = newParams;
}
return CmsWidgetFactoryRegistry.instance().createFormWidget(key, widgetParams, defaultValue);
}
/**
* @see com.google.gwt.user.client.ui.PopupPanel#setPopupPosition(int, int)
*/
@Override
public void setPopupPosition(int left, int top) {
// positioning handled via CSS
}
/**
* @see org.opencms.gwt.client.ui.input.form.CmsFormDialog#show()
*/
@Override
public void show() {
super.show();
// positioning handled by CSS
getElement().getStyle().clearPosition();
getElement().getStyle().clearLeft();
getElement().getStyle().clearTop();
}
/**
* Returns if the template context has been changed.
*
* @return true
if the template context has been changed
*/
boolean isTemplateContextChanged() {
return m_changedContext;
}
/**
* Handles the formatter selection changes.
*
* @param formatterId the formatter id
*/
void onFormatterChange(String formatterId) {
m_formatter = formatterId;
CmsFormatterConfig config = m_elementBean.getFormatters().get(m_containerId).get(formatterId);
renderSettingsForm(config.getSettingConfig(), config.getNestedFormatterPrefixes());
}
/**
* Renders the settings form.
*
* @param settingsConfig the settings configuration
* @param nestedFormatterPrefixes the nested formatter prefixes
*/
void renderSettingsForm(
Map settingsConfig,
Map nestedFormatterPrefixes) {
Map presets = m_presets;
if (presets == null) {
presets = new HashMap();
}
List groups = new ArrayList(getForm().getGroups());
for (String group : groups) {
getForm().removeGroup(group);
}
CmsFieldsetFormFieldPanel formFieldPanel = null;
if (getForm().getWidget() instanceof CmsFieldsetFormFieldPanel) {
formFieldPanel = ((CmsFieldsetFormFieldPanel)getForm().getWidget());
}
if ((formFieldPanel != null) && (nestedFormatterPrefixes != null) && !nestedFormatterPrefixes.isEmpty()) {
for (Entry entry : nestedFormatterPrefixes.entrySet()) {
CmsFieldSet fieldSet = new CmsFieldSet();
fieldSet.setLegend(entry.getValue());
fieldSet.getElement().getStyle().setMarginTop(10, Style.Unit.PX);
formFieldPanel.addGroupFieldSet(entry.getKey(), fieldSet);
}
}
// using LinkedHashMap to preserve the order
Map formFields = new LinkedHashMap();
for (CmsXmlContentProperty propConfig : settingsConfig.values()) {
if (m_presets.containsKey(propConfig.getName())) {
// settings configured as presets on the container are not user-editable
continue;
}
CmsBasicFormField currentField = CmsBasicFormField.createField(
propConfig,
propConfig.getName(),
this,
Collections. emptyMap(),
false);
formFields.put(propConfig.getName(), currentField);
}
for (I_CmsFormField field : formFields.values()) {
String fieldId = field.getId();
CmsXmlContentProperty propDef = settingsConfig.get(fieldId);
// skip hidden fields
if (!CmsGwtConstants.HIDDEN_SETTINGS_WIDGET_NAME.equals(propDef.getWidget())) {
String initialValue = m_settings.get(fieldId);
if (initialValue == null) {
initialValue = propDef.getDefault();
}
String group = "";
if ((nestedFormatterPrefixes != null) && !nestedFormatterPrefixes.isEmpty()) {
for (String prefix : nestedFormatterPrefixes.keySet()) {
if (fieldId.startsWith(prefix)) {
group = prefix;
break;
}
}
}
getForm().addField(group, field, initialValue);
}
}
getForm().render();
}
/**
* Sets the template context changed flag.
* @param changed the template context changed flag
*/
void setTemplateContextChanged(boolean changed) {
m_changedContext = changed;
}
/**
* Submits the settings form.
*
* @param formParam the form
* @param fieldValues the field values
* @param editedFields the changed fields
*/
void submitForm(CmsForm formParam, final Map fieldValues, Set editedFields) {
String modelGroupId = null;
if (CmsInheritanceContainerEditor.getInstance() != null) {
CmsInheritanceContainerEditor.getInstance().onSettingsEdited();
}
if (m_contextsWidget != null) {
String newTemplateContexts = m_contextsWidget.getFormValueAsString();
if ((newTemplateContexts == null) || "".equals(newTemplateContexts)) {
newTemplateContexts = CmsTemplateContextInfo.EMPTY_VALUE;
// translate an empty selection to "none"
}
fieldValues.put(CmsTemplateContextInfo.SETTING, newTemplateContexts);
}
final boolean hasFormatterChanges;
if (m_formatterSelect != null) {
fieldValues.put(
CmsFormatterConfig.getSettingsKeyForContainer(m_containerId),
m_formatterSelect.getFormValueAsString());
hasFormatterChanges = true;
} else {
hasFormatterChanges = false;
if (m_originalFormatter != null) {
// in case there is only 1 formatter, we still want to send the formatter key to the server to avoid cases
// where the element is removed because no default formatter can be found in the active sitemap config.
fieldValues.put(CmsFormatterConfig.getSettingsKeyForContainer(m_containerId), m_originalFormatter);
}
}
if (m_createNewCheckBox != null) {
m_elementWidget.setCreateNew(m_createNewCheckBox.isChecked());
fieldValues.put(CmsContainerElement.CREATE_AS_NEW, Boolean.toString(m_createNewCheckBox.isChecked()));
}
if (m_modelGroupSelect != null) {
GroupOption group = GroupOption.valueOf(m_modelGroupSelect.getFormValueAsString());
switch (group) {
case disabled:
fieldValues.put(CmsContainerElement.MODEL_GROUP_STATE, ModelGroupState.noGroup.name());
fieldValues.put(CmsContainerElement.USE_AS_COPY_MODEL, Boolean.toString(false));
break;
case copy:
fieldValues.put(CmsContainerElement.MODEL_GROUP_STATE, ModelGroupState.isModelGroup.name());
fieldValues.put(CmsContainerElement.USE_AS_COPY_MODEL, Boolean.toString(true));
break;
case reuse:
fieldValues.put(CmsContainerElement.MODEL_GROUP_STATE, ModelGroupState.isModelGroup.name());
fieldValues.put(CmsContainerElement.USE_AS_COPY_MODEL, Boolean.toString(false));
break;
default:
break;
}
if (group != GroupOption.disabled) {
modelGroupId = CmsContainerpageController.getServerId(m_elementBean.getClientId());
}
}
if ((m_modelGroupBreakUp != null) && m_modelGroupBreakUp.isChecked()) {
fieldValues.put(CmsContainerElement.MODEL_GROUP_STATE, ModelGroupState.noGroup.name());
}
final Map filteredFieldValues = new HashMap();
for (Map.Entry entry : fieldValues.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if ((value != null) && (value.length() > 0)) {
filteredFieldValues.put(key, value);
}
}
final String changeModelGroupId = modelGroupId;
I_ReloadHandler reloadHandler = new I_ReloadHandler() {
CmsContainerPageElementPanel m_oldElement;
CmsContainerPageElementPanel m_newElement;
@Override
public void finish() {
if (isTemplateContextChanged()) {
// if the context multiselect box isn't displayed, of course it can't change values,
// and this code won't be executed.
CmsContainerpageController.get().handleChangeTemplateContext(
m_newElement,
filteredFieldValues.get(CmsTemplateContextInfo.SETTING));
}
if (hasFormatterChanges) {
updateCss();
}
if (m_newElement.getElement().getInnerHTML().contains(CmsGwtConstants.FORMATTER_RELOAD_MARKER)
&& !CmsContainerpageController.get().isGroupcontainerEditing()) {
CmsContainerpageController.get().reloadPage();
}
if (m_modelGroupSelect != null) {
m_controller.setModelGroupElementId(changeModelGroupId);
}
m_controller.sendElementEditedSettings(m_newElement, m_oldElement);
}
@Override
public void onReload(CmsContainerPageElementPanel oldElement, CmsContainerPageElementPanel newElement) {
m_oldElement = oldElement;
m_newElement = newElement;
}
} ;
m_controller.reloadElementWithSettings(
m_elementWidget,
m_elementBean.getClientId(),
filteredFieldValues,
reloadHandler);
}
/**
* Updates the CSS resources for the selected formatter.
*/
void updateCss() {
String formatterId = m_formatterSelect.getFormValueAsString();
CmsFormatterConfig formatter = m_elementBean.getFormatters().get(m_containerId).get(formatterId);
Set cssResources = formatter.getCssResources();
for (String cssResource : cssResources) {
CmsDomUtil.ensureStyleSheetIncluded(cssResource);
}
if (formatter.hasInlineCss()) {
ensureInlineCss(formatterId, formatter.getInlineCss());
}
}
/**
* Adds the create new checkbox to the given field set.
*
* @param elementBean the element bean
* @param fieldSet the field set
*/
private void addCreateNewCheckbox(CmsContainerElementData elementBean, CmsFieldSet fieldSet) {
m_createNewCheckBox = new CmsCheckBox(Messages.get().key(Messages.GUI_CREATE_NEW_LABEL_0));
m_createNewCheckBox.setDisplayInline(false);
m_createNewCheckBox.getElement().getStyle().setMarginTop(7, Style.Unit.PX);
m_createNewCheckBox.setChecked(elementBean.isCreateNew());
fieldSet.add(m_createNewCheckBox);
}
/**
* Adds the model group settings fields to the given field set.
*
* @param elementBean the element bean
* @param elementWidget the element widget
* @param fieldSet the field set
*/
private void addModelGroupSettings(
CmsContainerElementData elementBean,
CmsContainerPageElementPanel elementWidget,
CmsFieldSet fieldSet) {
Map groupOptions = new LinkedHashMap();
groupOptions.put(GroupOption.disabled.name(), GroupOption.disabled.getLabel());
groupOptions.put(GroupOption.copy.name(), GroupOption.copy.getLabel());
groupOptions.put(GroupOption.reuse.name(), GroupOption.reuse.getLabel());
m_modelGroupSelect = new CmsSelectBox(groupOptions);
if (elementWidget.isModelGroup()) {
if (Boolean.valueOf(elementBean.getSettings().get(CmsContainerElement.USE_AS_COPY_MODEL)).booleanValue()) {
m_modelGroupSelect.selectValue(GroupOption.copy.name());
} else {
m_modelGroupSelect.selectValue(GroupOption.reuse.name());
}
}
CmsFormRow selectRow = new CmsFormRow();
selectRow.getLabel().setText(Messages.get().key(Messages.GUI_USE_AS_MODEL_GROUP_LABEL_0));
selectRow.getWidgetContainer().add(m_modelGroupSelect);
fieldSet.add(selectRow);
}
/**
* Ensures the CSS snippet with the given ID is present.
*
* @param formatterId the ID
* @param cssContent the CSS snippet
*/
private native void ensureInlineCss(String formatterId, String cssContent)/*-{
var styles = $wnd.document.styleSheets;
for (var i = 0; i < styles.length; i++) {
// IE uses the owningElement property
var styleNode = styles[i].owningElement ? styles[i].owningElement
: styles[i].ownerNode;
if (styleNode != null && styleNode.rel == formatterId) {
// inline css is present
return;
}
}
// include inline css into head
var headID = $wnd.document.getElementsByTagName("head")[0];
var cssNode = $wnd.document.createElement('style');
cssNode.type = 'text/css';
cssNode.rel = formatterId;
if (cssNode.styleSheet) {
// in case of IE
cssNode.styleSheet.cssText = cssContent;
} else {
// otherwise
cssNode.appendChild(document.createTextNode(cssContent));
}
headID.appendChild(cssNode);
}-*/;
}