package org.jboss.tools.forge.reddeer.view; import org.jboss.reddeer.common.logging.Logger; import org.jboss.reddeer.core.condition.JobIsRunning; import org.jboss.reddeer.common.condition.AbstractWaitCondition; import org.jboss.reddeer.swt.exception.SWTLayerException; import org.jboss.reddeer.swt.impl.menu.ToolItemMenu; import org.jboss.reddeer.swt.impl.styledtext.DefaultStyledText; import org.jboss.reddeer.swt.impl.toolbar.DefaultToolItem; import org.jboss.reddeer.swt.impl.toolbar.ViewToolBar; import org.jboss.reddeer.common.matcher.RegexMatcher; import org.jboss.reddeer.core.matcher.WithTooltipTextMatcher; import org.jboss.reddeer.common.wait.TimePeriod; import org.jboss.reddeer.common.wait.WaitUntil; import org.jboss.reddeer.common.wait.WaitWhile; import org.jboss.reddeer.workbench.impl.view.WorkbenchView; /** * Forge Console view RedDeer implementation * @author psrna * */ public class ForgeConsoleView extends WorkbenchView{ protected final static Logger log = Logger.getLogger(ForgeConsoleView.class); public ForgeConsoleView() { super("Forge Console"); } /** * Start currently selected Forge Runtime * Call {@link #selectRuntime(RegexMatcher)} if there is a need to start different runtime * as the one that is currently selected. */ public void start(){ log.info("Attempt to START Forge Runtime"); open(); ViewToolBar tb = new ViewToolBar(); RegexMatcher rm = new RegexMatcher("Start.*"); WithTooltipTextMatcher tm = new WithTooltipTextMatcher(rm); new DefaultToolItem(tb, 0, tm).click(); new WaitWhile(new JobIsRunning(), TimePeriod.VERY_LONG); } /** * Stop Forge Console */ public void stop(){ log.info("Attempt to STOP Forge Runtime"); open(); ViewToolBar tb = new ViewToolBar(); RegexMatcher rm = new RegexMatcher("Stop.*"); WithTooltipTextMatcher tm = new WithTooltipTextMatcher(rm); new DefaultToolItem(tb, 0, tm).click(); new WaitWhile(new JobIsRunning()); } /** * Clear Forge Console */ public void clear(){ log.info("Attempt to CLEAR Forge Runtime"); open(); ViewToolBar tb = new ViewToolBar(); WithTooltipTextMatcher tm = new WithTooltipTextMatcher("Clear Console"); new DefaultToolItem(tb, 0, tm).click(); } /** * Select Forge Runtime * @param rm RegexMatcher witch matches Forge Runtime version. e.g. "Forge 2.*" or "Forge 1.*" */ @SuppressWarnings("unchecked") public void selectRuntime(RegexMatcher rm){ log.info("Attempt to SELECT Forge Runtime"); open(); ViewToolBar tb = new ViewToolBar(); WithTooltipTextMatcher tm = new WithTooltipTextMatcher("Select Forge Runtime"); DefaultToolItem defaultToolItem = new DefaultToolItem(tb, 0, tm); new ToolItemMenu(defaultToolItem, rm).select(); } /** * Returns console test. * * @return Console text */ public String getConsoleText() { activate(); new WaitUntil(new ConsoleHasTextWidget()); return new DefaultStyledText().getText(); } /** * Sets console text * @author psrna * */ public void setConsoleText(String text){ activate(); new WaitUntil(new ConsoleHasTextWidget()); new DefaultStyledText().setText(text); } /** * Toggle button Link With Editor in Forge Console View. * * @author jkopriva@redhat.com */ public void linkWithEditorToggle(boolean toggle){ open(); ViewToolBar tb = new ViewToolBar(); RegexMatcher rm = new RegexMatcher("Link.*"); WithTooltipTextMatcher tm = new WithTooltipTextMatcher(rm); new DefaultToolItem(tb, 0, tm).toggle(toggle); } private class ConsoleHasTextWidget extends AbstractWaitCondition{ @Override public boolean test() { try{ new DefaultStyledText(); }catch(SWTLayerException ex){ return false; } return true; } @Override public String description() { return "console has styled text"; } } }