/*
* Copyright 2004-2014 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.smartbear.soapui.utils.fest;
import com.eviware.soapui.SoapUI;
import org.fest.swing.core.Robot;
import org.fest.swing.fixture.*;
/**
* Utility class used for generic operations on a SOAP project
*/
public final class SoapProjectUtils {
public static final String ROOT_FOLDER = SoapProjectUtils.class.getResource("/").getPath();
private static final String NEW_SOAP_PROJECT_MENU_ITEM_NAME = "New SOAP Project";
private static final String NEW_SOAP_PROJECT_DIALOG_NAME = "New SOAP Project";
private static final String OK_BUTTON_NAME = "OK";
private static final String WSDL_FIELD_NAME = "Initial WSDL";
private static final String TEST_WSDL = ROOT_FOLDER + "wsdls/test.wsdl";
private static final String PROJECT_NAME = "test";
private static final String INTERFACE_NAME = "GeoCode_Binding";
private static final String OPERATION_NAME = "geocode";
private static final String REQUEST_NAME = "Request 1";
private static final int NEW_PROJECT_TIMEOUT = 2000;
private SoapProjectUtils() {
throw new AssertionError();
}
public static void createNewSoapProject(FrameFixture rootWindow, Robot robot) {
openCreateNewSoapProjectDialog(rootWindow);
enterProjectNameAndWsdlUrlAndClickOk(robot);
}
public static void openRequestEditor(FrameFixture rootWindow) {
JTreeNodeFixture node = getTreeNode(rootWindow, getOperationPath());
node.doubleClick();
}
private static JTreeNodeFixture getTreeNode(FrameFixture rootWindow, String path) {
JTreeFixture tree = WorkspaceUtils.getNavigatorPanel(rootWindow).tree();
waitForProjectToLoad();
tree.expandPath(path);
return tree.node(getRequestPath());
}
public static JTreeNodeFixture findSoapOperationPopupMenu(FrameFixture rootWindow) {
return getTreeNode(rootWindow, getOperationPath());
}
private static String getOperationPath() {
return SoapUI.getWorkspace().getName() + "/" + PROJECT_NAME + "/" + INTERFACE_NAME + "/" + OPERATION_NAME;
}
private static String getRequestPath() {
return SoapUI.getWorkspace().getName() + "/" + PROJECT_NAME + "/" + INTERFACE_NAME + "/" + OPERATION_NAME + "/"
+ REQUEST_NAME;
}
private static void openCreateNewSoapProjectDialog(FrameFixture rootWindow) {
JPopupMenuFixture workspace = WorkspaceUtils.rightClickOnWorkspace(rootWindow);
workspace.menuItem(FestMatchers.menuItemWithText(NEW_SOAP_PROJECT_MENU_ITEM_NAME)).click();
}
private static void enterProjectNameAndWsdlUrlAndClickOk(Robot robot) {
DialogFixture newProjectDialog = FestMatchers.dialogWithTitle(NEW_SOAP_PROJECT_DIALOG_NAME)
.withTimeout(NEW_PROJECT_TIMEOUT).using(robot);
newProjectDialog.textBox(WSDL_FIELD_NAME).setText(TEST_WSDL);
JButtonFixture buttonOK = newProjectDialog.button(FestMatchers.buttonWithText(OK_BUTTON_NAME));
buttonOK.click();
}
// There might be a more elegant way to wait
private static void waitForProjectToLoad() {
try {
Thread.sleep(NEW_PROJECT_TIMEOUT);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}