/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.app.xmlui.aspect.submission;
import org.apache.commons.lang.builder.HashCodeBuilder;
/**
* Holds a step number and a page number within that step.
*
* @author Mark Wood
*/
public class StepAndPage implements Comparable<StepAndPage>
{
/** Magic value meaning "no value" */
private static final int UNSET = -1;
/** Step number */
private int step;
/** Page number within step */
private int page;
/** Default constructor returns an unset instance */
public StepAndPage()
{
step = UNSET;
page = UNSET;
}
/**
* Initialize a new StepAndPage from given step and page numbers
*
* @param step
* @param page
*/
public StepAndPage(int step, int page)
{
this.step = step;
this.page = page;
}
/**
* Initialize a new StepAndPage by parsing a string of the form "step.page".
*
* @param asString
* decimal step and page numbers separated by a period.
*/
public StepAndPage(String asString)
{
String[] components = asString.split("\\.");
if (components.length > 0)
{
step = Integer.parseInt(components[0]);
if (components.length > 1)
{
page = Integer.parseInt(components[1]);
}
else
{
page = UNSET;
}
}
else
{
step = UNSET;
}
}
public int getStep()
{
return step;
}
public int getPage()
{
return page;
}
/**
* Does this instance have a value?
*
* @return true if step and page have been set
*/
public boolean isSet()
{
return (step != UNSET) && (page != UNSET);
}
/**
* Compare this StepAndPage with another
*
* @param other
* @return true if both objects have same step value and same page value.
*/
public boolean equals(Object other)
{
if (other instanceof StepAndPage)
{
StepAndPage sapOther = (StepAndPage)other;
return (this.step == sapOther.step) && (this.page == sapOther.page);
}
return false;
}
@Override
public int hashCode()
{
return new HashCodeBuilder().append(step).append(page).hashCode();
}
@Override
public String toString()
{
return Integer.toString(step) + "." + Integer.toString(page);
}
@Override
public int compareTo(StepAndPage o)
{
if (this.step == o.step)
{
return this.page - o.page;
}
else
{
return this.step - o.step;
}
}
}