Package org.eclipse.swtbot.swt.finder.matchers

Source Code of org.eclipse.swtbot.swt.finder.matchers.AbstractMatcher

/*******************************************************************************
* Copyright (c) 2008 Ketan Padegaonkar and others.
* All rights reserved. This program and the accompanying materials
* are 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
*
* Contributors:
*     Ketan Padegaonkar - initial API and implementation
*     Ketan Padegaonkar - http://swtbot.org/bugzilla/show_bug.cgi?id=126
*******************************************************************************/
package org.eclipse.swtbot.swt.finder.matchers;


import org.apache.log4j.Logger;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.swtbot.swt.finder.finders.PathGenerator;
import org.eclipse.swtbot.swt.finder.utils.ClassUtils;
import org.eclipse.swtbot.swt.finder.utils.MessageFormat;
import org.eclipse.swtbot.swt.finder.utils.SWTUtils;
import org.eclipse.swtbot.swt.finder.utils.TreePath;
import org.hamcrest.BaseMatcher;
import org.hamcrest.StringDescription;

/**
* A matcher that logs the result of matches. The match is done by subclasses.
*
* @author Ketan Padegaonkar <KetanPadegaonkar [at] gmail [dot] com>
* @version $Id$
*/
public abstract class AbstractMatcher<T> extends BaseMatcher<T> {

  public static final Logger  log  = Logger.getLogger(AbstractMatcher.class);

  public boolean matches(Object item) {
    boolean result = false;
    try {
      result = doMatch(item);
      String text = ""; //$NON-NLS-1$
      if (log.isDebugEnabled()) {
        text = SWTUtils.getText(item);
        try {
          if (text.length() > 20)
            text = text.substring(0, 20) + "..."; //$NON-NLS-1$
        } catch (Exception e) {
          // do nothing
        }
        if (result) {
          log.debug(MessageFormat.format("matched {0} with text \"{1}\", using matcher: {2}", ClassUtils.simpleClassName(item), text, StringDescription.toString(this))); //$NON-NLS-1$
        } else
          log.trace(MessageFormat.format("did not match {0} with text \"{1}\", using matcher: {2}", ClassUtils.simpleClassName(item), text, StringDescription.toString(this))); //$NON-NLS-1$
      }

      if (log.isTraceEnabled() && (item instanceof Widget)) {
        PathGenerator pathGenerator = new PathGenerator();
        TreePath path = pathGenerator.getPath((Widget) item);
        int segmentCount = path.getSegmentCount();

        String prefix = ""; //$NON-NLS-1$
        for (int i = 0; i < segmentCount - 1; i++)
          prefix += "    "; //$NON-NLS-1$
        prefix += "+---"; //$NON-NLS-1$
        log.trace(prefix + "Widget: " + ClassUtils.simpleClassName(item) + "{" + text + "}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
      }
    } catch (Exception e) {
      log.warn("Matcher threw an exception: ", e); //$NON-NLS-1$
    }
    return result;
  }

  /**
   * Subclasses must override, this is the actual method that does the matching
   *
   * @param item the item to match.
   * @return <code>true</code> if the item matches, <code>false</code> otherwise.
   */
  protected abstract boolean doMatch(Object item);

}
TOP

Related Classes of org.eclipse.swtbot.swt.finder.matchers.AbstractMatcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.