/*
* 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 java.util.ArrayList;
import java.util.Collection;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArrayString;
import org.uberfire.client.plugin.JSNativePlugin;
import org.uberfire.client.workbench.WorkbenchServicesProxy;
import org.uberfire.workbench.model.SplashScreenFilter;
import org.uberfire.workbench.model.impl.SplashScreenFilterImpl;
import static java.util.Collections.emptyList;
@Dependent
public class JSNativeSplashScreen extends JSNativePlugin {
private Integer bodyHeight = null;
@Inject
private WorkbenchServicesProxy wbServices;
private static native boolean getDisplayNextTimeFunctionResult(final JavaScriptObject o) /*-{
var result = o.display_next_time();
if (typeof result === "boolean") {
return result;
}
return false;
}-*/;
private static native boolean getDisplayNextTime(final JavaScriptObject o) /*-{
return o.display_next_time;
}-*/;
private static native JsArrayString getInterceptionPointsFunctionResult(final JavaScriptObject o) /*-{
var result = o.interception_points();
if (result instanceof Array) {
return result;
}
return [];
}-*/;
private static native JsArrayString getInterceptionPoints(final JavaScriptObject o) /*-{
return o.interception_points;
}-*/;
private static native int getBodyHeight(final JavaScriptObject o) /*-{
return o.body_height;
}-*/;
private static native boolean getIsEnabled(final JavaScriptObject o) /*-{
return o.enabled;
}-*/;
public WorkbenchServicesProxy getWbServices() {
return wbServices;
}
protected void buildElement() {
super.buildElement();
if (hasIntProperty(obj,
"body_height")) {
bodyHeight = getBodyHeight(obj);
} else {
bodyHeight = null;
}
}
public Integer getBodyHeight() {
return bodyHeight;
}
public SplashScreenFilter buildFilter() {
boolean displayNextTime = true;
JsArrayString interceptionPoints = null;
if (hasMethod(obj,
"display_next_time")) {
displayNextTime = getDisplayNextTimeFunctionResult(obj);
} else if (hasBooleanProperty(obj,
"display_next_time")) {
displayNextTime = getDisplayNextTime(obj);
}
if (hasMethod(obj,
"interception_points")) {
interceptionPoints = getInterceptionPointsFunctionResult(obj);
} else {
interceptionPoints = getInterceptionPoints(obj);
}
return new SplashScreenFilterImpl(getId(),
displayNextTime,
toCollection(interceptionPoints));
}
public boolean isEnabled() {
if (hasBooleanProperty(obj,
"enabled")) {
return getIsEnabled(obj);
}
return true;
}
private Collection<String> toCollection(final JsArrayString interceptionPoints) {
if (interceptionPoints == null || interceptionPoints.length() == 0) {
return emptyList();
}
final Collection<String> result = new ArrayList<String>();
for (int i = 0; i < interceptionPoints.length(); i++) {
result.add(interceptionPoints.get(i));
}
return result;
}
}