All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.neo4j.driver.internal.spi.Collector Maven / Gradle / Ivy

/*
 * Copyright (c) 2002-2017 "Neo Technology,"
 * Network Engine for Objects in Lund AB [http://neotechnology.com]
 *
 * This file is part of Neo4j.
 *
 * Licensed 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.driver.internal.spi;

import java.util.List;

import org.neo4j.driver.v1.Value;
import org.neo4j.driver.v1.exceptions.ClientException;
import org.neo4j.driver.v1.exceptions.Neo4jException;
import org.neo4j.driver.v1.summary.Notification;
import org.neo4j.driver.v1.summary.Plan;
import org.neo4j.driver.v1.summary.ProfiledPlan;
import org.neo4j.driver.v1.summary.StatementType;
import org.neo4j.driver.v1.summary.SummaryCounters;

public interface Collector
{
    Collector NO_OP = new NoOperationCollector();

    Collector ACK_FAILURE = new NoOperationCollector()
    {
        @Override
        public void doneFailure( Neo4jException error )
        {
            throw new ClientException(
                    "Invalid server response message `FAILURE` received for client message `ACK_FAILURE`.", error );
        }
    };

    class InitCollector extends NoOperationCollector
    {
        private String serverVersion;
        @Override
        public void doneIgnored()
        {
            throw new ClientException(
                    "Invalid server response message `IGNORED` received for client message `INIT`." );
        }

        @Override
        public void serverVersion( String serverVersion )
        {
            this.serverVersion = serverVersion;
        }

        public String serverVersion()
        {
            return serverVersion;
        }
    }

    Collector RESET = new ResetCollector();

    class ResetCollector extends NoOperationCollector
    {
        private final Runnable doneSuccessCallBack;

        public ResetCollector()
        {
            this( null );
        }

        public ResetCollector( Runnable doneSuccessCallBack )
        {
            this.doneSuccessCallBack = doneSuccessCallBack;
        }

        @Override
        public void doneFailure( Neo4jException error )
        {
            throw new ClientException(
                    "Invalid server response message `FAILURE` received for client message `RESET`.", error );
        }

        @Override
        public void doneIgnored()
        {
            throw new ClientException(
                    "Invalid server response message `IGNORED` received for client message `RESET`." );
        }

        @Override
        public void doneSuccess()
        {
            if( doneSuccessCallBack != null )
            {
                doneSuccessCallBack.run();
            }
        }
    }


    class NoOperationCollector implements Collector
    {
        @Override
        public void keys( String[] names ) {}

        @Override
        public void record( Value[] fields ) {}

        @Override
        public void statementType( StatementType type ) {}

        @Override
        public void statementStatistics( SummaryCounters statistics ) {}

        @Override
        public void plan( Plan plan ) {}

        @Override
        public void profile( ProfiledPlan plan ) {}

        @Override
        public void notifications( List notifications ) {}

        @Override
        public void bookmark( String bookmark ) {}

        @Override
        public void done() {}

        @Override
        public void doneSuccess()
        {
            done();
        }

        @Override
        public void doneFailure( Neo4jException error )
        {
            done();
        }

        @Override
        public void doneIgnored()
        {
            done();
        }

        @Override
        public void resultAvailableAfter( long l ) {}

        @Override
        public void resultConsumedAfter( long l ) {}

        @Override
        public void serverVersion( String server ){}
    }

    // TODO: This should be modified to simply have head/record/tail methods

    void keys( String[] names );

    void record( Value[] fields );

    void statementType( StatementType type);

    void statementStatistics( SummaryCounters statistics );

    void plan( Plan plan );

    void profile( ProfiledPlan plan );

    void notifications( List notifications );

    void bookmark( String bookmark );

    void done();

    void doneSuccess();

    void doneFailure( Neo4jException error );

    void doneIgnored();

    void resultAvailableAfter( long l );

    void resultConsumedAfter( long l );

    void serverVersion( String server );
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy