/*******************************************************************************
* Copyright (c) 2015-2017 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.reddeer.ui.editor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.texteditor.ITextEditor;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.core.condition.ShellWithTextIsAvailable;
import org.jboss.reddeer.core.lookup.EditorPartLookup;
import org.jboss.reddeer.core.matcher.WithMnemonicTextMatcher;
import org.jboss.reddeer.core.util.Display;
import org.jboss.reddeer.core.util.ResultRunnable;
import org.jboss.reddeer.swt.api.Tree;
import org.jboss.reddeer.swt.api.TreeItem;
import org.jboss.reddeer.swt.impl.button.FinishButton;
import org.jboss.reddeer.swt.impl.button.PushButton;
import org.jboss.reddeer.swt.impl.combo.DefaultCombo;
import org.jboss.reddeer.swt.impl.ctab.DefaultCTabItem;
import org.jboss.reddeer.swt.impl.shell.DefaultShell;
import org.jboss.reddeer.swt.impl.text.DefaultText;
import org.jboss.reddeer.swt.impl.tree.DefaultTree;
import org.jboss.reddeer.swt.impl.tree.DefaultTreeItem;
import org.jboss.reddeer.workbench.impl.editor.DefaultEditor;
import org.jboss.tools.common.model.ui.editor.EditorPartWrapper;
/**
* RedDeer implementation of web.xml file editor
*
* @author vlado pakan
*
*/
public class WebXmlEditor extends DefaultEditor {
private static final String SESSION_CONFIG_NODE = "session-config";
private static final String WELCOME_FILE_LIST_NODE = "welcome-file-list";
private static final String JSP_CONFIG_NODE = "JSP Config";
private static final String LOGIN_CONFIG_NODE = "login-config";
private static final String LOCALE_ENCODING_MAPPING_LIST = "locale-encoding-mapping-list";
private static final String SERVLETS_NODE = "Servlets";
private String title;
public WebXmlEditor(String title) {
super(title);
this.title = title;
}
public void activateSourceTab() {
activateEditorCTabItem("Source");
}
public void activateTreeTab() {
activateEditorCTabItem("Tree");
}
private void activateEditorCTabItem(String tabItemLabel) {
activate();
new DefaultCTabItem(tabItemLabel).activate();
}
public WebXmlSourceEditor getWebXmlSourceEditor() {
activateSourceTab();
IEditorPart editorPart = EditorPartLookup.getInstance().getActiveEditor();
final org.jboss.tools.jst.web.ui.editors.WebCompoundEditor wxe = ((org.jboss.tools.jst.web.ui.editors.WebCompoundEditor) ((EditorPartWrapper) editorPart)
.getEditor());
ITextEditor iTextEditor = (ITextEditor) Display.syncExec(new ResultRunnable<IEditorPart>() {
@Override
public IEditorPart run() {
return wxe.getSourceEditor();
}
});
return new WebXmlSourceEditor(iTextEditor);
}
public TreeItem selectSessionConfigNode() {
TreeItem tiToSelect = getWebXmlTreeItem(title, WebXmlEditor.SESSION_CONFIG_NODE);
tiToSelect.select();
return tiToSelect;
}
public TreeItem selectWelcomeFileListNode() {
TreeItem tiToSelect = getWebXmlTreeItem(title, WebXmlEditor.WELCOME_FILE_LIST_NODE);
tiToSelect.select();
return tiToSelect;
}
public TreeItem selectJspConfigNode() {
TreeItem tiToSelect = getWebXmlTreeItem(title, WebXmlEditor.JSP_CONFIG_NODE);
tiToSelect.select();
return tiToSelect;
}
public TreeItem selectLoginConfigNode() {
TreeItem tiToSelect = getWebXmlTreeItem(title, WebXmlEditor.LOGIN_CONFIG_NODE);
tiToSelect.select();
return tiToSelect;
}
public TreeItem selectLocaleEncodingMappingListNode() {
TreeItem tiToSelect = getWebXmlTreeItem(title, WebXmlEditor.LOCALE_ENCODING_MAPPING_LIST);
tiToSelect.select();
return tiToSelect;
}
public TreeItem selectServletsNode() {
TreeItem tiToSelect = getWebXmlTreeItem(title, WebXmlEditor.SERVLETS_NODE);
tiToSelect.select();
return tiToSelect;
}
public TreeItem getWebXmlTreeItem(String... path) {
return new DefaultTreeItem(getWebXmlTree(), path);
}
private Tree getWebXmlTree() {
activateTreeTab();
return new DefaultTree();
}
public void addServlet(String servletName, String displayName, String servleteClass, String servletDescription) {
selectServletsNode();
new PushButton("Add...").click();
new DefaultShell("Add Servlet");
new DefaultText(0).setText(servletName);
new DefaultText(1).setText(displayName);
new DefaultText(2).setText(servleteClass);
new DefaultText(3).setText(servletDescription);
new FinishButton().click();
new WaitWhile(new ShellWithTextIsAvailable("Add Servlet"));
}
public void addServletMapping(String servletName, String urlPattern) {
selectServletsNode();
new PushButton(1, new WithMnemonicTextMatcher("Add...")).click();
new DefaultShell("Add Servlet Mapping");
new DefaultCombo(0).setText(servletName);
new DefaultText(0).setText(urlPattern);
new FinishButton().click();
new WaitWhile(new ShellWithTextIsAvailable("Add Servlet Mapping"));
}
}