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

it.tidalwave.geo.viewer.impl.DefaultGeoViewManager Maven / Gradle / Ivy

/***********************************************************************************************************************
 *
 * forceTen - open source geography
 * Copyright (C) 2007-2012 by Tidalwave s.a.s. (http://www.tidalwave.it)
 *
 ***********************************************************************************************************************
 *
 * 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.
 *
 ***********************************************************************************************************************
 *
 * WWW: http://forceten.tidalwave.it
 * SCM: https://bitbucket.org/tidalwave/forceten-src
 *
 **********************************************************************************************************************/
package it.tidalwave.geo.viewer.impl;

import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Provider;
import java.util.Collection;
import java.awt.Point;
import org.openide.util.Parameters;
import it.tidalwave.util.logging.Logger;
import it.tidalwave.geo.Coordinate;
import it.tidalwave.geo.Sector;
import it.tidalwave.geo.viewer.GeoViewProviderManager;
import it.tidalwave.geo.viewer.GeoViewManager;
import it.tidalwave.geo.viewer.role.InitialLocationProvider;
import it.tidalwave.geo.viewer.spi.GeoViewProvider;
import it.tidalwave.geo.viewer.ZoomLevel;

/***********************************************************************************************************************
 *
 * This implementation of {@link GeoViewManager} nostly delegates to the currently selectd {@link GeoViewProvider}.
 * 
 * @author  Fabrizio Giudici
 * @version $Id$
 *
 **********************************************************************************************************************/
public final class DefaultGeoViewManager implements GeoViewManager
  {
    private static final String CLASS = DefaultGeoViewManager.class.getName();
    private static final Logger logger = Logger.getLogger(CLASS);

    @Inject
    private Provider geoViewProviderManager;
    
    @Inject
    private Provider initialLocationProvider;

    /*******************************************************************************************************************
     *
     * {@inheritDoc}
     *
     ******************************************************************************************************************/
    @Override
    public void pan (final double x, final double y)
      {
        logger.fine("pan(%f, %f)", x, y);
        geoViewProviderManager.get().getSelectedGeoViewProvider().pan(x, y);
      }

    /*******************************************************************************************************************
     *
     * {@inheritDoc}
     *
     ******************************************************************************************************************/
    @Override
    public void setZoom (final int zoom) // FIXME: redo using ZoomLevel in place of the int
      {
        logger.fine("setZoom(%d)", zoom);
        geoViewProviderManager.get().getSelectedGeoViewProvider().setZoom(zoom);
      }

    /*******************************************************************************************************************
     *
     * {@inheritDoc}
     *
     ******************************************************************************************************************/
    @Override
    public int getZoom() // FIXME: redo using ZoomLevel in place of the int
      {
        return geoViewProviderManager.get().getSelectedGeoViewProvider().getZoom();
      }

    /*******************************************************************************************************************
     *
     * {@inheritDoc}
     *
     ******************************************************************************************************************/
    @Override
    @Nonnull
    public Point coordinateToPoint (final @Nonnull Coordinate coordinates)
      {
        logger.fine("coordinateToPoint(%s)", coordinates);
        Parameters.notNull("coordinates", coordinates);
        return geoViewProviderManager.get().getSelectedGeoViewProvider().coordinatesToPoint(coordinates);
      }

    /*******************************************************************************************************************
     *
     * {@inheritDoc}
     *
     ******************************************************************************************************************/
    @Override
    @Nonnull
    public Coordinate pointToCoordinate (final @Nonnull Point point)
      {
        logger.fine("pointToCoordinate(%s)", point);
        Parameters.notNull("point", point);
        return geoViewProviderManager.get().getSelectedGeoViewProvider().pointToCoordinates(point);
      }

    /*******************************************************************************************************************
     *
     * {@inheritDoc}
     *
     ******************************************************************************************************************/
    @Override
    public void fitView (final @Nonnull Collection coordinates,
                         final @Nonnull ZoomLevel defaultZoomLevel)
      {
        final int n = coordinates.size();
        logger.fine("fitView(%d coordinates, %s)", n, defaultZoomLevel);

        if (n == 0)
          {
            throw new IllegalArgumentException("Empty coordinates list");
          }

        if (n == 1)
          {
            final GeoViewProvider selectedGeoViewProvider = geoViewProviderManager.get().getSelectedGeoViewProvider();
            selectedGeoViewProvider.setCenterPosition(coordinates.iterator().next());
            setZoom(selectedGeoViewProvider.getZoomLevel(defaultZoomLevel));
          }

        else
          {
            fitView(new Sector(coordinates), defaultZoomLevel);
          }
      }

    /*******************************************************************************************************************
     *
     * {@inheritDoc}
     *
     ******************************************************************************************************************/
    @Override
    public void fitView (final @Nonnull Sector sector,
                         final @Nonnull ZoomLevel defaultZoomLevel)
      {
        logger.fine("fitView(%s, %s)", sector, defaultZoomLevel);
        final GeoViewProvider selectedGeoViewProvider = geoViewProviderManager.get().getSelectedGeoViewProvider();

        if (sector.isSingleCoordinate())
          {
            selectedGeoViewProvider.setCenterPosition(sector.getCenter());
            setZoom(selectedGeoViewProvider.getInitialZoomLevel());
          }
        else
          {
            selectedGeoViewProvider.fitView(sector);
          }
      }

    /*******************************************************************************************************************
     *
     * {@inheritDoc}
     *
     ******************************************************************************************************************/
    @Override
    public void centerOn (final @Nonnull Coordinate coordinates,
                          final @Nonnull ZoomLevel zoomLevel)
      {
        logger.fine("centerOn(%s, %s)", coordinates, zoomLevel);
        final GeoViewProvider selectedGeoViewProvider = geoViewProviderManager.get().getSelectedGeoViewProvider();
        selectedGeoViewProvider.setCenterPosition(coordinates);

        if (zoomLevel != null)
          {
            setZoom(selectedGeoViewProvider.getZoomLevel(zoomLevel));
          }
      }

    /*******************************************************************************************************************
     *
     *
     ******************************************************************************************************************/
    @PostConstruct
    @SuppressWarnings("PMD.UnusedPrivateMethod") @edu.umd.cs.findbugs.annotations.SuppressWarnings("UPM_UNCALLED_PRIVATE_METHOD")
    private void initialize()
      {
        logger.fine("initialize()");
        centerOn(initialLocationProvider.get().getInitialCoordinate(), ZoomLevel.COUNTRY);
      }
  }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy