rendered paste body/** * */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; } }}