/*=============================================================================#
 # Copyright (c) 2012, 2022 Original NatTable authors and others.
 # 
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License 2.0 which is available at
 # https://www.eclipse.org/legal/epl-2.0.
 # 
 # SPDX-License-Identifier: EPL-2.0
 # 
 # Contributors:
 #     Original NatTable authors and others - initial API and implementation
 #=============================================================================*/

package org.eclipse.statet.ecommons.waltable.data.validate;

import static org.eclipse.statet.ecommons.waltable.core.coordinate.Orientation.HORIZONTAL;
import static org.eclipse.statet.ecommons.waltable.core.coordinate.Orientation.VERTICAL;

import org.eclipse.statet.ecommons.waltable.core.config.ConfigRegistry;
import org.eclipse.statet.ecommons.waltable.core.layer.LayerCell;


public abstract class DataValidator implements IDataValidator {
	
	
	@Override
	public boolean validate(final LayerCell cell, final ConfigRegistry configRegistry, final Object newValue) {
		return validate(cell.getDim(HORIZONTAL).getId(), cell.getDim(VERTICAL).getId(),
				newValue );
	}
	
	@Override
	public abstract boolean validate(long columnIndex, long rowIndex, Object newValue);
	
}
