-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
TemporalIndexFiles.java
114 lines (100 loc) · 3.79 KB
/
TemporalIndexFiles.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
* 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.kernel.impl.index.schema;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.neo4j.index.internal.gbptree.Layout;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.kernel.api.index.IndexDirectoryStructure;
import org.neo4j.kernel.api.schema.index.IndexDescriptor;
import org.neo4j.values.storable.ValueGroup;
class TemporalIndexFiles
{
private final FileSystemAbstraction fs;
private FileLayout<DateSchemaKey> date;
private FileLayout<LocalDateTimeSchemaKey> localDateTime;
private FileLayout zonedDateTime;
private FileLayout<LocalTimeSchemaKey> localTime;
private FileLayout zonedTime;
private FileLayout duration;
TemporalIndexFiles( IndexDirectoryStructure directoryStructure, long indexId, IndexDescriptor descriptor, FileSystemAbstraction fs )
{
this.fs = fs;
File indexDirectory = directoryStructure.directoryForIndex( indexId );
this.date = new FileLayout<>( new File( indexDirectory, "date" ), DateLayout.of( descriptor ), ValueGroup.DATE );
this.localTime = new FileLayout<>( new File( indexDirectory, "time" ), LocalTimeLayout.of( descriptor ), ValueGroup.LOCAL_TIME );
this.localDateTime = new FileLayout<>( new File( indexDirectory, "datetime" ), LocalDateTimeLayout.of( descriptor ), ValueGroup.LOCAL_DATE_TIME );
}
Iterable<FileLayout> existing()
{
List<FileLayout> existing = new ArrayList<>();
addIfExists( existing, date );
addIfExists( existing, localDateTime );
addIfExists( existing, zonedDateTime );
addIfExists( existing, localTime );
addIfExists( existing, zonedTime );
addIfExists( existing, duration );
return existing;
}
<T,E extends Exception> void loadExistingIndexes( TemporalIndexCache<T,E> indexCache ) throws E
{
for ( FileLayout fileLayout : existing() )
{
indexCache.select( fileLayout.valueGroup );
}
}
FileLayout<DateSchemaKey> date()
{
return date;
}
FileLayout<LocalTimeSchemaKey> localTime()
{
return localTime;
}
FileLayout<LocalDateTimeSchemaKey> localDateTime()
{
return localDateTime;
}
private void addIfExists( List<FileLayout> existing, FileLayout fileLayout )
{
if ( exists( fileLayout ) )
{
existing.add( fileLayout );
}
}
private boolean exists( FileLayout fileLayout )
{
return fileLayout != null && fs.fileExists( fileLayout.indexFile );
}
// .... we will add more explicit accessor methods later
static class FileLayout<KEY extends NativeSchemaKey>
{
final File indexFile;
final Layout<KEY,NativeSchemaValue> layout;
final ValueGroup valueGroup;
FileLayout( File indexFile, Layout<KEY,NativeSchemaValue> layout, ValueGroup valueGroup )
{
this.indexFile = indexFile;
this.layout = layout;
this.valueGroup = valueGroup;
}
}
}