/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program 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 Lesser General Public License for more details.
*
* Copyright (c) 2001 - 2013 Object Refinery Ltd, Pentaho Corporation and Contributors.. All rights reserved.
*/
package org.pentaho.reporting.engine.classic.core.layout.output;
import java.io.Serializable;
/**
* A physical page-key identifies a generated page.
*
* @author Thomas Morgner
*/
public final class PhysicalPageKey implements Serializable {
private LogicalPageKey logicalPage;
private int x;
private int y;
public PhysicalPageKey( final LogicalPageKey logicalPage, final int x, final int y ) {
if ( logicalPage == null ) {
throw new NullPointerException();
}
this.x = x;
this.y = y;
this.logicalPage = logicalPage;
}
public LogicalPageKey getLogicalPage() {
return logicalPage;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getSequentialPageNumber() {
final int logPosition = logicalPage.getPosition();
return logPosition * logicalPage.getWidth() * logicalPage.getHeight() + x + y * logicalPage.getWidth();
}
public boolean equals( final Object o ) {
if ( this == o ) {
return true;
}
if ( o == null || getClass() != o.getClass() ) {
return false;
}
final PhysicalPageKey that = (PhysicalPageKey) o;
if ( x != that.x ) {
return false;
}
if ( y != that.y ) {
return false;
}
if ( !logicalPage.equals( that.logicalPage ) ) {
return false;
}
return true;
}
public int hashCode() {
int result = logicalPage.hashCode();
result = 29 * result + x;
result = 29 * result + y;
return result;
}
}