TileMapServiceActivity.java :  » GWT » ghetto-maps » com » moesol » gwt » maps » client » tms » Java Open Source

Java Open Source » GWT » ghetto maps 
ghetto maps » com » moesol » gwt » maps » client » tms » TileMapServiceActivity.java
package com.moesol.gwt.maps.client.tms;

import java.util.ArrayList;
import java.util.Collections;

import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.inject.Inject;
import com.moesol.gwt.maps.client.LayerSet;
import com.moesol.gwt.maps.client.MapView;
import com.moesol.gwt.maps.client.IProjection;
import com.moesol.gwt.maps.client.units.AngleUnit;

public class TileMapServiceActivity extends AbstractActivity implements
    TileMapServiceView.Presenter {

  private static final String SERVICE_BASE_URL = "http://localhost:8080/geowebcache/service/tms/1.0.0";
  private static final String SERVICE_ARCGIS_URL = "http://services.arcgisonline.com/ArcGIS/rest/services/I3_Imagery_Prime_World_2D/MapServer/tile";
  private static TileMapServiceMetadata data;
  private static TileMapMetadata selectedAvailableItem;
  private static TileMapMetadata selectedDisplayedItem;
  private TileMapServicePlace place;
  private ArrayList<TileMapMetadata> displayedItems = new ArrayList<TileMapMetadata>();

  public TileMapServiceActivity() {
  }

  public void setPlace(TileMapServicePlace place) {
    this.place = place;
  }

  @Inject
  EventBus eventBus;

  @Inject
  PlaceController placeController;

  @Inject
  TileMapServiceView view;

  @Inject
  MapView mapView;

  @Override
  public void start(AcceptsOneWidget panel, EventBus eventBus) {
    // mapView.setCenter(place.getLatitude(), place.getLongitude());
    // mapView.getProjection().setLevel(place.getLevel());

    view.setPresenter(this);

    view.removeAllDisplayedItems();

    view.setAddAvailableItemEnabled(selectedAvailableItem != null);
    view.setRemoveDisplayedItemEnabled(selectedDisplayedItem != null);

    if (data == null) {
      TileMapServiceMetadata.getMetadata("test-tms.xml",
          new TileMapServiceMetadata.RequestCallback() {
            @Override
            public void onSuccess(TileMapServiceMetadata metadata) {
              data = metadata;
              metadata.setUrl(SERVICE_BASE_URL);
              view.displayData(metadata.getTileMaps());
              setLayers();
            }
          });
    } else {
      setLayers();
    }
  }
  
  private void addArcGisBMNG(){
    LayerSet layerSet = new LayerSet();
    layerSet.setServer(SERVICE_ARCGIS_URL);
    layerSet.setZeroTop(true);
    layerSet.setData("");
      layerSet.setStartLevelTileDimensionsInDeg(180.0,180.0);
      layerSet.withPixelWidth(512).setPixelHeight(512);
      layerSet.setLevelRange(-2, 8);
      //mapView.getProjection().setBaseScaleForDegWidth(180.0, 512);

    TileMapMetadata tileMapMetadata = new TileMapMetadata();
    tileMapMetadata.setId("I3_Imagery_Prime_World_2D");
    tileMapMetadata.setSrs("EPSG:4326");
    tileMapMetadata.setTileImageFormat("png");
    tileMapMetadata.setTilePixelHeight(512);
    tileMapMetadata.setTilePixelWidth(512);
    //tileMapMetadata.setTileSets(null);
    tileMapMetadata.setTitle("I3_Imagery_Prime_World_2D");
    tileMapMetadata.setUrl(SERVICE_ARCGIS_URL);
    tileMapMetadata.setVisible(false);
    //displayedItems.add(tileMapMetadata);
    //addDisplayedItem(tileMapMetadata);
    layerSet.setUrlPattern("{server}/{level}/{y}/{x}."
        + tileMapMetadata.getTileImageFormat());
    mapView.addLayer(layerSet);  
  }

  private void setLayers() {
    mapView.clearLayers();
    addArcGisBMNG();
    for (String layerId : place.getLayers()) {
      TileMapMetadata tileMapMetadata = data.findTileMapMetadata(layerId);

      if (tileMapMetadata != null) {
        LayerSet ls = new LayerSet();
        ls.setServer(data.getUrl() + "/" + layerId);
        ls.setData("");
          ls.setStartLevelTileDimensionsInDeg(90.0, 90.0);
          ls.setStartLevel(1);
          ls.withPixelWidth(256).setPixelHeight(256);
          ls.setAlwaysDraw(true);
          ls.setUseToScale(false);
          ls.setZIndex(4);
          ls.setLevelRange(-2, 12);
        displayedItems.add(tileMapMetadata);
        addDisplayedItem(tileMapMetadata);
        ls.setUrlPattern("{server}/{level}/{x}/{y}."
            + tileMapMetadata.getTileImageFormat());
        IProjection p = mapView.getProjection();
        mapView.addLayer(ls);
      }
    }

    mapView.updateView();
    view.setRemoveAllDisplayedItemsEnabled(displayedItems.size() > 0);
    setMoveDisplayedItemUi(displayedItems.indexOf(selectedDisplayedItem));
  }

  private void addDisplayedItem(TileMapMetadata tileMapMetadata) {
    view.removeDisplayedItem(tileMapMetadata);
    view.addDisplayedItem(tileMapMetadata);
  }

  @Override
  public void onRemoveAllDisplayedItems() {
    view.removeAllDisplayedItems();
    view.addAvailableItems(displayedItems);
    displayedItems.clear();
    view.setRemoveDisplayedItemEnabled(false);
    view.setRemoveAllDisplayedItemsEnabled(false);
    eventBus.fireEvent(new TileMapRemoveAllEvent());
    goToNewPlace();
    selectedDisplayedItem = null;
  }

  private void goToNewPlace() {
    placeController.goTo(new TileMapServicePlace(getLayerIds(), mapView
        .getCenter().getPhi(AngleUnit.DEGREES), mapView.getCenter()
        .getLambda(AngleUnit.DEGREES), mapView.getViewport()
        .getLevel()));
  }

  @Override
  public void onRemoveDisplayedItem() {
    if (selectedDisplayedItem != null) {
      displayedItems.remove(selectedDisplayedItem);
      view.removeDisplayedItem(selectedDisplayedItem);
      view.addAvailableItem(selectedDisplayedItem);
      view.setRemoveDisplayedItemEnabled(false);
      view.setRemoveAllDisplayedItemsEnabled(displayedItems.size() > 0);
      eventBus.fireEvent(new TileMapRemoveEvent(selectedDisplayedItem));
      goToNewPlace();
      selectedDisplayedItem = null;
    }
  }

  @Override
  public void onAddDisplayedItem() {
    if (selectedAvailableItem != null
        && !displayedItems.contains(selectedAvailableItem)) {
      displayedItems.add(selectedAvailableItem);
      view.addDisplayedItem(selectedAvailableItem);
      view.removeAvailableItem(selectedAvailableItem);
      view.setAddAvailableItemEnabled(false);
      view.setRemoveAllDisplayedItemsEnabled(true);
      eventBus.fireEvent(new TileMapAddEvent(selectedAvailableItem));
      goToNewPlace();
      selectedAvailableItem = null;
    }
  }

  private String[] getLayerIds() {
    String[] layerId = new String[displayedItems.size()];
    for (int i = 0; i < displayedItems.size(); i++) {
      layerId[i] = displayedItems.get(i).getId();
    }
    return layerId;
  }

  @Override
  public void onAvailableSelected(TileMapMetadata selectedObject) {
    selectedAvailableItem = selectedObject;
    view.setAddAvailableItemEnabled(selectedAvailableItem != null);
  }

  @Override
  public void onDisplayedSelected(TileMapMetadata selectedObject) {
    selectedDisplayedItem = selectedObject;
    view.setRemoveDisplayedItemEnabled(selectedDisplayedItem != null);
    
    int index = displayedItems.indexOf(selectedObject);
    setMoveDisplayedItemUi(index);
  }

  private void setMoveDisplayedItemUi(int index) {
    view.setMoveDisplayedItemUpEnabled(index > 0);
    view.setMoveDisplayedItemDownEnabled(index > -1 && index < displayedItems.size() - 1);
  }

  @Override
  public void onMoveDisplayedItemDown() {
    int i = displayedItems.indexOf(selectedDisplayedItem);
    if (i < displayedItems.size() - 1) {
      Collections.swap(displayedItems, i, i + 1);
      goToNewPlace();
    }
  }

  @Override
  public void onMoveDisplayedItemUp() {
    int i = displayedItems.indexOf(selectedDisplayedItem);
    if (i > 0) {
      Collections.swap(displayedItems, i, i - 1);
      goToNewPlace();
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.