-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
CsvInputChunkProxy.java
77 lines (69 loc) · 2.57 KB
/
CsvInputChunkProxy.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
* Copyright (c) 2002-2018 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.unsafe.impl.batchimport.input.csv;
import java.io.IOException;
import java.util.function.Supplier;
import org.neo4j.csv.reader.Chunker;
import org.neo4j.unsafe.impl.batchimport.InputIterator;
import org.neo4j.unsafe.impl.batchimport.input.InputEntityVisitor;
/**
* {@link CsvInputChunk} that adapts new input source groups during the streaming of data.
* {@link InputIterator} is fairly straight-forward, but is made a bit more complicated by the fact that
* there can be multiple different data streams. The outer iterator, {@link CsvGroupInputIterator}, is still responsible
* for handing out chunks, something that generally is good thing since it solves a bunch of other problems.
* The problem it has is that it doesn't know exactly which type of {@link CsvInputChunk} it wants to create,
* because that's up to each input group. This gap is bridged here in this class.
*/
public class CsvInputChunkProxy implements CsvInputChunk
{
private CsvInputChunk actual;
private int groupId = -1;
public void ensureInstantiated( Supplier<CsvInputChunk> newChunk, int groupId ) throws IOException
{
if ( actual == null || groupId != this.groupId )
{
closeCurrent();
actual = newChunk.get();
}
this.groupId = groupId;
}
@Override
public void close() throws IOException
{
closeCurrent();
}
private void closeCurrent() throws IOException
{
if ( actual != null )
{
actual.close();
}
}
@Override
public boolean fillFrom( Chunker chunker ) throws IOException
{
return actual.fillFrom( chunker );
}
@Override
public boolean next( InputEntityVisitor visitor ) throws IOException
{
return actual.next( visitor );
}
}