package org.jbpm.designer.client;
import javax.inject.Inject;
import com.google.gwt.animation.client.Animation;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;
import org.jboss.errai.bus.client.api.BusErrorCallback;
import org.jboss.errai.bus.client.api.messaging.Message;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.common.client.api.RemoteCallback;
import org.jboss.errai.ioc.client.api.AfterInitialization;
import org.jboss.errai.ioc.client.api.EntryPoint;
import org.jboss.errai.ioc.client.container.SyncBeanManager;
import org.jboss.errai.security.shared.service.AuthenticationService;
import org.jbpm.designer.client.resources.StandaloneResources;
import org.kie.workbench.common.services.security.KieWorkbenchACL;
import org.kie.workbench.common.services.security.KieWorkbenchPolicy;
import org.kie.workbench.common.services.shared.security.KieWorkbenchSecurityService;
import org.uberfire.client.mvp.ActivityManager;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.client.workbench.widgets.menu.WorkbenchMenuBarPresenter;
import org.uberfire.mvp.Command;
import org.uberfire.workbench.model.menu.MenuFactory;
/**
* GWT's Entry-point for jBPM Designer
*/
@EntryPoint
public class StandaloneEntryPoint {
@Inject
private SyncBeanManager manager;
@Inject
private WorkbenchMenuBarPresenter menubar;
@Inject
private PlaceManager placeManager;
@Inject
private ActivityManager activityManager;
@Inject
private KieWorkbenchACL kieACL;
@Inject
private Caller<KieWorkbenchSecurityService> kieSecurityService;
@Inject
private Caller<AuthenticationService> authService;
@AfterInitialization
public void startApp() {
kieSecurityService.call( new RemoteCallback<String>() {
public void callback( final String str ) {
KieWorkbenchPolicy policy = new KieWorkbenchPolicy( str );
kieACL.activatePolicy( policy );
loadStyles();
setupMenu();
hideLoadingPopup();
}
} ).loadPolicy();
}
private void loadStyles() {
StandaloneResources.INSTANCE.CSS().ensureInjected();
}
private void setupMenu() {
menubar.addMenus(
MenuFactory.newTopLevelMenu( "Logout" ).respondsWith( new Command() {
@Override
public void execute() {
logout();
}
} ).endMenu().build() );
}
private void logout() {
authService.call( new RemoteCallback<Void>() {
@Override
public void callback( Void response ) {
redirect( GWT.getHostPageBaseURL() + "login.jsp" );
}
}, new BusErrorCallback() {
@Override
public boolean error( Message message,
Throwable throwable ) {
Window.alert( "Logout failed: " + throwable );
return true;
}
} ).logout();
}
//Fade out the "Loading application" pop-up
private void hideLoadingPopup() {
final Element e = RootPanel.get( "loading" ).getElement();
new Animation() {
@Override
protected void onUpdate( double progress ) {
e.getStyle().setOpacity( 1.0 - progress );
}
@Override
protected void onComplete() {
e.getStyle().setVisibility( Style.Visibility.HIDDEN );
}
}.run( 500 );
}
public static native void redirect( String url )/*-{
$wnd.location = url;
}-*/;
}