package org.realityforge.gwt.sample.contacts.client.application;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.place.shared.PlaceController;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import org.realityforge.gwt.sample.contacts.client.event.AddContactCancelledEvent;
import org.realityforge.gwt.sample.contacts.client.event.AddContactEvent;
import org.realityforge.gwt.sample.contacts.client.event.ContactClosedEvent;
import org.realityforge.gwt.sample.contacts.client.event.ContactUpdatedEvent;
import org.realityforge.gwt.sample.contacts.client.event.EditContactCancelledEvent;
import org.realityforge.gwt.sample.contacts.client.event.EditContactEvent;
import org.realityforge.gwt.sample.contacts.client.event.ShowContactEvent;
import org.realityforge.gwt.sample.contacts.client.place.AddContactPlace;
import org.realityforge.gwt.sample.contacts.client.place.EditContactPlace;
import org.realityforge.gwt.sample.contacts.client.place.ListContactsPlace;
import org.realityforge.gwt.sample.contacts.client.place.ShowContactPlace;
/**
* The class is responsible for listening to application events and navigating to
* correct place as a result of events.
*/
public class ApplicationNavigator
{
private final PlaceController _placeController;
private final EventBus _eventBus;
@Inject
public ApplicationNavigator( final PlaceController placeController,
final EventBus eventBus )
{
_placeController = placeController;
_eventBus = eventBus;
}
public void activate()
{
_eventBus.addHandler( AddContactEvent.TYPE, new AddContactEvent.Handler()
{
public void onAddContact( final AddContactEvent event )
{
_placeController.goTo( new AddContactPlace() );
}
} );
_eventBus.addHandler( EditContactEvent.TYPE, new EditContactEvent.Handler()
{
public void onEditContact( @Nonnull final EditContactEvent event )
{
_placeController.goTo( new EditContactPlace( event.getID() ) );
}
} );
_eventBus.addHandler( ShowContactEvent.TYPE, new ShowContactEvent.Handler()
{
public void onShowContact( @Nonnull final ShowContactEvent event )
{
_placeController.goTo( new ShowContactPlace( event.getID() ) );
}
} );
_eventBus.addHandler( EditContactCancelledEvent.TYPE, new EditContactCancelledEvent.Handler()
{
public void onEditContactCancelled( @Nonnull final EditContactCancelledEvent event )
{
_placeController.goTo( new ShowContactPlace( event.getID() ) );
}
} );
_eventBus.addHandler( AddContactCancelledEvent.TYPE, new AddContactCancelledEvent.Handler()
{
public void onAddContactCancelled( @Nonnull final AddContactCancelledEvent event )
{
_placeController.goTo( new ListContactsPlace() );
}
} );
_eventBus.addHandler( ContactClosedEvent.TYPE, new ContactClosedEvent.Handler()
{
public void onContactClosed( @Nonnull final ContactClosedEvent event )
{
_placeController.goTo( new ListContactsPlace() );
}
} );
_eventBus.addHandler( ContactUpdatedEvent.TYPE, new ContactUpdatedEvent.Handler()
{
public void onContactUpdated( @Nonnull final ContactUpdatedEvent event )
{
_placeController.goTo( new ShowContactPlace( event.getID() ) );
}
} );
}
}