package com.example.locator.widgetset.client.mycomp;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.ui.AbstractComponentConnector;
import com.vaadin.shared.ui.Connect;
import com.example.locator.MyComp;
import com.example.locator.NewModulePositionEvent;
import com.example.locator.NewModulePositionHandler;
import com.example.locator.widgetset.client.mycomp.MyCompWidget;
import com.example.locator.widgetset.client.mycomp.MyCompServerRpc;
import com.vaadin.client.communication.RpcProxy;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.vaadin.shared.MouseEventDetails;
import com.vaadin.client.MouseEventDetailsBuilder;
import com.example.locator.widgetset.client.mycomp.MyCompClientRpc;
import com.example.locator.widgetset.client.mycomp.MyCompState;
import com.vaadin.client.communication.StateChangeEvent;

@Connect(MyComp.class)
public class MyCompConnector extends AbstractComponentConnector {
	MyCompServerRpc rpc = RpcProxy
			.create(MyCompServerRpc.class, this);
	
	public MyCompConnector() {
		registerRpc(MyCompClientRpc.class, new MyCompClientRpc() {
			public void alert(String message) {
				// TODO Do something useful
				Window.alert(message);
			}
			public void changeColor(String color) {
				getWidget().InitMap(color);			
			}
		});

		// TODO ServerRpc usage example, do something useful instead
		getWidget().addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				final MouseEventDetails mouseDetails = MouseEventDetailsBuilder
					.buildMouseEventDetails(event.getNativeEvent(),
								getWidget().getElement());
				rpc.clicked(mouseDetails);
			}
		});
	
		
		getWidget().addNewModulePositionHandler(new NewModulePositionHandler() {

			public void onNewModulePosition(NewModulePositionEvent event) {
				// TODO Auto-generated method stub
				rpc.newModulePosition(event.getColor());
			}
				
		});

	}

	@Override
	protected Widget createWidget() {
		return GWT.create(MyCompWidget.class);
	}

	@Override
	public MyCompWidget getWidget() {
		return (MyCompWidget) super.getWidget();
	}

	@Override
	public MyCompState getState() {
		return (MyCompState) super.getState();
	}

	@Override
	public void onStateChanged(StateChangeEvent stateChangeEvent) {
		super.onStateChanged(stateChangeEvent);

		// TODO do something useful
		final String color = getState().color;
		getWidget().InitMap(color);
	}

}

