package <%= base_package %>;

import javax.inject.Inject; import javax.inject.Singleton;

import <%= models_package %>.User; import <%= restservices_package %>.SessionRestService;

import org.fusesource.restygwt.client.Method; import org.fusesource.restygwt.client.MethodCallback;

import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label;

import de.mkristian.gwt.rails.Notice; import de.mkristian.gwt.rails.session.SessionHandler; import de.mkristian.gwt.rails.session.SessionManager;

@Singleton public class BreadCrumbsPanel extends FlowPanel {

private final Button logout;

@Inject
public BreadCrumbsPanel(final SessionManager<User> sessionManager, final SessionRestService service,
        final Notice notice){
    setStyleName("gwt-rails-breadcrumbs");
    setVisible(false);
    sessionManager.addSessionHandler(new SessionHandler<User>() {

        public void timeout() {
            notice.info("timeout");
            logout();
        }

        public void logout() {
            service.destroy(new MethodCallback<Void>() {
                public void onSuccess(Method method, Void response) {
                }
                public void onFailure(Method method, Throwable exception) {
                }
            });
            setName(null);
        }

        public void login(User user) {
            setName(user.getName());
        }

        public void accessDenied() {
            notice.error("access denied");
        }
    });
    logout = new Button("logout");
    logout.addClickHandler(new ClickHandler() {

        public void onClick(ClickEvent event) {
            sessionManager.logout();
        }
    });
}

private void setName(String name){
    clear();
    if(name != null){
        add(new Label("Welcome " + name));
        add(logout);
        setVisible(true);
    }
    else {
        setVisible(false);
    }
}

}