/** * */ package com.ibg.dexter.plugin.node.tilepage.admin; import org.apache.wicket.Component; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextArea; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.PropertyModel; import com.ibg.codepress.CodePressEnabler; import com.ibg.dexter.jcr.api.JcrNode; import com.ibg.dexter.jcr.model.NodeModel; import com.ibg.dexter.plugin.node.tilepage.TileContainerNode; import com.ibg.dexter.web.ContainerFeedbackPanel; import com.ibg.dexter.web.admin.NodeManagerPanel; import com.ibg.dexter.web.model.ModelBuffer; import com.ibg.dexter.web.util.validators.NodePathValidator; import com.ibg.tinymce.TinyMceEnabler; class PropertiesPanel extends NodeManagerPanel { private boolean codeEditorEnabled = true; private boolean wysiwygEditorEnabled = false; ModelBuffer adapter; private IModel forProperty(String propertyName) { IModel containerNodeModel = new LoadableDetachableModel() { @Override protected Object load() { return TileContainerNode.forNode(getNode()); } }; return adapter.wrap(new PropertyModel(containerNodeModel, propertyName)); } public PropertiesPanel(String id, final NodeModel nodeModel) { super(id, nodeModel); Form form = new Form("form"); add(form); adapter = new ModelBuffer(); form.add(new TextField("title", forProperty("title"))); form.add(new TextField("template", forProperty("templatePath")).add(new NodePathValidator(nodeModel))); form.add(new CheckBox("requiresSSL", forProperty("requiresSSL"))); TextArea content = new TextArea("content", forProperty("dataAsString")); form.add(content); content.add(new CodePressEnabler("html", true) { @Override public boolean isEnabled(Component component) { return codeEditorEnabled; } }); content.add(new TinyMceEnabler() { @Override public boolean isEnabled(Component component) { return wysiwygEditorEnabled; } }); form.add(new ContainerFeedbackPanel("feedback", this)); form.add(new DisableEditorsButton("disable-editors")); form.add(new EnableCodeEditorButton("enable-code-editor")); form.add(new EnableWysiwygEditorButton("enable-wysiwig-editor")); form.add(new Button("save") { @Override public void onSubmit() { JcrNode node = nodeModel.getObject(); node.checkout(); adapter.apply(); node.save(); node.checkin(); } }); } private class EnableCodeEditorButton extends Button { public EnableCodeEditorButton(String id) { super(id); setDefaultFormProcessing(false); } @Override public void onSubmit() { codeEditorEnabled = true; wysiwygEditorEnabled = false; } @Override public boolean isEnabled() { return codeEditorEnabled == false; } } private class EnableWysiwygEditorButton extends Button { public EnableWysiwygEditorButton(String id) { super(id); setDefaultFormProcessing(false); } @Override public void onSubmit() { codeEditorEnabled = false; wysiwygEditorEnabled = true; } @Override public boolean isEnabled() { return wysiwygEditorEnabled == false; } } private class DisableEditorsButton extends Button { public DisableEditorsButton(String id) { super(id); setDefaultFormProcessing(false); } @Override public void onSubmit() { codeEditorEnabled = false; wysiwygEditorEnabled = false; } @Override public boolean isEnabled() { return wysiwygEditorEnabled == true || codeEditorEnabled == true; } } }