Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
E
embulk-input-filename
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Klaus Wölfel
embulk-input-filename
Commits
8ef3d8ee
Commit
8ef3d8ee
authored
Jul 24, 2017
by
root
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add the modified_time order
parent
b907380b
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
433 additions
and
13 deletions
+433
-13
src/main/java/org/embulk/input/filename/FilenameFileInputPlugin.java
...va/org/embulk/input/filename/FilenameFileInputPlugin.java
+87
-13
src/main/java/org/embulk/input/filename/FilenameFileInputPlugin.java.save
...g/embulk/input/filename/FilenameFileInputPlugin.java.save
+340
-0
src/test/resources/testModifiedOrder.yml
src/test/resources/testModifiedOrder.yml
+6
-0
No files found.
src/main/java/org/embulk/input/filename/FilenameFileInputPlugin.java
View file @
8ef3d8ee
...
...
@@ -32,6 +32,10 @@ import org.embulk.spi.TransactionalFileInput;
import
org.embulk.spi.util.InputStreamTransactionalFileInput
;
import
org.embulk.standards.LocalFileInputPlugin
;
import
java.nio.file.attribute.BasicFileAttributeView
;
import
java.nio.file.attribute.FileTime
;
import
java.util.Comparator
;
class
FilenameFileInputStream
extends
FileInputStream
{
...
...
@@ -68,13 +72,13 @@ class FilenameFileInputStream extends FileInputStream {
@Override
public
int
read
(
byte
[]
b
)
throws
IOException
{
return
read
(
b
,
0
,
b
.
length
);
}
}
@Override
public
int
read
(
byte
[]
b
,
int
off
,
int
len
)
throws
IOException
{
if
(
n
<
MAX_NAME_LENGTH
)
{
int
i
=
0
;
int
c
;
int
c
;
for
(;
i
<
len
;
i
++)
{
c
=
read
();
if
(
c
==
-
1
)
{
...
...
@@ -89,7 +93,7 @@ class FilenameFileInputStream extends FileInputStream {
}
else
{
return
super
.
read
(
b
,
off
,
len
);
}
}
}
}
public
class
FilenameFileInputPlugin
implements
FileInputPlugin
...
...
@@ -103,6 +107,14 @@ public class FilenameFileInputPlugin implements FileInputPlugin
@Config
(
"last_path"
)
@ConfigDefault
(
"null"
)
Optional
<
String
>
getLastPath
();
@Config
(
"order_by_modified_time"
)
@ConfigDefault
(
"0"
)
int
getOrderByModifiedTime
();
@Config
(
"order_by_creation_time"
)
@ConfigDefault
(
"0"
)
int
getOrderByCreationTime
();
@Config
(
"file_size"
)
@ConfigDefault
(
"null"
)
...
...
@@ -119,6 +131,24 @@ public class FilenameFileInputPlugin implements FileInputPlugin
BufferAllocator
getBufferAllocator
();
}
public
static
FileTime
getCreationTime
(
String
filename
)
throws
IOException
{
File
file
=
new
File
(
filename
);
Path
p
=
Paths
.
get
(
file
.
getAbsolutePath
());
BasicFileAttributes
view
=
Files
.
getFileAttributeView
(
p
,
BasicFileAttributeView
.
class
).
readAttributes
();
FileTime
fileTime
=
view
.
creationTime
();
//System.out.println("The raw creation time of " +filename+ " is " + fileTime.toString());
return
fileTime
;
}
public
static
FileTime
getLastModifiedTime
(
String
filename
)
throws
IOException
{
File
file
=
new
File
(
filename
);
Path
p
=
Paths
.
get
(
file
.
getAbsolutePath
());
BasicFileAttributes
view
=
Files
.
getFileAttributeView
(
p
,
BasicFileAttributeView
.
class
).
readAttributes
();
FileTime
fileTime
=
view
.
lastModifiedTime
();
//System.out.println("The raw last modified time of " +filename+ " is " + fileTime.toString());
return
fileTime
;
}
private
final
Logger
log
=
Exec
.
getLogger
(
getClass
());
private
final
static
Path
CURRENT_DIR
=
Paths
.
get
(
"."
).
normalize
();
...
...
@@ -130,6 +160,47 @@ public class FilenameFileInputPlugin implements FileInputPlugin
// list files recursively
List
<
String
>
files
=
listFiles
(
task
);
//Sort the listFiles according to the configuration.
int
order_modified
=
task
.
getOrderByModifiedTime
();
int
order_creation
=
task
.
getOrderByCreationTime
();
if
(
order_modified
==
0
&&
order_creation
==
0
){
Collections
.
sort
(
files
);
}
else
if
(
order_creation
==
0
){
Collections
.
sort
(
files
,
new
Comparator
<
String
>(){
@Override
public
int
compare
(
String
f1
,
String
f2
)
{
try
{
return
getLastModifiedTime
(
f1
).
compareTo
(
getLastModifiedTime
(
f2
));
}
catch
(
IOException
ex
){
ex
.
printStackTrace
();
}
return
0
;
}
});
if
(
order_modified
==
1
)
{
Collections
.
reverse
(
files
);
}
}
else
if
(
order_modified
==
0
){
Collections
.
sort
(
files
,
new
Comparator
<
String
>(){
@Override
public
int
compare
(
String
f1
,
String
f2
)
{
try
{
return
getCreationTime
(
f1
).
compareTo
(
getCreationTime
(
f2
));
}
catch
(
IOException
ex
){
ex
.
printStackTrace
();
}
return
0
;
}
});
if
(
order_creation
==
1
)
{
Collections
.
reverse
(
files
);}
}
else
{
throw
new
RuntimeException
(
"Could not order by creation time and lasModified time at the same time"
);
}
log
.
info
(
"Loading files {}"
,
files
);
task
.
setFiles
(
files
);
...
...
@@ -144,12 +215,12 @@ public class FilenameFileInputPlugin implements FileInputPlugin
FileInputPlugin
.
Control
control
)
{
PluginTask
task
=
taskSource
.
loadTask
(
PluginTask
.
class
);
control
.
run
(
taskSource
,
taskCount
);
log
.
info
(
"The taskSource of the FileName in the ConfigDiff resume: "
+
taskSource
.
toString
());
control
.
run
(
taskSource
,
taskCount
);
log
.
info
(
"Filename 1 stop point"
);
// build next config
ConfigDiff
configDiff
=
Exec
.
newConfigDiff
();
log
.
info
(
"Filename 2 stop point"
);
// last_path
if
(
task
.
getFiles
().
isEmpty
())
{
// keep the last value
...
...
@@ -158,10 +229,10 @@ public class FilenameFileInputPlugin implements FileInputPlugin
}
}
else
{
List
<
String
>
files
=
new
ArrayList
<
String
>(
task
.
getFiles
());
Collections
.
sort
(
files
);
log
.
info
(
"The File order is {}"
,
files
);
configDiff
.
set
(
"last_path"
,
files
.
get
(
files
.
size
()
-
1
));
}
log
.
info
(
"FileName 3 stop point"
);
return
configDiff
;
}
...
...
@@ -185,7 +256,8 @@ public class FilenameFileInputPlugin implements FileInputPlugin
directory
=
(
d
==
null
?
CURRENT_DIR
:
d
);
}
final
ImmutableList
.
Builder
<
String
>
builder
=
ImmutableList
.
builder
();
//final ImmutableList.Builder<String> builder = ImmutableList.builder();
final
List
<
String
>
filesArray
=
new
ArrayList
<
String
>();
final
String
lastPath
=
task
.
getLastPath
().
orNull
();
final
Integer
fileSize
=
task
.
getFileSize
().
orNull
();
try
{
...
...
@@ -219,8 +291,9 @@ public class FilenameFileInputPlugin implements FileInputPlugin
return
FileVisitResult
.
CONTINUE
;
}
else
{
if
(
path
.
getFileName
().
toString
().
startsWith
(
fileNamePrefix
))
{
if
(
fileSize
==
null
||
path
.
toFile
().
length
()
==
fileSize
)
{
builder
.
add
(
path
.
toString
());
if
(
fileSize
==
null
||
path
.
toFile
().
length
()
==
fileSize
)
{
//builder.add(path.toString());
filesArray
.
add
(
path
.
toString
());
}
}
return
FileVisitResult
.
CONTINUE
;
...
...
@@ -230,7 +303,8 @@ public class FilenameFileInputPlugin implements FileInputPlugin
}
catch
(
IOException
ex
)
{
throw
new
RuntimeException
(
String
.
format
(
"Failed get a list of local files at '%s'"
,
directory
),
ex
);
}
return
builder
.
build
();
//return builder.build();
return
filesArray
;
}
@Override
...
...
src/main/java/org/embulk/input/filename/FilenameFileInputPlugin.java.save
0 → 100644
View file @
8ef3d8ee
This diff is collapsed.
Click to expand it.
src/test/resources/testModifiedOrder.yml
0 → 100644
View file @
8ef3d8ee
type
:
filename
path_prexfix
:
testModified/sample_
order_by_modified_time
:
2
parser
:
type
:
none-bin
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment