Package org.eclipse.nebula.widgets.nattable.search.command

Source Code of org.eclipse.nebula.widgets.nattable.search.command.SearchGridCellsCommandHandler

/*******************************************************************************
* Copyright (c) 2012 Original authors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.search.command;

import java.util.regex.PatternSyntaxException;

import org.eclipse.nebula.widgets.nattable.command.ILayerCommandHandler;
import org.eclipse.nebula.widgets.nattable.coordinate.PositionCoordinate;
import org.eclipse.nebula.widgets.nattable.layer.ILayer;
import org.eclipse.nebula.widgets.nattable.layer.ILayerListener;
import org.eclipse.nebula.widgets.nattable.search.event.SearchEvent;
import org.eclipse.nebula.widgets.nattable.search.strategy.AbstractSearchStrategy;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
import org.eclipse.nebula.widgets.nattable.selection.command.SelectCellCommand;

public class SearchGridCellsCommandHandler implements
        ILayerCommandHandler<SearchCommand> {

    private final SelectionLayer selectionLayer;
    private PositionCoordinate searchResultCellCoordinate;

    public SearchGridCellsCommandHandler(SelectionLayer selectionLayer) {
        this.selectionLayer = selectionLayer;
    }

    public Class<SearchCommand> getCommandClass() {
        return SearchCommand.class;
    };

    public boolean doCommand(ILayer targetLayer, SearchCommand searchCommand)
            throws PatternSyntaxException {
        searchCommand.convertToTargetLayer(targetLayer);

        AbstractSearchStrategy searchStrategy = (AbstractSearchStrategy) searchCommand
                .getSearchStrategy();
        final ILayerListener searchEventListener = searchCommand
                .getSearchEventListener();
        if (searchEventListener != null) {
            selectionLayer.addLayerListener(searchEventListener);
        }
        try {
            PositionCoordinate anchor = selectionLayer.getSelectionAnchor();
            if (anchor.columnPosition < 0 || anchor.rowPosition < 0) {
                anchor = new PositionCoordinate(selectionLayer, 0, 0);
            }
            searchStrategy.setContextLayer(targetLayer);
            Object dataValueToFind = null;
            if ((dataValueToFind = searchCommand.getSearchText()) == null) {
                dataValueToFind = selectionLayer.getDataValueByPosition(
                        anchor.columnPosition, anchor.rowPosition);
            }

            searchStrategy.setCaseSensitive(searchCommand.isCaseSensitive());
            searchStrategy.setWrapSearch(searchCommand.isWrapSearch());
            searchStrategy.setWholeWord(searchCommand.isWholeWord());
            searchStrategy.setIncremental(searchCommand.isIncremental());
            searchStrategy.setRegex(searchCommand.isRegex());
            searchStrategy.setIncludeCollapsed(searchCommand
                    .isIncludeCollapsed());
            searchStrategy.setSearchDirection(searchCommand
                    .getSearchDirection());
            searchStrategy.setComparator(searchCommand.getComparator());
            searchResultCellCoordinate = searchStrategy
                    .executeSearch(dataValueToFind);

            selectionLayer.fireLayerEvent(new SearchEvent(
                    searchResultCellCoordinate));
            if (searchResultCellCoordinate != null) {
                final SelectCellCommand command = new SelectCellCommand(
                        selectionLayer,
                        searchResultCellCoordinate.columnPosition,
                        searchResultCellCoordinate.rowPosition, false, false);
                command.setForcingEntireCellIntoViewport(true);
                selectionLayer.doCommand(command);
            }
        } finally {
            if (searchEventListener != null) {
                selectionLayer.removeLayerListener(searchEventListener);
            }
        }

        return true;
    }

    public PositionCoordinate getSearchResultCellCoordinate() {
        return searchResultCellCoordinate;
    }
}
TOP

Related Classes of org.eclipse.nebula.widgets.nattable.search.command.SearchGridCellsCommandHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.