gr.abiss.calipso.wicket.EditItemRenderingTemplatePanel.java Source code

Java tutorial

Introduction

Here is the source code for gr.abiss.calipso.wicket.EditItemRenderingTemplatePanel.java

Source

/*
 * Copyright (c) 2007 - 2010 Abiss.gr <info@abiss.gr>  
 *
 *  This file is part of Calipso, a software platform by www.Abiss.gr.
 *
 *  Calipso is free software: you can redistribute it and/or modify 
 *  it under the terms of the GNU Affero General Public License as published by 
 *  the Free Software Foundation, either version 3 of the License, or 
 *  (at your option) any later version.
 * 
 *  Calipso 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 Affero General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License 
 *  along with Calipso. If not, see http://www.gnu.org/licenses/agpl.html
 */

package gr.abiss.calipso.wicket;

import gr.abiss.calipso.domain.ItemRenderingTemplate;

import org.apache.log4j.Logger;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;

import wicket.contrib.tinymce.ajax.TinyMceAjaxSubmitModifier;
import wicket.contrib.tinymce.settings.ContextMenuPlugin;
import wicket.contrib.tinymce.settings.PastePlugin;
import wicket.contrib.tinymce.settings.TinyMCESettings;
import wicket.contrib.tinymce.settings.TinyMCESettings.Align;
import wicket.contrib.tinymce.settings.TinyMCESettings.EntityEncoding;
import wicket.contrib.tinymce.settings.TinyMCESettings.Location;

public abstract class EditItemRenderingTemplatePanel extends BasePanel {

    private static Logger log = Logger.getLogger(EditItemRenderingTemplatePanel.class);

    protected static final String BUTTON_SAVE = "save";
    protected static final String BUTTON_CANCEL = "cancel";
    private static TinyMCESettings settings;
    private ContextMenuPlugin contextMenuPlugin;

    public EditItemRenderingTemplatePanel(String id, final ModalWindow modalWindow,
            final ItemRenderingTemplate itemRenderingTemplate) {
        super(id);
        modalWindow.setInitialHeight(470);
        modalWindow.setInitialWidth(600);

        initTinyMce();
        log.info("itemRenderingTemplate: " + itemRenderingTemplate);

        Form<ItemRenderingTemplate> itemRenderingTemplateForm = new Form<ItemRenderingTemplate>(
                "itemRenderingTemplateForm",
                new CompoundPropertyModel<ItemRenderingTemplate>(itemRenderingTemplate));
        add(itemRenderingTemplateForm);
        FeedbackPanel itemRenderingTemplateFormFeedback = getFeedbackPanel("itemRenderingTemplateFormFeedback");
        itemRenderingTemplateForm.add(itemRenderingTemplateFormFeedback);

        // itemRenderingTemplate.getName().getDescription();
        setUpAndAdd(new RequiredTextField<String>("description"), itemRenderingTemplateForm);
        // itemRenderingTemplate.getPriority()
        setUpAndAdd(new RequiredTextField<String>("priority"), itemRenderingTemplateForm);
        // itemRenderingTemplate.getHideOverview()
        setUpAndAdd(new CheckBox("hideOverview"), itemRenderingTemplateForm);
        // itemRenderingTemplate.getHideHistory()
        setUpAndAdd(new CheckBox("hideHistory"), itemRenderingTemplateForm);
        // itemRenderingTemplate.getTemplateText()
        TextArea templateText = new TextArea<String>("templateText");
        // templateText.add(new TinyMceBehavior(settings));
        templateText.setMarkupId("templateText");
        templateText.setOutputMarkupId(true);
        setUpAndAdd(templateText, itemRenderingTemplateForm);

        itemRenderingTemplateForm
                .add(getSaveButton(modalWindow, itemRenderingTemplateForm, itemRenderingTemplateFormFeedback));
        itemRenderingTemplateForm.add(getCancelButton(modalWindow, itemRenderingTemplateForm));

    }

    public static TinyMCESettings getSettings() {
        initTinyMce();
        return settings;
    }

    private static void initTinyMce() {
        if (settings == null) {

            settings = new TinyMCESettings(TinyMCESettings.Theme.advanced);
            //contextMenuPlugin = new ContextMenuPlugin();
            //settings.register(contextMenuPlugin);
            settings.setToolbarLocation(Location.top);
            settings.setToolbarAlign(Align.left);
            // first toolbar
            //         SavePlugin savePlugin = new SavePlugin();
            //         settings.add(savePlugin.getSaveButton(), TinyMCESettings.Toolbar.first,
            //               TinyMCESettings.Position.before);
            //         settings.add(wicket.contrib.tinymce.settings.Button.newdocument,
            //               TinyMCESettings.Toolbar.first, TinyMCESettings.Position.before);
            //         settings.add(wicket.contrib.tinymce.settings.Button.separator,
            //               TinyMCESettings.Toolbar.first, TinyMCESettings.Position.before);
            //         settings.add(wicket.contrib.tinymce.settings.Button.fontselect,
            //               TinyMCESettings.Toolbar.first, TinyMCESettings.Position.after);
            //         settings.add(wicket.contrib.tinymce.settings.Button.fontsizeselect,
            //               TinyMCESettings.Toolbar.first, TinyMCESettings.Position.after);

            // second toolbar
            PastePlugin pastePlugin = new PastePlugin();
            //         SearchReplacePlugin searchReplacePlugin = new SearchReplacePlugin();
            //         DateTimePlugin dateTimePlugin = new DateTimePlugin();
            //         dateTimePlugin.setDateFormat("Date: %m-%d-%Y");
            //         dateTimePlugin.setTimeFormat("Time: %H:%M");
            //         PreviewPlugin previewPlugin = new PreviewPlugin();
            settings.setEntityEncoding(EntityEncoding.raw);
            settings.add(wicket.contrib.tinymce.settings.Button.cut, TinyMCESettings.Toolbar.first,
                    TinyMCESettings.Position.before);
            settings.add(wicket.contrib.tinymce.settings.Button.copy, TinyMCESettings.Toolbar.first,
                    TinyMCESettings.Position.before);
            settings.add(pastePlugin.getPasteButton(), TinyMCESettings.Toolbar.first,
                    TinyMCESettings.Position.before);
            settings.add(pastePlugin.getPasteTextButton(), TinyMCESettings.Toolbar.first,
                    TinyMCESettings.Position.before);
            settings.add(pastePlugin.getPasteWordButton(), TinyMCESettings.Toolbar.first,
                    TinyMCESettings.Position.before);
            settings.add(wicket.contrib.tinymce.settings.Button.separator, TinyMCESettings.Toolbar.first,
                    TinyMCESettings.Position.before);
            //         settings.add(searchReplacePlugin.getSearchButton(),
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.before);
            //         settings.add(searchReplacePlugin.getReplaceButton(),
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.before);
            //         settings.add(wicket.contrib.tinymce.settings.Button.separator,
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.before);
            //         settings.add(wicket.contrib.tinymce.settings.Button.separator,
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.after);
            //         settings.add(dateTimePlugin.getDateButton(),
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.after);
            //         settings.add(dateTimePlugin.getTimeButton(),
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.after);
            //         settings.add(wicket.contrib.tinymce.settings.Button.separator,
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.after);
            //         settings.add(previewPlugin.getPreviewButton(),
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.after);
            //         settings.add(wicket.contrib.tinymce.settings.Button.separator,
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.after);
            //         settings.add(wicket.contrib.tinymce.settings.Button.forecolor,
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.after);
            //         settings.add(wicket.contrib.tinymce.settings.Button.backcolor,
            //               TinyMCESettings.Toolbar.second, TinyMCESettings.Position.after);

            // third toolbar
            //         TablePlugin tablePlugin = new TablePlugin();
            //         EmotionsPlugin emotionsPlugin = new EmotionsPlugin();
            //         IESpellPlugin iespellPlugin = new IESpellPlugin();
            //         MediaPlugin mediaPlugin = new MediaPlugin();
            //         PrintPlugin printPlugin = new PrintPlugin();
            //FullScreenPlugin fullScreenPlugin = new FullScreenPlugin();
            //         DirectionalityPlugin directionalityPlugin = new DirectionalityPlugin();
            //         settings.add(tablePlugin.getTableControls(),
            //               TinyMCESettings.Toolbar.third, TinyMCESettings.Position.before);
            //         settings.add(emotionsPlugin.getEmotionsButton(),
            //               TinyMCESettings.Toolbar.third, TinyMCESettings.Position.after);
            //         settings.add(iespellPlugin.getIespellButton(),
            //               TinyMCESettings.Toolbar.third, TinyMCESettings.Position.after);
            //         settings.add(mediaPlugin.getMediaButton(),
            //               TinyMCESettings.Toolbar.third, TinyMCESettings.Position.after);
            //         settings.add(wicket.contrib.tinymce.settings.Button.separator,
            //               TinyMCESettings.Toolbar.third, TinyMCESettings.Position.after);
            //         settings.add(printPlugin.getPrintButton(),
            //               TinyMCESettings.Toolbar.third, TinyMCESettings.Position.after);
            //         settings.add(wicket.contrib.tinymce.settings.Button.separator,
            //               TinyMCESettings.Toolbar.third, TinyMCESettings.Position.after);
            //         settings.add(directionalityPlugin.getLtrButton(),
            //               TinyMCESettings.Toolbar.third, TinyMCESettings.Position.after);
            //         settings.add(directionalityPlugin.getRtlButton(),
            //               TinyMCESettings.Toolbar.third, TinyMCESettings.Position.after);
            //         settings.add(wicket.contrib.tinymce.settings.Button.separator,
            //               TinyMCESettings.Toolbar.first, TinyMCESettings.Position.after);
            //         settings.add(fullScreenPlugin.getFullscreenButton(),
            //               TinyMCESettings.Toolbar.first, TinyMCESettings.Position.after);

        }

    }

    /**
     * Implement to persist data on submit
     * 
     * @param target
     * @param form
     */
    protected abstract void persist(AjaxRequestTarget target, Form form);

    /**
     * just closes the window, override to actually persist
     * 
     * @param modalWindow
     * @param itemRenderingTemplateForm
     * @return
     */
    protected AjaxButton getSaveButton(final ModalWindow modalWindow,
            Form<ItemRenderingTemplate> itemRenderingTemplateForm, final FeedbackPanel feedbackPanel) {
        AjaxButton save = new IndicatingAjaxButton(BUTTON_SAVE, itemRenderingTemplateForm) {

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form form) {
                persist(target, form);
                if (target != null) {
                    target.prependJavaScript("removeEditors();");
                    modalWindow.close(target);
                }
            }

            @Override
            protected void onError(AjaxRequestTarget target, Form form) {
                if (target != null) {
                    target.addComponent(feedbackPanel);
                }
            }
        };
        save.add(new TinyMceAjaxSubmitModifier());
        return save;
    }

    protected AjaxButton getCancelButton(final ModalWindow modalWindow,
            Form<ItemRenderingTemplate> itemRenderingTemplateForm) {
        AjaxButton cancel = new AjaxButton(BUTTON_CANCEL, itemRenderingTemplateForm) {

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                if (target != null) {
                    target.prependJavaScript("removeEditors();");
                    modalWindow.close(target);
                }
            }

            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
            }

        };
        return cancel;
    }

    @Override
    public void renderHead(IHeaderResponse response) {
        TinyMCESettings.lazyLoadTinyMCEResource(response);
    }

}