/*=============================================================================#
 # Copyright (c) 2012, 2021 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.viewport;

import org.eclipse.statet.ecommons.waltable.command.AbstractLayerCommandHandler;


public class ShowPositionInViewportCommandHandler extends AbstractLayerCommandHandler<ShowDimPositionInViewportCommand> {
	
	
	public ShowPositionInViewportCommandHandler() {
	}
	
	@Override
	public Class<ShowDimPositionInViewportCommand> getCommandClass() {
		return ShowDimPositionInViewportCommand.class;
	}
	
	
	@Override
	protected boolean doCommand(final ShowDimPositionInViewportCommand command) {
		final IViewportDim dim= (IViewportDim) command.getDim();
		dim.movePositionIntoViewport(command.getPosition());
		return true;
	}
	
}
