Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 31 additions & 8 deletions src/main/java/io/zold/api/WalletsIn.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,15 @@
*/
package io.zold.api;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.Iterator;
import org.cactoos.Scalar;
import org.cactoos.func.IoCheckedFunc;
import org.cactoos.io.Directory;
import org.cactoos.iterable.Filtered;
import org.cactoos.iterable.Mapped;
import org.cactoos.scalar.IoCheckedScalar;
import org.cactoos.scalar.StickyScalar;
import org.cactoos.scalar.SyncScalar;
Expand All @@ -36,35 +42,48 @@
* @author Tolegen Izbassar (t.izbassar@gmail.com)
* @version $Id$
* @since 0.1
* @checkstyle ClassDataAbstractionCoupling (2 lines)
*/
@SuppressWarnings({"PMD.SingularField", "PMD.UnusedPrivateField"})
public final class WalletsIn implements Wallets {

/**
* Path containing wallets.
*/
private final IoCheckedScalar<Path> path;

/**
* Filter for matching file extensions.
*/
private final IoCheckedFunc<Path, Boolean> filter;

/**
* Ctor.
* @param pth Path with wallets
*/
public WalletsIn(final Path pth) {
this(
() -> pth
() -> pth,
"z"
);
}

/**
* Ctor.
* @param pth Path with wallets
* @param ext File extension to match
*/
public WalletsIn(final Scalar<Path> pth) {
public WalletsIn(final Scalar<Path> pth, final String ext) {
this.path = new IoCheckedScalar<>(
new SyncScalar<>(
new StickyScalar<>(pth)
)
);
this.filter = new IoCheckedFunc<Path, Boolean>(
(file) -> file.toFile().isFile()
&& FileSystems.getDefault()
.getPathMatcher(String.format("glob:**.%s", ext))
.matches(file)
);
}

// @todo #4:30min Return the new instance of the Wallet, that will
Expand All @@ -76,12 +95,16 @@ public Wallet create() {
throw new UnsupportedOperationException("create() not yet supported");
}

// @todo #4:30min Read instance of the Wallet from file and put it
// to the result. Should be taken care of after Wallet interface will have
// necessary implementations. Cover with tests and remove irrelevant test
// case.
@Override
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
public Iterator<Wallet> iterator() {
throw new UnsupportedOperationException("iterator() not yet supported");
try {
return new Mapped<Path, Wallet>(
(pth) -> new Wallet.File(pth),
new Filtered<>(this.filter, new Directory(this.path.value()))
).iterator();
} catch (final IOException ex) {
throw new IllegalStateException(ex);
}
}
}
16 changes: 7 additions & 9 deletions src/test/java/io/zold/api/WalletsInTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
package io.zold.api;

import java.io.IOException;
import java.nio.file.Paths;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.Rule;
import org.junit.Test;
Expand All @@ -48,16 +50,12 @@ public final class WalletsInTest {
public final TemporaryFolder folder = new TemporaryFolder();

@Test
public void iteratorIsNotYetImplemented() throws IOException {
this.thrown.expect(UnsupportedOperationException.class);
this.thrown.expectMessage(
Matchers.is(
"iterator() not yet supported"
)
public void iteratesWallets() {
MatcherAssert.assertThat(
new WalletsIn(Paths.get("src/test/resources/walletsIn")),
// @checkstyle MagicNumber (1 line)
Matchers.iterableWithSize(5)
);
new WalletsIn(
this.folder.newFolder().toPath()
).iterator();
}

@Test
Expand Down
7 changes: 7 additions & 0 deletions src/test/resources/walletsIn/1.z
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
zold
1
1
MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGZCr/9hBChqsChd4sRAIpKNRinjhSW+J+S7PU5malVMiRHVoKjeooLDpWpij0A6vkzOvjrMldAZT0Fzgp0cJ15TOVwiQanQ5WuQDgRkLoxrdh/qyBApoDvk4OUEozOQPNwfpZOFfaUALPsPnv9995TlY9WcdSKW5dj041p1tJmlAgMBAAE=

003a;2017-07-19T21:24:51Z;ffffffff9c0ccccd;Ui0wpLu7;98bb82c81735c4ee;For services;SKMPrVj...
003b;2017-07-19T21:25:07Z;ffffffffffa72367;xksQuJa9;98bb82c81735c4ee;For food;QCuLuVr4...
7 changes: 7 additions & 0 deletions src/test/resources/walletsIn/2.z
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
zold
1
2
MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGZCr/9hBChqsChd4sRAIpKNRinjhSW+J+S7PU5malVMiRHVoKjeooLDpWpij0A6vkzOvjrMldAZT0Fzgp0cJ15TOVwiQanQ5WuQDgRkLoxrdh/qyBApoDvk4OUEozOQPNwfpZOFfaUALPsPnv9995TlY9WcdSKW5dj041p1tJmlAgMBAAE=

003a;2017-07-19T21:24:51Z;ffffffff9c0ccccd;Ui0wpLu7;98bb82c81735c4ee;For services;SKMPrVj...
003b;2017-07-19T21:25:07Z;ffffffffffa72367;xksQuJa9;98bb82c81735c4ee;For food;QCuLuVr4...
7 changes: 7 additions & 0 deletions src/test/resources/walletsIn/3.z
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
zold
1
3
MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGZCr/9hBChqsChd4sRAIpKNRinjhSW+J+S7PU5malVMiRHVoKjeooLDpWpij0A6vkzOvjrMldAZT0Fzgp0cJ15TOVwiQanQ5WuQDgRkLoxrdh/qyBApoDvk4OUEozOQPNwfpZOFfaUALPsPnv9995TlY9WcdSKW5dj041p1tJmlAgMBAAE=

003a;2017-07-19T21:24:51Z;ffffffff9c0ccccd;Ui0wpLu7;98bb82c81735c4ee;For services;SKMPrVj...
003b;2017-07-19T21:25:07Z;ffffffffffa72367;xksQuJa9;98bb82c81735c4ee;For food;QCuLuVr4...
7 changes: 7 additions & 0 deletions src/test/resources/walletsIn/4.z
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
zold
1
4
MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGZCr/9hBChqsChd4sRAIpKNRinjhSW+J+S7PU5malVMiRHVoKjeooLDpWpij0A6vkzOvjrMldAZT0Fzgp0cJ15TOVwiQanQ5WuQDgRkLoxrdh/qyBApoDvk4OUEozOQPNwfpZOFfaUALPsPnv9995TlY9WcdSKW5dj041p1tJmlAgMBAAE=

003a;2017-07-19T21:24:51Z;ffffffff9c0ccccd;Ui0wpLu7;98bb82c81735c4ee;For services;SKMPrVj...
003b;2017-07-19T21:25:07Z;ffffffffffa72367;xksQuJa9;98bb82c81735c4ee;For food;QCuLuVr4...
7 changes: 7 additions & 0 deletions src/test/resources/walletsIn/5.z
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
zold
1
5
MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGZCr/9hBChqsChd4sRAIpKNRinjhSW+J+S7PU5malVMiRHVoKjeooLDpWpij0A6vkzOvjrMldAZT0Fzgp0cJ15TOVwiQanQ5WuQDgRkLoxrdh/qyBApoDvk4OUEozOQPNwfpZOFfaUALPsPnv9995TlY9WcdSKW5dj041p1tJmlAgMBAAE=

003a;2017-07-19T21:24:51Z;ffffffff9c0ccccd;Ui0wpLu7;98bb82c81735c4ee;For services;SKMPrVj...
003b;2017-07-19T21:25:07Z;ffffffffffa72367;xksQuJa9;98bb82c81735c4ee;For food;QCuLuVr4...
7 changes: 7 additions & 0 deletions src/test/resources/walletsIn/6
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
zold
1
6
MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGZCr/9hBChqsChd4sRAIpKNRinjhSW+J+S7PU5malVMiRHVoKjeooLDpWpij0A6vkzOvjrMldAZT0Fzgp0cJ15TOVwiQanQ5WuQDgRkLoxrdh/qyBApoDvk4OUEozOQPNwfpZOFfaUALPsPnv9995TlY9WcdSKW5dj041p1tJmlAgMBAAE=

003a;2017-07-19T21:24:51Z;ffffffff9c0ccccd;Ui0wpLu7;98bb82c81735c4ee;For services;SKMPrVj...
003b;2017-07-19T21:25:07Z;ffffffffffa72367;xksQuJa9;98bb82c81735c4ee;For food;QCuLuVr4...