/* * Copyright 2015 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.uberfire.client.splash; import javax.enterprise.inject.Alternative; import com.google.gwt.event.logical.shared.CloseEvent; import com.google.gwt.event.logical.shared.CloseHandler; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.IsWidget; import org.uberfire.client.mvp.SplashScreenActivity; import org.uberfire.client.workbench.widgets.splash.SplashView; import org.uberfire.mvp.ParameterizedCommand; import org.uberfire.mvp.PlaceRequest; import org.uberfire.security.ResourceType; import org.uberfire.workbench.model.ActivityResourceType; import org.uberfire.workbench.model.SplashScreenFilter; @Alternative public class JSSplashScreenActivity implements SplashScreenActivity { private final SplashView splash; private Boolean showAgain = Boolean.TRUE; private Boolean isEnabled = Boolean.TRUE; private SplashScreenFilter splashFilter; private JSNativeSplashScreen nativeSplashScreen; private PlaceRequest place; public JSSplashScreenActivity(final JSNativeSplashScreen nativeSplashScreen, final SplashView splashView) { this.nativeSplashScreen = nativeSplashScreen; this.splash = splashView; this.isEnabled = nativeSplashScreen.isEnabled(); this.splashFilter = nativeSplashScreen.buildFilter(); } @Override public void onStartup(final PlaceRequest place) { this.place = place; nativeSplashScreen.getWbServices().loadSplashScreenFilter(getFilter().getName(), new ParameterizedCommand<SplashScreenFilter>() { @Override public void execute(final SplashScreenFilter response) { if (response != null) { splashFilter = response; } init(); } }); nativeSplashScreen.onStartup(place); } public void setNativeSplashScreen(JSNativeSplashScreen nativeSplashScreen) { this.nativeSplashScreen = nativeSplashScreen; } @Override public PlaceRequest getPlace() { return place; } @Override public String getIdentifier() { return nativeSplashScreen.getId(); } @Override public ResourceType getResourceType() { return ActivityResourceType.SPLASH; } public void init() { if (!splashFilter.displayNextTime()) { return; } forceShow(); } @Override public String getTitle() { return nativeSplashScreen.getTitle(); } @Override public IsWidget getWidget() { return new HTML(nativeSplashScreen.getElement().getInnerHTML()); } @Override public Integer getBodyHeight() { return nativeSplashScreen.getBodyHeight(); } @Override public SplashScreenFilter getFilter() { return splashFilter; } @Override public IsWidget getTitleDecoration() { return null; } @Override public void onOpen() { nativeSplashScreen.onOpen(); } @Override public void closeIfOpen() { if (splash.isAttached()) { splash.hide(); onClose(); } } @Override public void forceShow() { final IsWidget widget = getWidget(); splash.setContent(widget, getBodyHeight()); splash.setTitle(getTitle()); splash.show(); splash.addCloseHandler(new CloseHandler<SplashView>() { @Override public void onClose(final CloseEvent<SplashView> event) { JSSplashScreenActivity.this.onClose(); } }); } @Override public void onClose() { nativeSplashScreen.onClose(); saveState(); } @Override public void onShutdown() { nativeSplashScreen.onShutdown(); } @Override public Boolean intercept(final PlaceRequest intercepted) { if (splashFilter == null) { return false; } for (final String interceptPoint : splashFilter.getInterceptionPoints()) { if (intercepted.getIdentifier().equals(interceptPoint)) { return true; } } return false; } @Override public boolean isEnabled() { return isEnabled; } private void saveState() { showAgain = splash.showAgain(); if (showAgain != null) { splashFilter.setDisplayNextTime(showAgain); nativeSplashScreen.getWbServices().save(splashFilter); } } }