/*
 * WepsSpanHandler.java
 *
 * Created on June 19, 2006, 3:28 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package usda.weru.util.table;

import com.klg.jclass.table.JCCellRange;
import com.klg.jclass.table.SpanHandler;
import java.util.Vector;

/**
 * CellRange handler for a WepsTable.
 * @author Joseph Levin
 */
public class WepsSpanHandler extends SpanHandler {

    private static final long serialVersionUID = 1L;

    @Override
    @SuppressWarnings("rawtypes")
    // we must keeps 'spans' as a raw type in order to override the quest method
    protected void validateRange(Vector spans, JCCellRange cr) throws IllegalArgumentException {
        // Spans must start at upper left
        if (cr.start_row > cr.end_row || cr.start_column > cr.end_column) {
            String s = "End row/column must be greater than or equal to start "
                    + "row/column. " + cr;
            throw new IllegalArgumentException(s);
        }
        /*
         // Spans cannot contain both labels and cells
         if ((cr.start_row == JCTableEnum.LABEL &&
         cr.end_row != JCTableEnum.LABEL) ||
         (cr.start_column == JCTableEnum.LABEL &&
         cr.end_column != JCTableEnum.LABEL))
         {
         throw new IllegalArgumentException("bob range " + cr +
         " contains labels and cells");
         }
         // */

        // Loops through each range and checks if the new range overlaps
        // or crosses over scrollable/non-scrollable regions
        JCCellRange range;
        for (int i = 0, cnt = spans.size(); i < cnt; i++) {
            range = (JCCellRange) spans.elementAt(i);
            if (range.overlaps(cr)) {
                throw new IllegalArgumentException("cell range " + cr
                        + " overlaps an existing span");
            }
        }

        int frow = table.getFrozenRows();
        int fcol = table.getFrozenColumns();

        String message = "cell range " + cr
                + " contains frozen and non-frozen cells";
        if (frow > 0 && cr.start_row < frow && cr.end_row >= frow) {
            throw new IllegalArgumentException(message);
        }
        if (fcol > 0 && cr.start_column < fcol && cr.end_column >= fcol) {
            throw new IllegalArgumentException(message);
        }
    }

}
