com.francetelecom.clara.cloud.presentation.tools.FieldFeedbackDecorator.java Source code

Java tutorial

Introduction

Here is the source code for com.francetelecom.clara.cloud.presentation.tools.FieldFeedbackDecorator.java

Source

/**
 * Copyright (C) 2015 Orange
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.francetelecom.clara.cloud.presentation.tools;

import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.IFeedbackMessageFilter;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.request.Response;
import org.apache.wicket.util.string.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.validation.constraints.NotNull;
import java.lang.reflect.Field;

/**
 * Created by IntelliJ IDEA.
 * User: Thomas Escalle - tawe8231
 * Entity : FT/OLNC/RD/MAPS/MEP/MSE
 * Date: 13/10/11
 */
public class FieldFeedbackDecorator extends Behavior { // implements IAjaxRegionMarkupIdProvider {
    private static final long serialVersionUID = -4303340421879866940L;

    /**
     * Logger
     */
    private static final Logger logger = LoggerFactory.getLogger(FieldFeedbackDecorator.class.getName());

    public void bind(Component component) {
        component.setOutputMarkupId(true);
    }

    public void beforeRender(Component component) {
        FormComponent<?> fc = (FormComponent<?>) component;
        Response r = component.getResponse();

        String label = (fc.getLabel() != null) ? fc.getLabel().getObject() : null;
        if (label != null) {
            r.write("<span class=\"param\">");
            r.write("<label for=\"");
            r.write(fc.getMarkupId());
            r.write("\"");
            if (!fc.isValid()) {
                r.write(" class=\"error\"");
            }
            r.write(" />");
            r.write(Strings.escapeMarkup(label));
            r.write("</label>");
            r.write("</span>");

            NotNull clazz;

            try {
                Field field = fc.getForm().getModelObject().getClass().getDeclaredField(fc.getInputName());
                clazz = field.getAnnotation(NotNull.class);
            } catch (NoSuchFieldException e) {
                clazz = null;
            }

            if (clazz != null || fc.isRequired()) {
                r.write("<span class=\"required\" title=\"");
                r.write(fc.getString("portal.error.required.field.title"));
                r.write("\">");
                r.write(fc.getString("portal.required.field") + "</span>");
            } else {
                r.write("<span class=\"notrequired\"></span>");
            }
            r.write("<span class=\"value\">");

        }
        super.beforeRender(component);
    }

    @Override
    public void afterRender(Component component) {
        FormComponent<?> fc = (FormComponent<?>) component;
        Response r = component.getResponse();

        r.write("</span>");

        if (fc.hasFeedbackMessage()) {
            r.write("<span class=\"feedbackPanelTextField\">");

            IFeedbackMessageFilter filter = new ComponentFeedbackMessageFilter(component);

            for (FeedbackMessage message : fc.getFeedbackMessages().messages(filter)) {
                r.write("<span class=\"feedbackPanel");
                r.write(message.getLevelAsString().toUpperCase());
                r.write("\">");
                r.write(Strings.escapeMarkup(message.getMessage().toString()));
            }

            r.write("</span>");
        }
    }

    @Override
    public void onComponentTag(Component component, ComponentTag tag) {
        FormComponent<?> fc = (FormComponent<?>) component;
        if (!fc.isValid()) {
            String c1 = tag.getAttribute("class");
            if (c1 == null) {
                tag.put("class", "errorField");
            } else {
                tag.put("class", " errorField " + c1);
            }
        }
    }

}