blob: 6066810349ef324ba07ded0a964ff672d7d79901 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package org.openoffice.xmerge.merger;
/**
* This is an interface used by the {@link
* org.openoffice.xmerge.merger.DiffAlgorithm
* DiffAlgorithm} and {@link
* org.openoffice.xmerge.merger.MergeAlgorithm
* MergeAlgorithm} to access a <code>Document</code>.
*
* @author smak
*/
public interface Iterator {
/**
* Move to next element in the sequence.
*
* @return The <code>Object</code> of the next element in the sequence.
* If there is no next element, then return null.
*/
public Object next();
/**
* Move to previous element in the sequence.
*
* @return The <code>Object</code> of the previous element in the sequence.
* If there is no previous element, then return null.
*/
public Object previous();
/**
* Move to the beginning of the sequence.
*
* @return The <code>Object</code> of the first element in the sequence.
* If it is empty, then return null.
*/
public Object start();
/**
* Move to the end of the sequence.
*
* @return The <code>Object</code> of the last element in the sequence.
* If it is empty, then return null.
*/
public Object end();
/**
* Return the current element <code>Object</code> content.
*
* @return The <code>Object</code> at current position.
*/
public Object currentElement();
/**
* Return the total element count in the sequence.
*
* @return The total element count.
*/
public int elementCount();
/**
* A method to allow the difference algorithm to test whether the
* <code>obj1</code> and <code>obj2</code> in the
* <code>Iterator</code> are considered equal. As not every
* <code>Object</code> in the <code>Iterator</code> can implement its
* own equal method, with this equivalent method, we can allow
* flexibility for the <code>Iterator</code> to choose a custom way
* to compare two objects. Two objects can even be compared based on
* the position in the <code>Iterator</code> rather than by
* the content via this option.
*
* @param obj1 The first <code>Object</code>.
* @param obj2 The second <code>Object</code>.
*
* @return true if equal, false otherwise.
*/
public boolean equivalent(Object obj1, Object obj2);
/**
* <p>A method to force the <code>Iterator</code> to transverse the tree
* again to refresh the content.</p>
*
* <p>It is used mainly for <code>Iterator</code> objects which take a snap
* shot instead of dynamically transversing the tree. The current
* position will be set to the beginning.</p>
*/
public void refresh();
}