Package org.neo4j.neoclipse.search

Source Code of org.neo4j.neoclipse.search.NeoSearchResultPage$NeoSearchResultDoubleClickListener

/**
* Licensed to Neo Technology under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Neo Technology licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.neo4j.neoclipse.search;

import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.search.ui.ISearchResult;
import org.eclipse.search.ui.ISearchResultListener;
import org.eclipse.search.ui.ISearchResultPage;
import org.eclipse.search.ui.ISearchResultViewPart;
import org.eclipse.search.ui.SearchResultEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.Page;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.neoclipse.Activator;
import org.neo4j.neoclipse.graphdb.GraphDbServiceEvent;
import org.neo4j.neoclipse.graphdb.GraphDbServiceEventListener;
import org.neo4j.neoclipse.graphdb.GraphDbServiceManager;
import org.neo4j.neoclipse.view.NeoGraphLabelProviderWrapper;
import org.neo4j.neoclipse.view.NeoGraphViewPart;

/**
* This class represents a page in the search view that displays Neo search
* results, e.g. lists of Neo nodes matching a search criteria.
*
* @author Peter Hänsgen
*/
public class NeoSearchResultPage extends Page implements ISearchResultPage
{
    /**
     * The id of this page.
     */
    private String id;
    /**
     * The list of found nodes.
     */
    private TreeViewer viewer;
    private GraphDbServiceManager gsm;
    private GraphDbServiceEventListener listener;

    /**
     * Creates the control
     */
    @Override
    public void createControl( final Composite parent )
    {
        viewer = new TreeViewer( parent, SWT.NONE );
        viewer.setContentProvider( new NeoSearchResultContentProvider() );
        viewer.setLabelProvider( NeoGraphLabelProviderWrapper.getInstance() );
        viewer.addDoubleClickListener( new NeoSearchResultDoubleClickListener() );

        gsm = Activator.getDefault().getGraphDbServiceManager();

        listener = new GraphDbServiceEventListener()
        {
            @Override
            public void serviceChanged( final GraphDbServiceEvent event )
            {
                switch ( event.getStatus() )
                {
                case STOPPED:
                    clearResult();
                    break;
                }
            }
        };
        gsm.addServiceEventListener( listener );
    }

    private void clearResult()
    {
        // TODO this doesn't work
        viewer.setInput( null );
    }

    /**
     * Returns the control.
     */
    @Override
    public Control getControl()
    {
        return viewer.getControl();
    }

    /**
     * Sets the focus.
     */
    @Override
    public void setFocus()
    {
        if ( viewer != null )
        {
            viewer.getControl().setFocus();
        }
    }

    /**
     * Returns the id.
     */
    @Override
    public String getID()
    {
        return id;
    }

    /**
     * Sets the id.
     */
    @Override
    public void setID( final String id )
    {
        this.id = id;
    }

    /**
     * Returns the label of the page.
     */
    @Override
    public String getLabel()
    {
        NeoSearchResult result = (NeoSearchResult) viewer.getInput();
        if ( result != null )
        {
            return "Neo4j - Matches for '"
            + ( (NeoSearchQuery) result.getQuery() ).getExpression()
            + "'";
        }
        else
        {
            return "Neo4j";
        }
    }

    /**
     * Sets the search result for a Neo search.
     */
    @Override
    public void setInput( final ISearchResult result, final Object uiState )
    {
        setInput( result );
        if ( result != null )
        {
            // observe changes in the result and update the view accordingly
            result.addListener( new ISearchResultListener()
            {
                @Override
                public void searchResultChanged( final SearchResultEvent e )
                {
                    PlatformUI.getWorkbench().getDisplay().syncExec(
                            new Runnable()
                            {
                                @Override
                                public void run()
                                {
                                    setInput( e.getSearchResult() );
                                }
                            } );
                }
            } );
        }
    }

    /**
     * Sets the input of the viewer.
     */
    protected void setInput( final ISearchResult result )
    {
        viewer.setInput( result );
    }

    /**
     * Sets the view.
     */
    @Override
    public void setViewPart( final ISearchResultViewPart part )
    {
        // does nothing
    }

    /**
     * Not supported.
     */
    @Override
    public Object getUIState()
    {
        return null;
    }

    /**
     * Not supported.
     */
    @Override
    public void restoreState( final IMemento memento )
    {
        // not supported
    }

    /**
     * Not supported.
     */
    @Override
    public void saveState( final IMemento memento )
    {
        // not supported
    }

    /**
     * The handler for double clicks on search result list entries.
     */
    static class NeoSearchResultDoubleClickListener implements
    IDoubleClickListener
    {
        /**
         * Sets the selected node as input for the graph viewer.
         */
        @Override
        public void doubleClick( final DoubleClickEvent event )
        {
            StructuredSelection sel = (StructuredSelection) event.getSelection();
            Object s = sel.getFirstElement();
            // get the graph viewer
            NeoGraphViewPart gv = (NeoGraphViewPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(
                    NeoGraphViewPart.ID );
            if ( gv == null )
            {
                // TODO if it does not exist yet - create one? how?
                return;
            }
            if ( s instanceof Node )
            {
                gv.showNode( (Node) s );
            }
            else if ( s instanceof Relationship )
            {
                gv.showNode( ( (Relationship) s ).getStartNode() );
            }
        }
    }
}
TOP

Related Classes of org.neo4j.neoclipse.search.NeoSearchResultPage$NeoSearchResultDoubleClickListener

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.