org.devgateway.eudevfin.ui.common.components.DetailedHelpControlGroup.java Source code

Java tutorial

Introduction

Here is the source code for org.devgateway.eudevfin.ui.common.components.DetailedHelpControlGroup.java

Source

/*******************************************************************************
 * Copyright (c) 2014 Development Gateway.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 *******************************************************************************/
/**
 * 
 */
package org.devgateway.eudevfin.ui.common.components;

import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.string.Strings;

import de.agilecoders.wicket.core.markup.html.bootstrap.form.ControlGroup;
import de.agilecoders.wicket.core.markup.html.bootstrap.image.Icon;
import de.agilecoders.wicket.core.markup.html.bootstrap.image.IconType;
import de.agilecoders.wicket.core.util.Components;

/**
 * @author mihai Extends the {@link ControlGroup} to add a detailed help message
 *         and a plus {@link Icon} When clicked, the plus icon shows the
 *         detailed help
 */
public class DetailedHelpControlGroup extends ControlGroup implements PreviewableFormPanelAware {

    private static final long serialVersionUID = 8319422629214281685L;
    protected final Component detailedHelp;
    protected final Icon detailedHelpIcon;

    /**
     * @param id
     * @param label
     * @param help
     * @param detailedHelp
     */
    public DetailedHelpControlGroup(String id, IModel<String> label, IModel<String> help,
            IModel<String> detailedHelp) {
        super(id, label, help);
        this.detailedHelp = newHelpLabel("detailedHelp", detailedHelp).setOutputMarkupId(true).setVisible(false);
        this.detailedHelpIcon = (Icon) new Icon("detailedHelpIcon", IconType.plussign);
        this.detailedHelpIcon.add(new AjaxEventBehavior("onclick") {
            private static final long serialVersionUID = 8263043282265678656L;

            protected void onEvent(AjaxRequestTarget target) {
                DetailedHelpControlGroup.this.detailedHelp
                        .setVisible(!DetailedHelpControlGroup.this.detailedHelp.isVisible());
                DetailedHelpControlGroup.this.detailedHelpIcon
                        .setType(DetailedHelpControlGroup.this.detailedHelp.isVisible() ? IconType.minussign
                                : IconType.plussign);
                target.add(DetailedHelpControlGroup.this);
            }
        });

        addToBorder(this.detailedHelp);
        addToBorder(this.detailedHelpIcon);
    }

    @Override
    protected void onConfigure() {
        super.onConfigure();
        Components.hideIfModelIsEmpty(detailedHelp);
        if (isFormInPreview()) {
            detailedHelp.setVisible(false);
            get("help").setVisible(false); //why make field private, why why :(
        }
        detailedHelpIcon.setVisible(
                (isFormInPreview() || Strings.isEmpty((String) detailedHelp.getDefaultModelObject())) ? false
                        : true);
    }

    @Override
    public boolean isFormInPreview() {
        return ((PreviewableFormPanelAware) this.getParent()).isFormInPreview();
    }

}