/**
* Copyright 2014 Comcast Cable Communications Management, LLC
*
* This file is part of CATS.
*
* CATS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CATS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CATS. If not, see <http://www.gnu.org/licenses/>.
*/
package com.comcast.cats.image;
import java.awt.Rectangle;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
/**
* Stores OCR specific region information.
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "OCRRegionInfo")
public class OCRRegionInfo extends RegionInfo {
private static final long serialVersionUID = 1225874371471320405L;
@XmlElement(name = "AxisURL")
protected String url;
@XmlElement(name = "ExpectedResultText")
protected String expectedResult;
@XmlElement(name = "OCRtimeout")
protected Integer timeout;
@XmlElement(name = "Tolerance")
protected Integer successTolerance;
/**
* The default expected result.
*/
public static final String DEFAULT_EXPECTED_RESULT = "";
/**
* The default expected result.
*/
public static final String DEFAULT_URL = "";
/**
* Default timeout.
*/
public static final Integer DEFAULT_TIMEOUT = 10;
/**
* The default success tolerance.
*/
public static final Integer DEFAULT_SUCCESS_TOLERANCE = 80;
/**
* Creates an instance of region info with default values.
*/
public OCRRegionInfo() {
this("", 0, 0, 0, 0);
}
/**
* Sets the given parameters.
*
* @param name
* The name of the region.
* @param x
* The x coordinate.
* @param y
* The y coordinate.
* @param w
* The region width.
* @param h
* The region height.
*/
public OCRRegionInfo(String name, Integer x, Integer y, Integer w, Integer h) {
super(name, x, y, w, h);
expectedResult = DEFAULT_EXPECTED_RESULT;
timeout = DEFAULT_TIMEOUT;
successTolerance = DEFAULT_SUCCESS_TOLERANCE;
url = DEFAULT_URL;
}
/**
* Copy Constructor.
* @param org The original RegionInfo.
* @deprecated Use clone().
*/
@Deprecated
private OCRRegionInfo(OCRRegionInfo org) {
super(org);
this.setUrl(org.getUrl());
this.setExpectedResult(org.getExpectedResult());
this.setSuccessTolerance(org.getSuccessTolerance());
this.setTimeout(org.getTimeout());
}
/**
* {@inheritDoc}
*/
@Override
@Deprecated
public final OCRRegionInfo getCopy() {
return new OCRRegionInfo(this);
}
/**
* Gets the URL.
* @return the url.
*/
public final String getUrl() {
return url;
}
/**
* Sets the url.
* @param url the url to set.
*/
public final void setUrl(String url) {
this.url = url;
}
/**
* Gets the expected text.
* @return The expected text.
*/
public final String getExpectedResult() {
return expectedResult;
}
/**
* Sets the expected text.
* @param expectedResult the expected text.
*/
public final void setExpectedResult(String expectedResult) {
this.expectedResult = expectedResult;
}
/**
* Gets the timeout.
* @return the timeout.
*/
public final Integer getTimeout() {
return timeout;
}
/**
* Sets the timeout.
* @param timeout the timeout.
*/
public final void setTimeout(Integer timeout) {
this.timeout = timeout;
}
/**
* Gets the expected success accuracy.
* @return the expected success accuracy.
*/
public final Integer getSuccessTolerance() {
return successTolerance;
}
/**
* Sets the success tolerance.
* @param successTolerance The success tolerance.
*/
public final void setSuccessTolerance(Integer successTolerance) {
this.successTolerance = successTolerance;
}
/**
* Returns a string containing all the values in this object.
*
* @return a string containing all the values in this object.
*/
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Name: ").append(name).append(", X: ").append(x).append(", Y: ").append(y).append(", Width: ").append(width).append(", Height: ").append(height).append(", URL: ").append(url).append(", Expected Result: ").append(expectedResult).append(", Timeout: ").append(timeout).append(", Success Tolerance: ").append(successTolerance);
return builder.toString();
}
/**
* Returns a Rectangle object comprising of the x,y,width and height values from this region info.
* If there invalid x, y, widht, or height values, null is returned.
*
* @return The Rectangle object representing this region info or null if there are invalid values.
*/
public Rectangle getJavaRect() {
Rectangle rectangle = new Rectangle();
if (x >= 0 && y >= 0 && width > 0 && height > 0) {
rectangle.setBounds(x, y, width, height);
} else {
rectangle = null;
}
return rectangle;
}
/**
* Compares this object with the specified object for equality.
* @param o the object to compare against.
* @return true if they are equal.
*/
@Override
public boolean equals(final Object o) {
boolean ret;
if (!(o instanceof OCRRegionInfo)) {
ret = false;
} else if (this == o) {
ret = true;
} else {
OCRRegionInfo info = (OCRRegionInfo) o;
ret = new EqualsBuilder().append(this.name, info.getName()).append(this.x, info.getX()).append(this.y, info.getY()).append(this.width, info.getWidth()).append(this.height, info.getHeight()).append(this.url, info.getUrl()).append(this.expectedResult, info.getExpectedResult()).append(this.timeout, info.getTimeout()).append(this.successTolerance, info.getSuccessTolerance()).append(this.url, info.getUrl()).isEquals();
}
return ret;
}
/**
* {@inheritDoc}
*/
@Override
public int hashCode() {
final int SEVENTEEN = 17;
final int THIRTYSEVEN = 37;
return new HashCodeBuilder(SEVENTEEN, THIRTYSEVEN).append(this.name).toHashCode();
}
/**
* {@inheritDoc}
*/
@Override
public Object clone() {
return super.clone();
}
}