/*
 * 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.JCTableEnum;
import com.klg.jclass.table.SpanHandler;
import java.util.Vector;

/**
 * CellRange handler for a WepsTable.
 * @author Joseph Levin
 */
public class WepsSpanHandler extends SpanHandler{
  
    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);
        }
    }
    
}
