/*
* Copyright 2012 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.dashbuilder.client;
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.ui.RootPanel;
import org.dashbuilder.client.cms.resources.i18n.ContentManagerI18n;
import org.dashbuilder.client.dashboard.DashboardManager;
import org.dashbuilder.client.dashboard.DashboardPerspectiveActivity;
import org.dashbuilder.client.navbar.TopMenuBar;
import org.dashbuilder.client.navigation.NavTreeDefinitions;
import org.dashbuilder.client.navigation.NavigationManager;
import org.dashbuilder.client.resources.i18n.AppConstants;
import org.dashbuilder.client.security.PermissionTreeSetup;
import org.dashbuilder.displayer.DisplayerAttributeDef;
import org.dashbuilder.navigation.NavItem;
import org.dashbuilder.navigation.NavTree;
import org.dashbuilder.navigation.workbench.NavWorkbenchCtx;
import org.dashbuilder.shared.dashboard.events.DashboardDeletedEvent;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.ioc.client.api.AfterInitialization;
import org.jboss.errai.ioc.client.api.EntryPoint;
import org.jboss.errai.security.shared.service.AuthenticationService;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.ext.security.management.client.ClientUserSystemManager;
import org.uberfire.mvp.Command;
import org.uberfire.workbench.events.NotificationEvent;
import javax.enterprise.event.Event;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import static org.uberfire.workbench.events.NotificationEvent.NotificationType.INFO;
/**
* Entry-point for the Dashbuilder showcase
*/
@EntryPoint
public class ShowcaseEntryPoint {
private AppConstants constants = AppConstants.INSTANCE;
@Inject
private PlaceManager placeManager;
@Inject
private ClientUserSystemManager userSystemManager;
@Inject
private DashboardManager dashboardManager;
@Inject
private Caller<AuthenticationService> authService;
@Inject
private NavigationManager navigationManager;
@Inject
private Event<NotificationEvent> workbenchNotification;
@Inject
private PermissionTreeSetup permissionTreeSetup;
@Inject
private TopMenuBar navBar;
@Inject
private ContentManagerI18n contentManagerI18n;
@AfterInitialization
public void startApp() {
// Sometimes, due to unknown reasons, the Displayer editor does not show all the attributes in the "Display" tab
// The fix is to force the DisplayerAttributeDef static fields to initialize on startup
DisplayerAttributeDef def = DisplayerAttributeDef.TITLE;
// Rename perspectives to dashboards in CMS
//customizeCMSTexts();
userSystemManager.waitForInitialization(() ->
dashboardManager.loadDashboards(t ->
navigationManager.init(() -> {
permissionTreeSetup.configureTree();
initNavBar();
hideLoadingPopup();
})
));
}
private void customizeCMSTexts() {
contentManagerI18n.setPerspectiveResourceName(constants.content_manager_dashboard());
contentManagerI18n.setPerspectivesResourceName(constants.content_manager_dashboards());
contentManagerI18n.setNoPerspectives(constants.content_manager_noDashboards());
}
private void initNavBar() {
// Set the dashbuilder's default nav tree
navigationManager.setDefaultNavTree(NavTreeDefinitions.NAV_TREE_DEFAULT);
// Attach old existing dashboards (created with versions prior to 0.7) under the "dashboards" group
for (DashboardPerspectiveActivity activity : dashboardManager.getDashboards()) {
String perspectiveId = activity.getIdentifier();
navigationManager.getNavTree().addItem(perspectiveId,
activity.getDisplayName(),
activity.getDisplayName(),
NavTreeDefinitions.GROUP_DASHBOARDS, true,
NavWorkbenchCtx.perspective(perspectiveId).toString());
}
// Show the top menu bar
navBar.setOnItemSelectedCommand(onItemSelectedCommand);
navBar.setOnLogoutCommand(onLogoutCommand);
navBar.show(NavTreeDefinitions.GROUP_APP);
}
// Event coming from old dashboards (created with versions prior to 0.7)
private void onDashboardDeletedEvent(@Observes DashboardDeletedEvent event) {
NavTree navTree = navigationManager.getNavTree();
navTree.deleteItem(event.getDashboardId());
navBar.show(NavTreeDefinitions.GROUP_APP);
workbenchNotification.fire(new NotificationEvent(constants.notification_dashboard_deleted(event.getDashboardName()), INFO));
}
// 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 );
}
private Command onItemSelectedCommand = () -> {
NavItem navItem = navBar.getItemSelected();
String resourceId = NavWorkbenchCtx.get(navItem).getResourceId();
if (resourceId != null) {
placeManager.goTo(resourceId);
}
};
private Command onLogoutCommand = () -> {
authService.call(r -> {
final String location = GWT.getModuleBaseURL().replaceFirst( "/" + GWT.getModuleName() + "/", "/logout.jsp" );
redirect( location );
}).logout();
};
public static native void redirect( String url )/*-{
$wnd.location = url;
}-*/;
}