de.alpharogroup.wicket.behaviors.datetime.CurrentDatetimeBehavior.java Source code

Java tutorial

Introduction

Here is the source code for de.alpharogroup.wicket.behaviors.datetime.CurrentDatetimeBehavior.java

Source

/**
 * Copyright (C) 2010 Asterios Raptis
 *
 * 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 de.alpharogroup.wicket.behaviors.datetime;

import java.util.HashMap;
import java.util.Map;

import org.apache.wicket.Application;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.wicket.util.template.PackageTextTemplate;
import org.apache.wicket.util.template.TextTemplate;

import lombok.NoArgsConstructor;

/**
 * This behavior adds the current time to a component.
 */
@NoArgsConstructor
public class CurrentDatetimeBehavior extends Behavior {

    /**
     * The serialVersionUID.
     */
    private static final long serialVersionUID = 1L;

    /**
     * The {@link org.apache.wicket.request.resource.ResourceReference} constant for the js-file
     * from the jquery-datetime-plugin.
     */
    public static final ResourceReference DATETIME_PLUGIN_REFERENCE = new JavaScriptResourceReference(
            CurrentDatetimeBehavior.class, "jquery-datetime-plugin.js");

    /** The component. */
    private Component component;

    /** The popupoverlay template. */
    private final TextTemplate datetimeTemplate = new PackageTextTemplate(CurrentDatetimeBehavior.class,
            "datetime-plugin.js.tmpl");

    /**
     * {@inheritDoc}
     */
    @Override
    public void bind(final Component component) {
        super.bind(component);
        this.component = component;
        this.component.setOutputMarkupId(true);
    }

    /**
     * Generate js.
     *
     * @param textTemplate
     *            the text template
     * @return the string
     */
    protected String generateJS(final TextTemplate textTemplate) {
        final Map<String, Object> variables = new HashMap<>();
        variables.put("componentId", this.component.getMarkupId());
        textTemplate.interpolate(variables);
        return textTemplate.asString();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void renderHead(final Component component, final IHeaderResponse response) {
        super.renderHead(component, response);
        response.render(JavaScriptHeaderItem
                .forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference()));
        response.render(JavaScriptHeaderItem.forReference(CurrentDatetimeBehavior.DATETIME_PLUGIN_REFERENCE));
        final String js = generateJS(datetimeTemplate);
        System.out.println(js);
        response.render(OnLoadHeaderItem.forScript(generateJS(datetimeTemplate)));
    }

}