/**
* Copyright 2008-2016 Qualogy Solutions B.V.
*
* 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 com.qualogy.qafe.gwt.client.vo.functions.execute;
import com.google.gwt.user.client.Window;
import com.qualogy.qafe.gwt.client.context.ClientApplicationContext;
import com.qualogy.qafe.gwt.client.factory.MainFactory;
import com.qualogy.qafe.gwt.client.factory.MainFactoryActions;
import com.qualogy.qafe.gwt.client.factory.WindowFactory;
import com.qualogy.qafe.gwt.client.vo.functions.BuiltInFunctionGVO;
import com.qualogy.qafe.gwt.client.vo.functions.OpenWindowGVO;
@Deprecated
public class OpenWindowExecute implements ExecuteCommand {
// CHECKSTYLE.OFF: CyclomaticComplexity
public void execute(BuiltInFunctionGVO builtInFunction) {
if (builtInFunction instanceof OpenWindowGVO) {
OpenWindowGVO openWindow = (OpenWindowGVO) builtInFunction;
if (openWindow.getWindow() != null && openWindow.getWindow().length() != 0) {
if (ClientApplicationContext.getInstance().isMDI()) {
ClientApplicationContext.getInstance().removeWindow(openWindow.getWindow(), openWindow.getContext(), openWindow.getUuid());
} else {
WindowFactory.clearWidgetFromMainPanel();
}
MainFactoryActions.getUIByUUID(openWindow.getUuid(), openWindow.getWindow());
} else if (openWindow.getUrl() != null && openWindow.getUrl().length() != 0) {
String title = openWindow.getUrl();
if (openWindow.getTitle() != null) {
title = openWindow.getTitle();
title = title.replace(" ", "_");
}
int width = 0;
int height = 0;
int left = 20;
int top = 20;
String menubar = "no";
String scrollbars = "no";
String toolbar = "no";
String status = "no";
String resize = "yes";
String modal = "no";
String features = "";
if (openWindow.getParams() != null) {
String[] paramArr = openWindow.getParams().split(",");
String temp = null;
for (int i = 0; i < paramArr.length; i++) {
if (paramArr[i].indexOf("width") > -1) {
width = Integer.parseInt(paramArr[i].substring(paramArr[i].indexOf("=") + 1));
} else if (paramArr[i].indexOf("height") > -1) {
height = Integer.parseInt(paramArr[i].substring(paramArr[i].indexOf("=") + 1));
} else if (paramArr[i].indexOf("left") > -1) {
left = Integer.parseInt(paramArr[i].substring(paramArr[i].indexOf("=") + 1));
} else if (paramArr[i].indexOf("top") > -1) {
top = Integer.parseInt(paramArr[i].substring(paramArr[i].indexOf("=") + 1));
} else if (paramArr[i].indexOf("menubar") > -1) {
temp = paramArr[i].substring(paramArr[i].indexOf("=") + 1);
if(temp.equalsIgnoreCase("yes") || temp.equalsIgnoreCase("true") || temp.equals("1")){
menubar = "yes";
}
features = features + "menubar=" + menubar + ",";
} else if (paramArr[i].indexOf("scrollbars") > -1) {
temp = paramArr[i].substring(paramArr[i].indexOf("=") + 1);
if(temp.equalsIgnoreCase("yes") || temp.equalsIgnoreCase("true") || temp.equals("1")){
scrollbars = "yes";
}
features = features + "scrollbars=" + scrollbars + ",";
} else if (paramArr[i].indexOf("toolbar") > -1) {
temp = paramArr[i].substring(paramArr[i].indexOf("=") + 1);
if(temp.equalsIgnoreCase("yes") || temp.equalsIgnoreCase("true") || temp.equals("1")){
toolbar = "yes";
}
features = features + "toolbar=" + toolbar + ",";
} else if (paramArr[i].indexOf("status") > -1) {
temp = paramArr[i].substring(paramArr[i].indexOf("=") + 1);
if(temp.equalsIgnoreCase("yes") || temp.equalsIgnoreCase("true") || temp.equals("1")){
status = "yes";
}
features = features + "status=" + status + ",";
} else if (paramArr[i].indexOf("resizable") > -1) {
temp = paramArr[i].substring(paramArr[i].indexOf("=") + 1);
if(temp.equalsIgnoreCase("no") || temp.equalsIgnoreCase("no") || temp.equals("1")){
resize = "no";
}
features = features + "resizable=" + resize + ",";
} else if (paramArr[i].indexOf("modal") > -1) {
temp = paramArr[i].substring(paramArr[i].indexOf("=") + 1);
if(temp.equalsIgnoreCase("yes") || temp.equalsIgnoreCase("true") || temp.equals("1")){
modal = "yes";
}
}
}
}
if(openWindow.getExternal()){
// Set the title to "" when open a window externally, the title will not be shown anyway,
// in IE this will give an exception when title is not empty
title = "";
if (openWindow.getParams() != null) {
int index = openWindow.getParams().indexOf("left") + openWindow.getParams().indexOf("top") + openWindow.getParams().indexOf("screenX") + openWindow.getParams().indexOf("screenY");
if (index > -1) {
Window.open(openWindow.getUrl(), title, openWindow.getParams());
} else {
ClientApplicationContext.getInstance().externalWindowCount++;
if (openWindow.getPlacement().equals(OpenWindowGVO.PLACEMENT_CASCADE)) {
if (ClientApplicationContext.getInstance().externalWindowCount > 1) {
for (int i = 1; i < ClientApplicationContext.getInstance().externalWindowCount; i++) {
left = left + 20;
top = top + 20;
}
}
features = features + ",screenX=" + left + ",screenY=" + top;
} else if (openWindow.getPlacement().equals(OpenWindowGVO.PLACEMENT_CENTER_CASCADE)) {
String centerCordinates = centeredWindow(width, height);
if (ClientApplicationContext.getInstance().externalWindowCount > 1) {
String[] centerCordinatesArr = centerCordinates.split(",");
for (int i = 0; i < centerCordinatesArr.length; i++) {
if (centerCordinatesArr[i].indexOf("screenX") == 0) {
left = Integer.parseInt(centerCordinatesArr[i].substring(centerCordinatesArr[i].indexOf("=") + 1));
}
if (centerCordinatesArr[i].indexOf("screenY") == 0) {
top = Integer.parseInt(centerCordinatesArr[i].substring(centerCordinatesArr[i].indexOf("=") + 1));
}
}
for (int i = 1; i < ClientApplicationContext.getInstance().externalWindowCount; i++) {
left = left + 20;
top = top + 20;
}
features = features + ",screenX=" + left + ",screenY=" + top;
} else {
features = features + centerCordinates;
}
}
Window.open(openWindow.getUrl(), title, features);
}
} else {
Window.open(openWindow.getUrl(), title, "");
}
} else {
boolean resizable = true;
boolean isModal = false;
if(resize.equals("")|| resize.equals("no")){
resizable = false;
}
if(modal.equals("yes")){
isModal = true;
}
boolean centered = false;
if (openWindow.getPlacement().equals(OpenWindowGVO.PLACEMENT_CASCADE)) {
if (ClientApplicationContext.getInstance().internalWindowCount > 0) {
for (int i = 0; i < ClientApplicationContext.getInstance().internalWindowCount; i++) {
left = left + 20;
top = top + 20;
}
}
} else if (openWindow.getPlacement().equals(OpenWindowGVO.PLACEMENT_CENTER_CASCADE)) {
String[] centerCordinatesArr = centeredWindow(width, height).split(",");
for (int i = 0; i < centerCordinatesArr.length; i++) {
if (centerCordinatesArr[i].indexOf("screenX") == 0) {
left = Integer.parseInt(centerCordinatesArr[i].substring(centerCordinatesArr[i].indexOf("=") + 1));
}
if (centerCordinatesArr[i].indexOf("screenY") == 0) {
top = Integer.parseInt(centerCordinatesArr[i].substring(centerCordinatesArr[i].indexOf("=") + 1));
}
}
if (ClientApplicationContext.getInstance().internalWindowCount > 0) {
for (int i = 0; i < ClientApplicationContext.getInstance().internalWindowCount; i++) {
left = left + 20;
top = top + 20;
}
}
} else if (openWindow.getPlacement().equals(OpenWindowGVO.PLACEMENT_TILED)) {
top = 30;
left = 0;
if (ClientApplicationContext.getInstance().internalWindowCount > 0) {
int row = 1;
int column = 1;
boolean makeNextRow = false;
for (int i = 0; i < ClientApplicationContext.getInstance().internalWindowCount; i++) {
left = (width * (i + 1));
if ((left + width) > screenWidth()) {
left = 0;
makeNextRow = true;
if (row > 1) {
left = (width * column);
column++;
if ((left + width) > screenWidth()) {
makeNextRow = true;
} else {
makeNextRow = false;
}
}
if (makeNextRow) {
left = 0;
column = 1;
top = 30 + (height * row);
row++;
makeNextRow = false;
}
} else {
top = 30;
}
}
}
}
// corrections for the height
if (width==0){
width=600;
}
if (height==0){
height=450;
}
MainFactory.createWindowWithUrl(title, openWindow.getUrl(), width, height, resizable, centered, top, left, isModal);
ClientApplicationContext.getInstance().internalWindowCount++;
}
}
FunctionsExecutor.setProcessedBuiltIn(true);
}
}
// CHECKSTYLE.ON: CyclomaticComplexity
public native String centeredWindow(int w, int h) /*-{
var left = parseInt(((screen.width - w)/2));
var top = parseInt(((screen.height - h)/2));
var windowFeatures = ",screenX=" + left + ",screenY=" + top;
return windowFeatures;
}-*/;
public native int screenWidth() /*-{
return screen.width;
}-*/;
}