All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wicketstuff.gmap.api.GMarker Maven / Gradle / Ivy

The newest version!
/*
 * 
 * ==============================================================================
 * 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 org.wicketstuff.gmap.api;

import static org.apache.wicket.ThreadContext.getRequestCycle;

import java.util.Optional;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.cycle.RequestCycle;
import org.wicketstuff.gmap.js.Constructor;

/**
 * Represents an Google Maps API's GMarker.
 */
public class GMarker extends GOverlay
{

    private static final long serialVersionUID = 1L;
    private final GMarkerOptions options;

    public GMarker(GMarkerOptions options)
    {
        super();
        this.options = options;
    }
    
    public GMarker(String id, GMarkerOptions options)
    {
        super(id);
        this.options = options;
    }

    public GLatLng getLatLng()
    {
        return options.getLatLng();
    }

    public GMarkerOptions getMarkerOptions()
    {
        return options;
    }
    
    /**
     * Sets the animation type for this marker.
     * 
     * @param animation The animation which should be applied to this marker.
     * Pass NULL if you want to stop an ongoing animation.
     * 
     * @see org.wicketstuff.gmap.api.GAnimation
     */
    public void setAnimation(GAnimation animation)
    {
        Optional targetOptional = getRequestCycle().find(AjaxRequestTarget.class);
        targetOptional.ifPresent(target -> {
            options.setAnimation(animation);
            String animationToSet = null;
            if (animation != null)
            {
                animationToSet = animation.toString();
            }
            
            target.appendJavaScript(getParent().getJsReference() + ".overlays['overlay" + getId() + "'].setAnimation("+animationToSet+")");
        });
    }

    /**
     * @see GOverlay#getJSconstructor()
     */
    @Override
    public String getJSconstructor()
    {
        Constructor constructor = new Constructor("google.maps.Marker").add(options.getJSconstructor());
        return constructor.toJS();
    }

    /**
     * @see GOverlay#updateOnAjaxCall(org.apache.wicket.ajax.AjaxRequestTarget, GEvent)
     */
    @Override
    protected void updateOnAjaxCall(AjaxRequestTarget target, GEvent overlayEvent)
    {
        Request request = RequestCycle.get().getRequest();
        options.setLatLng(GLatLng.parse(request.getRequestParameters().getParameterValue("overlay.latLng").toString()));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy