sk.drunkenpanda.leaflet.Leaflet.java Source code

Java tutorial

Introduction

Here is the source code for sk.drunkenpanda.leaflet.Leaflet.java

Source

/*
 * Copyright 2014 Jan Ferko.
 *
 * 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 sk.drunkenpanda.leaflet;

import de.agilecoders.wicket.webjars.WicketWebjars;
import org.apache.wicket.Application;
import org.apache.wicket.MetaDataKey;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.util.lang.Args;

/**
 * Bootstrapping class of Wicket Leaflet.
 * It properly adds Leaflet resources to application based on {@link LeafletSettings}.
 * If settings aren't provided default settings are used.
 * Wicket Leaflet uses WebJars for managing Leaflet.js resources.
 * If you don't want to use WebJars, you can use local or CDN resources by setting
 * all {@link org.apache.wicket.request.resource.ResourceReference}s int settings or by setting {@link LeafletSettings#useCDN() }
 * to {@code true}.
 *
 * Library also appends resources automatically to all pages if {@link LeafletSettings#autoAppendResources() }
 * is {@code true}, otherwise client has to add resources to every component.
 *
 * @author Jan Ferko
 */
public final class Leaflet {

    /** Meta key, that is used to identify stored settings in application. */
    static final MetaDataKey<LeafletSettings> LEAFLET_SETTINGS_KEY = new MetaDataKey<LeafletSettings>() {
    };

    private Leaflet() {
        throw new UnsupportedOperationException();
    }

    /**
     * Installs Leaflet with default configuration to given application.
     * @param application application, which Leaflet should be bounded to.
     * @throws IllegalArgumentException if application is {@code null}.
     * @see #install(org.apache.wicket.protocol.http.WebApplication, sk.drunkenpanda.leaflet.LeafletSettings)
     */
    public static void install(WebApplication application) {
        install(application, null);
    }

    /**
     * Install Leaflet with given settings to application.
     * If application already has Leaflet installed, it ignores new settings.
     *
     * @param application application, which Leaflet should be bounded to.
     * @param settings custom settings, which are used to initialized library
     * @throws IllegalArgumentException if application is {@code null}.
     */
    public static void install(WebApplication application, LeafletSettings settings) {
        // install Leaflet.js with given configuration
        Args.notNull(application, "application");

        if (application.getMetaData(LEAFLET_SETTINGS_KEY) == null) {
            LeafletSettings settingsOrDefault = settings != null ? settings : new DefaultLeafletSettings();
            application.setMetaData(LEAFLET_SETTINGS_KEY, settingsOrDefault);

            if (settingsOrDefault.autoAppendResources()) {
                application.getComponentInstantiationListeners().add(new LeafletResourceAppender());
            }

            if (settingsOrDefault.useWebJars()) {
                WicketWebjars.install(application);
            }
        }
    }

    /**
     * Returns Leaflet settings of given application.
     *
     * @param application application, which setting are retrieved
     * @return leaflet settings of application
     * @throws IllegalArgumentException if application is {@code null}
     * @throws IllegalStateException if Leaflet is not installed in application
     */
    public static LeafletSettings getSettings(Application application) {
        // get settings by MetaKey
        Args.notNull(application, "application");
        LeafletSettings settings = application.getMetaData(LEAFLET_SETTINGS_KEY);

        if (settings == null) {
            throw new IllegalStateException(
                    "Leaflets aren't installed in application [" + application.getName() + "].");
        }

        return settings;
    }

    /**
     * Returns settings of application, that belongs to current thread.
     *
     * @return settings of application in current thread
     * @throws IllegalStateException if there isn't any application in current thread
     */
    public static LeafletSettings getSettings() {
        // get settings for application in current thread
        if (Application.exists()) {
            Application app = Application.get();
            return getSettings(app);
        }
        throw new IllegalStateException("Application was not found in current thread");
    }

}