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