Package org.onebusaway.webapp.gwt.common.resources.map

Source Code of org.onebusaway.webapp.gwt.common.resources.map.StopIconFactory

/**
* Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org>
*
* 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.onebusaway.webapp.gwt.common.resources.map;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.onebusaway.transit_data.model.RouteBean;
import org.onebusaway.transit_data.model.StopBean;

import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.maps.client.geom.Point;
import com.google.gwt.maps.client.geom.Size;
import com.google.gwt.maps.client.overlay.Icon;
import com.google.gwt.maps.client.overlay.Marker;
import com.google.gwt.maps.client.overlay.MarkerOptions;
import com.google.gwt.resources.client.ImageResource;

public class StopIconFactory {

  public enum ESize {
    TINY, SMALL, MEDIUM, LARGE
  };

  public enum EType {
    BUS, LIGHT_RAIL, RAIL, FERRY
  }

  private static MapResources _r = MapResources.INSTANCE;

  private static Map<String, IconInfo> _iconsByType = new HashMap<String, IconInfo>();

  static {

    String[] directions = {"", "N", "NE", "E", "SE", "S", "SW", "W", "NW"};
    IconInfo tinyBusInfo = new IconInfo(_r.getIconBus10());
    IconInfo smallBusInfo = new IconInfo(_r.getIconBus14());

    IconInfo lightRail10 = new IconInfo(_r.getIconLightRail10());
    IconInfo lightRail14 = new IconInfo(_r.getIconLightRail14());
    IconInfo lightRail17 = new IconInfo(_r.getIconLightRail17());
    IconInfo lightRail22 = new IconInfo(_r.getIconLightRail22());

    IconInfo rail10 = new IconInfo(_r.getIconRail10());
    IconInfo rail14 = new IconInfo(_r.getIconRail14());
    IconInfo rail17 = new IconInfo(_r.getIconRail17());
    IconInfo rail22 = new IconInfo(_r.getIconRail22());

    IconInfo ferry10 = new IconInfo(_r.getIconFerry10());
    IconInfo ferry14 = new IconInfo(_r.getIconFerry14());
    IconInfo ferry17 = new IconInfo(_r.getIconFerry17());
    IconInfo ferry22 = new IconInfo(_r.getIconFerry22());

    // For the super tiny icons, we use the same icon for all directions and
    // vehicle types
    for (String direction : directions) {

      putIconInfo(ESize.TINY, EType.BUS, direction, tinyBusInfo);
      putIconInfo(ESize.SMALL, EType.BUS, direction, smallBusInfo);

      putIconInfo(ESize.TINY, EType.LIGHT_RAIL, direction, lightRail10);
      putIconInfo(ESize.SMALL, EType.LIGHT_RAIL, direction, lightRail14);
      putIconInfo(ESize.MEDIUM, EType.LIGHT_RAIL, direction, lightRail17);
      putIconInfo(ESize.LARGE, EType.LIGHT_RAIL, direction, lightRail22);

      putIconInfo(ESize.TINY, EType.RAIL, direction, rail10);
      putIconInfo(ESize.SMALL, EType.RAIL, direction, rail14);
      putIconInfo(ESize.MEDIUM, EType.RAIL, direction, rail17);
      putIconInfo(ESize.LARGE, EType.RAIL, direction, rail22);

      putIconInfo(ESize.TINY, EType.FERRY, direction, ferry10);
      putIconInfo(ESize.SMALL, EType.FERRY, direction, ferry14);
      putIconInfo(ESize.MEDIUM, EType.FERRY, direction, ferry17);
      putIconInfo(ESize.LARGE, EType.FERRY, direction, ferry22);
    }

    putIconInfo(ESize.MEDIUM, EType.BUS, "", _r.getIconBus17());
    putIconInfo(ESize.MEDIUM, EType.BUS, "N", _r.getIconBus17North());
    putIconInfo(ESize.MEDIUM, EType.BUS, "S", _r.getIconBus17South());
    putIconInfo(ESize.MEDIUM, EType.BUS, "E", _r.getIconBus17East());
    putIconInfo(ESize.MEDIUM, EType.BUS, "W", _r.getIconBus17West());
    putIconInfo(ESize.MEDIUM, EType.BUS, "NE", _r.getIconBus17NorthEast());
    putIconInfo(ESize.MEDIUM, EType.BUS, "SE", _r.getIconBus17SouthEast());
    putIconInfo(ESize.MEDIUM, EType.BUS, "NW", _r.getIconBus17NorthWest());
    putIconInfo(ESize.MEDIUM, EType.BUS, "SW", _r.getIconBus17SouthWest());

    putIconInfo(ESize.LARGE, EType.BUS, "", _r.getIconBus22());
    putIconInfo(ESize.LARGE, EType.BUS, "N", _r.getIconBus22North());
    putIconInfo(ESize.LARGE, EType.BUS, "S", _r.getIconBus22South());
    putIconInfo(ESize.LARGE, EType.BUS, "E", _r.getIconBus22East());
    putIconInfo(ESize.LARGE, EType.BUS, "W", _r.getIconBus22West());
    putIconInfo(ESize.LARGE, EType.BUS, "NE", _r.getIconBus22NorthEast());
    putIconInfo(ESize.LARGE, EType.BUS, "SE", _r.getIconBus22SouthEast());
    putIconInfo(ESize.LARGE, EType.BUS, "NW", _r.getIconBus22NorthWest());
    putIconInfo(ESize.LARGE, EType.BUS, "SW", _r.getIconBus22SouthWest());
  }

  public static Icon getRouteStartIcon() {
    return getRouteIcon(_r.getImageRouteStart().getUrl());
  }

  public static Icon getRouteEndIcon() {
    return getRouteIcon(_r.getImageRouteEnd().getUrl());
  }

  public static Marker getStopSelectionCircle(LatLng p, boolean bigger) {
    ImageResource resource = bigger ? _r.getSelectionCircle36()
        : _r.getSelectionCircle30();

    Icon icon = Icon.newInstance();
    icon.setImageURL(resource.getURL());

    int w = resource.getWidth();
    int h = resource.getHeight();
    int w2 = w / 2;
    int h2 = h / 2;

    icon.setIconSize(Size.newInstance(w, h));
    icon.setIconAnchor(Point.newInstance(w2, h2));
    icon.setInfoWindowAnchor(Point.newInstance(w2, h2));

    MarkerOptions options = MarkerOptions.newInstance(icon);
    return new Marker(p, options);
  }

  public static Icon getStopIcon(StopBean stop, ESize size, boolean isSelected) {
    EType type = getStopType(stop);
    String direction = stop.getDirection();
    if (direction == null)
      direction = "";
    IconInfo info = getIconInfo(size, type, direction);
    return info.getIcon(isSelected);
  }

  public static EType getStopType(StopBean stop) {
    Set<Integer> types = new HashSet<Integer>();
    for (RouteBean route : stop.getRoutes())
      types.add(route.getType());

    // Ferry takes precedent
    if (types.contains(4))
      return EType.FERRY;
    // Followed by heavy rail
    else if (types.contains(2))
      return EType.RAIL;
    // Followed by light-rail
    else if (types.contains(0))
      return EType.LIGHT_RAIL;
    // Bus by default
    else
      return EType.BUS;
  }

  /*****
   * Private Methods
   ****/

  private static Icon getRouteIcon(String url) {
    Icon icon = Icon.newInstance();
    icon.setImageURL(url);
    icon.setIconSize(Size.newInstance(20, 34));
    icon.setIconAnchor(Point.newInstance(10, 34));
    return icon;
  }

  private static void putIconInfo(ESize size, EType type, String direction,
      ImageResource resource) {
    putIconInfo(size, type, direction, new IconInfo(resource));
  }

  private static void putIconInfo(ESize size, EType type, String direction,
      IconInfo info) {
    String key = key(size, type, direction);
    _iconsByType.put(key, info);
  }

  private static IconInfo getIconInfo(ESize size, EType type, String direction) {
    String key = key(size, type, direction);
    return _iconsByType.get(key);
  }

  private static String key(ESize size, EType type, String direction) {
    return size.toString() + "-" + type + "-" + direction;
  }

  private static class IconInfo {

    private ImageResource _resource;

    public IconInfo(ImageResource resource) {
      _resource = resource;
    }

    public Icon getIcon(boolean isSelected) {

      Icon icon = Icon.newInstance();

      icon.setImageURL(_resource.getURL());

      int w = _resource.getWidth();
      int h = _resource.getHeight();
      int w2 = w / 2;
      int h2 = h / 2;

      icon.setIconSize(Size.newInstance(w, h));
      icon.setIconAnchor(Point.newInstance(w2, h2));
      icon.setInfoWindowAnchor(Point.newInstance(w2, h2));
      if (isSelected) {
        // icon.setShadowURL(r.getImageSelectedStop().getUrl());
        // icon.setShadowSize(Size.newInstance(22, 21));
      }

      return icon;
    }
  }

}
TOP

Related Classes of org.onebusaway.webapp.gwt.common.resources.map.StopIconFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.